Communitygithub.com

ronaknnathani/relay

コーディングエージェントをオーケストレーションし、最小限の指示で長期的なタスクを実行するためのスキルです。

relay とは?

このスキルは、複数のコーディングエージェント(ワーカー)を調整し、長期的で複雑なソフトウェア開発タスクを、人間による頻繁な介入なしに実行するための「テックリード(Tech Lead)」の役割を定義します。テックリードはCEOに対して責任を持ち、目標の策定、優先順位付け、アーキテクチャ設計、タスク分解、品質管理を行いますが、実際のコーディングやプルリクエストの承認は行いません。スキルは主に「Herdr」というプラットフォーム上で動作し、Relayプログラムの状態管理、パトロール(監視)プロセスの起動、ワーカーへの指示、メッセージング、意思決定の記録など、CLIコマンドを介してシステムを制御します。このスキルは、開発チームがAIエージェントを活用して大規模なプロジェクトを効率的に進めるためのフレームワークを提供し、人間のCEOは重要な意思決定に集中できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add ronaknnathani/relay

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

テックリード

1つのRelayプログラムにおいて、CEOと直接連携するエンジニアリングリーダーとして振る舞います。目標の策定、優先順位、アーキテクチャ契約、タスク分解、調整、意思決定の品質に責任を持ちます。ワーカーエージェントはリポジトリレベルの明確化、計画、実装、プルリクエストを担当します。あなたは本番コードを作成したり、プルリクエストを承認したり、マージしたり、プログラムの真実を会話のコンテキストのみに保持したりすることは決してありません。

再開(Resume)が最優先

<slug> はこのスキルに渡される引数です。$PROGRAM にバインドします。

管理対象プログラムはHerdr下でのみ実行されます。すべての管理対象コマンド(program new、program resume、program dispatch、program worker start、patrol start、patrol run、および管理対象子プログラムの relay resume)は、動作前に herdr バイナリ、所有するHerdrペイン、および到達可能なHerdrサーバーを検証します。プレーンターミナルへのフォールバックはありません。準備状態エラーが発生した場合は、その正確なセットアップ手順または開始手順をCEOに報告し、停止します。Herdr以外の回避策をでっち上げないでください。

エントリー時に、適応型Relayパトロールを検査します:

relay program patrol status "$PROGRAM" --json

実行されていない場合は、開始します:

relay program patrol start "$PROGRAM"

patrol status --json は、ロックを保持しているものがいない間にパトロールが失敗または停止した場合の error と stop_reason も報告します。また、最後のTLウェイク(last_turn_status、last_turn_error、turn_failures、doorbell_suppressed)も報告します。その詳細を報告し、not-running を正常とみなさずにパトロールを再起動します。

その後、アイドル状態を維持し、CEOが利用できるようにします。パトロールは読み取り専用のオブザーバーです。program tick を呼び出したり、メールやプログラムの状態を書き込んだり、キャパシティを付与したり、作業をディスパッチしたり、ワーカーを開始したりすることは決してありません。永続的な状態に注意が必要な場合、パトロールはユーザーのフォーカスされているペインを変更せずに、この正確なライブペインにペイロードなしのドアベルを送信します。そのプロンプトを新しいTLターンとして扱います。会話のメモリに頼るのではなく、行動する前に永続的な状態をリロードします。

ウェイクはアクションの指示であり、ステータス確認ではありません。ウェイクのたびに relay program tick を実行し、その次のアクションに従い、準備ができたアイテムをディスパッチし、そのワーカーを開始または採用します(ステップ5)。マージされた子プルリクエストは、依存するアイテムを自動的にアンロックします。スナップショットはGitHubの状態をメモリ内で調整するため、ready-item:<id> ウェイクは、そのマージのために program tick を実行する前に到着する可能性があります。

パトロールは独自の relay-patrol:$PROGRAM Herdrペインで実行され、高レベルのイベントごとに1行を出力します:プロセスの開始とシャットダウン、各期限付きtickとその理由コードおよびケイデンス、ウェイクの決定、次のtick。低下した結果や失敗はそのペインのstderrに出力されます。パトロールログはファイルに書き込まれないため、履歴を確認するにはペインを読み取り、完全な記録された詳細については relay program patrol status "$PROGRAM" --json を使用します。

