
Claude Code v2.1.269 の主要アップデート - claude plugin eval の追加と権限ルールの適用漏れ修正
クラウド事業統括本部の石川です。Claude Code の v2.1.269(2026-09-11 公開)がリリースされました。98 件と前回に続いて変更の多い回です。プラグイン周りに新機能とセキュリティ修正がまとまって入った点が今回の特徴だと感じます。今日は、プラグイン(スキル)が実際に効いているか採点して数値にするコマンド claude plugin eval を試してみました。
前回のアップデート記事はこちらです。
アップデートサマリー
v2.1.269 では 98 件の変更が入りました。CHANGELOG の記載を数えると Fixed が 66 件、Added が 14 件、Improved が 11 件、Changed が 6 件、Removed が 1 件です。対象は CLI 本体が 58 件、残りは VSCode 拡張が 23 件、Claude Tag(Claude in Slack)が 10 件、Claude Code on the web が 7 件となっています。
注目のアップデート
claude plugin eval でプラグインを採点できる
claude plugin eval が追加されました。プラグインの eval スイートを Claude Code に対して実行し、スコア付きで再現可能な結果を JSON と HTML レポートで得られます。
プラグインやスキルを社内へ配布している方は、更新のたびに同じケースで採点し直す仕組みとして使えると感じます。
Bash コマンドが変更したファイルの差分が結果に含まれる
Bash ツールがファイル編集を扱う場合に、Bash コマンドが変更したファイルの差分が実行結果へ含まれるようになりました(設定 bashEditDiffEnabled)。
Bash 経由の編集を使っている方は、何が書き換わったかを結果の中で確認できる分、確認の手間が減ると感じます。
権限ルールの適用漏れを修正
権限まわりで 2 件の修正が入りました。
!で始まる deny・ask のルールが、それを書いた設定ソースの外にも適用されていた問題。該当するルールは自身の設定ソース内でのみ適用され、単独の!による否定は無視されるようになりました- Bash の
teeコマンドが書き込むファイルに、Edit()の deny ルールと書き込みパスのチェックが適用されていなかった問題。Bash(tee:*)の allow ルールは、作業ディレクトリの外への書き込みを許可しなくなりました
deny ルールで運用を縛っているチームは、これまで意図どおりに効いていなかった経路があった可能性があるため、優先して上げる価値があると見ています。
プラグインのアーカイブ展開まわりの権限を修正
セッション用に展開されたプラグインのアーカイブが同じマシンの他のユーザーから読める、展開したファイルがアーカイブの world-writable ビットを引き継ぐ、再展開しても古いファイルが残る、という 3 点が修正されました。
共有マシンや複数人が入る開発サーバーで Claude Code を使っている方には、優先度の高い修正だと感じます。
日本語のプロンプトサジェストが表示されない問題を修正
単語を空白で区切らずに書く日本語・中国語・タイ語などのテキストで、プロンプトのサジェストが表示されない問題が修正されました。あわせてフィルタリングも改善され、複数の文字種が混在するものや 1 単語のサジェストは残り、メタ的・評価的なテキストは英語と同様に除外されます。
日本語でプロンプトを書く方には、そのまま効いてくる修正だと感じます。
セッションが詰まる問題とプロンプトキャッシュの修正
長いセッションで効く修正が 2 件入りました。
- 要約できる完結した過去のやり取りがなく自動コンパクションを行えない場合に、セッションが「Prompt is too long」から復帰できなくなる問題(主に非常に大きなプロンプトを扱う Agent SDK のセッション)
- 出力トークンの上限で応答が打ち切られ自動再開した次のターンで、プロンプトキャッシュが部分的に無効化される問題
長いセッションを続ける方や、Agent SDK で大きなプロンプトを扱う方に効いてくると感じます。
アップデート内容
新機能
/output-style [name]が追加され、出力スタイルの一覧表示と切り替えができるようになりました。Remote Control 経由やクラウド・その他のヘッドレスセッションでも使えますOTEL_METRICS_INCLUDE_REPOSITORYが追加され、OpenTelemetry のメトリクスとイベントにvcs.*のリポジトリ属性が付きます。OTEL_LOG_TOOL_DETAILSと併用すると、コミットのイベントにvcs.ref.head.*が付きますCLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS(1〜256)が追加され、Workflow ツールの 1 実行あたりの同時エージェント数の上限を引き上げられますCLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MSが追加され、LLM ゲートウェイの/v1/modelsディスカバリのタイムアウト(既定 3 秒)を延長できます- [VSCode] エージェントマップが追加され、フッターの「N agents」ピルから、サブエージェントごとのカード・エージェントの停止・読み取り専用のトランスクリプトを開けます
- [VSCode] コマンドメニューに Hooks のダイアログが追加され、フックの閲覧と、ユーザー・プロジェクト・ローカルの各設定への追加・編集・削除ができます。マネージド・プラグイン・セッションのフックは読み取り専用です
- [VSCode] 権限ルールのダイアログが追加され、権限ルールの一覧表示と、ユーザー・プロジェクト・ローカルの各設定への追加・削除ができます。起動オプション・セッション限定・マネージドのルールは読み取り専用です
- [VSCode] Focus ビューのツール呼び出しグループの下に、実行中のサブエージェントの進捗行がライブ表示されます
- [VSCode] アカウント切り替えの画面に Cancel ボタンが追加され、現在のアカウントのままセッションへ戻れます
- [Claude Code on the web] クラウドセッションで、Claude が読む前のキュー済みのメッセージを取り消せるようになりました。キューから削除するか、Esc または上キーを押すとテキストがメッセージボックスへ戻ります
- [Claude Tag] 管理設定の GitHub インストールで、Connect all と Disconnect の前に確認ダイアログが表示されるようになりました。組織全体に及ぶ変更を誤って行うことへの備えと説明されています
改善
- 長いセッションでの応答性が改善し、トランスクリプトの更新のたびに、折りたたまれたツール利用のサマリーを作るため会話全体を再処理することがなくなりました
- SSH 経由や認識されない端末でのキーボードのサポートが改善し、kitty のキーボード照会に応答する端末(foot、Alacritty 0.16 以降など)で Shift+Enter と Ctrl+Shift のショートカットが使えるようになりました
/diffのパネルが、ローディング状態を挟まず一度で描画済みの状態で開くようになりました- スピナーのヒントに
/focusの案内が追加されました。プロンプトと 1 行の作業サマリー、応答だけの表示に切り替えられます - Skill ツールの「Unknown skill」エラーが、プラグインを省いた名前がちょうど 1 つのプラグインスキルに一致する場合に、その完全な名前を示すようになりました
/ultrareview --postが、結果が出た時点で PR のコメントを直接投稿してコメントのリンクを表示するようになり、投稿のために 2 つ目のクラウドセッションを開始しなくなりました- セッションのスクラッチパッドへ保存する Artifact のデータベース読み取りが、作業フォルダの承認で止まらなくなりました
- テレメトリを無効にしたファーストパーティのセッションで、会話の途中で接続が完了した
alwaysLoadの MCP サーバーが、ツール検索の往復なしに次のターンから使えるようになりました - クラウドセッションで claude.ai から同期されるスキルの名前が
anthropic-skills:<name>に変わり、Claude Desktop と揃いました。他に同じ名前のものがなければ、プレフィックスなしの名前でも引き続き参照できます - [VSCode] ユーザー以外の相手に向けて書く文書やメッセージについて、その読み手に向けた文章を書き、返信の冒頭で読み手を明示するようになりました
- [VSCode] スラッシュコマンドのメニュー、@ メンションのメニュー、出力スタイルの選択、送信・停止ボタン、権限や質問のカード、オンボーディングのチェックリストで、スクリーンリーダーとキーボード操作のアクセシビリティが改善しました
- [VSCode] セッションタブの右クリックメニューとエディタのタイトルバーの「...」メニューから Claude Code の項目が削除されました。メニューを開いたタブに対して動作できなかったためです
- [Claude Tag] Slack チャンネルのスケジュール済みルーティンが、常に新しいトップレベルのメッセージを投稿するのではなく、既存のスレッドへ返信できるようになりました
- [Claude Tag] 管理設定のページと Slack チャンネルの選択の読み込み時間が改善しました。チャンネル数が多い組織や、複数のワークスペースを接続している組織でとくに効果が大きくなります
修正
注目のアップデートで取り上げた項目を除く主要な修正は次のとおりです。
- 端末のキー入力のリグレッションを修正: kitty プロトコル対応の端末で F1・F2・F4 が効かない、st で Delete が効かない、rxvt-unicode で Alt+矢印が Escape として扱われる、WezTerm で Shift+記号がシフトなしの文字として入力される問題が修正されました(v2.1.247 のリグレッション)
- セッション再開時のキャッシュ再利用の低下を修正: Claude の思考の途中で割り込んだ後に再開すると、以前のコンテキストの再送のされ方が変わり、プロンプトキャッシュの再利用率が下がることがありました
- CLAUDE.md の attribution ルールが上書きされる問題を修正: コミットやプルリクエストへの attribution を禁じる CLAUDE.md・メモリのルールを、attribution のリマインダーが上書きしていました。マネージド設定で指定された行は引き続き適用されます
permission_denialsの記録漏れを修正: パススコープの deny ルールでブロックされた Read・Edit・Write の呼び出しが、--output-format stream-jsonの結果のpermission_denialsから漏れていました- [Claude Tag] 共有範囲の誤表示を修正: Slack から開始したセッションの共有バナーと共有ダイアログが、組織全体でリンクを開けると示していました。Slack チャンネルの対象範囲を示すようになりました
- [Claude Tag] 未承認モデルでの応答を修正: 組織が有効にしていないモデルへの切り替えを受け入れ、フォールバックのモデルで黙って応答していました。切り替えを断り、管理者が有効化できることを伝えます
- LSP サーバーが残る問題を修正:
shutdownのパラメータを受け付けないプラグインの LSP サーバー(rust-analyzer など)が、セッション終了後も動き続けていました。shutdownが失敗してもexitを送るようになりました /insightsの失敗を修正: 既定の Opus モデルに到達できないアカウントの Bedrock・Vertex・Foundry・ゲートウェイ構成で失敗していました。これらの環境ではセッションのモデルを使います/goalの無言停止を修正: API エラー・ネットワークの切断・トークンの上限の後に実行が黙って止まっていました。バックオフ付きで再試行するか、使用量の上限のリセット待ちを含む理由を伝えて一時停止します/btwの架空のツール呼び出しを修正: 回答に実在しないツール呼び出しとその出力が含まれることがありました。サイドの質問にはそれらを書かないよう指示され、現れた場合は未実行であることが示されます- 組織のプラグインが読み込まれない問題を修正: マネージド設定で有効化した組織のプラグインが、ヘッドレスセッションと Claude Desktop(このバージョンの CLI を同梱して以降)で読み込まれませんでした。次のセッションから読み込まれます
- Windows で PowerShell のバックグラウンドコマンドが止まる問題を修正: バックグラウンドへ送られた PowerShell のツールコマンドが、Claude Code の終了時に停止していました
- [Claude Code on the web] スケジュール済みルーティンの重複実行を修正: 一時的なサーバーエラーの後に 1 回限りのルーティンが 2 度実行される問題と、サブエージェントを使う実行が早く終わったものとして扱われ、再試行がスキップされたり重複した実行が始まったりする問題が修正されました
- 地味に嬉しい修正: 低速な接続(ssh、ブラウザ上の端末)で、起動時に
22cのような文字列や端末の色・バージョンの応答がプロンプトへ入力される問題が修正されました。ssh 越しに使っていると起動のたびに気になる種類の不具合なので、地味に効いてくると感じます - このほか、フルスクリーンの再描画、外部エディタからの復帰、MCP サーバーの再接続、VSCode 拡張のセッション一覧、Claude Tag の通知など、多数の細かな不具合が修正されています
claude plugin eval を試してみた
claude plugin eval は、プラグイン(スキル)が実際に効いているかを、テストケースで採点して数値にするコマンドです。本日の Claude Plugin Eval は検証に手こずりました。でも、手なずけると心強い味方になるはず。
claude plugin evalは、プラグイン(スキル)がどれだけ効いているかを、テストケースで採点するコマンドです。同じケースを プラグインありとプラグインなしの両方で実行し、その差(Δ)がプラグインの貢献分になります。スコアが両方とも高ければ、そのケースはプラグインがなくても通っていたことになります。
用語
とにかく用語がわからないので、まとめておきます。ケースの作成や実行に出てくる用語です。
スイートを構成する用語
| 用語 | 何を指すか |
|---|---|
| eval(評価) | プラグインの振る舞いをテストケースで採点すること。claude plugin validate がファイルの文法を見るのに対し、eval は実際に動かした結果を見る |
| スイート(suite) | evals/ 配下のケース一式。プラグイン 1 つにつき 1 スイート |
| ケース(case) | テスト 1 件。evals/<名前>/ というディレクトリ 1 つが 1 ケース。プロンプト 1 本と grader 数個で構成する |
| プロンプト(prompt) | そのケースで Claude に送る依頼文。prompt.md の本文。スキル名は書かず、ユーザーが実際に打つ言い回しにする |
| grader(グレーダー/採点器) | 実行結果に対する合否判定 1 個。graders/<名前>.md というファイル 1 つが 1 grader |
| ルーブリック(rubric) | llm grader の採点基準を書いた文章。PASS / FAIL の条件を並べる |
| judge(判定者) | llm grader が採点のために呼ぶモデル。--judge-model で指定する。採点される側のモデルとは別にする(同じだと自分の出力を甘く採点する) |
| 重み(weight) | grader の配点。主軸の検査を 1、補助の検査を 0.5 のように割り振る |
実行に関する用語
| 用語 | 何を指すか |
|---|---|
| run(ラン) | ケースを 1 回実行すること。使い捨ての作業ディレクトリで claude -p が 1 回動く |
runs |
1 ケースを何回実行するかの設定。既定は 3。1 回の結果はぶれるため複数回まわす |
| アーム(arm) | 実行のグループ。with アーム=プラグインを読み込んで実行した群、without アーム=プラグインなしで実行した群 |
| アブレーション(ablation) | プラグインを外した比較を行う設定のこと。--ablation with-without で 2 アーム、none で with アームだけ |
| ベースライン(baseline) | without アームのこと。比較の基準線 |
| Δ(デルタ) | with のスコア − without のスコア。プラグインの貢献分であり、eval で見るべき数字。スコアの高さそのものではない |
| pilot(パイロット) | 本番前の試し実行。1 run だけ回して、grader が意図どおり効くか、Δ が出るかを確かめる。claude plugin eval init が対話の最後に自動で行う |
| フルラン | 本番実行。既定の runs(3)で全ケース × 2 アームを回す。7 ケースなら 7 × 3 × 2 = 42 run |
| 閾値(threshold) | ケースの合格ライン。既定 1.0。下回るケースがあるとコマンドは exit 1 を返す(実行の失敗ではなく報告) |
| 発火する | スキルが呼び出されること。tool_used: Skill の grader で測る |
Step 0: 検証の準備
空のディレクトリやプロジェクトのルートで実行すると出ます。今回は、plugin.json(または .claude-plugin/plugin.json)を持つプラグインのルートで、SKILL.md を持つスキルフォルダ作成します。
プロジェクトのルート
├── .claude-plugin
│ └── plugin.json
└── skills
└── commit-message
└── SKILL.md
下記のスクリプトを実行すると、今回の検証用スキルは一発で作れます。
mkdir -p plugin-eval && cd plugin-eval
mkdir -p .claude-plugin skills/commit-message
cat > .claude-plugin/plugin.json <<'JSON'
{
"name": "commit-style",
"version": "0.1.0",
"description": "Draft commit messages in Conventional Commits format"
}
JSON
cat > skills/commit-message/SKILL.md <<'MD'
---
name: commit-message
description: Use when the user asks for a commit message for a change they describe.
---
# Commit message
変更内容の説明を受け取り、Conventional Commits 形式のコミットメッセージを 1 行だけ返す。
- 形式は `<type>(<scope>): <subject>`
- type は feat / fix / docs / refactor / test / chore から選ぶ
- subject は英語の命令形、72 文字以内、末尾にピリオドを付けない
- 説明文・前置き・本文は付けず、コミットメッセージ 1 行だけを返す
MD
すでに使っているスキルを評価したいときは、~/.claude/skills/<スキル名>/ へ移動して同じコマンドを実行します(skills ディレクトリのプラグインとして解決されます)。
Step 2: ケースを作る
プラグインのルート(Step 1 で cd した plugin-eval)で実行します。
claude plugin eval init
コマンドを打つと対話セッションが開き、Claude が質問する側、自分が答える側になります。ケースとグレーダーを書くのは Claude です。

