harness-recall
harness-mem が抱える 5 層の記憶経路 (auto-memory / SSOT / harness-mem DB / checkpoint-bridge / session-notes) を、user の recall 意図に合わせて即座に正しい経路に分岐させるための Skill。配布ユーザーは何も設定せず、「思い出して」と喋るだけで発火する。
発火条件
この Skill は次の語を含む user prompt を検知したときに invoke する:
- 「思い出して」「覚えてる」「覚えている」
- 「今何してた」「今なにしてた」
- 「前回」「続き」「直近」「最後に」「先ほど」「さっき」
- 英語: resume, recall
発火の冗長化のため、harness-mem の userprompt-inject-policy.sh がこれらの語を検出した際に /harness-recall invoke を促す追加 instruction を additionalContext に注入する。description 経由 + 注入経由の二重化で取りこぼしを防ぐ。
Intent 分類と Routing
user 発話の意図を次の 5 分岐に分類し、該当 tool / 資料を先に参照する:
| Intent | 典型発話 | 1 次 routing |
|---|---|---|
| resume / 続き | 「続きから」「resume」「今何してた?」「直前どこまでやった?」 | harness_mem_resume_pack |
| decisions / 方針 | 「何を決めた?」「方針は?」「結論は?」 | decisions.md (.claude/memory/decisions.md) → 併せて patterns.md |
| 前に踏んだ同じ問題 | 「前にも見た気が」「既知問題?」「また同じ error」 | harness_cb_recall (checkpoint-bridge recall) |
| 直近 session | 「直近のセッション一覧」「最後に開いた session は?」 | harness_mem_sessions_list + 必要に応じて harness_mem_session_thread |
| 特定キーワード | 「§78 の retrieval 話」「XR-003 の経緯」 | harness_mem_search (project を推定できる時は必ず渡す。facets は query / project / session_id などで scoped にする) |
複数 intent に跨るときは上から順に試す。1 経路で 0 件なら次経路へ fallback する。
S127 後の検索安全ルール
S127 以降の search は「固まらないこと」を優先して bounded に動く。recall の UX は、広く探すよりも正しい scope で素早く当てることを優先する。
- 検索前に、現在の cwd / repo / user が言及したプロジェクト名から
projectを解決する。推定できるならproject指定は原則必須。project なし検索は、明示的な横断調査 / forensic / admin か、scoped miss を source に出した後だけにする。 - 複数の Claude / Codex project を並行している時は、まず現在の cwd / repo を
projectとしてharness_mem_searchに渡す。現在 project の事実確認ではstrict_project=trueを優先する。 harness_mem_search_facetsは補助ツール。無指定では呼ばない。queryかproject、または tenant/access scope を渡す。400 search_facets_unboundedは「記憶なし」ではなく「範囲を絞って」という合図。- 重い
harness_mem_searchは503を返すことがある。これは daemon を固めないための backpressure であり、検索失敗や記憶欠落ではない。queryを絞る、projectを渡す、limitを下げる、必要ならvector_search=falseで 1 回だけ再試行する。 - それでも
503の場合は、source:に503 backpressureと書き、SSOT (decisions.md/patterns.md) と現在ファイルで回答を続ける。 - project を推定できない場合は、無言で広域検索せず
source:にproject=unknownを明記してから、必要最小限の検索か SSOT 参照に切り替える。
MCP transport 診断メモ
- 新規 Claude Code / Codex setup は local HTTP MCP gateway default。検索 tool が見えない時は、まず
harness-mem doctor --platform codexとharness-mem mcp-gateway statusで client config / gateway / daemon を分けて見る。 - Codex の
url is not supported for stdioは検索品質や daemon の問題ではなく、[mcp_servers.harness]の config 形状衝突。urlとcommand/cwd/args/envが同じ stanza に混在していないかを先に直す。 - stdio に戻す時は
harness-mem mcp-config --transport stdio --client codex --write。memory DB は触らない。
出力フォーマット
必ず次の 3 項目を 1 応答に含める:
source: <引用元の経路名と具体パス / tool>
summary: <1 行要約 (最長 120 字)>
details: <本文、箇条書き可 / 省略可>
source: の例:
source: harness_mem_resume_pack (meta.summary, daemon 37888)source: .claude/memory/decisions.md#D3source: harness_mem_search (project=/path/to/repo, hits=3)source: harness_mem_search (project=unknown, scoped search skipped; fallback=.claude/memory/decisions.md)source: harness_mem_search (project=/path/to/repo, 503 backpressure; fallback=.claude/memory/decisions.md)source: auto-memory point-in-time (2026-04-19 時点)← auto-memory は古い可能性を明示
auto-memory (~/.claude/projects/.../MEMORY.md) を引くときは必ず point-in-time であることを明示する。現役の決定は SSOT (decisions.md) を優先。
実行手順
- intent 分類: 発話を 5 分岐のどれに当てはめるか決める。曖昧なら resume を初期仮説に置く。
- 1 次 routing 呼び出し: 上表の tool を 1 回だけ呼ぶ。
- hit 判定: 空 / error なら次経路に fallback。3 経路試して全滅なら「該当なし」と明示する。
- 出力整形: 上の 3 項目フォーマットを守る。
source:は必ず先頭。 - 補強 (optional): user が「もっと詳しく」と再質問したとき、はじめて 2 次経路 (session_thread / cb_search / graph) に広げる。
呼び出してはいけないケース
- user が実装 / 編集を指示している (例: 「この関数を修正して」) → 通常の Read/Edit フローに戻る
- user が新規の事実を教えている (例: 「X は Y だ」) → memory 記録側の責務、recall ではない
- LSP / semantic 解析が必要な意図 → 既存の LSP/Skills Policy に任せる
関連資料
Plans.md §96— 本 Skill の設計根拠Plans.md §90 / XR-003— SessionStart 自動 resume 注入 (直交する別 feature).claude/memory/decisions.md/.claude/memory/patterns.md— SSOT (recall の第一引き先)scripts/userprompt-inject-policy.sh— 発火補強の注入 hook