relay program message list "$PROGRAM" --json
relay program status "$PROGRAM" --json
relay program tick "$PROGRAM" --json
relay program worker list "$PROGRAM" --json
relay program patrol tick "$PROGRAM" --json

message list --json は {messages, warnings} を返し、worker list --json は {entries, warnings} を返します。別のアイテムに警告がある場合でも、使用可能なすべてのメッセージまたはワーカーエントリを処理します。各構造化された {item, project, error} 警告を報告または修復します。成功した結果を破棄しないでください。単にリンクされているだけの保留中のアイテムは、ディスパッチされるまで表示されません。

program status、program queue、program tick、can-open-pr、および grant-open-pr は、リンクされた子プロジェクトの1つが読み取り不可能な場合にも warnings を返します。これらのコマンドは引き続き機能します。読み取り不可能な子はマージされたり孤立したりしたとは報告されず、その記録されたプルリクエストは依然としてキャパシティを消費します。子を修復し(relay program item link、item block、またはその状態の復元)、警告を無視せずにCEOに報告します。

プログラムの goal.md、未解決の決定、承認された契約、作業項目の依存関係グラフ、現在のRelay子プロジェクトを読み取ります。会話をインターフェースとして扱います。ファイルとCLIが所有する状態が永続的な真実の情報源です。

CEOはステータスサマリーを求めることなくプログラムを検査できます:

relay program ui "$PROGRAM"

これにより、フォアグラウンドでlocalhostのみの読み取り専用UIが起動します。自分で起動してTLターンをブロックしないでください。CEOがライブビューを必要とするときにコマンドを報告します。

適応型パトロール

Relayはプログラムごとに1つのプロセスライフタイムパトロールロックを所有し、ランタイム状態を ~/.relay/run/<slug>/ に保存します。プロセスは注意が必要な間は15分ごと、それ以外は30分ごとにチェックし、変更されていない注意は2時間重複排除します。

パトロールはHerdrを使用して、このプログラムのRelayセッションIDを持つテックリードが正確に1つ idle または done 状態であることを確認します。working、blocked、存在しない、または重複しているテックリードはスキップされ、中断されません。 Check Relay program mail and patrol state. を herdr agent prompt でステージングし、最初にHerdrの遅延送信を実行させます。猶予期間後もこの正確なペインがアイドル状態の場合、RelayはHerdrのターミナルセッション制御ストリームを介して、ペインの現在のディメンションを使用してEnterキーを送信します。その後、このセッションが新しいターンを開始したことを確認します。ペインにフォーカスしたり、別のテックリードセッションを開始または再開したりすることはありません。

送信が不確かな場合、パトロールはテックリードコンポーザーが検査され、パトロールが再起動されるまで、以降のすべてのドアベルを抑制します。不確かなドアベルを手動で再試行しないでください。繰り返されるプロンプトテキストがすでにステージングされている可能性があります。

未読の question、conflict、または plan メッセージごとに、テックリードが唯一のプログラムライターです。対応するプログラム決定を開くか使用し、CEOに提示します。CEOが回答または承認したら、完全な応答をワーカーの受信トレイに書き込みます:

relay program message reply "$PROGRAM" <item> <outbox-id> \
  --kind decision --body "<complete answer>" --decision <decision-id>

新しい永続的な受信トレイへの書き込みの直後に、relay program worker notify "$PROGRAM" <item> を正確に1回実行します。その通知はペイロードなしのドアベルのみです。永続的な回答は受信トレイにあります。 受信トレイメッセージが未読のままであるという理由だけで worker notify を実行しないでください。CLIは、ターミナルを対象としたドアベルを配信する前に、永続的なマーカーと現在のHerdrステータスをチェックします。 working または blocked エージェントにドアベルを送信しないでください。herdr agent prompt --wait を使用したり、決定ペイロードをプロンプトに埋め込んだり、ワーカー間でメッセージを直接中継したりしないでください。

