このワークフローを実行する前に、ランタイムアダプターをお読みください。そのランタイムマッピングは、参照されるすべてのプレイブックとスクリプトに適用されます。
Pstackペア
2つのエージェント、1つのHerdrまたはRexセッション、1つのリポジトリ。マスターは判断を、サイドキックはワーキングツリーを所有します。両者間のすべてのメッセージは、ペアストア内のファイルと、そのファイルを指定する1行のプロンプトです。ターミナルは記録を保持しません。なぜなら、代替画面で動作するエージェントはスクロールバックを残さないからです。
前提条件
- Herdr(
test "${HERDR_ENV:-}" = 1)またはRex(REX_BLOCKが設定されている)の内部にいること。どちらでもない場合は、その旨を伝えて停止します。 - ペインとエージェント制御のためのマルチプレクサのスキルをロードする:Herdrの
~/.agents/skills/herdr/SKILL.md(またはそのファイルがない場合はherdr --skill)、またはRexのrex skill show。その安全性ルールは全体を通して適用されます。Rexの場合は、Rexでの実行をお読みください。 herdrまたはrex、およびPython 3.11以降(python3)がPATH上に存在すること。scripts/pair.sh helpは、すべてのストアおよびチャネル操作を一覧表示します。ペア操作には、手動でherdrやrexを呼び出す代わりにこれを使用してください。- マスターを自動モードで起動します。Devinはデフォルトで
--permission-mode dangerousを使用して許可をバイパスします。他の種類のエージェントはマスターのモードを継承します。pair.sh permissionは検出されたマスターモードを出力します。デフォルトを上書きするには、--permission <モード>またはネイティブの許可フラグを--の後に使用します。--permission autoはDevinのスマートモードを選択します。変換テーブルがない種類のエージェントは、--の後にネイティブフラグを指定します。spawnはまた、各エージェント種類のフォルダ信頼プロンプトをスキップします。これは、未確認のフォルダで無人エージェントが停止するのを防ぎます。piは--approve、Devinは--respect-workspace-trust falseを取得します。--の後の信頼フラグはこれを上書きします。ClaudeとCodexは代わりに、一度も見たことのないフォルダを信頼するよう要求します。その判断は人間に委ねられるため、spawnはダイアログを拒否し、そのフォルダでエージェントを一度開いて信頼するように指示して停止します。また、生成されたClaudeはMCPサーバーなしで起動します(--strict-mcp-configと空の設定)。これは各サーバーがセッションごとにプロセスとなるためです。--の後に--mcp-configを指定すると、独自の設定が保持されます。
役割
| マスター | サイドキック | |
|---|---|---|
| 所有するもの | 計画、ブリーフ、レビュー、決定、人間 | ワーキングツリー、テスト、診断、エビデンス |
| pstackの実行方法 | poteto-modeフレーミング、how、architect、レビュースキル | 各ブリーフが指定するプレイブックとそのtodolist |
| 書き込む場所 | ペアストアのみ | ブリーフのScope内のファイル、およびその進捗ログとレポート |
| コミュニケーション手段 | ブリーフ、ステア、レビュー、standing orders、ゲート | 進捗行、レポート |
自分の役割を入力してください。マスター:references/master.md。サイドキック:references/sidekick.md。
ペアストア
${XDG_STATE_HOME:-$HOME/.local/state}/pstack/pair/<スラッグ>/。pair.sh initによって作成されます。ファイルごとに1人の書き込み者。
| パス | 書き込み者 | 内容 |
|---|---|---|
pair.json | pair.sh経由のマスター | エージェント名、ペインID、cwd、gitルート、サイドキックのフォールバックとフェイルオーバー、ペイン配置(分割またはタブ) |
standing-orders.md | マスター | すべてのブリーフにパスで貼り付けられる番号付き制約 |
plans/NNN-<スラッグ>.md | マスター | 計画テンプレートからの1ラウンドの計画 |
briefs/NNN-<スラッグ>.md | マスター | ブリーフテンプレートからの1ユニット |
progress/NNN-<スラッグ>.md | pair.sh progress経由のサイドキック | 完了したステップまたはアプローチ変更ごとにタイムスタンプ付きの1行。チェックインでは、マスターがまだ見ていない行のみが表示されます |
steers/NNN-<スラッグ>-s<k>.md | マスター | ユニットNNNに対するブリーフ途中の方向性k。ステアテンプレートから。supersedes:は、それに対応する異議申し立てがあったステアを指定します |
reports/NNN-<スラッグ>-s<k>.md | サイドキック | ステアkへの異議。ステア応答テンプレートから |
reports/NNN-<スラッグ>.md | サイドキック | ブリーフNNNのエビデンス。レポートテンプレートから、または計画NNNへの同意/異議応答。計画応答テンプレートから |
reviews/NNN-<スラッグ>.md | マスター | レポートNNNの評決。レビューテンプレートから。計画のagreedはそのブリーフのロックを解除します |
scratch/<id> | pair.sh scratch経由のマスター | ユニットのコミットでの使い捨てワークツリーへのリンク。チェックを再実行するために使用。リポジトリ外の${XDG_STATE_HOME:-~/.local/state}/pstack/scratch/(PSTACK_SCRATCH_ROOTで移動可能)に保持。ClaudeとCodexはホストごとに一度これを信頼する必要があります(kitchen.py doctorで確認)。レビュー後に削除されます |
gates.md | マスター | 人間への未解決の質問 |
decisions.tsv | pair.sh log経由のマスター | 「作業を示せ」というトレイル |
status.md | pair.sh status | 派生テーブル。手動編集禁止 |
queue | pair.sh queueとdispatch経由のマスター | 次のブリーフのパス(1スロット) |
steps/NNN-<スラッグ>.tsv | pair.sh step経由のサイドキック | コミットされたステップごとに1行:番号、コミット、時間、解決するノート、サマリー |
notes/NNN-<スラッグ>-n<k>.md | pair.sh new-noteとnote経由のマスター | ステップkまでのユニットのステップのレビュー。ノートテンプレートから:ブロック項目とフォローアップ |
followups.md | pair.sh note経由のマスター | すべてのノートからのフォローアップ。後のブリーフまたはイシュー用 |
session-handoff.md | マスター | コンパクトなリカバリと次のタスクのコンテキスト。ブートストラップ時に読み込まれる |
sessions/ | pair.sh spawn / rotate | 以前の準備完了レポート。保持されたセッションエクスポートとタイミングエビデンス |
events.tsv | すべてのpair.shコマンド | メッセージ、レポート、ウェイク、ログエントリごとに1行。pair.sh metricsによって読み取られる |
NNNは、計画またはブリーフ、レポート、レビューによって共有されるゼロ埋めシーケンスです。したがって、1つのユニットのファイルは一緒にソートされます。
メッセージ
| プロンプトテキスト | 方向 | 送信者のヘルパー | 受信者の動作 |
|---|---|---|---|
| bootstrap(スキルとストアを指定) | マスターからサイドキックへ | pair.sh spawn | ブートストラップ手順、reports/000-ready.md、返答READY |
pstack-pair PLAN <計画パス> | マスターからサイドキックへ | pair.sh discuss | コードで計画を検証し、同意または異議応答を書き、ターンを終了 |
pstack-pair BRIEF <ブリーフパス> | マスターからサイドキックへ | pair.sh dispatch | ブリーフを実行し、レポートを書き、pair.sh finishを実行し、REPORT行でターンを終了 |
pstack-pair BRIEF <ブリーフパス>(キュー済み) | マスターから作業中のサイドキックへ | pair.sh queue | マスターは新しいセッション後にそれをディスパッチする。pair.sh nextは拒否する |
pstack-pair STEER <ステアパス> | マスターから作業中のサイドキック、または異議で一時停止中のサイドキックへ | pair.sh steer | 到着時にツール呼び出しの間でそれを読む。同意して続行するか、または異議を唱えてエビデンスとともにターンを終了 |
pstack-pair REPORT <レポートパス> | サイドキックからマスターへ | pair.sh finish(またはnotify) | レポートを読み、レビュー |
pstack-pair STOP <ストア> | マスターからサイドキックへ | pair.sh stop | 安全に一時停止し、停止レポートを書く |
マスターのdispatchとwaitは、サイドキックからの応答が届くと戻ります。マルチプレクサのみからのセトルは信頼されません。Devinサイドキックは、プロンプトが到着したときとステップ間でアイドル状態を示し、狭いペインでは実行全体に対して完了を示す可能性があるため、セトルはペインの「esc to interrupt」行と照合してチェックされます。レポートなしで1分間保持されるセトルは、report: missingで待機を終了します。また、サイドキックがまだ作業中にチェックイン間隔が経過した場合にも戻り、レポートパスの代わりにチェックインの要約を出力します。waitは、ディスパッチされたブリーフのレポートが着地した瞬間にも戻ります。その時点でサイドキックがキューされたブリーフを既に取得している場合でも同様です。その場合、running:は現在のブリーフを示します。notifyは、マスターがアイドル状態の場合にのみマスターにプロンプトを送信するため、待機中のマスターが中断されることはありません。コンパクション後に受信したメッセージも、このスキルと読み取るファイルを指定しているため、スキルをリロードし、そのファイルから続行してください。
まず計画から
実装は、両方のエージェントが同意した計画からのみ開始されます。マスターは実装、アーキテクチャ、システム設計を推進します。plans/NNN-<スラッグ>.mdを、選択した設計、検討した代替案、それらの長所と短所とともにドラフトし、pair.sh discussで送信します。サイドキックはそれらのトレードオフに対してブレインストーミングを行い、すべてのステップをコードに対してチェックし、同意または異議をエビデンス付きで回答します。マスターは新しい計画ラウンドで改訂するか、異議に回答します。応答が同意を示し、マスターが評決agreedのレビューを書くまで続きます。pair.sh dispatchは、plan:行が同意された計画を指定していないフィーチャー、バグ修正、リファクタリング、パフォーマンス問題、またはpstack-tddブリーフを拒否します。読み取り専用およびフォレンジックブリーフは計画を必要としません。バグの診断ブリーフはその計画の前に実行されるため、計画はランタイムエビデンスに基づきます。3ラウンド合意に至らない場合は、人間へのゲートとなり、両方の立場がgates.mdに記録されます。
チェックインとステア
マスターは、ペアプログラミングのドライバーのように駆動します。継続的ではなく、一定の間隔で状況を確認し、キーストロークではなく方向性を修正します。
- サイドキックは、完了したtodolistステップごと、およびアプローチ変更ごとに1行を、
pair.sh progressを通じてprogress/NNN-<スラッグ>.mdに追加します。Scope外に書き込んだり、計画から逸脱する前に、まずその行を書き込むため、チェックインでそれを捕捉できます。 dispatchとwaitは、サイドキックがまだ作業中のときにチェックイン間隔(--every MIN、デフォルト9分)で戻り、要約を提供します:タイムボックスに対する経過時間、まだ見ていない進捗行、触れたファイルとScope外のもの、ディスパッチ以降のコミット、ステア数。サイドキックがブランチを切り替えたりリベースしたりして、HEADがディスパッチヘッドから派生しなくなった場合、ディスパッチ以降に行われたコミットのみが触れたものとしてカウントされます。マスターがレポート間で読むのはこの要約のみです。要約がログをSTALEとマークした場合にのみ、ペインを読み取ります。- ステアは、ブリーフ途中のマスターからの修正です。
pair.sh new-steer、次にpair.sh steer。サイドキックが作業中にその入力キューに届きます。ハーネスはツール呼び出しの間にそれを渡し、サイドキックはそこで行動します(ステップの終了時ではありません)。Devinサイドキックは、代わりに次のpair.sh step、notes、またはprogressからSTEER:行として受け取ります。これは、キューされたメッセージをDevinに届けるEnterキーが、実行中のコマンドをキャンセルするためです。--interruptは、待機できない方向性のために、最初に実行中のツール呼び出しをキャンセルします。ステアは方向性を伝えます。同意された計画が選択しなかったアプローチ、スコープの逸脱、スキップすべきステップ、越えられようとしている禁止ライン、または人間からのニュースなどです。レビューが最後に捕捉できるものは、レビューを待ちます。 - サイドキックは、計画と同様に同意または異議を唱えます。同意:適用し、進捗ログで確認し、続行します。異議:エビデンスと代替案とともにステア応答を書き、通知し、ターンを終了します。マスターは、異議申し立てされたステアを改訂または撤回したステアで応答し、
pair.sh steerがサイドキックを再開します。ステアごとに2ラウンド。決定はマスターに留まり、継続的な不一致は計画ラウンドに持ち越されます。 - ブリーフあたり2つの新しいステア。3つ目はブリーフが誤っていたことを意味します。ユニットを停止し、再ブリーフします。
あらゆる種類のタスクセッション
あらゆる種類(Claude、Codex、Devin、pi、Prime、Muse)のサイドキックは、完了したブリーフごとに新しい会話を使用します。spawning、queueing、rotating、またはストレージのクリーニングの前に、DevinまたはPiについてはDevinセッションライフサイクルを、PrimeについてはPrimeアダプターをお読みください。部分的またはブロックされた作業はそのセッションに残ります。完了したブリーフは、マスターがディスパッチするためにキューを残します。dispatchとdiscussは、自身でサイドキックをローテーションします(出力にrotated:)。pair.sh rotateは、マスターが手動で実行するために残されています。pstackストアはセッション間で永続化されます。
Muse Code
任意の役割に--kind museを使用します。Museアダプターで、その許可、信頼、プレフライト、終了処理を確認してください。Museはペインごとに1つの会話を保持するため、ブリーフごとにローテーションされません。
Prime Agent
サイドキックに--kind prime-agentを使用します。Prime Agentアダプターで、ネイティブモデル引数、プレフライト、ステアリング、正確なデーモンセッションクリーンアップ、プロバイダーフェイルオーバーを確認してください。Primeは共有ストアプロトコルを使用し、完了したブリーフごとにローテーションが必要です。
Piサイドキックとフォールバック
piサイドキックは、自身のイベントを通じてHerdrに(そしてpstack拡張機能を使用してRexに)その状態を報告し、実行中のコマンドをキャンセルせずにステアをキューに入れます。そのモデルが失敗する可能性のあるルートの背後にある場合、--fallback devinを指定してspawnします。spawnは最初にモデルをチェックし、pair.sh failoverは実行の途中でフォールバックを交換します。spawningの前に、Piサイドキックリファレンスをお読みください。
サイドキックをビジー状態に保つ
サイドキックはクリティカルパスです。マスターはレポートを数分で処理しますが、ユニットには数十分から数時間かかります。3つの習慣が、サイドキックをマスター待ちにさせないようにします。
- 次のブリーフをキューに入れる。 ユニットの実行中に、マスターは次のブリーフをドラフトし、
pair.sh queueで保留します。doneレポートの後、サイドキックは新しいセッションを開始し、マスターはそのブリーフをディスパッチします。pair.sh nextは拒否します。キューには1つのスロットがあり、実行中のユニットのレビューに依存しないユニットのみを保持するため、reviseはキューされたもののやり直しではなく、フォローアップブリーフになります。 - コミットでレビューする。 書き込みを行うブリーフは
commit: yesを指定し、レポートのhead:はそのコミットを指定します。マスターは、サイドキックが次のユニットで作業している間にgit showでそれを読み、共有ツリーではなくpair.sh scratch <ストア> NNN-<スラッグ>-review --at <head>でチェックを再実行します。 - 再計画ではなく修正する。 マスターが採用した異議は、
agreedレビュー内の番号付き修正となります。新しい計画ラウンドは、設計が変更された場合のためのものです。