いくつかの確認(ゲート)を挟みながら進むので、質問に回答して進めます。Claude がケースとグレーダーをドラフトし、パイロット実行して挙動を確かめ、evals/<ケース名>/ に書き出します。フルランの想定コストもそこで提示されます。

Step 3: 走らせる
既定は 1 ケースにつきプラグインありで 3 回・なしで 3 回の計 6 回です。まず動くことを確かめるだけなら --runs 1 で各 1 回に落とします(1 回の結果はぶれるので、良し悪しを判断するときは既定の 3 回に戻します)。

フルランが完走し、スイートが完成しました。init の対話はここで終わりです。手順書に最後の工程(弱点を直して測り直す)を追加します。
セッションを/exitで抜けて、シェルに戻ります。evals/plugin に 7 ケースと FOLLOWUPS.md、results/ 3 世代が残っています。
plugin
├── 01-ja-prose
│ ├── graders
│ │ ├── conventional-type-prefix.md
│ │ ├── no-japanese.md
│ │ ├── no-wrapper.md
│ │ ├── one-line-only.md
│ │ ├── skill-fired.md
│ │ └── subject-quality.md
│ └── prompt.md
├── 02-ja-bullets
│ ├── graders
│ │ ├── conventional-type-prefix.md
│ │ ├── no-japanese.md
│ │ ├── no-wrapper.md
│ │ ├── one-line-only.md
│ │ ├── skill-fired.md
│ │ └── subject-quality.md
│ └── prompt.md
├── 03-diff-paste
│ ├── graders
│ │ ├── conventional-type-prefix.md
│ │ ├── no-japanese.md
│ │ ├── no-wrapper.md
│ │ ├── one-line-only.md
│ │ ├── skill-fired.md
│ │ └── subject-quality.md
│ └── prompt.md
├── 04-en-oneline
│ ├── graders
│ │ ├── conventional-type-prefix.md
│ │ ├── no-japanese.md
│ │ ├── no-wrapper.md
│ │ ├── one-line-only.md
│ │ ├── skill-fired.md
│ │ └── subject-quality.md
│ └── prompt.md
├── 05-ja-casual
│ ├── graders
│ │ ├── conventional-type-prefix.md
│ │ ├── no-japanese.md
│ │ ├── no-wrapper.md
│ │ ├── one-line-only.md
│ │ ├── skill-fired.md
│ │ └── subject-quality.md
│ └── prompt.md
├── 06-neg-explain
│ ├── graders
│ │ ├── answers-the-question.md
│ │ ├── not-a-bare-commit.md
│ │ └── skill-not-used.md
│ └── prompt.md
├── 07-neg-typelist
│ ├── graders
│ │ ├── answers-the-question.md
│ │ ├── not-a-bare-commit.md
│ │ └── skill-not-used.md
│ └── prompt.md
├── FOLLOWUPS.md
└── results
├── 2026-09-12T02-55-47-422Z
│ ├── aggregate-result.json
│ └── report.html
├── 2026-09-12T03-58-41-015Z
│ ├── aggregate-result.json
│ └── report.html
├── 2026-09-12T04-04-49-220Z
│ ├── aggregate-result.json
│ └── report.html
└── 2026-09-12T04-29-53-821Z
├── aggregate-result.json
└── report.html
evals/results/2026-09-12T04-29-53-821Z/report.htmlのHTML レポートを開きます。ケースごとのカード、run ごとの grader 判定、judge の票と judge が見た本文まで入っています。ターミナルの表より情報量が多いので確認します。