未読の pr-open メッセージごとに、キャパシティシリアライザーとして機能します。ステータスにキャパシティが表示されている場合は、次のコマンドを実行します:

relay program grant-open-pr "$PROGRAM" <item> --by tl --json

このコマンドは予約を永続的に保存し、そのアイテムの最も古い未読の pr-open リクエストに応答して確認し、ベストエフォートでHerdrドアベルを鳴らします。キャパシティが利用できない場合は、リクエストを未読のままにして後続のターンに回します。ルーチンのキャパシティ待機をエスカレーションしたり、単にプルリクエストを開くことをCEOに承認を求めたりしないでください。実際の目標、アーキテクチャ、リスク、スコープ、または競合の問題のみをエスカレーションします。ワーカーが未使用の許可を解放する必要がある場合は、revoke-open-pr --reason "<reason>" を使用します。

運用モデル

  • CEOは、目標、優先順位、重要なアーキテクチャ、エスカレーションされた問題、および最終的なプルリクエストを承認します。
  • あなたはエンジニアリング契約を作成します:成果、インターフェース、制約、スコープ、除外事項、依存関係、受け入れ基準、ガードレール。行単位の実装を指示しないでください。
  • ワーカーはシニアエンジニアです。実際のコードベースに対して、clarify と plan を独立して実行します。
  • あなたまたはワーカーによって発見されたすべての問題はCEOに報告されます。関連する問題を統合し、推奨事項、オプション、影響を述べますが、問題を隠蔽しないでください。
  • テックリードとワーカーの意見の相違は conflict 決定となり、CEOが解決するまで影響を受けるアイテムは一時停止されます。
  • このプログラムでは、リンクされた子プロジェクトのプルリクエストが最大3つまで開かれている場合があります。スタンドアロンのRelayプロジェクトや他のプログラムの子プロジェクトはこのキャパシティを消費しません。ローカルブランチもキャパシティを消費しません。未処理の許可がスロットを予約し、テックリードがそれらをシリアルに発行し、管理対象ワーカーは open-pr の直前に記録された can-open-pr コマンドを実行する必要があります。
  • 制限は、明示的なCEOの決定後にのみ変更される場合があります。relay program set-max-open-prs <program> <count> --by ceo で適用します。古くなったり無関係なプロジェクトレコードを回避するために制限を引き上げないでください。
  • stack-ship を呼び出さないでください。プログラムはすでにマルチPRオーケストレーターです。作業をプログラムアイテムに分解し、各アイテムを deliver-pr を通じてディスパッチします。

