圧縮されたセッションが記憶喪失のように感じられる理由
Anthropicはこのプロセスを濁さずに説明しています。Claude Codeは「まず古いツールの出力をクリアし、必要に応じて会話を要約します。リクエストと主要なコードスニペットは保持されますが、会話の初期の詳細な指示は失われる可能性があります。」
この最後の文こそが、体験のすべてを物語っています。要約は特定の方向に対して情報が失われます。何が起こったかの大枠は保持されますが、初期に発言した内容の正確さは失われます。3分目に一度だけ述べた制約は、まさに要約によって圧縮されるような詳細であり、何が消えたかを知らせる通知はありません。
しかし、すべての情報が要約プログラムを通るわけではありません。Anthropicは、圧縮後に各コンテンツがどうなるかをメカニズムごとにまとめた表を公開しています。興味深いのは、要約に一切触れないカラムです。
システムプロンプトと出力スタイル:「両方とも引き続き適用されます。」 プロジェクトルートの CLAUDE.md とスコープ指定のないルール:「ディスクから再注入されます。」 自動記憶(Auto memory):「ディスクから再注入されます。」 Claudeがプランモードで作成したプラン:「ディスクから再注入されます。」 paths: フロントマターを持つルール:「Claude Codeが、それらにマッチするファイルを読み込む際に再ロードします。」 サブディレクトリ内のネストされた CLAUDE.md ファイル:「Claude Codeが、そのサブディレクトリ内のファイルを読み込む際に再ロードします。」 Claudeが読み込んだ、または編集したファイル:「Claude Codeは、最近変更されたものを優先して最大5つまで再読み込みします。」
このリストを設計指示書として読んでください。なぜなら、実際にそうだからです。ディスク上にあるものはすべて戻ってきます。会話に入力しただけで存在するものはすべて要約されます。Anthropicは数行前で、自らの言葉で結論を述べています。「会話の履歴に頼るのではなく、永続的なルールは CLAUDE.md に記述してください。」
これは、長いコンテキストが記憶(memory)と同じではない理由に対する誠実な回答でもあります。このポイントはこのツールだけに留まらず、why a long context window is not a memory で詳しく説明しています。
代わりに試されがちなこと
圧縮される前に新しいセッションを開始する。 これは機能しますが、残したくない部分と一緒に、残しておきたかった会話の部分まで捨ててしまいます。また、問題が次のセッションに先送りされるだけで、次のセッションは何もない状態で始まります。これは sharing context between Claude Code sessions の背景にあるコンテキスト共有の調整問題です。
自動圧縮をオフにする。 このオプションは利用可能ですが、その結果はドキュメントに記載されています。「自動圧縮をオフにすると、セッションは圧縮されずに、200Kの境界でコンテキスト制限エラー(context-limit error)が発生して停止します。」 限界を回避したわけではなく、情報が失われる要約を強制停止に置き換えただけです。
ウィンドウを可能な限り高く設定する。 これもドキュメント化されており、制限があります。「自動圧縮ウィンドウを200K以上に設定しても制限は解除されません。Claude Codeはそのウィンドウをモデルのコンテキストウィンドウで制限するためです。」 ウィンドウは実際の限界値の一部であり、それを超える方法ではありません。
デフォルトが単一の数値であると仮定する。 これはモデルや環境に依存します。Anthropicの基準では、設定がない場合、「会話がモデルのコンテキスト制限に達したときに Claude Code が圧縮を行います」となっています。ただし、クラウドセッション、200Kの境界で圧縮されるいくつかのモデル、およびネイティブで1Mのウィンドウを持つモデル(「デフォルトではウィンドウが満たされる前、約967Kトークンで圧縮されます」)などの例外があります。
やみくもに /compact を実行する。 何もしないよりはマシですが、フォーカス(focus)を指定する方がはるかに優れています。これはほとんどの人が気づかないコントロールです。
圧縮のたびに制約を再度貼り付ける。 これは本当の解決策を浮き彫りにする回避策です。要約の後にルールを再表明する必要があるなら、それはディスク上に置くべきだったということです。人々がスクロールして戻り続けるコマンド履歴についても同じ直感が当てはまります。これについては why Claude Code loses your earlier commands で考察しました。
解決策:トリガーを意図的に設定し、要約プログラムに重要なことを伝える
2つのコントロールを、以下の順序で使用します。
ステップ 1: 生き残るべきルールは会話ではなくディスクに置く
これは最も効果的で、コストもかからないステップです。プロジェクトルートの CLAUDE.md やスコープ指定のないルールにあるものはすべて、圧縮後にディスクから再注入されます。自動記憶(Auto memory)もディスクから再注入されます。プランモードで作成されたプランもディスクから再注入されます。パススコープのルールは、Claudeがマッチするファイルを読み込むときに再ロードされ、ネストされた CLAUDE.md ファイルは、Claudeがそのサブディレクトリ内のファイルを読み込むときに再ロードされます。
したがって、実践的なルールは次のようになります。セッション中に同じことを2回言っている自分に気づいたら、それはメッセージではなく CLAUDE.md の1行にするべきです。これにより、要約によって圧縮される可能性のあるものから、毎回そのまま再ロードされるものへと変換されます。
次に、要約プログラムに直接指示を出すコントロールを追加します。Anthropicは次のように述べています。「圧縮中に保持される内容を制御するには、CLAUDE.md に『Compact Instructions』セクションを追加するか、フォーカスを指定して /compact を実行します(例:/compact focus on the API changes)。」 「Compact Instructions」セクションは、そのプロジェクトにおける今後のすべての圧縮に対する常設の指示書(ブリーフ)となります。残すべきものを指定する3〜4行を一度書くだけです。
ステップ 2: どの設定が優先されるかを理解した上で、ウィンドウを設定する場所を選択する
Anthropicは3つの場所をドキュメント化しており、それらの間の優先順位は明確です。
このセッションおよび今後のセッションについては、値を指定して /autocompact を実行します。Claude Codeは「それをユーザー設定に autoCompactWindow として保存し、現在のセッションに適用します」。ただし、デバッグ前に知っておくべき注意点があります。「マネージド設定などのより優先度の高い設定スコープがそのキーを設定している場合、コマンドは値を保存しますが、セッションはそのスコープのウィンドウを維持し、コマンドはその旨を報告します。」 /autocompact auto を実行すると、「モデルに合わせて調整されたウィンドウ」に戻ります。
1回の起動のみ適用する場合は、--autocompact フラグを渡します。これは「その起動において、保存された設定を変更せずにオーバーライドします」。このフラグには、コマンドにはない特性があります。「/autocompact とは異なり、このフラグはマネージド設定などのより優先度の高い設定スコープによって割り込まれることはありません。」
スクリプトやクラウド環境の場合は、CLAUDE_CODE_AUTO_COMPACT_WINDOW 環境変数を設定します。これはすべての上に位置します。「これが設定されている間は、コマンド、フラグ、設定よりも優先され、/autocompact はウィンドウを変更する代わりにオーバーライドを報告します。」
3つのレバー、1つの順序:環境変数 > フラグ > コマンド > 保存された設定。マネージド設定はコマンドを割り込めますが、フラグは割り込めません。ウィンドウが設定通りにならない場合、このリストがデバッグの手順になります。
ステップ 3: ウィンドウが問題ではないことを示すエラーメッセージを認識する
1つのメッセージは、人々を誤ったコントロールに導いてしまうため、独自のステップを設ける価値があります。Anthropicは次のように述べています。「Autocompact is thrashing: the context refilled to the limit... というメッセージが表示された場合、自動圧縮は成功したものの、ファイルやツールの出力によって直後にコンテキストウィンドウが数回連続で上限まで再充填されました。Claude Codeは、進捗のないループでAPIコールを無駄にすることを避けるため、再試行を停止します。」
スラッシング(Thrashing)は、圧縮が機能した直後に、何か巨大なものが再び入り込んできたことを意味します。ウィンドウを広げても解決しません。解決策は再充填を止めることです。Anthropic自身の提案は、問題の出力を除外するフォーカスを指定した圧縮です。「問題のある大きな出力を除外するフォーカスを指定して /compact を実行します。例えば、/compact keep only the plan and the diff などです。」
認識しておくべき関連メッセージもあります。/compact が「Not enough messages to compact.」を返した場合、会話の「ターン数が少なすぎて要約できません。これは、1回の大きな貼り付けによってコンテキストがいっぱいになった場合、コンテキストが満杯であっても発生する可能性があります。」 同じ診断、異なる症状です。問題はウィンドウではなく、1つのオブジェクトです。
MemoryLakeでの設定方法
上記のすべてのステップは、事実を会話からより永続的なものへと移動させます。そして CLAUDE.md が永続的であるのは、1つのマシンの1つのリポジトリの範囲内に限られます。MemoryLakeは、セッションから独立し、接続するすべてのAIアシスタントから読み取り可能な、より長期的な事実を自身で書き込むストアです。エントリーはあなた自身の言葉で書き込みます。Anthropicのシステムや他のベンダーのストアから何かが読み取られたり、書き込まれたり、削除されたりすることはありません。セッション、トランスクリプト、ルールファイルは完全に Claude Code 自身の制御下に置かれたままです。
ステップ 1: APIキーを作成する
ダッシュボードからキーを生成します。これにより、このセッション、次の圧縮後のセッション、そして別のリポジトリでのセッションが、同じ事実のセットにアクセスできるようになります。

