セッション引き継ぎ書(handoff)
作業を中断しても状態を失わないよう、再開に必要な最小情報をファイルに書き出す(保存)/読み込む(復元)。/clear・/compact を挟む場合も、セッションを閉じて日をまたぐ場合も、同じ手順で使う。
モード判定
| 状況 | モード |
|---|---|
| 引数なし、「保存して」「/clear する前に」等 | 保存 |
引数 resume、「続きから」「再開して」「昨日の続き」等 |
復元 |
作業が未完のまま中断されると分かった — ユーザーが「今日はここまで」「一旦中断」「そろそろ限界」と言った / セッションを閉じる・日をまたぐと分かった / /clear・/compact の実行が話に出た / コンテキスト逼迫の警告が見えた |
保存を提案し、了承されたら実行 |
手順(保存)
- 初回のみ:
.claude/handoff/ディレクトリがまだ存在せず、かつプロジェクトが git 管理下にある場合、保存前に「Git 管理からの除外(初回のみ)」の手順を実行する。 .claude/handoff/latest.mdが既に存在すれば.claude/handoff/archive/<YYYY-MM-DD-HHmm>.mdに退避する(上書きで消さない)。- 現在のセッションの内容から、下記フォーマットで引き継ぎ書を書く。このセッションの会話・作業から書けることだけを書く。埋められない節は「なし」と明記する(推測で埋めない)。
git branch --show-currentとgit status --shortの結果を「Git 状態」節に記録する。- 保存先パスをユーザーに報告し、次回どう復元されるかを添える。
/clear・/compactの後も、セッションを閉じて新しく開き直した場合(日をまたぐ等)も、同梱の SessionStart hook が自動で読み込む。--resume・--continueでの会話再開時(元の文脈が残っているため対象外)や、hook が無効な環境(プラグインを介さない standalone 配置等)では自動注入されない。必要なら/turntup:handoff resumeで復元する。
Git 管理からの除外(初回のみ)
.claude/handoff/ ディレクトリがまだ存在しない=このプロジェクトで初めて handoff を保存するタイミングでのみ行う。2 回目以降の保存では(除外設定が済んでいるか否かにかかわらず)ユーザーに聞き直さない。
git rev-parse --is-inside-work-tree等でプロジェクトが git 管理下にあるか確認する。git 管理下になければこの節全体をスキップする。git check-ignore .claude/handoff/で既に除外設定済みか確認する。除外済みならスキップする(誰かが既に.gitignoreか.git/info/excludeに設定済み)。未設定なら、引き継ぎ書を書く前に
AskUserQuestionで次の3択をユーザーに確認する。選択肢 効果 向いているケース .gitignoreに追記リポジトリにコミットされ、clone した全員に適用される チームで「handoff はバージョン管理しない」方針を揃えたい .git/info/excludeに追記ローカル限定。コミットされずリポジトリにも残らない 自分だけ除外したい/他の共同作業者の設定に影響したくない 何もしない .claude/handoff/は通常のファイルとして追跡対象になるチームで引き継ぎ書を共有・レビューしたい 回答に応じて
.gitignoreまたは.git/info/exclude(プロジェクト直下に無ければ.git/info/excludeファイル自体を新規作成してよい)に.claude/handoff/を1行追記する。既に同内容の行があれば重複追記しない。「何もしない」ならファイルを変更せず、その旨を保存完了時の報告に含める。
引き継ぎ書フォーマット
# Session Handoff
- 保存日時: <YYYY-MM-DD HH:mm>
- プロジェクト: <リポジトリ名 / 作業ディレクトリ>
## ゴール
<このセッションで達成しようとしていたこと。1〜3 行>
## 進捗
- 完了: <済んだこと>
- 進行中: <着手済みで未完のこと。どこまでやったかを具体的に>
- 未着手: <残タスク>
## 重要ファイル
<`path:line` 形式 + 一言。再開時に読み直す範囲を最小にするためのもの>
- `src/foo/bar.ts:120` — 認証まわりの変更箇所。テスト未追加
## 決定事項と理由
<同じ議論を繰り返さないためのもの。「何を」だけでなく「なぜ」を必ず書く>
- X 方式ではなく Y 方式を採用 — 理由: <...>
## 注意点・ハマりどころ
<flaky なテスト、罠のある API、環境の癖など>
## Git 状態
- ブランチ: <branch>
- 未コミット変更: <git status --short の要約>
## 次の一手
<再開した Claude が最初にやるべきこと。具体的な 1 アクション>
手順(復元)
.claude/handoff/latest.mdを読む。無ければarchive/の最新を探し、それも無ければ「引き継ぎ書が見つからない」と報告して終了する。- 保存日時を確認する。保存から時間が経っている場合や Git 状態(ブランチ・未コミット変更)が現状と食い違う場合は、その旨をユーザーに伝えてから進める(コードが先に進んでいる可能性がある)。
- 「重要ファイル」に挙がった箇所だけを読み直して状態を把握する(ソース全体を読み直さない)。
- ゴール・進捗・次の一手を 3〜5 行でユーザーに要約し、「次の一手」から作業を再開してよいか確認する。
ルール・コツ
- 引き継ぎ書は未来の(何も覚えていない)自分への手紙。セッション固有の文脈(「さっきの件」「例のバグ」等)を使わず、単体で読んで分かるように書く。
- 長くしない。目安は 100 行以内。詳細はコードや Issue へのポインタ(
path:line、Issue 番号)で示す。 - 秘密情報(トークン・認証情報・内部 URL)を書かない。
- SessionStart hook(このプラグイン同梱)が、新しいセッションの開始時(
startup)と/clear・/compact後にlatest.mdを自動でコンテキストに注入する。--resume・--continueによる会話の再開(resume)は対象外(元の会話に文脈が残っているため)。hook が無効な環境(プラグインを介さない standalone 配置等)でも注入されないため、必要なら/turntup:handoff resumeで手動復元する。 - 復元後、その作業が完了したら
latest.mdを削除するか、次の保存で上書きされるに任せてよい。完了済みの引き継ぎ書を注入され続けるのが煩わしければ削除を提案する。
完了条件
該当するモードの以下を全て満たしたら完了。満たせない項目があれば、黙って省略せず理由を報告する。
保存モード:
-
.claude/handoff/latest.mdを上記フォーマットの全節を含めて書き出した(書けない節は「なし」と明記) - 既存の
latest.mdがあればarchive/に退避した - 初回保存(
.claude/handoff/が存在しなかった)かつ git 管理下なら、除外方法をユーザーに確認した(git 管理下にない/既に除外済み/初回でないならスキップでよい) - 保存先パスと復元方法をユーザーに報告した(「何もしない」を選んだ場合はその旨も報告した)
復元モード:
- 引き継ぎ書を読み、保存日時と Git 状態の食い違いの有無を報告した
- 「重要ファイル」に挙がった箇所を読み直した(ソース全体の読み直しをしていない)
- ゴール・進捗・次の一手を要約して提示した
補足
- 社内固有情報は Skill 本文に書かない。引き継ぎ書の内容はプロジェクトローカルに留まる(git 管理の要否は初回保存時にユーザーが選ぶ)。
- 「毎回確実に注入する」部分はモデル判断を介さない Hook 側(
hooks/hooks.json)が担う。この Skill は保存・復元の手順を担う。