Chapter 8

第8章: メモリ階層と圧縮 ── 長時間ループの命綱

あるエンジニアが Claude Code でこう呟いた。

前回の続きやって、って打ったら、Claude が普通に続きを始めた。覚えてるの?」

別のエンジニアは Cursor の Agent モードでこう驚いた。

.cursorrules に書いた癖を、ちゃんと反映してくれる」

さらに別のエンジニアは Codex CLI でこう試した。

「3 時間動かしっぱなしで /compact を 5 回打ったら、まだ動いてる」

LLM 自身は 何も覚えていない。前章で見た通り、机に置いた紙しか見ていない。 それなのに、なぜプロジェクト固有の流儀を「知っている」ことになり、長時間ループでも息切れせずに走り続けられるのか。

答えはひとつ ── ハーネスが 記憶を階層化し、必要なものだけを机の上に並べ直し続けている からだ。 この章では、その階層の正体に踏み込む。

8.1 そもそも、LLM は何も覚えていない

第7章までで何度か触れてきた前提を、もう一度はっきり書いておく。

LLM 自体は記憶を持たない。 「前回の会話を覚えている領域」も「ユーザーの好みを記録する変数」も、モデル本体には一切存在しない。 ChatGPT も Claude Code も Cursor も Devin も、毎ターン過去の会話全部をテキストとして渡し直しているだけ ── そう見せかけているだけだ。

つまり「エージェントに記憶を持たせる」とは、本当は 「ハーネスが何を、どこから、いつ机の上に並べるか」 を設計することに等しい。

前章で見たように、机(コンテキストウィンドウ)には物理的な上限がある。 だから記憶は 机の上にすべて積むわけにはいかない。必要なものを、必要なタイミングで、必要な分だけ並べ直す ── そのための仕組みが「メモリ階層」だ。

8.2 四つの層 ── 寿命と置き場所で分ける

現代のコーディングエージェントの記憶は、寿命と置き場所でだいたい 四つの層 に分かれる。

寿命置き場所共有範囲
システムプロンプトエージェントのバージョン中ずっとハーネス本体にハードコードプロダクトのユーザー全員
プロジェクトメモリリポジトリが残るかぎりCLAUDE.md / AGENTS.md / .cursorrulesgit で他人と共有
セッションメモリセッションを閉じると消える机の上 (コンテキストウィンドウ)そのセッションだけ
スクラッチパッド (外部記憶)ファイルが残るかぎり任意の Markdown ファイル、Notepad MCP 等設計次第

イメージ図にすると、こうなる。

システムプロンプトハーネス内蔵数千〜1万 tokプロジェクトメモリCLAUDE.md / AGENTS.md.cursorrules 等セッションメモリ机の上(コンテキストウィンドウ)スクラッチパッド外部ファイル毎ターンの入力テキスト(机の上)ハーネスが必要な層を選んで並べるLLM続きを書く必要時のみ道具で読み出す
図 8.1 — 記憶の四層。上の三つは毎ターン机に並ぶ常駐層、スクラッチパッドは必要なときだけ道具経由で参照する一時記憶。

順に見ていく。

8.3 システムプロンプト ── ハーネスに焼き付いた憲法

一番上の層は システムプロンプト。各プロダクトのハーネス本体に焼き付いている「あなたは Claude Code です」「あなたは Cursor の Composer です」といった根本指示文だ。

プロダクトシステムプロンプトの位置づけ
Claude CodeAnthropic がハーネスに同梱。ユーザーは直接書き換えない
CursorCursor 社がハーネスに同梱
Codex CLIOpenAI / コミュニティ実装に同梱
DevinCognition 社がハーネスに同梱
Aider / OpenHandsOSS なのでソース上で確認・改変可能

ユーザーが触りにくい代わりに、プロダクト固有の「らしさ」 はここから滲み出る。Claude Code がやけにテスト駆動っぽく動くのも、Devin が PR をやけに丁寧に立てるのも、ほとんどはこの層に書き込まれた指示文の差で説明がつく。

