Claude Code の v2.1.299 〜 v2.1.302 には多数の変更が入りましたが、その中から実務への影響が大きいと思われるものを5つ選んで深掘りします。網羅的な変更点一覧は 前回の記事 にまとめてあるので、今回は「なぜ注目に値するか」にフォーカスします。
1. Idle compaction(v2.1.299 / v2.1.302)
ターミナルで 200K トークン以上の会話を約54分放置すると、1時間のプロンプトキャッシュが切れる前に自動でコンパクションされます。
{
"idleCompaction": false
}
-
CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENSで最小トークン数(既定 200K)を変更できる -
"idleCompaction": falseで無効化できる(どちらも v2.1.290 以降が必要) - v2.1.302 で
/configにIdle compaction行が追加され、アイドル後の通知にも無効化の方法が出るようになった
なぜ注目に値するか
長い会話を一度放置して戻ると、キャッシュが切れているために次のメッセージで会話全体を再処理することになり、時間もトークンもかかっていました。これを「切れる前に畳んでおく」ことで避ける仕組みです。一方で、放置中に会話が要約されるため、細部まで保持したいセッションでは挙動が変わります。自動で畳まれたくない場合は上の設定で止められるので、アップデート後に「いつの間にかコンパクションされていた」と気づいたら、まずここを確認してください。
2. MCP 許可ルールの厳格化(v2.1.299)
MCP の allow ルールは、名前を挙げたサーバーだけに効くようになりました。
-
mcp__aは、名前がa__bやa_のサーバーを許可しなくなった - 名前に
__を含むサーバーは、サーバー名全体を使ってmcp__<server>__*と書く - エージェントの
tools:リストも同様で、mcp__<サーバー名全体>__*と書く - deny / ask ルールが、正規化後の名前に
__を含むサーバーに効かない問題も同時に修正された
{
"permissions": {
"allow": ["mcp__my_server__*"]
}
}
なぜ注目に値するか
権限まわりで「意図せず広く許可されていた」状態が直るのは歓迎ですが、裏返すと、これまで通っていた許可が通らなくなる可能性があります。サーバー名にアンダースコアが入っている構成では特に、アップデート後にツール呼び出しが確認ダイアログになったら、ルールの書き方を疑ってみてください。あわせて v2.1.299 では、名前が constructor / prototype の MCP サーバーが接続されない問題も修正されています。
3. auto mode 分類器まわりの強化(v2.1.301 / v2.1.302)
auto mode を運用する人向けの変更が続きました。
-
CLAUDE_CODE_AUTO_MODE_MODEL: クライアント側 auto mode の分類器が使うモデルを選べる(サーバー側 auto mode には影響しない) - OpenTelemetry の
tool_decisionイベントにclassifier_verdictとpermission_modeを追加(v2.1.301) -
OTEL_LOG_TOOL_DETAILS=1のとき、分類器のブロックが一致した組み込みルール名をclassifier_categoryとして出力(v2.1.301。v2.1.302 で、ほとんどのブロックで欠けていた問題も修正) - サーバー側分類器では、安全確認するには長すぎる会話をコンパクションして続行する(v2.1.302)
export CLAUDE_CODE_AUTO_MODE_MODEL=<分類器に使うモデル>
なぜ注目に値するか
auto mode は便利な反面、「なぜブロックされたのか」「許可ルールによる判断か、分類器による判断か」が見えにくいのが課題でした。tool_decision にこれらの属性が載ることで、テレメトリー上で両者を切り分けられます。また、これまでは会話が長すぎると分類器の確認が通らず、チェック対象のツール呼び出しがすべて拒否される場合がありました。コンパクションで続行できるようになったことで、長時間の無人運用が止まりにくくなります。
4. fork subagent の既定化とサブエージェント挙動の変更(v2.1.302)
subagent_type: "fork"(会話コンテキストを引き継ぐ fork サブエージェント)の扱いが変わりました。
-
claude -p、Agent SDK、デスクトップアプリ、VS Code でも既定で有効になった(ターミナルでは以前から有効)。CLAUDE_CODE_FORK_SUBAGENT=0で無効化できる -
claude mcp serveでは fork は提供されない - デスクトップアプリと VS Code では、メイン会話のサブエージェントが常にバックグラウンドで動く(Claude が選ぶのではなく固定)
-
claude -p、Agent SDK、デスクトップアプリ、VS Code で、サブエージェント自身の Agent 呼び出しは既定でフォアグラウンド実行になる - プロンプトフック/エージェントフックは、同一イベントで同時に動くのが最大12件に制限された
なぜ注目に値するか
実行環境(ターミナル、SDK、IDE、デスクトップ)ごとにサブエージェントの挙動が揃うので、「ターミナルでは動いたのに SDK では違った」という差が減ります。逆に、SDK や claude -p で自前のオーケストレーションを組んでいる場合は、fork が既定で使えるようになった点とフォアグラウンド/バックグラウンドの既定が変わった点を確認する価値があります。fork を使いたくない場合の逃げ道が環境変数で用意されているのも安心材料です。
5. mod API の拡充(v2.1.299 〜 v2.1.301)
mod(Claude Code の UI や挙動を拡張する仕組み)の API が、毎バージョン追加されています。
| バージョン | 追加・変更 |
|---|---|
| v2.1.299 |
$.prompt.media、$.session.identity()、Text の size / weight / mono / tabular、Box の名前付き余白(xs〜xl)、session.append の queue door。bold は weight に置き換えられ非推奨 |
| v2.1.300 | プロンプトに表示だけされて送信されない virtualText、$.ui.view({ agentId })、右から左のテキスト用 dir、prompt.change フック、agent.spawn フックでのワークフローエージェントの prompt / model 書き換え |
| v2.1.301 | 複数行入力欄になる Input の rows(Enter で送信、Shift+Enter または行末の \ で改行)。mod フックの .catch は、フックが例外/タイムアウトしたときだけ動くよう変更 |
なぜ注目に値するか
rows が加わったことで、ターミナル内で複数行のフォームを持つ mod が作れるようになり、virtualText や prompt.change によってプロンプト欄まわりの拡張もしやすくなりました。一方で、bold の非推奨や .catch の動作変更のように、既存 mod に影響する変更も含まれます。mod を自作している場合は、アップデート後にフックの挙動と表示を一度確認しておくと安心です。
まとめ
| テーマ | 内容 |
|---|---|
| コスト・体験 | 放置した長い会話を自動で畳む idle compaction |
| 権限 | MCP 許可ルールは mcp__<server>__* でサーバー名全体を指定 |
| auto mode | 分類器モデルの指定、tool_decision の観測性向上、長い会話でも止まりにくく |
| サブエージェント | 実行環境をまたぐ fork の既定化とバックグラウンド固定 |
| 拡張性 | mod の UI・フック API の拡充 |
特に 2 は、アップデートするだけで許可の通り方が変わる可能性があります。MCP サーバーを使っているチームは、権限設定の見直しをおすすめします。