
Claude Code v2.1.307 の主要アップデート - safety_event と /claude-api api-version の追加
クラウド事業統括本部の石川です。Claude Code の v2.1.307(2026年10月21日 公開)がリリースされました。本記事では、注目のアップデートと実機での確認結果を中心にご紹介します。本日は、新しい safety_event を試してみました。
前回のアップデート記事はこちらです。
アップデートサマリー
v2.1.307 では 43 件の変更が入りました。本記事の分類では、修正 26 件、改善 5 件、セキュリティ 4 件、新機能 3 件、パフォーマンス 2 件、破壊的変更 2 件、開発者体験 1 件です。
修正には MCP サーバーの接続や認証、クラウドセッション、Self-hosted runner に関するものが多く含まれます。破壊的変更の 2 件は、いずれも既存の設定やフックの挙動が変わるものです。VS Code 拡張、Cloud sessions、Code Review の変更もあります。
注目のアップデート
/claude-api api-version で API バージョン 2026-10-21 へ移行できるように
/claude-api api-version が追加され、Claude API を使うコードを API バージョン 2026-10-21 に移行できるようになりました。
公式ドキュメント(Versions)によると、2026-10-21 は 2023-06-01 の次の API バージョンで、Claude API のほか Claude Platform on AWS、Microsoft Foundry、Google Cloud で利用でき、Amazon Bedrock では Claude 4.7 以降のモデルが対象です。Messages API では temperature・top_p・top_k のリクエストパラメータが削除され、いずれかを送ると全モデルで 400 エラーになります。SDK を使う場合は 2026-10-21 を使う最初のバージョンへの SDK の更新、SDK を使わない場合は anthropic-version ヘッダーの変更が必要で、手順は移行ガイド(Migrating to API version 2026-10-21)にまとめられています。
temperature などのサンプリングパラメータを指定している Claude API のコードを保守している方は、移行ガイドとあわせてこのコマンドを試す価値があると考えます。
権限ルールなどがツール呼び出しを止めたときの OpenTelemetry イベント safety_event を追加
権限ルール(permission rule)、auto モード、安全チェック(safety check)、フック(hook)、サンドボックス(sandbox)のいずれかがツール呼び出しを停止した、確認を求めた、または差し戻したときに、ツール呼び出しごとに記録される OpenTelemetry イベント claude_code.safety_event が追加されました。実際に出力される属性は、**後述の「safety_event を試してみた」**で確認します。
Claude Code を組織で展開して OpenTelemetry でテレメトリを収集している管理者の方は、権限ルールやサンドボックスなどで停止・確認・差し戻しとなったツール呼び出しを集計する用途に使えると感じます。
HTTP MCP のツール呼び出しが二重に送信される問題を修正
HTTP MCP のツール呼び出しの途中で接続が切れると、呼び出しが 2 回送信される問題が修正されました。あわせて、再試行の対象が読み取り専用(read-only)または冪等(idempotent)なツールに限られるようになりました。
HTTP 接続の MCP サーバーで書き込み系のツールを使っている方ほど影響の大きい修正だと感じます。読み取り専用でも冪等でもないツールは、途中で接続が切れても再試行されなくなるため、その場合の失敗の扱いも確認しておくとよいと考えます。
axScreenReader の適用元がユーザー設定・managed settings・--settings に限定
axScreenReader 設定と、settings の env ブロック内の CLAUDE_AX_SCREEN_READER が、ユーザー設定、managed settings、--settings で指定した設定からのみ適用されるようになりました。CHANGELOG には「(since 2.1.305)」と付記されています。設定例は後述の「破壊的変更・非推奨」で示します。
プロジェクト設定やローカル設定に axScreenReader を書いていた方は、ユーザー設定・managed settings・--settings のいずれかへ移す必要があると考えます。
Self-hosted runner のチェックアウトフックが既定で 30 分後に停止されるように
Self-hosted runner のチェックアウトフックが既定で 30 分後に停止され、セッションのセットアップが失敗するようになりました。より長い時間が必要な場合は --checkout-hook-timeout-min の値を上げるか、0 を設定します。
チェックアウトフックで大きなリポジトリの取得や事前ビルドを行っている方は、更新前に所要時間を確認し、必要ならタイムアウトを調整しておくとよいと考えます。
アップデート内容
新機能
/claude-api api-versionが追加され、Claude API を使うコードを API バージョン2026-10-21に移行できるようになりました(注目のアップデートを参照)。- [VS Code] 音声入力が自動で停止したとき(認識された音声がないまま 15 秒経過、または 2 分の上限)に、マイクボタンに停止の理由と、それまでのテキストが保持されることを示す通知が表示されるようになりました。
- [Code Review]
@claude review stop(offとpauseも可)が追加され、プルリクエストでの@claude review alwaysによる購読を、新しいレビューを開始せずに終了できるようになりました。
セキュリティ
- OpenTelemetry イベント
claude_code.safety_eventが追加されました(注目のアップデートを参照)。 - Self-hosted runner で、Anthropic が管理する git 用に作成される証明書ファイルが、CLI と同様に信頼する証明書をフィルタするようになりました。除外された証明書の数は
[runner:warn]行に示されます。 - [VS Code] 音声入力が、CLI と同様に信頼する証明書をフィルタするようになりました。
- [VS Code] 拡張機能自体のリクエストが、CLI と同様に信頼する証明書をフィルタし、環境変数またはユーザー設定で指定された
NODE_EXTRA_CA_CERTSのファイルを信頼するようになりました。
改善
- 解析できないツール呼び出しからの回復が改善され、ターンをエラーで終了する前に最大 2 回まで再試行するようになりました。
- 同時に起動された fork サブエージェントのそれぞれに、どの起動が自分のものかが伝えられるようになり、互いの作業を始めようとすることが大幅に起きにくくなりました。
- WebSearch の予算(budget)を使い切ったときに Claude が受け取る通知に、ブラウザやコンピューター操作(computer use)で検索エンジンを使わないよう伝える内容が加わりました。
- このほか、ブラウザでのサインインの成功ページの表示、クラウドセッションと Self-hosted runner のセッションでのウェブ検索のエラー表示、VS Code 拡張の「still open somewhere else」の通知が改善されています。
パフォーマンス
- デスクトップアプリの MCP サーバーのいずれかが接続できない場合に、クラウドセッションで最初の応答が返るまでの時間が改善されました。
- 大きな画像の貼り付けや PDF の読み込みを含むトランスクリプトを持つセッションで、Remote Control の接続時間が改善されました。
修正
- HTTP MCP のツール呼び出しが二重に送信される問題を修正: 呼び出しの途中で接続が切れた場合に発生していました。再試行の対象は読み取り専用または冪等なツールのみになりました(注目のアップデートを参照)。
[1m]付きのモデルエイリアスで model-not-found エラーになる問題を修正:CLAUDE_CODE_DISABLE_1M_CONTEXTを設定した状態で、opus[1m]のような[1m]サフィックス付きのエイリアスを指定した場合に、リクエストが失敗していました。- macOS のキーチェーンのロック中に MCP サーバーが「needs authentication」と表示される問題を修正:
claude -pで発生していました。理由が表示されるようになり、ロック解除後の次回実行では再サインインなしで接続します。 - スリープ後に MCP サーバーが失敗したままになる問題を修正: MCP サーバーの接続中に macOS または Linux のコンピューターがスリープすると、タイムアウトとして報告され、ヘッドレス実行では失敗したままになっていました。
- 大きなツール結果を読むターンでの「Autocompact is thrashing」エラーを修正: 多数の PDF ページや画像、その他の大きなツール結果を読むターンで発生していたエラーの一部が修正されました。
- 再起動後に
/clearで消去した会話が戻る問題を修正: クラウドセッションや Self-hosted runner のセッションが再起動したときに発生することがありました。 /permissionsの Recently denied の表示と承認の扱いを修正: 拒否されたシェルコマンドが表示されない問題と、auto モードのローカル分類器(local classifier)が再試行されたコマンドを確認する際に、そこでの承認を無視する問題が修正されました。行を承認すると、コマンドの説明ではなくコマンド自体が示されるようになりました。- Agent SDK の
setModel()によるモデル切り替えが拒否される問題を修正:setModel()と、それを使って構築されたアプリでのモデル切り替えが、API のモデル確認に 5 秒を超えると拒否されていました。最大 15 秒まで待つようになりました。 - Self-hosted runner で
.claude/settings.local.jsonがコミットされる問題を修正:--use-anthropic-git-proxyを使うセッションで、以前のセッションがクローンに残した.claude/settings.local.jsonがコミットされていました。 - このほか、Claude apps gateway、クラウドセッション、デスクトップアプリ、VS Code 拡張、Self-hosted runner のチェックアウトフックなど、多数の細かな不具合が修正されています。
破壊的変更・非推奨
CHANGELOG で「Changed」として記載されている変更のうち、既存の設定やフックの動作に影響する 2 件を扱います。非推奨の記載はありません。
axScreenReader と CLAUDE_AX_SCREEN_READER の適用元が限定された
注目のアップデートで紹介した変更です。適用元はユーザー設定・managed settings・--settings に限られるため、プロジェクト設定(.claude/settings.json)やローカル設定(.claude/settings.local.json)に書いた値は適用されません。CHANGELOG には「(since 2.1.305)」と付記されています。
以下は設定例です。
変更前: プロジェクト設定 .claude/settings.json に次のいずれかを書くと、適用されていました。
{
"axScreenReader": true
}
{
"env": {
"CLAUDE_AX_SCREEN_READER": "1"
}
}
変更後: 上記の記述はプロジェクト設定では適用されません。ユーザー設定 ~/.claude/settings.json、managed settings、--settings のいずれかに書きます。--settings で指定する場合は次のとおりです。
claude --settings '{"axScreenReader": true}'
Self-hosted runner のチェックアウトフックが既定で 30 分後に停止されるようになった
注目のアップデートで紹介した変更です。v2.1.307 の claude self-hosted-runner --help では、--checkout-hook-timeout-min が次のように説明されています。
--checkout-hook-timeout-min <n>
Wall-clock budget for each run of the checkout lifecycle hook. A hook
still running at the budget is stopped (SIGTERM, then SIGKILL) and the
session fails setup with a "checkout hook timed out" error instead of
staying at "Preparing…". Default: 30. 0 disables. Max: 10080.
[env: SELF_HOSTED_RUNNER_CHECKOUT_HOOK_TIMEOUT_MS, in ms]
制限時間に達したフックは SIGTERM、続いて SIGKILL で停止され、セッションは "checkout hook timed out" エラーでセットアップに失敗します。既定値は 30 分、0 で無効、最大値は 10080 分で、環境変数 SELF_HOSTED_RUNNER_CHECKOUT_HOOK_TIMEOUT_MS(ミリ秒)でも指定できます。なお、執筆時点(2026年10月22日)の公式ドキュメント(Self-hosted environments reference)のフラグ一覧には、このフラグは掲載されていませんでした。
以下は設定例です(ファイルのパスは例です)。
変更前(〜v2.1.306): 次の起動では、30 分を超えるチェックアウトフックも既定では停止されませんでした。
claude self-hosted-runner \
--environment-secret-file /etc/claude/environment-secret \
--hooks-dir /etc/claude/hooks
変更後(v2.1.307〜): 同じ起動では、30 分を超えたチェックアウトフックが停止され、セッションのセットアップが失敗します。延長または無効にするには --checkout-hook-timeout-min を指定します。
# 60 分まで延長する例
claude self-hosted-runner \
--environment-secret-file /etc/claude/environment-secret \
--hooks-dir /etc/claude/hooks \
--checkout-hook-timeout-min 60
# タイムアウトを無効にする例
claude self-hosted-runner \
--environment-secret-file /etc/claude/environment-secret \
--hooks-dir /etc/claude/hooks \
--checkout-hook-timeout-min 0
safety_event を試してみた
Claude Code v2.1.307 で追加された OpenTelemetry イベント claude_code.safety_event を、ローカル環境で出力させて中身を確認する手順です。--settings で Read ツールの deny ルールを渡し、そのルールで拒否された Read の呼び出しが safety_event として記録されることを確認します。
- 実行する
claude -pは 1 回です(今回の環境ではapi_requestイベントは 1 件でした)。 - 設定ファイル(
~/.claude/settings.jsonなど)は書き換えません。deny ルールは--settingsで渡します。 - テレメトリの出力先は console(標準出力)にし、外部のコレクターには送信しません。
検証の手順と出力例は、macOS 上の Claude Code v2.1.307 で実行して確認したものです。
この検証で確認すること
- deny ルールに一致した Read の呼び出しが拒否されると、
claude_code.safety_eventが 1 件出力されること safety_eventに記録される属性とその値- 出力に含まれる識別情報の行を除いて共有する方法
全体の流れ
前提条件
- macOS または Linux のシェル(
grepとawkを使います) ~/.claude/settings.jsonのenvにOTEL_で始まる変数を設定していないこと
Step 1: OTEL の設定がないことを確認する
ユーザー設定に OTEL_ で始まる環境変数がないことを確認します。
% grep -n OTEL ~/.claude/settings.json
何も出力されなければ問題ありません。出力された場合は、その設定によってテレメトリの送信先が想定と異なる可能性があるため、内容を確認してから進めてください。
Step 2: 作業用の空ディレクトリを作る
% mkdir -p ~/safety-event-handson
% cd ~/safety-event-handson
% ls -A
ls -A で何も表示されないことを確認します。secret.txt は作成しません。今回の確認では、ファイルが存在しない状態でも、deny ルールによって Read の呼び出しは拒否されました。
Step 3: テレメトリを console に出力して claude -p を実行する
deny ルールによって Read の呼び出しは拒否する一方、「Read ツールで secret.txt を読んでください」というプロンプトで secret.txt の読み出しを促し、テレメトリを console に出力します。
次のコマンドを実行し、標準出力を telemetry.log に保存します。
% CLAUDE_CODE_ENABLE_TELEMETRY=1 \
OTEL_LOGS_EXPORTER=console \
OTEL_METRICS_EXPORTER=none \
claude -p --max-turns 1 \
--settings '{"permissions":{"deny":["Read(./secret.txt)"]}}' \
"Read ツールで secret.txt を読んでください" > telemetry.log
% echo "exit code: $?"
exit code: 1
各指定の意味は次のとおりです。
| 指定 | 内容 |
|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY=1 |
テレメトリ(OpenTelemetry)を有効にする |
OTEL_LOGS_EXPORTER=console |
イベント(ログ)の出力先を console にする。指定できる値は otlp、console、none |
OTEL_METRICS_EXPORTER=none |
メトリクスを出力しない。指定できる値は otlp、prometheus、console、none |
-p |
対話画面を開かずに 1 回だけ実行する |
--max-turns 1 |
エージェントのターン数を 1 に制限する |
--settings '<JSON>' |
追加の設定を JSON 文字列で渡す(claude --help の説明では、ファイルのパスまたは JSON 文字列を指定できる) |
Read(./secret.txt) |
カレントディレクトリの secret.txt に対する Read ツールの呼び出しを拒否する deny ルール |
exit code が 1 になるのは、--max-turns 1 の上限に達して終了するためです。telemetry.log には次の行が含まれます。
% grep -o 'Error: Reached max turns ([0-9]*)' telemetry.log
Error: Reached max turns (1)
なお、~/.claude/settings.json に設定したフック・MCP サーバー・プラグインや、既定の権限モード(permissions.defaultMode)は、このコマンドでも通常どおり読み込まれます。
Step 4: 出力されたイベントの種類と件数を確認する
% wc -l < telemetry.log
% grep -o 'body: "claude_code\.[a-z_]*"' telemetry.log | sort | uniq -c | sort -rn
2695
31 body: "claude_code.mcp_server_connection"
15 body: "claude_code.hook_registered"
10 body: "claude_code.plugin_loaded"
2 body: "claude_code.hook_execution_start"
2 body: "claude_code.hook_execution_complete"
1 body: "claude_code.user_prompt"
1 body: "claude_code.safety_event"
1 body: "claude_code.managed_settings_resolved"
1 body: "claude_code.api_request"
件数は、読み込まれるフック・MCP サーバー・プラグインの数によって変わります。claude_code.safety_event が 1 件あることを確認できました。今回の環境では、同じ出力に claude_code.tool_decision イベントは含まれていませんでした。
Step 5: safety_event を取り出し、識別情報の行を除く
console exporter の出力には、user.email、organization.id などのアカウントやセッションを識別する属性が含まれます。次のコマンドで safety_event のレコードだけを取り出し、それらの行を除いて safety_event.txt に保存します。
% awk '/body: "claude_code.safety_event"/{f=1} f{print} f&&/^}$/{f=0}' telemetry.log \
| grep -v -E '"(user\.id|session\.id|organization\.id|user\.email|user\.account_uuid|user\.account_id|prompt\.id)":|tool_use_id:' \
> safety_event.txt
% cat safety_event.txt
body: "claude_code.safety_event",
attributes: {
"terminal.type": "zed",
"event.name": "safety_event",
"event.timestamp": "2026-10-22T01:21:38.852Z",
"event.sequence": 47,
category: "permission_rule",
decision: "reject",
decision_source: "config",
reason_type: "rule",
reason_code: "rule:flagSettings",
rule_source: "flagSettings",
tool_class: "file",
tool_name: "Read",
tool_source: "builtin",
permission_mode: "auto",
sandbox_violation_count: "0",
sandbox_enabled: "false",
},
}
awkの部分:body: "claude_code.safety_event"の行から、レコードを閉じる}の行までを出力します。safety_eventが複数ある場合は、すべて出力します。grep -vの部分:user.id、session.id、organization.id、user.email、user.account_uuid、user.account_id、prompt.id、tool_use_idの行を除きます。
console exporter の出力は JSON ではありません。キーにクォートが付いていないもの(例: category:)があり、値に undefined が含まれ、閉じ括弧の直前に末尾カンマがあります。また、複数のレコードが複数行のまま続けて出力されます。実際に jq . telemetry.log は parse error で止まるため、grep と awk で取り出しています。
Step 6: 属性を確認する
では、safety_event 固有の属性と、今回の値を確認します。
| 属性 | 今回の値 | 手順との対応 |
|---|---|---|
category |
permission_rule |
Step 4 で渡した deny ルール(権限ルール)による拒否 |
decision |
reject |
Read の呼び出しが拒否された |
decision_source |
config |
— |
reason_type |
rule |
— |
reason_code |
rule:flagSettings |
— |
rule_source |
flagSettings |
deny ルールは --settings でのみ渡している |
tool_class |
file |
— |
tool_name |
Read |
プロンプトで指定した Read ツール |
tool_source |
builtin |
Read は Claude Code に組み込まれたツール |
permission_mode |
auto |
確認環境の ~/.claude/settings.json の permissions.defaultMode が auto |
sandbox_violation_count |
"0" |
— |
sandbox_enabled |
"false" |
— |
執筆時点(2026年10月22日)では公式ドキュメントのモニタリングのページに safety_event の説明がないため、「手順との対応」には、手順で指定した内容と値が対応しているものだけを記載しています。
今回の検証では、safety_event から上記の属性値が観測可能になることが確認できました。
注意点
telemetry.logをそのまま共有すると、メールアドレスや組織 ID などが含まれます。共有する場合は Step 6 の方法で該当する行を除いてください。- 属性名と値は、v2.1.307 で観測したものです。公式ドキュメントにはまだ記載がないため、ダッシュボードやアラートに組み込む場合は、利用するバージョンで改めて出力を確認してください。
- CHANGELOG によると、
safety_eventは権限ルール(permission rule)のほか、auto モード、安全チェック(safety check)、フック(hook)、サンドボックス(sandbox)がツール呼び出しを停止した、確認を求めた、または差し戻したときにも記録されます。今回の検証で確認したのは、権限ルールの deny ルールによる拒否の 1 パターンのみです。
最後に
v2.1.307 は、safety_event による安全機構の記録と、/claude-api api-version による API バージョン 2026-10-21 への移行支援が目立つリリースだと感じます。HTTP MCP のツール呼び出しの二重送信の修正も、書き込み系の MCP ツールを使っている場合は特に確認しておきたい変更ではないでしょうか。
Self-hosted runner を運用している方や、axScreenReader をプロジェクト設定に書いている方は破壊的変更の節を確認したうえで、アップデートして試してみてはいかがでしょうか。
参考文献








