対象 issue: #49 Handover の仕組みをつくる
この文書は検討用メモであり、現時点では正本ではない。
目的は、Codex / Claude Code など複数 Brain をまたいで作業を再開するための Butler 側責務を整理することである。
関連:
LLM を使った開発作業では、長時間同じセッションを使い続けると次の問題が起きる。
#49 の本質は、単一 LLM のコンテキスト圧縮だけではなく、複数 Brain 間での作業引き継ぎを Butler の作業体系に組み込むことにある。
butler2 にはすでに session_log capability がある。
既存の session_log は次を扱える。
codex_jsonl / claude_code_jsonl / role_content_jsonl / plain_text の読み取りしたがって、#49 で新しく作るべきものは「会話ログ保存機構そのもの」ではない。
既存の session_log を土台にして、Brain-facing な Handover 導線を追加するのが自然である。
Supermemory や mem0 系のような、MCP 経由で永続 memory を提供する仕組みはすでに存在する。
これらは「長期記憶」「横断検索」「個人設定や過去知識の想起」に強い。
一方、Butler が担うべき Handover は次に絞る。
つまり、Butler は汎用 memory database にならない。
Butler は「作業を再開するための正規化された引き継ぎ文書」を作る。
外部 memory MCP は将来 adapter として接続できるが、初期実装では必須依存にしない。
Handover の正本は、会話全文ではなく Markdown の構造化 snapshot とする。
会話全文や JSONL は一次証跡として残すが、次の Brain に最初に読ませるものではない。
次の Brain が読むべきものは、短く、構造化され、人間もレビューできる必要がある。
想定セクション:
CURRENT_STATE: 現在どこまで終わっているかDISCOVERY: 調査で分かったことDECISION: 採用した判断と理由NEXT_ACTION: 次にやることBLOCKED / PENDING: 未解決・確認待ちRISKS: 注意点、壊しやすい箇所HANDOFF_PROMPT: 次の Brain に渡す短い再開指示既存の session_log summarize の snapshot 形式を拡張すればよい。
既存の session_* はログ操作の粒度であり、Brain が「引き継ぎたい」と思った時の入口としては少し低い。
Handover 用には handover_* 系の操作を追加する。
handover_prepare(issue_id?, session_log_path?, client?)
handover_read(issue_id?, handover_id?)
handover_accept(handover_id)
handover_prepare現在の作業状態から引き継ぎ snapshot を作る。
入力候補:
issue_id: 対象 issue。省略時は work_start の default issuesession_log_path: Codex / Claude Code など外部会話ログ。省略時は Butler が分かる最新 sessionclient: codex / claude_code などnotes: 人間が追加したい補足集める情報:
work_observe() の状態session_log mark 以降の会話差分出力:
handover_idHANDOFF_PROMPThandover_read次の Brain が作業開始時に読む。
入力候補:
issue_idhandover_id出力:
handover_accept次の Brain が「この引き継ぎを読んで再開した」と記録する。
これは必須ではないが、複数 Brain を使う場合に、どの Brain がどの handover から再開したかを追跡できる。
初期案:
session_logs/handover/
issue-49_latest.md
issue-49_20260415T123000Z_codex.md
issue-49_20260415T130500Z_claude_code.md
index.json
session_logs/ は既存方針どおりローカル運用物として Git 管理対象外にする。
ただし、必要なら docs/ や issue comment に要約を転記できるようにする。
work_record は「作業成果の記録」であり、handover_prepare は「作業文脈の引き継ぎ」である。
両者は近いが、同じものにしない。
work_record: Git commit / issue comment へつながる、成果物中心の記録handover_prepare: 次の Brain が迷わず再開するための、文脈中心の記録ただし work_finish() の提案には、未作成なら handover_prepare を含めてもよい。
session_log summarize の出力形式に HANDOFF_PROMPT を追加するhandover_prepare を MCP facade に追加するhandover_prepare は内部で session_log summarize を呼び、issue / work 状態を prompt に含めるsession_logs/handover/ に保存するhandover_read を追加し、issue 単位で最新 snapshot を取得できるようにするhandover_read(issue_id=49) で最新 snapshot と再開指示を取得できるCURRENT_STATE / DECISION / NEXT_ACTION / HANDOFF_PROMPT が含まれる#49 は、既存 session_log capability の上に Brain-facing な handover_* 導線を載せる方針で進める。
外部 memory MCP は競合ではなく補助候補である。
ただし初期実装では、Butler の repo-local artifact を正本にする。