Claude Codeの公式Changelogをリリースから最速で翻訳・解説しています。
claude plugin eval が入りました。プラグインの eval スイートを走らせると、プラグイン有りと無しでスコアの差が出ます。v2.1.269 は 98 件の大型リリースで、既存の設定に効くのは否定始まりの deny ルールと Bash(tee:*) の許可範囲。
見取り図
| 変更 | 効くところ |
|---|---|
claude plugin eval が入った |
eval スイートを走らせ、点数付きの結果を JSON と HTML レポートで受け取る |
/output-style [name] が使える |
出力スタイルの一覧と切り替え。Remote Control 経由、cloud、headless セッションでも動く |
| Bash ツールの結果に差分 |
bashEditDiffEnabled で切り替え。Bash がファイル編集を担当したとき、変更したファイルの diff が結果に入る |
| 否定始まりの deny / ask ルール | 書いたソースの外まで効いていたのが、自分のソース内だけに縮む |
Bash(tee:*) の allow |
作業ディレクトリ外の書き込み先をカバーしなくなる |
| CLAUDE.md の attribution 禁止 | コミットと PR の attribution を断るルールを、リマインダーが上書きしなくなる |
claude plugin eval はプラグインの効きをスコアにする
プラグインに同梱した eval スイートを Claude Code に対して走らせ、点数付きの結果を返すサブコマンドです。 changelog 側の記述は 1 行だけ。
Added
claude plugin eval: run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report); seeclaude plugin eval --help
対象読者: プラグインや skill を配っている人、社内向けマーケットプレイスを運用している人
手元の v2.1.269 で claude plugin eval --help を読むと、ケースの置き場は evals/ 配下で、case.yaml か、prompt.md と graders/*.md の組です。ターゲットには、パス、プラグイン名、plugin@marketplace の id のどれかを渡す形でした。
claude plugin eval my-plugin
claude plugin eval ./my-plugin --case 'search-*' --json result.json
--ablation の既定値は、プラグインが解決できるかぎり with-without です。プラグイン無しのベースラインを併走させ、「skill が発火したか」ではなく「入れて良くなったか」をスコアの差で出します。
1 ケースあたりの実行回数は既定 3 回。-j を付ければ 1〜8 並列で回せます。LLM グレーダーの既定モデルは haiku。--threshold は既定 1.0 で、1 ケースでも下回ると exit 1 で終わります。--max-cost-usd に上限を渡した場合、超えた時点で部分結果を出して exit 2。
HTML レポートは、対応しているアカウントだと Claude Code が既定で claude.ai に公開します。手元だけに置くなら --no-publish。eval そのものは自分の権限でローカルに走るので、信頼するプラグインだけを対象にする、と CLI の説明文にも書かれています。
deny の抜けは tee と設定ソースの境目
Bash(tee:*) を allow にしていると、作業ディレクトリの外にもファイルを書けていました。 Edit() の deny ルールと書き込みパスの検査が、Bash の tee の書き込み先を見ていなかったためです。v2.1.269 からは tee の宛先も検査対象に入り、Bash(tee:*) の allow は作業ディレクトリ外をカバーしません。
Bash(tee:*) の allow で作業ディレクトリの外に書き出していた運用は、v2.1.269 で挙動が変わります。
もう 1 つの抜けは設定ソースの跨ぎ。! で始まる deny / ask ルールが、それを書いた settings の外側にまで効いていました。今回から適用範囲は自分のソース内に限られ、否定だけを書いた指定は無視されます。
--output-format stream-json の permission_denials も直りました。パス指定の deny で弾かれた Read / Edit / Write が結果から漏れていたので、headless で拒否を集計していた場合、その分だけ数が欠けていました。プラグインのアーカイブ展開も締まりました。展開したファイルが同じマシンの他ユーザーから読めた、アーカイブ側の world-writable ビットが残った、再展開しても古いファイルが生き残った、の 3 点が直っています。
Bash が書き換えたファイルの差分が結果に入る
Bash ツールがファイル編集を担当したとき、変更したファイルの diff を tool result に付ける機能が入りました。切り替えの設定キーは bashEditDiffEnabled で、既定で有効かどうかは changelog に書かれていません。
中断したセッションを再開したときのキャッシュ崩れ
出力トークン上限で応答が切れ、Claude Code が自動で続きを流したあとのターンで、プロンプトキャッシュが部分的に無効になっていました。思考の途中で止めてから resume した場合も、それより前のコンテキストの再送のされ方が変わり、キャッシュの再利用が落ちていました。v2.1.269 でどちらも直りました。cloud セッションでは、最初のリクエストの前にサーバー設定の到着を短く待つようにして、キャッシュミスを減らしています。
compaction まわりも直りました。compaction 後に Claude Code が Claude へ渡す git status が、セッション開始時点のものだったのが、現在の status に変わります。もう 1 つは「Prompt is too long」の固着で、auto-compaction が要約できる完了済みのやり取りを持たないとき、セッションが永久に詰まっていました。巨大なプロンプトを渡す Agent SDK のセッションで主に起きていた、と原文にあります。
増えた環境変数
| 環境変数 | 効果 |
|---|---|
CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS |
Workflow ツールの 1 run あたり同時エージェント数を 1〜256 の範囲で上げる |
CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS |
LLM ゲートウェイの /v1/models 探索タイムアウトを延ばす (既定 3 秒) |
OTEL_METRICS_INCLUDE_REPOSITORY |
メトリクスとイベントに vcs.* のリポジトリ属性を付ける。OTEL_LOG_TOOL_DETAILS と併用するとコミットイベントに vcs.ref.head.* が乗る |
CLAUDE_CODE_BG_TASKS_REPORT_RUNNING |
0 でバックグラウンドタスクの状態報告を従来の挙動に戻す |
最後の 1 つは、remote と headless のセッションがバックグラウンドエージェントの実行中に「waiting for your input」と報告していた修正に付いてきたものです。
日本語のプロンプト候補が落ちなくなった
日本語・中国語・タイ語のように単語をスペースで区切らない言語では、プロンプト候補が丸ごと捨てられていました。v2.1.269 から候補が出ます。
フィルタの基準も変わりました。日本語・中国語・韓国語では、字種の混ざった候補と単語 1 つの候補を残し、メタ的・評価的なテキストは英語と同じ扱いで落とします。
VSCode 拡張は hook と権限ルールをダイアログから
設定ファイルを開かずに hook と権限ルールを足せるダイアログが付きました。 どちらも user / project / local の 3 スコープが対象で、managed・plugin・session の hook と、起動オプション由来・セッション限定・managed の権限ルールは読み取り専用のままです。
フッターの「N agents」ピルからはサブエージェントのマップが開きます。エージェントごとのカード、Stop agent、読み取り専用のトランスクリプトが並ぶ作り。Focus view にはサブエージェントの進捗行も入りました。
98 件の内訳
v2.1.269 は 98 件。[VSCode] が 23 件、[Claude Tag] が 10 件、[Claude Code on the web] が 7 件で、残る 58 件が CLI 本体です。本体の 58 件のうち 42 件が修正で、新規追加は claude plugin eval を含めて 7 件でした。deny ルールは前回 v2.1.268 の symlink 経由の抜けに続いて、今回が tee 経由と設定ソースの跨ぎでした。
前回: Claude Code v2.1.268|deny ルールの symlink 抜けが塞がる|毎日Changelog解説