この文書は handover_prepare が生成する Markdown artifact の手書きサンプルである。
実装前に、次の Brain がこの文書だけで作業を再開できるかを確認するための検討材料として使う。
butler2#49 Handoverの仕組みをつくるcodexanycore2026-06-03T09:45:00+09:00issue-49-sample検討用サンプル注意:
docs/検討用/ に置いているsession_logs/handover/ に保存する想定#49 は、LLM セッション切り替え時に作業文脈を引き継ぐ Handover 機能を作るための issue である。
現在は仕様検討段階。
実装にはまだ入っていない。
ここまでに次の整理を行った。
session_log capability があり、Codex JSONL / Claude Code JSONL の読み取りと snapshot 生成の土台があるhandover_prepare / handover_read のように Butler 側へ固定する関連する検討メモ:
docs/検討用/handover機能検討メモ.md既存の session_log capability は #49 の土台としてかなり近い。
現状の session_log が扱えるもの:
codex_jsonl / claude_code_jsonl / role_content_jsonl / plain_textしたがって #49 で最初に作るべきものは、会話ログ保存機構そのものではない。
既存 session_log の上に、Brain が迷わず使える高レベル操作を足すのがよい。
外部 memory MCP については、次の整理が有効そう。
Claude 側レビューで指摘された重要点:
handover_prepare の初期トリガーは手動呼び出しに絞るissue_id は任意にできるか検討する実装検討時に見るべき既存ファイル:
butler/mcp_facade.py: Brain-facing MCP tool の定義。handover_prepare / handover_read を追加する候補butler/maids/session_log_worker.py: session_log の deterministic 読み取り・記録処理butler/maids/session_log_summary_worker.py: session_log summarize の Worker 呼び出しと snapshot 保存処理butler/work_record_backend.py: work_observe() など作業状態の backendbutler/issue_backend.py: issue_read() など issue 操作の backenddocs/capabilities/session_log/仕様書.md: 既存 session_log capability の仕様docs/capabilities/session_log/要約転記仕様書.md: 既存 snapshot 生成仕様docs/capabilities/work_record/仕様書.md: work_observe / issue_read など Brain-facing 作業記録仕様tests/test_session_log_non_llm_maid.py: session_log の既存テストtests/test_mcp_facade.py: MCP facade の tool 公開テスト現時点の方針:
handover_prepare / handover_read は Butler の機能名として定義するsession_log summarize は会話ログ単体の構造化、handover_prepare は issue / work / session を束ねた再開文書生成として分ける理由:
session_log / issue / mem0 を組み合わせると、Codex と Claude Code で手順がズレるsession_log summarize と handover_prepare の責務を分けると、既存 capability を壊さずに高レベル入口を追加できる次にやること:
docs/capabilities/handover/仕様書.md を作成するhandover_prepare の最小実装方針を決めるhandover_read の最小実装方針を決めるdocs/capabilities/handover/仕様書.md のアウトライン案:
handover_prepare 仕様handover_read 仕様session_log / work_record / issue との責務境界初期実装では、次を優先する。
handover_prepare(issue_id?, notes?)handover_read(issue_id?, handover_id?)session_logs/handover/ への Markdown 保存work_observe() の結果を材料に含める初期 deterministic template 案:
METADATA:
project / issue / source_brain / target_brain / mode / created_at / handover_id
CURRENT_STATE:
issue title/body の要約ではなく、issue 本文・work_observe・notes から機械的に埋める
DISCOVERY:
session_log mark 以降、または notes から抽出できる事実を箇条書きで入れる
DECISION:
notes または既存 snapshot 入力に明示された決定だけを入れる。推測で増やさない
NEXT_ACTION:
next_recommended と notes をもとに番号付きリストで入れる
BLOCKED / PENDING:
`推奨採用` / `暫定` / `未確定` / `ブロック` の状態ラベル付きで入れる
RISKS:
既知の注意点だけを入れる。なければ `なし`
CODEBASE_ANCHORS:
実装対象の候補ファイルと役割を入れる
HANDOFF_PROMPT:
次の Brain にそのまま渡せる 3-8 行程度の再開指示を入れる
セクション名は厳密に扱う。
特に HANDOFF_PROMPT は必須セクション名であり、HANDIFF_PROMPT などの表記揺れを許容しない。
未決事項:
issue_id は任意。ただし issue がある場合を主経路にするhandover_prepare は deterministic template + 既存情報の埋め込みから始めるhandover_accept は初期実装から外すhandover_prepare が session_log のどの範囲を読むかhandover_read が memory MCP 検索結果をどのように混ぜるかissue_id なしの場合の初期挙動案:
issue_id が指定されていれば issue-{id} 系の snapshot として保存するissue_id が省略され、work session に default issue があればそれを使うissue_id も default issue もなければ project/session handover として保存するproject_{timestamp}_{client}.md または session-{session_id}_{timestamp}_{client}.md を候補にする検証で見えた改善点:
推奨採用 / 暫定 / 未確定 などの状態ラベルを付けるNEXT_ACTION に含め、次の Brain が文書作成から始めやすくするhandover_prepare / handover_read の返却 schema とファイル名生成ルールを snapshot に含めるhandover_prepare の返却 schema 案:
{
"status": "ok",
"summary": "handover snapshot を作成しました",
"data": {
"handover_id": "issue-49-20260603T094500Z-codex",
"snapshot_file": "session_logs/handover/issue-49_20260603T094500Z_codex.md",
"latest_file": "session_logs/handover/issue-49_latest.md",
"handoff_prompt": "次の Brain は...",
"mode": "core",
"issue_id": 49,
"source_brain": "codex",
"next_recommended": {
"tool": "handover_read",
"args": {"issue_id": 49}
}
}
}
handover_read の返却 schema 案:
{
"status": "ok",
"summary": "handover snapshot を取得しました",
"data": {
"handover_id": "issue-49-20260603T094500Z-codex",
"snapshot_file": "session_logs/handover/issue-49_latest.md",
"snapshot": "...markdown...",
"handoff_prompt": "次の Brain は...",
"issue_id": 49,
"next_recommended": {
"tool": "work_observe",
"args": {}
}
}
}
ファイル名生成ルール案:
issue_id あり:
session_logs/handover/issue-{issue_id}_{YYYYMMDDTHHMMSSZ}_{client}.md
session_logs/handover/issue-{issue_id}_latest.md
issue_id なし:
session_logs/handover/project_{YYYYMMDDTHHMMSSZ}_{client}.md
session_logs/handover/project_latest.md
index:
session_logs/handover/index.json
初期実装では latest.md を物理コピーにするか index 参照にするかは未確定。
Brain-facing な handover_read の挙動は、どちらの実装でも変えない。
session_log summarize と handover_prepare の責務が重なるため、境界を明確にする必要がある境界案:
session_log: 会話ログの読み取り・抽出・一次証跡handover: issue / work / session / memory を束ねた再開用 artifactmemory MCP: 横断検索と長期想起の補助次の Brain は、issue #49「Handover の仕組みをつくる」の仕様検討を再開してください。
まず docs/検討用/handover機能検討メモ.md とこの docs/検討用/handover_snapshotサンプル_issue49.md を読んでください。
現在の方針は、Brain-facing な入口を Butler の handover_prepare / handover_read に固定し、実体では session_log / issue / work_record / optional memory MCP を使えるようにすることです。
初期実装は Butler 単体で動く core mode とし、mem0 MCP / Supermemory MCP 連携は enhanced mode として後続にしてください。
次の作業は、snapshot 形式を確認したうえで docs/capabilities/handover/仕様書.md を作ることです。
このサンプルから見える snapshot 形式の候補:
METADATACURRENT_STATEDISCOVERYDECISIONNEXT_ACTIONBLOCKED / PENDINGRISKSHANDOFF_PROMPTCODEBASE_ANCHORSHANDOFF_PROMPT は次の Brain にそのまま渡せる短い再開指示にする。
FORMAT_NOTES は検討用サンプルには含めるが、実運用 snapshot には含めなくてよい。
実運用 snapshot では、CODEBASE_ANCHORS を独立セクションにしてもよい。