セッションプルーニングは、各 LLM 呼び出しの前にコンテキストから古いツール結果をトリムします。通常の会話テキストを書き換えることなく、蓄積されたツール出力(exec 結果、ファイル読み取り、検索結果)によるコンテキスト肥大化を抑えます。
プルーニングはメモリ内のみで行われます — ディスク上のセッショントランスクリプトは変更しません。完全な履歴は常に保持されます。
重要な理由
長いセッションではツール出力が蓄積し、コンテキストウィンドウを膨らませます。これによりコストが増え、必要以上に早く Compaction が必要になる場合があります。
プルーニングは特に Anthropic プロンプトキャッシュで有用です。キャッシュ TTL が期限切れになると、次のリクエストで完全なプロンプトが再キャッシュされます。プルーニングによりキャッシュ書き込みサイズが減り、コストを直接下げられます。
仕組み
プルーニングは cache-ttl モードで実行され、時間チェックとコンテキストサイズチェックの両方で制御されます。
- キャッシュ TTL が期限切れになるまで待ちます(手動設定時のデフォルトは 5 分。Anthropic の自動デフォルトについては スマートデフォルト を参照)。TTL が経過するまでは、近接するターンでプロンプトキャッシュの再利用を維持するため、プルーニングは完全にスキップされます。
- TTL が経過したら、モデルのコンテキストウィンドウに対する総コンテキストサイズを推定します。比率が
softTrimRatio(デフォルト 0.3)未満の場合、プルーニングをスキップし、TTL クロックを動かし続けます。
- 比率を超える過大なツール結果をソフトトリムします。先頭と末尾(デフォルト各 1500 文字、合計 4000 文字上限)を保持し、その間に
... を挿入します。
- 比率がまだ
hardClearRatio(デフォルト 0.5)以上で、プルーニング可能なツール内容が少なくとも minPrunableToolChars(デフォルト 50,000)残っている場合、それらの結果をハードクリアします。内容をプレースホルダー(デフォルト [Old tool result content cleared])に置き換えます。
- プルーニングによって実際にコンテキストが変更された場合にのみ TTL クロックをリセットし、後続リクエストが新しいキャッシュを再利用できるようにします。
しきい値に関係なく、2 つの安全ルールが適用されます。直近の keepLastAssistants 個の assistant ターン(デフォルト 3)はプルーニングされず、セッションの最初の user メッセージより前の内容もプルーニングされません(SOUL.md/USER.md のようなブートストラップ読み取りを保護します)。
対象になるのは toolResult メッセージのみです。通常の会話テキストはそのまま残ります。どのツール名をプルーニング可能にするかは、agents.defaults.contextPruning.tools.{allow,deny} で範囲指定します。
レガシー画像クリーンアップ
OpenClaw は、履歴に生の画像ブロックやプロンプトハイドレーション用メディアマーカーを保持しているセッション向けに、別の冪等なリプレイビューも構築します。
- 直近の完了済み 3 ターンをバイト単位で保持し、最近のフォローアップに対するプロンプトキャッシュプレフィックスを安定させます。この数には、画像を含むターンだけでなくすべての完了済みターンが含まれるため、テキストのみのターンもこの枠を消費します。
- リプレイビューでは、
user または toolResult 履歴にある古い処理済み画像ブロックは [image data removed - already processed by model] に置き換えられます。
[media attached: ...]、[Image: source: ...]、media://inbound/... のような古いテキスト形式のメディア参照は、[media reference removed - already processed by model] に置き換えられます。現在ターンの添付マーカーはそのまま残るため、ビジョンモデルは新しい画像を引き続きハイドレートできます。
- 生のセッショントランスクリプトは書き換えられないため、履歴ビューアは元のメッセージエントリとその画像を引き続きレンダリングできます。
- これは上記の通常の cache-TTL プルーニングとは別のものです。後続ターンで、繰り返される画像ペイロードや古いメディア参照がプロンプトキャッシュを壊すのを防ぐために存在します。
スマートデフォルト
バンドルされた Anthropic Plugin は、Anthropic(または Claude CLI)の認証プロファイルを初めて解決したときに、プルーニングと Heartbeat の頻度を自動設定します。ただし、まだ明示的に設定していないフィールドに限ります。
| 認証モード | contextPruning.mode | contextPruning.ttl | heartbeat.every |
|---|
| OAuth/トークン(Claude CLI 再利用を含む) | cache-ttl | 1h | 1h |
| API キー | cache-ttl | 1h | 30m |
agents.defaults.contextPruning.mode または agents.defaults.heartbeat.every を自分で設定している場合、OpenClaw はそれらを上書きしません。この自動デフォルトは Anthropic 系の認証でのみ発動します。他のプロバイダーは、設定しない限りプルーニングが off になります。
有効化または無効化
非 Anthropic プロバイダーでは、プルーニングはデフォルトでオフです。有効化するには、次のようにします。
{
agents: {
defaults: {
contextPruning: { mode: "cache-ttl", ttl: "5m" },
},
},
}
無効化するには、mode: "off" を設定します。
プルーニングと Compaction
| プルーニング | Compaction |
|---|
| 内容 | ツール結果をトリム | 会話を要約 |
| 保存? | いいえ(リクエストごと) | はい(トランスクリプト内) |
| 範囲 | ツール結果のみ | 会話全体 |
これらは互いに補完します — プルーニングは Compaction サイクルの間、ツール出力を軽量に保ちます。
関連資料