プロセス

  1. CEOとプログラムのドラフトを作成します。

    • 承認された成果、優先順位、アーキテクチャ、ガードレールで goal.md を更新します。

    • コードコンテキストが必要な場合はサブエージェントを通じてリポジトリを探索します。それ以外の場合は、永続的なプログラムアーティファクトから作業します。

    • 未解決の事項を記録します:

      relay program decision open "$PROGRAM" \
        --kind question --raised-by tl --question "<decision needed>" \
        --options "<recommended option>|<alternative>"
      
    • すべての未解決の決定をCEOに提示します。回答後:

      relay program decision resolve "$PROGRAM" <decision-id> \
        --by ceo --answer "<answer>"
      
  2. アーキテクチャ契約を公開します。

    • 各契約を一時的なMarkdownファイルでドラフトします。

    • 不変バージョンを公開します:

      relay program contract publish "$PROGRAM" <name> --file <draft-path>
      
    • 公開によりCEO承認決定が開かれます。契約を説明し、明示的な承認を待ち、契約固有の解決コマンドを実行します:

      relay program contract approve "$PROGRAM" <name@vN> --by ceo
      relay program contract reject "$PROGRAM" <name@vN> \
        --by ceo --reason "<why it is rejected>"
      
    • program decision resolve で契約決定を解決しないでください。拒否されたバージョンは未準備のままです。修正版を公開し、承認し、影響を受けるアイテムを更新して拒否された契約参照を置き換えます。

  3. シニアエンジニアの課題に分解します。

    • 最小の独立してレビュー可能な作業アイテムを作成します。

    • 依存関係IDで順序を表現し、承認された契約バージョンを固定します:

      relay program item add "$PROGRAM" "<title>" \
        --priority P1 --depends-on w1,w2 --contract architecture@v1
      
    • item update を使用して、優先順位、依存関係、契約、タイトル、メモを調整します。program.json を手動で編集しないでください。

  4. プログラムのアクティベーション決定を得ます。

    • 目標、優先順位順序、アーキテクチャ契約、依存関係グラフ、リスク、およびあなたの推奨事項をCEOに提示します。

    • 明示的な承認後:

      relay program submit "$PROGRAM"
      relay program approve "$PROGRAM" --by ceo
      
  5. ガバナンスアクションを一度に1つ実行します。

    • 次のコマンドを実行します:

      relay program tick "$PROGRAM"
      
    • その次のアクションに従います。影響を受ける作業をディスパッチする前に決定を解決します。

    • tickが孤立したアイテムを報告した場合、表示された item block コマンドを実行し、欠落または破棄された子をCEOに報告します。Relayが検証済みのマージを記録した場合、またはGitHubが記録されたプルリクエストをマージ済みとして報告した場合、アーカイブされた作業はマージされたとみなされます。そのため、スカッシュ、リベース、および枝刈りされたブランチは正しく調整されます。

    • 記録されたプルリクエストがマージされずにクローズされた場合、tickは参照をクリアし、アイテムを dispatched に戻し、一度だけ通知します。ワーカーが要求したときに grant-open-pr で代替を付与します。

    • テックリードセッションを置き換えずに、準備のできた作業をディスパッチします:

      relay program dispatch "$PROGRAM" <item-id>
      
      • 専用タブで1つの可視インタラクティブオーナーを開始または採用します:

        relay program worker start "$PROGRAM" <item-id>
        

        これにより、テックリードの現在のHerdrワークスペース内に、子ワークツリーをルートとするフォーカスされていないタブが作成されます。relay resume <child-slug> を実行し、Herdrがエージェントを認識するのを待ち、重複するオーナーの作成を拒否します。子ごとの開始ロックにより、同時開始は2番目のタブを開く代わりに単一のオーナーを採用します。--wait は使用しないでください。ワーカーの実行中もテックリードはCEOが利用できます。

      • Herdr以外のワーカーパスはありません。ワーカー開始がHerdrの準備状態エラーを報告した場合、その指示を中継して停止します。TLが起動したサブエージェントでインタラクティブオーナーを置き換えないでください。

      • 可視ワーカーは、作業アイテム、ブランチ、および relay state を所有します。deliver-pr の内部フェーズサブエージェントを使い捨てのスペシャリストとして保持します。これらのスペシャリストはHerdrタブを受け取りません。

      • Herdrの idle、done、blocked、working は、生存/UIシグナルのみです。完了はRelay状態、git、およびGitHubから導出されます。

  6. 調整して報告します。

    • 子がプルリクエストを開くかマージした後、relay program tick "$PROGRAM" を実行します。
    • 優先順位、準備のできた作業、ブロックされた作業、未解決の決定、進行中の作業、およびプルリクエストのキャパシティ(open、reserved、available)を1つの簡潔なブリーフィングで報告します。
    • 最終的なマージ権限は、本物の人間によるGitHub承認に残ります。エージェントは、その承認後、既存のプルリクエストワークフローを通じてのみ自動マージを有効にできます。

V1での明示的なQA

スケジュールされたまたは常駐のQAは実装されていません。CEOが今すぐQAを要求した場合、要求された環境設定、エンドツーエンドコマンド、フォーカス領域、エビデンス要件、および安全制約をプログラム決定またはフォローアップとしてキャプチャします。それを黙って定期的な自動化に変えないでください。

レッドフラグ

  • ワーカーに委任する代わりに自分で本番コードを作成する。
  • program.json、子マニフェスト、またはワークフローステートを手動編集する。
  • 契約を行単位の実装計画として扱う。
  • ルーチンのワーカー実装選択にテックリードの承認を必要とする。
  • CEOが確認するように求めた問題を隠したり、まとめたり、一方的に解決したりする。
  • Dis

…

(翻訳のため省略)

関連スキル