バトンパス
目的:最小限のテキストで複数のエージェント間の継続性を維持する。
これは低トークンワークフローユーティリティであり、ドキュメント作成の儀式ではありません。
クイックセットアップ
すべてのエージェントにインストール(マシンごとに1回)
npx github:netheremp/baton-pass-netheremp install
このスキルを~/.claudeとすべての~/.codex*ホームにインストールします。その後:
- Claude Code(CLI + IDE) — スキルが自動で読み込まれます。
/new-game/save-state/baton-pass/foresight/dragon-dance/party-check/hindsightが使用可能 - Codex CLI — スキルが自動で読み込まれます。
$baton-passで明示的に実行 - Codexデスクトップアプリ — スキルが自動で読み込まれます。コンポーザーで
/prompts:baton-passを使用
代替方法:/plugin marketplace add netheremp/baton-pass-netheremp(Claude Code)または /plugins → インストール(Codex)。
マルチエージェント作業用にリポジトリを初期化
npx github:netheremp/baton-pass-netheremp init
--track-state を追加すると、ハンドオフ状態をgitにコミットします(共有履歴が必要なチーム向け)。デフォルトはローカルのみ(gitignoreされます)。
これにより以下が作成されます:
baton-pass.config.json— ワークフローがメモリファイルを見つける場所baton-pass.state.json— 軽量な共有所有権状態docs/agent-handoff.md— すべてのエージェント向けのリポジトリ固有ルールdocs/current-state.md— 現在進行中の状況docs/next-task.md— 作業の所有者と次に行うことdocs/progress.md— 実行中のセッションログ(追記のみ)
init はさらに /move スラッシュコマンドをリポジトリの .claude/commands/ に配置します。
技一覧
new-game= 新しいリポジトリでワークフローを初期化save-state= ハンドオフせずに安全に一時停止baton-pass= トークンが少なくなったときや所有権が変わるときに作業を転送foresight= 作業を受け取るか再開し、整合性を確認してから続行dragon-dance= 実際に学びがあった場合のみワークフローを改善party-check= 最後に行動したエージェント、次に行動すべきエージェント、現在のリポジトリ状態を確認hindsight= 完全なバトンチェーンを監査 — 達成されたマイルストーン、検証状況、引き継がれたリスク、未解決のアイテム
基本ルール
デフォルトは差分で、要約ではありません。
受信側が安全に続行できない場合を除き、安定したプロジェクト履歴を再記述しないでください。
各技を使用すべきタイミング
new-game
リポジトリの開始時、または共有メモリファイルがまだ存在しないリポジトリにこのワークフローを導入するときに1回使用します。
save-state
以下の場合に使用:
- 突然停止する必要がある
- 後で作業を再開するために一時停止する
- 所有権はまだ変わらない
save-state はローカルチェックポイントであり、転送ではありません。
baton-pass
以下の場合に使用:
- トークンが少ない
- 別のエージェントが引き継ぐ
- 転送可能な継続性パッケージが必要
baton-pass は転送チェックポイントです。
foresight
以下の場合に使用:
- バトンを受け取るとき
save-state後に戻ってきたとき- 書き込まれた状態がまだリポジトリと一致しているか疑わしいとき
dragon-dance
以下の場合のみ使用:
- ワークフロー自体が何かを学んだ
- 受信側がずれ(ドリフト)を発見した
- バトンが重要な何かを省略していた
- 新しいルールが明らかに繰り返しの無駄を防ぐ場合
dragon-dance を反射的にトリガーしないでください。
すべてのセッションや baton-pass にデフォルトで含めないでください。
party-check
以下の場合に使用:
- 誰の番か忘れた
- 複数のエージェントがリポジトリを共有している
- 完全な
foresightを実行せずに現在のステータスを知りたい
party-check はセッション内の技です。プレーンなターミナル(エージェントなし、トークンなし)からは、
baton-pass status を実行 — 同じ所有権情報と最近のバトンチェーンを表示し、
baton-pass status --json はスクリプトやフック用の機械可読な出力を提供します。
hindsight
以下の場合に使用:
- マイルストーンや主要機能が完了し、クリーンな記録が必要
- 何かがおかしいと感じ、実際に主張されたことと実行されたことを追跡する必要がある
- 新しいエージェントが参加し、最後のバトンだけでなく履歴全体を把握する必要がある
foresightで重大なずれが見つかり、それがどの程度前から始まっていたかを理解する必要がある- プロジェクトがレビュー、人間への引き継ぎ、またはアーカイブされる
すべてのバトンの後に hindsight を実行しないでください。
これは監査であり、ルーチンチェックポイントではありません。
各技が書き込むべき内容
save-state
最小限の出力:
- 現在のタスク
- 停止した場所
- 触れたファイル
- 次の即時アクション
- ブロッカーまたはリスク
baton-pass
最小限の出力:
- 目標
- 完了したこと
- タスク(タスク計画を使用している場合 — 各タスクのステータス:完了 / 進行中 / 保留中をリスト)
- ファイル
- ワークツリー(gitワークツリーを使用している場合、ブランチ名とワークツリーパス)
- 検証済み
- 逸脱(元の計画と異なる、セッション中に行われた意思決定)
- 環境(次のエージェントが確認すべき前提条件:実行中のサービス、.env変数、テストDBなど)
- 次に行うこと
- リスク
- 次のエージェント
コミットの規律:
- ハンドオフ前にコミットするか、その理由を文書化する。
- 未コミットの状態を明示的に指定せずに、ダーティなワーキングツリーをハンドオフしない。
- 検証を実行しなかった場合は、そのように述べる — 合格したと暗示しない。
タスク、ワークツリー、逸脱、環境が重要な理由: セッションメモリはハンドオフ時に失われます。20タスクの計画の途中にいる場合、次のエージェントはgitログだけからどのタスクが完了したかを再構築できません — ステータスを明示的に書きましょう。ワークツリー内で作業している場合、次のエージェントには正確なパスが必要です。計画と異なる方法で何かを修正した場合は、それを書き留めてください — 次のエージェントは計画を再読し、間違った方法でやり直す可能性があります。環境が特定の状態(データベース実行中、.envが設定済みなど)でなければならない場合は、それを明示してください — 新しいエージェントはそれなしで同じブロッカーに直面します。
foresight
最小限の出力:
- 整合しているか否か
- 整合していない場合、何が古いか不足しているか
- 必要な場合のみ、修正された次のステップ
ずれが深刻な場合(バトンは作業が完了したと主張しているが、リポジトリはそうでないことを示している)、続行する前に構造化されたずれレポートを書きます:
- 何が主張されたか
- リポジトリが実際に示しているもの
- 何をやり直す必要があるか
- このずれが
dragon-danceを正当化するか
dragon-dance
最小限の出力:
- 問題
- 影響
- 改善
- 新しい規約
party-check
最小限の出力:
- 状態
- 最後の技
- 最後のエージェント
- 次のエージェント
- 更新日時
- 短い概要
hindsight
最小限の出力:
- 監査範囲(全チェーンまたは範囲指定)
- バトンチェーンテーブル(From → To、日付、目標概要)
- エージェントごとに主張されたマイルストーンと検証ステータス
- 検証の欠落(証拠なしで行われた主張)
- バトン間で引き継がれたリスク
- バトン間で見つかったずれ
- 未解決のままの未処理項目
- 監査評決:
clean(クリーン)、gaps found(欠落あり)、risks unresolved(未解決リスク)、action required(アクション必要)
確認するソース:
docs/progress.md— 完全なセッションログdocs/next-task.md— ターン状態の履歴baton-pass.state.json— プログラム上の状態- gitログ — コミットメッセージと日付
- progressで参照されている保存されたバトンまたはsave-stateファイル
foresight の受信手順
誤ったステップを避けるために最小限のみ確認:
- 現在のユーザー目標
- ワーキングツリーのステータス
- 最新のコミット
current-statenext-task- 最新の
progressエントリ - 保存された状態またはバトンで指定されたファイル
- 進行中のタスク計画のタスクリストステータス
その後判断:
- 整合している場合、続行
- 整合していない場合、バトンを修正して続行
- 整合性の欠如が再利用可能な教訓を明らかにした場合、
dragon-danceを実行
エージェント間のスキル発見
スキルがプロジェクトローカルにインストールされている場合(.claude/commands/ またはプラグインインストール経由でリポジトリに)、リポジトリを取得するCodexなどのエージェントは同じスキル定義を見つけます。スキルファイルはリポジトリとともに移動します。
セッション境界を越えて引き継がれないもの:
- メモリ内タスクマネージャーからのタスク状態(TaskCreateリストはセッション終了時に失われる)
- サブエージェント実行状態(どのレビューループが完了したか、どのエージェントが実行されたか)
- 環境状態(どのサービスが実行中か、どの.env変数が設定されているか)
バトンパスはこれらすべてを明示的に書き込まなければなりません。スキルはエージェントに作業方法を指示し、バトンは状況を伝えます。
状態モデル
共有状態ファイルを使用して以下を追跡:
- 現在の状態
- 最後の技
- 最後のエージェント
- 次のエージェント
- 更新時刻
- 概要
推奨状態:
activepausedhanded-offclaimedblocked
検証語彙
受信側が何がチェックされたかを正確に理解できるように、一貫した言語を使用します。
passed— ローカルで実行され、出力がクリーンであることを確認passed outside sandbox— ローカルで実行されたが、CI/ビルド環境ではないnot run — [理由]— スキップ、理由を明記expected to pass, unverified— 実行されていないが、正しいと信じられている
expected to pass, unverified を意味するときに passed と書かないでください。
その単一の曖昧さがハンドオフの手戻りの最大の原因です。
ターン状態
next-task の「ターン状態」ブロックは、主要な人間可読な所有権シグナルです。
baton-pass.state.json はプログラム上の使用のためにそれをミラーリングします。
一方を更新するときは、両方を更新してください。それらが矛盾する場合、next-task が優先されます。
両方での推奨 state 値:
active— 誰かが現在作業中paused— 安全に停止、同じエージェントが再開予定handed-off— 転送済み、受信側が主張するのを待機中claimed— 受信側がforesightを実行し、続行中blocked— 続行不可、理由はnext-taskに記載されるべき
アンチパターン
避けるべきこと:
- すべての小さなチェックポイントに
baton-passを使用する - 何も学んでいないときに
dragon-danceを使用する - 些細な作業のためにすべてのメモリファイルを書き換える
foresightを毎回完全なリポジトリ監査に変える- すべてのバトンの後に
hindsightを実行する — これは監査であり、ルーチンステップではない - 差分ではなくプロジェクト全体を再記述する
expected to pass, unverifiedを意味するときにpassedと書く- 未コミット状態を指定せずにダーティなワーキングツリーをハンドオフする
- 番号付き計画の途中でタスクステータスを省略する
- 作業がgitワークツリー内にある場合にワークツリーパスを省略する
- 新しいエージェントが知らない環境前提条件を省略する
ベストプラクティスフロー
一時停止:
save-state- 後で
foresight
転送:
baton-pass- 受信側が
foresightを実行
改善:
foresightが意味のあるワークフローの問題を明らかにした場合のみdragon-dance
ターン所有権の確認:
party-check
完全なチェーンの監査:
hindsight- 欠落や未解決リスクが見つかった場合、
dragon-danceを実行