handover
現在のセッションで行った作業・決定事項・アーキテクチャ変更を project-state.json に記録し、 handover.md を生成する。コンテキスト圧縮の直前、/handover の明示呼び出し、 ツール呼び出し累計 50 回超過時、または応答が遅延した時に使用する。
Best use case
handover is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
現在のセッションで行った作業・決定事項・アーキテクチャ変更を project-state.json に記録し、 handover.md を生成する。コンテキスト圧縮の直前、/handover の明示呼び出し、 ツール呼び出し累計 50 回超過時、または応答が遅延した時に使用する。
Teams using handover should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/handover/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How handover Compares
| Feature / Agent | handover | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
現在のセッションで行った作業・決定事項・アーキテクチャ変更を project-state.json に記録し、 handover.md を生成する。コンテキスト圧縮の直前、/handover の明示呼び出し、 ツール呼び出し累計 50 回超過時、または応答が遅延した時に使用する。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
このセッションで行った作業を振り返り、`project-state.json` を生成(既存があればマージ)し、`handover.md` を自動生成する。
## パス解決(保存先の決定)
以下の順序で保存先ディレクトリを決定する:
### チーム所属判定(既存と同じ)
1. 自分がチームに所属しているか確認する:
- 自分を起動した prompt に `team_name` が指定されているか(最優先)
- または、`~/.claude/teams/{team-name}/config.json` の `members` 配列に自分の `name` が含まれるか
2. エージェント名を取得する:
- Task tool で起動された場合は `name` パラメータの値
- 不明な場合は `default`
3. **チーム所属あり** → `.agents/handover/{team-name}/{agent-name}/`(以降のブランチ分離は適用しない)
### 単体セッション(チーム所属なし)
1. ルートディレクトリの決定:
- `git rev-parse --show-toplevel` でリポジトリルートを取得
- `git worktree list --porcelain` で worktree 一覧を取得し、現在のブランチに対応する worktree パスがあるか確認
- CWD のリポジトリルートと異なる worktree が検出された場合、`AskUserQuestion` でユーザーに保存先を確認する:
> worktree `{path}` が検出されました。こちらの `.agents/` に保存しますか?
2. ブランチ名を `git rev-parse --abbrev-ref HEAD` で取得。detached HEAD の場合は `detached-{sha7}` を使用
3. `{root}/.agents/handover/{branch}/` 配下を走査:
- status が `READY` のセッション(= `in_progress` / `blocked` タスクを持つ)があれば、その fingerprint を再利用
- なければ新しい fingerprint(`$(date +%Y%m%d-%H%M%S)`)を生成
4. 保存先: `{root}/.agents/handover/{branch}/{fingerprint}/`
5. 保存先ディレクトリが存在しない場合は `mkdir -p` で作成する
## 手順
1. `{保存先}/project-state.json` が既に存在するか確認する
- 存在する場合 → 既存の内容を読み込み、マージベースで更新する
- 存在しない場合 → 新規作成する
2. このセッションの作業内容を JSON スキーマに従って整理する。
project-state.json の完全な JSON スキーマ、status 自動判定ルール、既存 state とのマージルールは
[references/project-state-schema.md](references/project-state-schema.md) を参照する。
3. `{保存先}/project-state.json` に書き出す
### Linear Sync(オプション)
project-state.json 生成後、`linear.issue_id` フィールドが設定されている場合:
1. `claude/skills/linear-sync/SKILL.md` の `sync_handover` セクションを Read
2. セクションの手順に従い、project-state.json のアップロードと中断コメントの投稿を実行
3. API 失敗時はワークフローをブロックせず、warning を出力して続行
## Phase Summary 生成(pipeline ワークフロー時)
`project-state.json` の `pipeline` フィールドが存在する場合(feature-dev / debug-flow):
1. `.agents/handover/{branch}/{fingerprint}/phase-summaries/` ディレクトリを作成
2. 完了済みフェーズの Phase Summary を生成(未生成分のみ)
3. Phase Summary フォーマットは [references/project-state-schema.md](references/project-state-schema.md) を参照する。
4. `project-state.json` に `phase_summaries` マッピングを追加
5. `session` フィールドを生成:
- `session_id`: `${CLAUDE_SESSION_ID}`
- `resume_hint`: current_phase の概要と前フェーズからの concerns/directives
6. `{保存先}/handover.md` を自動生成する。
出力フォーマットは [references/project-state-schema.md](references/project-state-schema.md) を参照する。
## Cleanup
handover 実行時に、`{root}/.agents/handover/` 配下の `ALL_COMPLETE` かつ `generated_at` が7日以上前のセッションディレクトリを自動削除する。削除前にログ出力する。
## 自律的 Handover(マルチエージェント時)
チームに所属するエージェントは、以下の条件のいずれかに該当した場合、明示的な指示がなくても自律的にこの handover を実行すること:
- システムからコンテキスト圧縮の通知を受けた場合
- ツール呼び出し回数が累計 50 回を超えた場合
- 応答の生成が著しく遅くなったと判断した場合
「手遅れになる前に引き継ぐ」を原則とする。迷ったら handover する。
## 後継エージェントの生成(マルチエージェント時)
チームに所属するエージェントが自律的 handover を実行した場合、以下の手順で後継エージェントを生成する:
1. 上記の手順(project-state.json の書き出し、handover.md の生成)を完了する
2. Task tool で後継エージェントを生成する:
- `subagent_type`: 自分と同じ type を指定
- `name`: 自分と同じ name を指定
- `team_name`: 自分と同じ team_name を指定
- `prompt`: 以下のテンプレートを使用する
> あなたは {agent-name} の後継エージェントです。
> 前任のコンテキストを引き継いで作業を継続してください。
>
> 1. `{保存先}/project-state.json` を読み込む
> 2. 未完了タスク(in_progress / blocked)を確認する
> 3. 前任の next_action に従い作業を再開する
> 4. コンテキストが大きくなったら同様に handover すること(自律的 Handover の条件を参照)
3. 後継エージェントを生成したら、自分は作業結果を返して終了する
## 制約
- 200行以内
- コードブロックは含めず、ファイルパス:行番号で参照
- このセッションで実際に行った事実のみ記述し、推測や補足は含めない
- 設定されている言語で出力
- `.agents/` ディレクトリが存在しない場合は作成すること
## Handover Protocol
- `continue from handover` や handover.md への言及があった場合、まず前回の変更がコミット済みか `git log` で確認してから作業を開始すること
- 全タスク完了済み(status: ALL_COMPLETE)なら即座にその旨を報告し、コードベースの探索を始めないこと
- handover 文書には必ず以下を含めること:
- 具体的なファイルパス
- タスクID(T1, T2, ...)
- ブロッカー(あれば)
- コミット SHA(完了タスク)
- handover.md は project-state.json から自動生成されたビューであり、直接編集しないこと