0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code v2.1.290〜v2.1.296|hook の素通りが塞がる|週刊Changelog解説

0
Posted at

Claude Codeの公式Changelogをリリースから最速で翻訳・解説しています。

v2.1.294 で、指示文で書いた prompt / agent hook が止めるべき操作を通していた不具合が直りました。判定文を命令形で書いた hook をガード役にしている設定では、v2.1.293 までと v2.1.294 以降でブロックされる操作が変わります。前後の版でも権限判定のすり抜けが塞がり、v2.1.295 には失敗した hook を拒否扱いにする onFailure: "block" が入りました。

今週拾うもの

変更 中身 版
Claude Haiku 5.5 claude-haiku-5-5 が Anthropic API の既定 Haiku に。1M context、0.10 / 0.50 USD per Mtok (100K 超のプロンプトは 0.50 / 2.50 USD) v2.1.293
prompt / agent hook の素通り修正 指示文で書いた hook が、ブロックすべき操作を通していた v2.1.294
onFailure: "block" 起動できない・タイムアウトした hook が操作を止める側に回る v2.1.295
Bash 権限判定の厳格化 rg や pyright、BASH_ARGV0 を使うコマンドで確認が出る v2.1.290 / v2.1.296
非 UTF-8 ファイルの Edit 拒否 Shift-JIS などのファイルで非 ASCII 文字を丸ごと置き換えていた v2.1.296
Sonnet 5.5 の cache read 単価 /cost や --max-budget-usd の計算が 0.20 から 0.10 USD per Mtok に v2.1.296
Agent ツールの effort Claude がサブエージェントを指定の effort で動かす v2.1.292
WebSearch の回数上限 200 回で打ち止めだったのが、1 時間あたり 100 回ずつ回復する方式に v2.1.290

指示文で書いた prompt hook が操作を通していた

prompt hook は、hook の入力をモデルに渡して可否を判定させる種類の hook です。判定の基準は、設定に書いた文章そのもの。その文章を「Block commands that...」(〜するコマンドはブロックする) のような命令形で書くと、ブロックすべき呼び出しが通っていました。

Fixed prompt and agent hooks written as instructions (such as "Block commands that...") allowing what they should block

v2.1.294 の changelog に載っているのは、この修正ともう 1 行の改善だけでした。もう 1 行は Stop / SubagentStop に置いた prompt hook の判定改善です。「Carry on if the build is broken」(ビルドが壊れているなら続ける) のような指示文で書いた hook で、Claude が早めに止まるケースが減りました。

影響を受けるのは、ツール呼び出しを止める目的で prompt / agent hook を置き、判定文を命令形で書いている設定です。v2.1.293 までは、その hook はブロックのつもりで書いた操作を通していました。

prompt / agent hook まわりの修正は v2.1.295 と v2.1.296 にも続きます。

  • agent hook の判定が xhigh / max effort で大幅に遅くなっていた (v2.1.295)
  • managed settings の prompt hook がブロックしても、呼び出しを拒否するだけでターンは続いていた (v2.1.296)

onFailure: "block" で落ちた hook も止める側へ

hook が起動できない、タイムアウトする、想定外の終了コードで終わる。v2.1.295 より前は、hook 自体がこうして失敗すると、対象の操作はそのまま通っていました。command hook と HTTP hook に onFailure: "block" を指定すると、同じ状況で操作がブロックされます (v2.1.295)。

changelog が書いているのは "block" を指定した場合の挙動だけで、既定の変更には触れていません。v2.1.296 からは --debug の出力に hook の所要時間も出ます。対象はツール呼び出し・プロンプト・SessionStart・Stop の command hook で、終了時にコマンド、プラグイン、結果と並んで記録されます。

権限ルールを迂回していた経路

hook や auto mode を経由したときに、権限の判定が抜け落ちていた経路も版をまたいで塞がりました。

  • PreToolUse hook がツール入力を書き換えた後の呼び出しに、一部の権限ルールと安全チェックが適用されていなかった (v2.1.290)
  • ネットワーク (UNC) パスからのファイル読み取りで、PreToolUse hook の承認と auto mode が権限プロンプトを飛ばしていた。7 版の中で Security: が付いた項目はこれだけ (v2.1.292)
  • managed settings の PreToolUse hook が "continue": false で呼び出しを拒否しても、ターンは終わらずに続いていた (v2.1.296)

Bash で確認が増えるコマンド、減るコマンド

Bash の権限判定は、v2.1.290 から v2.1.296 にかけて確認が増える方向と減る方向の両方に動きました。

対象 変化 版
引数がシェルのワイルドカード展開を受ける rg / git grep などの読み取りコマンド 自動承認 → 確認が出る v2.1.290
zsh と bash で変数名の読み方が異なるコマンド 自動承認 → 確認が出る v2.1.290
pyright 読み取り専用扱いを外れ、確認が出る v2.1.290
ps の一部の書き方 確認なし → 確認が出る v2.1.290
BASH_ARGV0 に代入してから使うコマンド 自動承認 → 確認が出る v2.1.296
sandbox 内で heredoc を別コマンドに渡す形 (cat <<EOF を python3 へパイプ) 毎回確認 → 確認なし v2.1.290
strict sandbox mode での FOO=bar python3 app.py のような環境変数付き実行 確認なしで実行 v2.1.292
Windows の PowerShell で約 1 KB を超えるコマンド 常に確認 → 32 KB まで allow ルールと読み取り専用判定が効く v2.1.296

Shift-JIS のファイルは Edit が書き換えずに断る

v2.1.295 までの Edit と NotebookEdit は、UTF-8 でないファイル (Windows-1252、Shift-JIS、GBK) の非 ASCII 文字をすべて置き換えていました。Shift-JIS のソースなら、Edit 1 回で触っていない行の日本語コメントまで別の文字になっていました。v2.1.296 の Edit は、こうしたファイルへの編集を拒否します。

7 版を通して見ると

hook の変更は、止めるはずの操作が止まらない経路に集中していました。判定の読み違い (v2.1.294)、hook 自体の失敗 (v2.1.295)、拒否後もターンが続く managed hook (v2.1.296) の 3 系統です。並行して、v2.1.291 は v2.1.290 と v2.1.288 の回帰を直しただけの版で、v2.1.293 は v2.1.290 で入った cloud session の修正を差し戻しています。

前回: Claude Code v2.1.284〜v2.1.289|auto mode が全プラン・全プロバイダで既定に|週刊Changelog解説

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?