最後にFOLLOWUPS.md に記録されている件を直します。最後に見つかった弱点を直して、必要に応じて効果を図ります。
claude plugin eval に関する考察
これまで SKILL.md や CLAUDE.md の記述は「書いて様子を見る」もので、良し悪しは書いた人の感覚に依存していました。eval はそこにテストとベースライン比較を持ち込んだ道具だと感じます。とくにプラグインなしとの比較は単体テストにはない発想で、A/B テストに近い考え方です。
通しで動かしてみて一番の収穫は、書いたことが守られるとは限らず、書いていないことは当然守られないという当たり前が数値で見えたことでした。「1 行だけ返す」と書いてもフェンスは付きます。逆に、書かなくても素の Claude ができることもあります。この 2 つを分けられるのが eval の値打ちだと考えています。
一方で、スキル開発の手間は前倒しになります。「とりあえず書いて配る」だったものに、ケース設計・grader 設計・pilot の反復が加わるためです。その手間に見合うのは配布するものに限られると見ています。自分だけが使うスキルなら、効いていなくても困るのは自分だけです。社内に配ったスキルが実は何もしていなかった場合は、全員のトークンを使い続けることになります。そこを数値で確認できるようになった点に、実務上の意味があると感じます。
Skill/Pluginをサクッと検証するにはハードルが高い印象です。実際に試す方は、以下のドキュメントをご覧ください。
最後に
プラグイン周りは、評価の仕組みという新機能と、展開されたアーカイブのパーミッションというセキュリティ修正が同時に入りました。社内でプラグインを配布している方は、評価を整える前に、まず権限の修正を取り込むのが先だと感じます。
権限ルールで運用を縛っている方、共有マシンで使っている方は、アップデートして試してみてはいかがでしょうか。
参考文献








