Claude Codeの公式Changelogをリリースから最速で翻訳・解説しています。
v2.1.268 で、シンボリックリンク配下に書いた deny / ask ルールが、パスの綴り次第で外れていた問題が直りました。macOS の /tmp /etc /var は /private 配下へのリンクで、同じファイルを 2 通りの綴りで指せます。/private/tmp/... のように実体側の綴りで渡されたパスには、/tmp で書いた deny / ask が当たっていませんでした。
今回の拾いどころ
-
deny ルールの抜け道が塞がる - symlink の綴り違いと、
env -C/evalを含む行で外れていた (v2.1.268) - WebFetch の deny が Artifact に効かなくなる - Artifact ツールの読み書きは別のルールで止める形に変わった (v2.1.268)
-
互換 endpoint の HTTP 400 が解消 -
ANTHROPIC_BASE_URL経由だと v2.1.265 から毎ターン失敗していた (v2.1.268) - WebFetch に 300 秒の締め切り - 応答を閉じないサーバーで無期限に待たなくなった (v2.1.268)
deny ルールが外れていた経路
Fixed deny and ask permission rules on symlinked directories (
/etc,/tmp,/varon macOS;/binon Linux) not applying when a path was given by its real location, and Bash commands ignoring deny rules written on a symlinked path spelling
項目の後半は Bash 側の話です。別項目の Read / Edit の抜けも並べると、v2.1.267 までの判定は次のとおり。
| 書いてあったルール | Claude Code に来た入力 | v2.1.267 までの結果 |
|---|---|---|
/tmp など symlink 側の綴りで書いた deny / ask |
実体側の綴り ( /private/tmp/... など) のパス |
ルールが当たらない |
| symlink 側の綴りで書いた deny | Bash コマンド | Bash がルールを無視する |
| Read / Edit の deny |
env -C や eval など、権限チェッカーが解析できないコマンドを同じ行に含む Bash コマンド |
ルールが当たらない |
Claude Code は v2.1.268 から、3 行ともルールどおりに判定します。3 行目だけは symlink と関係がなく、Bash の解析が届かないケースでした。env -C は作業ディレクトリを移してからコマンドを動かし、eval は文字列をその場でコマンドとして実行します。権限チェッカーからは触るファイルが読めず、そのコマンドに限って Read / Edit の deny が外れていました。
トークンと ${VAR} の展開値が表示に漏れていた
git の URL に埋めたトークンや、MCP 設定の ${VAR} を展開した値が画面に出る経路を、v2.1.268 が閉じました。
plugin と marketplace のエラーは、git ソース URL に含まれるトークンやパスワードをそのまま表示していました。MCP 側は /mcp と /plugin のサーバー詳細、claude mcp list / get の出力、MCP ログインのエラーで、${VAR} プレースホルダーを解決した後の値が出ていました。
信頼していないフォルダも穴になっていました。respawn した in-process の teammate が、そこにある同名の agent ファイルからツールや system prompt を読み込んでいました。
WebFetch の deny は Artifact に届かない
v2.1.268 から、WebFetch 単体の deny / ask ルールは Artifact ツールの読み取りと更新に適用されません。Artifact の読み書きを止めたり確認を挟んだりするルールは、Artifact ルールか WebFetch(domain:claude.ai) で書く形に変わりました。
承認をすべてスキップする設定のローカル Cowork セッションでも、同じ版で挙動が変わっています。Artifact ツールは、セッションのフォルダ外やシンボリックリンクの先にあるローカルファイルを、確認なしで読まずに拒否します。
WebFetch が 300 秒で打ち切られる
# 既定は 300 秒 (300000 ms)。0 で締め切りなし
CLAUDE_CODE_WEBFETCH_DEADLINE_MS=0 claude
応答を開いたまま終わらせないサーバーに当たると、WebFetch はこれまで無期限に待ち続けていました。v2.1.268 では 300 秒で失敗扱いになり、締め切りは CLAUDE_CODE_WEBFETCH_DEADLINE_MS で上書きできます。
権限以外で挙動が変わるところ
互換 endpoint、CPU、hook、compact、認証まわりは v2.1.268 で次のように変わりました。
| 症状 | 起きていた条件 | v2.1.268 |
|---|---|---|
| 毎ターン HTTP 400 で失敗 |
ANTHROPIC_BASE_URL でサードパーティの Anthropic 互換 endpoint を使う (v2.1.265 から) |
Artifact ツールの入力スキーマにあった、endpoint が拒否する正規表現が原因。解消 |
| CPU コアが 1 つ張り付く | 長時間アイドルのセッション、セッション recap 中に端末のフォーカス通知が連続する | 解消 |
| 実行中のセッションが組織の既定モデルに黙って切り替わる | 別の Claude Code プロセスが古いモデルアクセス情報を更新した | 切り替わらない |
/compact と auto-compact の要約で文字列が崩れる |
会話に $ を含む並びがある |
崩れない |
| PermissionRequest hook が発火しない |
--print モード |
発火する |
| SessionEnd hook が 1.5 秒で打ち切られる | hook 個別の timeout が無く、CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS だけを設定 |
環境変数の値まで延びる |
401 … jti reused で途中終了 |
claude-code-action のように profile 経由の workload identity federation を複数プロセスで共有 | 解消 |
--continue / --resume で会話の表示が遅い |
SessionStart hook の完了待ち | hook を待たずに即表示 |
修正が 6 割を占める版
v2.1.268 は 96 項目中 59 項目が Fixed で、うち権限ルールの判定、信頼していないフォルダの扱い、シークレットの表示に関わるものが 5 項目ありました。v2.1.265〜v2.1.267 の 3 版で続いていた互換 endpoint の HTTP 400 も、この版で止まっています。追加機能は CLI 側の Added 7 項目中 4 項目が、Claude apps gateway と self-hosted runner の管理者向けでした。
前回: Claude Code v2.1.266〜v2.1.267|maxEffortLevel で effort に上限がつく|毎日Changelog解説