Claude Code の MEMORY.md は 会話開始時に自動でシステムプロンプトに注入されます。便利な機能ですが、運用していると気づきます。
MEMORY.md は止められない。Claude Code 本体の機能だから。
settings.json の hook で止めようとしても無理。代わりに 「自動注入される量を絞る」 という運用設計に切り替えたところ、196行→69行(73%削減)でAIの確証バイアスが大きく改善しました。
発端:MEMORY.md が確証バイアスの温床になった
ある日、AIに過去の似た施策を尋ねたところ、明らかに 古い記憶に引きずられた回答 が返ってきました。
1ユーザー: 新規施策のターゲット市場を再検討したい2AI: 過去のヒアリングログ(2026-04-14)から、化粧品系が最有力ですしかし実際は、その後のヒアリング2件目(2026-04-18)で 食品系の方が刺さる ことが判明していました。MEMORY.md には両方記録されていたのに、AIは古い結論を強く保持していました。
調査すると、MEMORY.md の 目次部分(1行サマリ) が古い結論を強調していました。本文ファイルには新情報があっても、サマリで「化粧品系最有力」と書いてあれば、AIは最初にそれを読みます。
第一の試み:hook で止める → 失敗
「MEMORY.md の自動注入を止めて、必要な時だけ読ませる」と考えました。
1{2 "hooks": {3 "SessionStart": "echo 'skip memory'"4 }5}しかし、Claude Code に SessionStart hook は存在しません。
ドキュメントを掘ると、MEMORY.md の自動注入は 本体機能(システムプロンプトの # auto memory セクション) で行われており、設定で無効化する方法がありませんでした。
Claude Code の MEMORY.md 自動注入は、設定ファイルやhookで制御できない。本体機能だから。
これは重要な発見でした。
第二の試み:明示的な /recall skill → 過剰設計
次に「自動注入をやめて、明示的な /recall skill で読み込ませる」案を考えました。
しかし、これも問題があります。
- ユーザーが毎回
/recallを打つのは現実的でない - AI自身が「いつ recall すべきか」を判断するのは困難
- 結局、自動注入の利便性を失う
過剰設計でした。
第三の試み:自動注入を受け入れて、量を絞る → 成功
「止められないなら、注入される量を最小化する」に切り替えました。具体的には以下のルール。
ルール1: MEMORY.md は索引のみ、本体ファイルに分割
1<!-- MEMORY.md(index only) -->2- [User Profile](user_profile.md) — 47歳エンジニア3- [Project A](project_a.md) — 新規プロジェクト、進行中4- [Feedback X](feedback_x.md) — テストはモックしない各エントリは ~150文字以内 の1行サマリ。本体は別ファイルに置きます。
ルール2: アクティブ判定で自動退避
以下の判定基準で、古いエントリを archive/ に退避してMEMORY.mdから削除します。
- 直近7日以内に更新あり → アクティブ(残す)
- 完了 or 8日以上未更新 → archive 退避
ルール3: 200行 truncate を意識
調査で判明したのですが、MEMORY.md の自動注入は 200行で truncate されます。それ以上書いても読まれません。意図して200行以内に収めるべきです。
実装:196行→69行への圧縮
実際の数字です。
| 指標 | Before | After | 削減率 |
|---|---|---|---|
| MEMORY.md 行数 | 196 | 69 | 65% |
| MEMORY.md ファイルサイズ | 18.2KB | 5.0KB | 73% |
| 索引リンク数 | 155 | 39 | 75% |
削減プロセス
- archive/ ディレクトリを作成:
~/.claude/.../memory/archive/ - mtime ベースで自動退避スクリプトを実装:
Terminal window 1# 8日以上更新がないファイルを archive へ2find . -maxdepth 1 -name "*.md" -mtime +8 -exec mv {} archive/ \; - MEMORY.md の該当行を削除: archive 対象になったエントリは索引からも削除
- 「完了」マーカー導入: 完了済み施策は frontmatter に
status: completedを追加し、即archive対象に
確証バイアスは「自動読込」より「索引肥大」が主因だった
スリム化前後でAIの挙動を比較したところ、興味深い発見がありました。
確証バイアスの主因は、自動注入そのものではなく、索引が肥大して古い結論を目立たせることでした。
- 196行の索引: 「化粧品系最有力」が3行目に書かれている → AI が最初に読む → 強く保持
- 69行の索引: 同じエントリは archive 済 → AI は本体ファイルを読みに行く → 最新情報も統合する
つまり、MEMORY.md は「最新の話題のヘッドライン」 であるべきで、過去の結論を残すべきではありません。
運用ルール3原則
- MEMORY.md は索引のみ:本体は別ファイル
- 8日経過 or 完了 → archive:自動退避
- 200行を上限:超えたら統合・削除
このルールでまわすようになって1週間、確証バイアスを感じる場面はゼロになりました。
副次効果:プロダクト設計への学び
この経験は、開発中のプロダクトのUI設計にも転用できました。
- ダッシュボードの「最新インサイト」枠は7日以内のみ表示
- 過去の分析結果は archive に退避し、検索でのみアクセス可能
- 「ヘッドライン」と「履歴」を構造的に分離
AIの記憶設計の悩みと、人間ダッシュボードのUI設計の悩みは、同じ構造をしています。
まとめ
- Claude Code の MEMORY.md 自動注入は hook では止められない(本体機能)
- 量を絞る運用に切り替え:196行→69行(73%削減)
- 確証バイアスの主因は「自動読込」より「索引肥大」
- 8日経過 or 完了 → archive のルールでまわす
「止められない機能」は止めようとせず、与える情報量を設計する。これが現代AIエージェント運用の基本だと感じます。