8.4 プロジェクトメモリ ── リポジトリに住む引き継ぎ書

二つ目の層が、本書で最も実務寄りの話 ── プロジェクトメモリ だ。

各プロダクトには、リポジトリのルートに置く Markdown / テキストファイル という共通の慣習がある。名前は違うが、役割は驚くほど揃っている。

プロダクトプロジェクトメモリのファイル名
Claude CodeCLAUDE.md / AGENTS.md
Cursor.cursorrules / .cursor/rules/*.mdc
Codex CLIAGENTS.md
Cline / Continue.clinerules / .continuerules
AiderCONVENTIONS.md
OpenHands.openhands_instructions
プロジェクトメモリ

リポジトリのルート(またはサブディレクトリ)に置く、エージェント宛の Markdown / テキストファイル。 ハーネスは起動時にこれを読み込み、システムプロンプトの末尾に差し込む か、最初のユーザーメッセージとして注入する。 git で他人と共有されるので、チーム全員のエージェントの挙動が揃う

中身として書くのは、プロダクトを問わずだいたい同じだ。

2026 年時点では、AGENTS.mdエージェント横断の事実上の標準 になりつつある。Claude Code も Codex CLI も他のエージェントも、両方を読む実装が一般的だ。

プロジェクトメモリは “リポジトリに同梱された、エージェントへの引き継ぎ書” だ。 git で版管理され、PR でレビューされ、main に取り込まれた瞬間、チーム全員のエージェントの挙動が揃う。 プロダクト名は違っても、この発想はプロダクト横断で共通している。

8.5 セッションメモリ ── 机の上の会話履歴

三つ目の層は セッションメモリ ── 第7章で「机」と呼んでいた、その本体だ。

ユーザーが入力した質問、LLM の応答、ツール呼び出しの引数と戻り値 ── これらが時系列に机の上に積み上がっていく。濃いけど短命 という性質を持つ。

ここで自然に出てくる疑問がある。

机が満杯になってきたとき、ハーネスは具体的に何をしているのか?

答えは大きく二つに分かれる ── 捨てる か、畳む か、だ。

/clear ── 机を全部リセットする

/clear机の上を一気に綺麗にする 操作。 新しい話題に移るとき、あるいは context rot で挙動が雑になってきたとき、机を全消去して仕切り直す。

「ファイルを直す」「テストを走らせる」など、文脈の連続性が必要な作業の途中で /clear を打つと、エージェントは振り出しに戻る。話題が切り替わるとき に限って使うのが鉄則だ。

/compact ── 机の上を畳んで小さくする

一方の /compactこれまでの会話を要約して、机を整理する 操作。

圧縮 (compaction)

これまでのセッションメモリを LLM に要約させ、要約だけを残して詳細な履歴を捨てる操作。 作業文脈は保ったまま、机のサイズだけ小さくなる のが特徴。 Claude Code の /compact、Cursor の自動要約、Codex CLI の /summarize など、各プロダクトに同等の機能がある。

イメージはこうだ。

圧縮前: [system] [user] [Read結果 5,000tok] [Bash結果 8,000tok]
         [Edit結果] [Read結果] [Bash結果] ...  ← 机ぎっしり
圧縮後: [system] [要約: これまでに parser.ts のバグ
         3 つを修正し、テスト 2 つが緑、残り 1 つが赤 ...]
         ← 机がすっきり、作業文脈は保たれる
操作何が残るか何が消えるかいつ使うか
/clearシステムプロンプト + プロジェクトメモリだけ会話履歴 全部話題が切り替わるとき
/compact要約された作業文脈詳細な履歴・ツール出力同じ作業を続けたいが机が重いとき

/clear は離婚、/compact は引っ越し。 前者は関係そのものを終わらせる。後者は持ち物を整理して、新しい小さな部屋で関係を続ける。 長時間タスクの命綱になるのは圧倒的に後者だ。

8.6 スクラッチパッド ── 机の外に置く外部記憶

四層目の スクラッチパッド は、最近のエージェント運用で急速に重要度が増している層だ。

発想はシンプルで、「机に乗せきれない情報を、ファイルに書き出して、必要なときだけ道具で読み戻す」 というもの。 ハーネスや LLM 自体が記憶を持つのではなく、ファイルシステム自体を外部記憶として使う

具体的な姿はこういう形を取る。

スクラッチパッド (外部記憶)

机(コンテキストウィンドウ)の外に情報を書き出し、必要時に道具で読み戻す仕組み。 書き出したテキストは机の上から消えるので、机を圧迫しない。 「巨大な調査結果は要約だけ机に置き、本体はファイルに残す」「計画は再起動後も読み戻せるよう外部に書く」など、長時間タスクの肝になる発想。

スクラッチパッドの何が偉いかというと、机のサイズと記憶の量を完全に切り離せる ことだ。

これは人間が手帳やドキュメントに頼るのと、原理的に同じ構造をしている。

8.7 長時間ループという新しい地平

ここまでの四層を理解すると、長時間ループ という、近年急に現実味を帯びてきた話題が読めるようになる。

長時間ループ

1 つのタスクで、エージェントが 数時間〜数日にわたって走り続ける 運用形態。 Devin の「数日かけてリポジトリを書き換える」、Claude Code を起動しっぱなしで一晩動かす、サブエージェントを並列に何十も走らせる ── などが典型例。短時間の対話型エージェントとは桁が違うタイムスケールで動く。

長時間ループでは、机が満杯になる頻度がぐっと上がる。ハーネスは次のような延命技術を組み合わせて使う。

技術何をするか
自動 /compact机が一定割合埋まったら、ハーネスが自動で圧縮を発火する
チェックポイント書き出し重要な進捗をスクラッチパッドに定期的に保存し、再起動に備える
サブエージェント分割重い調査を別の机(別ループ)にやらせ、結果だけ受け取る(第9章で詳述)
メモリ tool / 永続ストア長期で再利用したい知見を、セッションを越えてファイルに残す

長時間ループの命綱は、机そのものを広げることではなく、机の外を上手に使うことだ。 机を広げる(コンテキストウィンドウを増やす)には LLM 側の進化が必要だが、机の外を使う技術は、ハーネス側だけで今すぐ進化させられる。 だから 2026 年現在、エージェント勢力争いの主戦場のひとつが メモリ階層と圧縮の設計 になっている。

8.8 図解 ── 階層と読み込みタイミング

最後にもう一度、四層がいつ机の上に並ぶかを整理しておく。

タイミング並ぶもの
エージェント起動時システムプロンプト + プロジェクトメモリ(毎ターンの先頭に常駐)
ユーザーがターンを打つセッションメモリに新しいユーザーメッセージが追加
LLM が Read/Bash を呼ぶツール結果がセッションメモリに追加
LLM がスクラッチパッドを Read する必要な分だけ、外部記憶の一部がセッションメモリに転写
/compact 発火セッションメモリが要約に置き換わる
/clear 発火セッションメモリがリセット(システム + プロジェクトは残る)

私が長時間ループを回すときに守っているのは、3 つだけだ。

  1. プロジェクトメモリは “新人への引き継ぎ書” として書く ── 命令ではなく文脈と理由を書く
  2. /compact を惜しまない ── 机が重くなったら畳む。判断が鈍ってから畳むのは遅い
  3. 重要な進捗はスクラッチパッドに必ず書き出す ── ハーネスが落ちても再開できる状態を作る

この三つだけで、Claude Code でも Cursor でも Codex CLI でも、長時間ループの安定性が体感で 2 倍くらい変わる。 プロダクト固有のテクニックよりも、四層モデルの上でどう振る舞うか のほうがずっと効く。

8.9 この章の振り返り

この章で読めるようになるツイート / ブログ

次章は、いよいよ 計画とサブエージェント に踏み込む。 ひとつの机では捌けない仕事を、複数の机に分割する という発想 ── それが、長時間ループのもう一つの命綱となる。 本章で残した「机の分割」という宿題は、次章で正面から扱う。