ステップ 2: 最初の記憶をアップロードする
圧縮後に再表明したことから始めましょう。制約、決定とその理由、すでに除外されたアプローチなどです。通常、12個ほどの短いエントリーでプロジェクトをカバーできます。これらは物語としてではなく、日付付きの記述として書いてください。

ステップ 3: AIとエージェントを接続する
Claude Codeをこのレイヤーに向けることで、要約を生き残らせるのではなく、セッションの開始時にそれらの事実がロードされるようにします。そして、効果を証明する方法でテストします。意図的にセッションを圧縮し、事実の1つを尋ねてみてください。もし回答できれば、圧縮は「何を保持するか」を決定する要因ではなくなっています。

実践においてこれがもたらす変化
最初の変化は、圧縮がランダムに感じられなくなることです。確認して設定できるウィンドウで実行され、ファイルを再注入しながら会話を要約し、スラッシングが発生しているときにはそれを教えてくれます。これらは3つの異なる挙動であり、3つの異なる対応策があります。
2つ目は、CLAUDE.md が正しく使用されるようになることです。再注入の表が目の前にあれば、このファイルはプロジェクトの雑多な情報を置く場所ではなく、「要約を生き残るべきもの」に対する答えとなり、Compact Instructionsセクションが要約プログラムへの直接のチャネルになります。
3つ目は、長いセッションが再び実用的になることです。1時間ごとに新しくやり直したいという衝動は、圧縮を信用していないことから生じます。圧縮を制御することは、それを避けるよりも安価であり、新しいセッションが捨ててしまう連続性を維持できます。分割が本当に正しい選択である場合、それは異なる継承ルールを持つ異なる操作になります。これについては what a forked Claude Code session carries で説明しています。
4つ目は、エラーメッセージが有用になることです。スラッシングや「Not enough messages to compact」は、設定ではなく1つのサイズ超過オブジェクトを指し示しており、それを知ることで、間違った数値を調整して午後を無駄にすることを防げます。圧縮パスで何をドロップすることを許可すべきかというより広い問題については、別のツールを対象に deciding what survives a compaction で取り上げました。
Claude Codeの圧縮におけるベストプラクティス
2回言ったら、書き留める。 セッション内で再表明する内容はすべて CLAUDE.md に記述します。そこにあれば、要約されるのではなくディスクから再注入されます。
プロジェクトごとに Compact Instructions セクションを追加する。 これはフォーカスを指定した /compact の常設版であり、今後のすべての圧縮に適用されます。
調整する前に優先順位を把握する。 環境変数、起動フラグ、コマンド、保存された設定の順であり、マネージド設定はコマンドを割り込めます。
/autocompact auto を使用して正常な状態に戻す。 自分で選んだ一時的な数値ではなく、モデルに合わせて調整されたウィンドウにセッションを戻します。
スラッシングはコンテンツの問題として扱う。 圧縮は成功しています。何か大きなものがウィンドウを再充填しました。フォーカスを指定した圧縮でそのオブジェクトをドロップしてください。
セッションをまたぐ事実はリポジトリの外に保持する。 CLAUDE.md はプロジェクト内での圧縮を生き残りますが、他のプロジェクトや他のツールには移動しません。
結論
Claude Codeの自動圧縮(auto-compact)には2つのダイヤルがありますが、ほとんどの人はどちらも使用していません。トリガーとなるのは自動圧縮ウィンドウであり、/autocompact、--autocompact フラグ、または CLAUDE_CODE_AUTO_COMPACT_WINDOW を介して設定可能で、それらの間にはドキュメント化された優先順位があり、モデル自身のコンテキストウィンドウで制限されます。コンテンツは、ディスク上に存在する内容(プロジェクトルール、自動記憶、プランモードのプラン、パススコープのルールはすべて再注入されます)と、Compact Instructionsセクションまたはフォーカスを指定した /compact によって形成されます。
何が失われるかは Anthropic によって明確に述べられています。リクエストと主要なコードスニペットは保持され、「会話の初期の詳細な指示は失われる可能性があります。」 これは要約の性質であり、欠陥ではありません。ベンダー自身の「会話の履歴に頼るのではなく、永続的なルールはファイルに記述してください」というアドバイスが正しいアプローチです。
その先へのステップは小さく、踏み出す価値があります。ファイルは1つのプロジェクト内での圧縮を生き残ります。次の四半期にも、別のリポジトリで、別のアシスタントを使って実行し続ける決定は、セッションの境界が一切届かない場所に置かれるべきです。