Claude Code v2.1.299 — 放置した長い会話をキャッシュ切れ前に自動で圧縮
Claude Code v2.1.299は、対話型ターミナルで200Kトークン超の会話を放置すると約54分後に自動圧縮します。@ファイルメンションをパスだけにする環境変数、MCP許可ルールの厳密化も入りました。
このリリースで何ができるようになるか
Claude Code v2.1.299は、追加が18項目、修正・改善・変更が150項目超という大きな更新です。日々の使い方に響くのは次の3つです。
- 放置した長い会話が先に圧縮される: 200Kトークン以上の会話を約54分放っておくと、1時間のプロンプトキャッシュが切れる前に自動で圧縮されます。戻ってきて送る最初のメッセージで、会話全体の再処理が起きません
@で指したファイルを、中身でなくパスだけ渡せる:CLAUDE_CODE_DISABLE_FILE_MENTIONSを設定すると、Claudeはパスを受け取り、読むかどうかをファイルツールで決めます- MCPの許可ルールが、書いた名前のサーバーだけに効く:
mcp__aと書いても、a__bやa_という名前のサーバーは許可されなくなります
ほかに、サンドボックスの書き込み範囲の穴、ゲートウェイ用のAPIキーがAnthropic宛てのリクエストに付いていた不具合、Shift-JISファイルの上書きなど、見落とすと困る修正も多く入っています。
あなたの開発フローはどう変わるか
長い会話を昼休みやミーティングの間に置いておく場合
放置した会話の次の1通は、これまで会話全体を読み直させていました。プロンプトキャッシュの有効期間が切れていると、キャッシュなしで全文を処理し直すためです。
idle compaction(アイドル圧縮)は、その手前で要約に置き換えます。設定ファイルの idleCompaction の説明では、条件は次の5つです。
| 条件 | 内容 |
|---|---|
| セッション | 内容対話型のターミナルセッション |
| キャッシュ | 内容1時間のプロンプトキャッシュTTLを使っている会話 |
| フラグ | 内容Anthropicから機能フラグを取得できる |
| サイズ | 内容コンテキストがしきい値(既定200,000トークン)に達している |
| 放置時間 | 内容最後のリクエストから約54分が経ち、その時点でコンピューターが起きている |
圧縮されると、戻ったときに Compacted while idle, before the prompt cache expired と表示されます。条件の1つが対話型のターミナルセッションなので、IDE拡張やヘッドレス実行(-p)など、それ以外は対象外です。
しきい値と無効化は、次のように書きます。しきい値の下限は100,000トークンで、それより小さい値は100,000に引き上げられます。
{
"env": {
"CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "150000"
}
}{
"idleCompaction": false
}圧縮は要約への置き換えなので、細かい出力や過去のやり取りは薄れます。復帰後に細部を引き継ぎたい会話では、idleCompaction: false が選択肢になります。自動圧縮そのものを切る DISABLE_AUTO_COMPACT は、idle compactionも一緒に止めます。
設定リファレンスと環境変数の一覧には、設定キーと環境変数の対象が「v2.1.290以降」と書かれています。更新履歴はidle compactionをv2.1.299の「追加」に載せています。v2.1.290より前のバージョンはこのキーを無視するため、止めたいときは autoCompactEnabled をオフにします。自動圧縮をオフにすると、idle compactionも止まります。
長いセッションのコストが気になる場合は、長いセッションでコストが増える仕組みにキャッシュの考え方があります。圧縮そのものの詰まりはauto compactが100%で止まるときが手がかりになります。
@ でPDFや機微なファイルを指す場合
CLAUDE_CODE_DISABLE_FILE_MENTIONS を設定すると、@ で指したファイルの中身は会話に入りません。Claudeに渡るのはパスだけで、必要なら自分でReadなどのファイルツールを呼びます。環境変数の一覧ページには、この変数の行がありません。挙動の説明は更新履歴の1文に限られます。
PDFを @ で指す場合は、別の改善もあります。PDFのバイト列がセッションのトランスクリプトに残らなくなり、メモリとディスクの使用量が減ります。
managed settingsを配る管理者の場合
forceLoginOrgUUIDとforceLoginMethodが、サーバー管理設定に隠されたり置き換えられたりしなくなりましたforceLoginOrgUUIDを持つ環境で、保存済みログインのプランをローカルで書き換えると、managed settingsと組織ポリシーが取得されなくなる不具合が直りました- managedの権限ルール、managed hook、組織のMCPツール名を、ユーザーが入れたmodが回避しにくくなりました
- Windowsでは、シェルを指定しないPreToolUse・PermissionRequest hookが、Git for Windowsの未導入時に素通しになっていました。今後は失敗したガードが呼び出しを止めます
modそのものを止める設定はallowManagedModsOnlyで扱っています。
MCPサーバーの許可・拒否ルールを書いている場合
許可ルールは、サーバーの正規化後の名前全体に一致したものだけに効きます。mcp__a は、a__b や a_ という名前のサーバーを許可しません。名前に __ を含むサーバーは mcp__<サーバー名全体>__* と書きます。
エージェントの tools: リストも同じです。名前に __ を含むサーバーを列挙するときは、mcp__<サーバー名全体>__* の形に直してください。逆に、mcp__<server> の拒否・確認ルールが、名前に __ を含むサーバーに効かなかった不具合は直りました。
名前が constructor や prototype のMCPサーバーが接続されない問題、constructor や toString のサーバーが自動モードで毎回許可を求める問題も直っています。
第三者ゲートウェイや自前のプロキシを挟んでいる場合
- 機能フラグ、起動、fast mode、プロフィール、フィードバックの各リクエストが、ゲートウェイ用に設定したAPIキーをAnthropic宛てに付けていました。今後は付けません。Anthropic自身のAPIキーは従来どおり送られます
- managed settingsのファイルが
ANTHROPIC_BASE_URLを設定している場合の、サーバー管理設定のリクエストも同じ修正です - ゲートウェイ固有のモデル名を使うセッションが、200K付近で
Prompt is too long · automatic compaction failedになり、リクエストを送らず終わる不具合を直しました - データが届かないストリームを中断するまでの待ちが、180秒から300秒に延びました
claude.aiのコネクタプロキシとAnthropic提供のMCPサーバーへのリクエストは、HTTPリダイレクトを追わなくなりました。コネクタ自身のサーバーが返すリダイレクトは対象外です。
日本語ファイルを扱う場合
Writeツールが、Windows-1252、Shift-JIS、GBK、UTF-16BEのファイルをUTF-8へ変換したり、BOMを落としたりしていました(エラーは出ませんでした)。今後は書き込みを拒否します。BOM付きUTF-16LEをReadが文字化けさせる不具合も直りました。v2.1.296では、EditとNotebookEditに同じ種類の拒否が入っていました。今回は、その対象がWriteとReadに広がった形です。
端末側では、CJKや絵文字とラテン文字が混ざる折り返しで最後の行が消える、幅1セルの列でCJKの下に空行ができる、といった表示の不具合が複数直りました。
主な変更点
追加
| 変更 | 内容 |
|---|---|
CLAUDE_CODE_DISABLE_FILE_MENTIONS | 内容@ のファイルメンションを、中身でなくパスだけにする |
| idle compaction | 内容200K超の会話を約54分の放置後、キャッシュ失効前に圧縮 |
CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS と idleCompaction | 内容しきい値の変更と無効化。どちらもv2.1.290以降 |
--shutdown-drain-sec | 内容claude self-hosted-runner orchestrator で、SIGTERM後に実行中の処理の完了を待つ秒数 |
--disallow-tools と disallowed_tools | 内容claude plugin eval の実行から、Agentなど特定の組み込みツールを外す |
agent viewの /effort と /fast | 内容新規セッションの開始値を指定。引数なしの /model /effort /fast はピッカーを開く |
/usage の警告 | 内容max effort、ワークフロー、常時オンのコンテキスト、大きなツール結果について表示 |
| plan modeの一回限りの注記 | 内容bypass permissionsが使える環境で、plan modeが編集やコマンドの前に確認しないことを知らせる |
CLAUDE_CODE_ATTRIBUTION_HEADER=0 | 内容Claude Desktop Codeタブのattribution blockを、code ポリシーの env で切る |
plan modeの注記は、権限モードのドキュメントの記述と対応します。bypass permissionsが使える対話型ターミナルでは、plan modeのブロックが強制されません。Claudeは計画だけを指示されますが、試みた編集やコマンドは確認なしに走ります。ただし、明示的なaskルールに当たるものと、重要なパスを狙うrm・rmdirには確認が残ります。plan modeを安全柵として使っている場合は、先にこの前提を確かめる価値があります。
/usage の修正も入りました。/usage、上限接近の警告、ステータスラインが100%を超えて表示される不具合が直っています。
modとプラグイン
- 管理設定で入れたmodの
prompt.submithookが、$.prompt.mediaで添付画像・文書のバイト列を読めます - 同じmodは
$.session.identity()で、サインインの方法を取れます。組織とメールアドレスは、managedのforceLoginOrgUUIDがその組織を挙げているときに限られます Textにsize、weight、mono、tabular、Boxにxsからxlの余白が加わりました。boldはweightに置き換えられ、非推奨ですskill.prompthookが、スキルのfrontmatter、出所、プラグイン名、ファイルパスを受け取りますsession.appendhookにqueueが加わり、トランスクリプトのキュー記録を送信したプロンプトと変えられますturn.starthookが、サブエージェントとteammateのターンも受け取ります。区別はe.agentIdで、メインのループでは付きませんagent.spawnhookが、終わったサブエージェントや止めたteammateの再開でも動きます。イベントにresumeが付き、modは拒否できますclaude plugin testでは、ui.renderの木のルートにpart: { plugin }が付きます。完全一致の検証は、これを含める必要があります- リモートで無効にされたmodが、開いているセッションで動き続けていた不具合を直しました。ターンの合間に外れます
- ユーザーのmodが
$.env.setで、managed settingsのcommand hookの環境やシェル接頭辞を変えられた問題も直りました
prompt.submit の書き換えと停止はmodのprompt.submitにまとめています。
フックと権限
UserPromptSubmithookは、スキルやカスタムスラッシュコマンドが展開される前に動きます。プロンプトを止めるhookは、展開されるはずだった埋め込みシェルも止めます- スキルのfrontmatterに書いた
UserPromptSubmithookは、スキルを呼んだプロンプトの次から効きます PreToolUsehookか、modのtool.checkが許可した書き込みが、plan modeで実行されていた不具合を直しました- プラグインhookやワークフローのスクリプトは、28,000段より深い入れ子の戻り値を、上限を示すエラーで拒否します
- ブロックできる操作を扱うhookが、入力を渡せない、または答えを返せないときは、素通しでなく拒否されます。実行済みのツールは、結果が伏せられます
- shellの
-cスクリプトに対するrmの確認が減りました。実行時に組み立てられ、Claude Codeが読めないスクリプトのrmは、CLAUDE_CODE_STRICT_INLINE_SHELL_RM_PROMPT=1を設定しない限り確認を求めません
サンドボックス
- サンドボックス内のコマンドが、
--plugin-dirのフォルダーに書き込めました。そのコードはサンドボックスの外で読み込まれ、実行されます。この経路が塞がれました - macOSで、拒否したパスがシンボリックリンクを通る場合に、実際の場所を使って読み書きできた不具合を直しました
denyReadとallowReadのグロブで、フォルダー名に波括弧、丸括弧、バックスラッシュがあると、設定チェックとサンドボックスで解釈がずれていましたallowReadとallowWriteのグロブは、起点のディレクトリがシンボリックリンクに置き換わったときに再検査されます- WSL2で、Windowsドライブに書けるとき
bwrap: Can't mkdir /mnt/c/Program Files/ClaudeCodeで失敗する不具合を直しました - 空の
.config.jsonがLinuxで残り、サインインやMCP、プロジェクトの信頼が消えたように見える問題も直っています
WSL2のサンドボックスはbind失敗の確認手順に症状別の切り分けがあります。
MCP
- 空の
.mcp.jsonをclaude mcp list、claude doctor、/statusが不正と報告しなくなりました - 通知への返信の本文を閉じないHTTPサーバーで、接続が30秒ハングして失敗する不具合を直しました
- 方針チェックに止められるサーバーを、
claude mcp listやclaude mcp get、サブエージェントのMCPが起動していました。今後は起動せず、blockedと表示します - OAuthのサインイン、トークン更新、サインアウトが、設定した
headersとheadersHelperを送らず、認証プロキシ越しのサーバーが壊れていた問題を直しました - クラウドセッションとRemote ControlのMCPコネクタは、MCPプロトコル2026-07-28を既定で交渉します。機能フラグを取得しない環境が対象で、
MCP_PROTOCOL_NEGOTIATION=legacyで戻せます api.anthropic.comにあるAnthropic提供のMCPサーバーの説明文と指示が、4,096文字で切られず、全文でClaudeに届きます
プロトコル交渉の変数はMCP_PROTOCOL_NEGOTIATIONとはで扱っています。
クラウドセッション・Remote Control・自己ホスト型ランナー
- v2.1.296で入った回帰が2つ直りました。1つは、承認済みのツール呼び出しが、再起動後の再開と新着メッセージが重なると二重に走る不具合です。もう1つは、EditとRetryが、
UserPromptSubmithookの実行中に止めたメッセージで失敗する不具合です - Remote Controlで、30から35 MiBのファイルが届かない問題、長時間のセッションでファイルが届かない問題、写真のコピーに失敗するとClaudeにも写真が渡らない問題を直しました
- 通信できないコンピューターのRemote Controlセッションは、メッセージを送ったように見せず、入力を残し、再接続まで送信を無効にします
- 自己ホスト型環境を削除すると、そのルーティンが即座に無効になり、各ルーティンに理由が表示されます。以前は実行が失敗するまま残っていました
claude self-hosted-runnerは、gitの資格情報がないときのsetupとdoctorの案内が改善されました
Windows
- プロセス生存確認が、負荷の高い環境でPowerShellのプロセスを残し、メモリを使い切るまで増えていました
- Git Bashの起動時にPATHが報告されないと、セッション中ずっとBashが
command not foundになっていました。この不具合も直っています
表示と操作、VS Code、Slack
- 全画面表示で、展開した行の単語をダブルクリックすると、行が閉じていた不具合を直しました
- 表の罫線に太字や斜体が重なる、折り返した行で装飾が消える不具合も直っています
- 終了時に表示する再開コマンドは、セッション名でなくIDで指します。セッション名に含まれる文字列が、貼り付け時に実行されないようにするためです。worktreeのセッションでは、長いフラグが収まらないと
-wと-rを使います /ultrareviewのアップロード失敗のエラーが、git add .を勧めなくなりました。.envのような未追跡ファイルがステージされる恐れがあったためですclaude -pは、設定ファイルの検証に失敗すると、ファイルと不正な項目をstderrに出します- VS Code拡張では、未送信のプロンプトと添付がセッション切り替えで消える不具合、使っていない空のチャットがバックグラウンドのClaudeプロセスを残す不具合を直しました。Pythonの環境がないワークスペースの起動も速くなっています
- Claude in Slackは、自分が作ったキャンバスを依頼で削除できます。間違えた投稿は、取り消し線でなく、その場で編集して「Edited」の注記を付けます。100人を超えるチャンネルには、紹介メッセージなしで参加します
前後のバージョンとの関係
| バージョン | この更新に関係する変更 |
|---|---|
| v2.1.290 | この更新に関係する変更idleCompaction と CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS の前提バージョン |
| v2.1.296 | この更新に関係する変更MCP説明文の上限を4,096文字に。EditとNotebookEditが非UTF-8の置換を拒否。ここで入った回帰2件が今回直る |
| v2.1.299 | この更新に関係する変更idle compaction、MCP許可ルールの厳密化、Writeの文字コード拒否、分類済みの修正多数 |
MCPの4,096文字の上限は、v2.1.296では既定の引き上げでした。今回は、api.anthropic.com のAnthropic提供サーバーに限り、上限そのものがなくなります。自作のMCPサーバーの説明文は、これまでどおり上限の対象です。
利用形態別の影響
| 使い方 | 影響 | 理由 |
|---|---|---|
| 200K超の会話を中断しながら使う | 影響明確な恩恵あり | 理由放置後の最初のメッセージで、全文の再処理を避けられる |
| 放置後に細部を引き継ぎたい | 影響条件次第 | 理由要約になるため、idleCompaction: false かしきい値の引き上げを検討 |
mcp__<server> ルールを書いている | 影響条件次第 | 理由名前に __ を含むサーバーは、全体名での書き直しが要る |
| ゲートウェイ経由で使う | 影響明確な恩恵あり | 理由Anthropic宛てへのAPIキー付与とタイムアウトが修正された |
| Shift-JISなど旧文字コードのファイルを編集する | 影響明確な恩恵あり | 理由エラーを出さないUTF-8変換がなくなり、拒否になる |
| managed settingsとmodを併用している組織 | 影響明確な恩恵あり | 理由回避経路と素通しの経路が複数塞がれた |
| 短い会話をIDEで使うだけ | 影響ほぼ影響なし | 理由変更の大半が別の面に向いている |
放置中の自動圧縮(idle compaction)は長い会話のコストをどう変えるか
これまで、会話を放置して戻るコストは、利用者側ではどうにもできませんでした。1時間のキャッシュTTLが切れれば、次のメッセージは全文を新規に処理します。
idle compactionは、その切れ目の手前で会話を縮める仕組みです。失われるのは、要約に入らなかった細部です。得られるのは、戻った直後のメッセージが、要約だけを送る軽い処理で済むことです。
変えられるのは、しきい値と有無の2つです。長時間の調査セッションを細部ごと残したいなら、しきい値を上げるか切ります。昼休みをはさんで同じ作業を続ける使い方なら、既定のままで効きます。どちらが得かは会話の中身で決まるため、/context や圧縮後の表示を見ながら調整する進め方になります。
まとめ
今回の中心は、長い会話を放置したあとの再処理を避けるidle compactionです。既定で有効なので、細部を引き継ぎたい会話では idleCompaction の設定を先に確認してください。MCPの許可ルールは、名前に __ を含むサーバーだけ書き直しが要ります。ゲートウェイ経由の環境と、Shift-JISなどのファイルを扱う環境では、今回の修正が日々の挙動に直接効きます。
関連ガイド
前の更新との流れはv2.1.296で、Claude Code全体の機能は、Claude Code(クロードコード)の解説でまとめて確認できます。