Claude Media
Claude Code v2.1.301 — 使用量上限で待つ時間を制限、auto modeの判定をOTelで区別

Claude Code v2.1.301 — 使用量上限で待つ時間を制限、auto modeの判定をOTelで区別

無人実行の再試行で、使用量上限を待つ時間に上限を置けるようになりました。OpenTelemetryではauto modeの分類器の判定を区別でき、vim modeには%が入りました。

このリリースで何ができるようになるか

Claude Code v2.1.301は、追加が8件(うち2件はVS Code拡張)、修正が多数並ぶ更新です。使い方によって効き方が大きく分かれますが、新機能の中心は次の3つです。

  • 無人実行の再試行に、使用量上限で待つ時間の上限を置けます。新しい環境変数は CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS です
  • OpenTelemetryの tool_decision イベントで、auto modeの分類器による判定と権限ルールによる判定を見分けられます
  • vim modeに、対応する括弧へ飛ぶ % が入りました。d c y と組み合わせても使えます

修正では、fable エイリアスが組織で使えないモデルを指してエラーになる問題が、日常の作業に近い項目です。ほかに、ディスクが満杯のときの誤解を招くログインエラーと、WorktreeCreate フックで作ったworktreeが終了時に確認なく消える問題があります。

あなたの開発フローはどう変わるか

CIや評価ハーネスで再試行を回しているとき

CLAUDE_CODE_RETRY_WATCHDOG=1 を付けた無人実行は、429 と 529 を無期限に再試行します。使用量の上限に当たったときは、レスポンスにリセット時刻があればその時刻まで待ちます。

今回加わった CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS は、リセットまでが遠すぎる使用量上限に当たったとき、待たずにそのリクエストを終わらせる変数です。数日先にリセットされる枠でジョブが居座る事態を避けられます。

なお、支出上限や使用クレジット切れを知らせる 429 は、watchdogを付けていても待たずにすぐ失敗します(v2.1.239以降)。

export CLAUDE_CODE_RETRY_WATCHDOG=1
export CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS=3600000

上の値は、ミリ秒で1時間を指す書き方の例です。更新履歴には既定値も値の書式も載っておらず、環境変数のリファレンスにも、この変数の行はまだありません。同じ系統の CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS は「正の整数を数字だけで書く」と定められています。新しい変数にも同じ書式が当てはまるかは、使う前に動かして確かめてください。

くらべる

MAX_WAIT_MSと新しい変数の守備範囲

既存

CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS

数えるのは、1回のリクエストが 429 と 529 で待つ時間です。その時間に上限をかけます。

今回追加

CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS

リセットまでが遠すぎる使用量上限に当たったとき、待たずにそのリクエストを終わらせます。

既存の変数の使い方はretry watchdogの待機上限をMAX_WAIT_MSで決める方法にまとめています。

OpenTelemetryで権限の判定を集計しているとき

tool_decision イベントには、許可か拒否か、判定の出どころ(設定、フック、ユーザー操作)、ツール名などが載ります。source が config の場合、ドキュメントは、どの設定が一致したのかはイベントから分からないと書いています。auto modeの分類器の判定をルールの判定と見分ける属性は、これまでありませんでした。

今回、イベントに次の3つが加わります。

属性中身条件
classifier_verdict中身分類器の判定条件条件の記載なし
permission_mode中身判定時の権限モード条件条件の記載なし
classifier_category中身分類器のブロックに一致した組み込みルールの名前条件OTEL_LOG_TOOL_DETAILS=1 のとき

監視ドキュメントの tool_decision の属性一覧には、現時点でこの3つが載っていません。属性名と条件の根拠は更新履歴だけです。classifier_verdict が取りうる値は、更新履歴にも書かれていません。ダッシュボードの条件を書く前に、実際のイベントを一度流して値を見るのが確実です。

classifier_verdict と permission_mode が加わったことで、分類器による判定を権限ルールによる判定と区別できます。classifier_category は、ツールの引数も出る OTEL_LOG_TOOL_DETAILS=1 が前提です。この変数の範囲はOTEL_LOG_TOOL_DETAILSとTOOL_CONTENTで見える範囲で扱っています。

vim modeで編集しているとき

% は、カーソルがある括弧から、対応する括弧へ飛ぶモーションです。単独で使えるほか、d% で括弧の範囲を消し、c% で書き換え、y% でコピーできます。関数呼び出しの引数全体を消すような操作が、1ストロークで済みます。

vim modeの修正も2件あります。

  • 動作の遅いマシンで、Escを押してもINSERTのままになることがありました
  • AskUserQuestion の自由記述欄でEscを押すと、入力した答えが消えていました。今は自由記述欄がvimのNORMALモードを持ち、Escで取り消せるのはNORMALのときだけです

後者は、INSERTのままEscで「NORMALに戻るつもり」だった人が答えを失う動作でした。キー操作の一覧はClaude CodeのVimモードの使い方にあります。

fable エイリアスで組織の対応状況がずれているとき

fable と best のエイリアスは、既定で最新のFableモデルを指します。組織にそのモデルがまだ提供されていないと、Anthropic APIがエラーを返していました。best は、Fableが使える環境では fable と同じモデルを指し、使えなければ opus と同じモデルになります。

今回の修正で、Claude Codeは一つ前のFableモデルで1回だけ再試行します。設定を変えなくても、エイリアスが通る場面が増えます。

主な変更点

追加

  • CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS(前節)
  • claude-api スキルに、OpenTelemetryのトレースの案内を追加。ant CLIでトレースの送信先を設定する手順を含みます
  • vim modeの %(前節)
  • modの Input に rows を追加。複数行の入力欄をターミナルに描けます。Enterで送信し、Shift+Enterか、Enterの前のバックスラッシュで改行します
  • tool_decision への classifier_verdict と permission_mode
  • tool_decision への classifier_category
  • VS Code拡張の追加2件(LaTeX数式表示、使用量上限バナーのリンク)は、後述の「自己ホスト型ランナーとVS Code」にあります

変更

  • modのフックの .catch ハンドラは、フックが例外を投げたとき、またはタイムアウトしたときだけ動きます。フック自身の呼び出しの下で起きたイベントは、.catch を呼ばずにそのフックを飛ばします
  • modの $.env.set は、変数を設定または解除した時点で {} を返します。書き込まなかったときは、理由を持つ { deny } を返します
  • modで質問ダイアログの上に描くツリーは、VS Codeとデスクトップ・モバイルアプリでMarkdownと最大48行を持てるようになりました。ターミナルは平文12行のままです
  • 切り替え先のモデルのコンテキストウィンドウが小さいとき、長すぎる会話は、先に切り替え前のモデルが要約するようになりました

modを書いている場合、.catch と $.env.set の2件は、既存のコードの戻り値の扱いに触れます。$.env.set は、設定できたときに {}、書き込まなかったときに理由付きの { deny } を返します。戻り値で成否を判定しているコードは、この形に合っているかが確認の対象になります。modのフック全般はmodのprompt.submitから入れます。

修正(権限・認証・モデル)

  • WorktreeCreate フックで作ったworktreeが、未プッシュのコミットを持っていても、終了時に確認なしで消えていた
  • awsAuthRefresh が、Bedrock以外のプロバイダーで、名前に application-inference-profile を含むモデルへ切り替えたときに動き、モデル切り替えのフックを遅らせていた
  • claude auth status や claude plugin list のような短いコマンドがトークン更新の途中で終わり、更新のタイムアウトや意図しないサインアウトが起きていた
  • ディスクが満杯でログインを更新できないとき、「Please run /login」と出ていた。今はディスクが原因だと示し、ファイルを消すよう案内する
  • 権限確認の最中に送ったメッセージでツール呼び出しが中断されると、モデルには「ユーザーが拒否した」と伝わっていた
  • 切り替え先のコンテキストウィンドウが小さいモデルへ移るとき、確認なしに使用量クレジットを使って要約することがあった
  • 応答が別のモデル名を返すLLMゲートウェイの背後で、選んでいないモデルのまま、会話が何度も圧縮されていた
  • 認可の注意書きを読んだワークフローのエージェントが、手順を飛ばしたまま成功と報告することがあった

WorktreeCreate フックの扱いはWorktreeCreate/WorktreeRemoveフックの解説にあります。

修正(ツール・表示)

  • GrepとGlobが、検索プログラムの予期しない失敗を「一致なし」と報告していた。今は検索が失敗したというエラーを返す
  • Readツールが、.xlsm、.parquet、.epub、.heic などのバイナリをテキストとして読んでいた
  • 見出し行しかないMarkdownの表が、ターミナルの幅を超えると何も描かれなかった。プラン承認カードの中も含む
  • /diff が、reftable形式のリポジトリで、gitの確認がタイムアウトまたは失敗したとき、衝突中のcherry-pickやrevertに気づかなかった
  • 暗いANSIテーマと16色のターミナルで、薄い文字の見え方を修正
  • /rewind のあとで、スキルがモデルに一覧されなくなっていた
  • 再開したセッションの圧縮行が、読み込まれていない履歴にctrl+oを案内していた。今は以前のメッセージの保存先を示し、フルスクリーンでも表示される
  • 応答を中断した直後に「new task? /clear to save tokens」の案内が戻ってきていた
  • フックの ask 判定の権限確認が、どのプラグインやスキルのフックかを表示していなかった

修正(スキル・引数・メモリ)

  • 引数名が非常に多い、または非常に長いスキルとコマンドを呼ぶと、数秒止まっていた。今は先頭の64個、各64文字までを埋める
  • 引数が多数のプレースホルダーを埋めるとき、スキル、コマンド、フックが大量のメモリを使っていた
  • /claude-api スキルが、CMEKの外部鍵エンドポイントはClaude Platform on AWSで使えないと説明していた
  • ワークフロースクリプトが、同じセッションでBashの cd をしたあと、読み書きや再実行で権限を求められたり拒否されたりしていた
  • modの $.model.fork が、新しいプロセスの最初の応答が終わる前に呼ばれると nothing-to-fork を返していた。claude -p とクラウドセッションが該当する

端末・環境別

  • 古いVTE(0.53未満)を使う端末、たとえばRHEL 8のMATE Terminalで、フォルダ信頼の確認に >0q が重なり、終了時にシェルのプロンプトの前へ >4m が出ていた
  • 一部のiTerm2で、起動時にプロンプトへ GOK が出ていた
  • フルスクリーン: /compact と自動圧縮のあいだ、表示中のトランスクリプトの再構築でUIが一瞬固まっていた
  • Windows: 止めたバックグラウンドのPowerShellコマンドの出力ファイルに、末尾の [killed] 行がなかった
  • 長く動くサブエージェントのあいだの描画が、進捗の表示を毎回すべて処理し直さず、差分だけ更新する形になった
  • アーティファクト: Claudeが書くページは、固定ヘッダーの上の帯も塗るようになりました。モバイルアプリで、スクロールした文字がその帯に映らなくなります。PreToolUseフックがEditやWriteを対象にしている環境で更新が拒否される問題も直り、Claudeはファイルを編集してから再公開します

自己ホスト型ランナーとVS Code

自己ホスト型ランナーでは3件の修正があります。管理設定でMCPサーバーを制限していると、Slackから始めたセッションがリポジトリを見つけられない、または接続できない問題が直りました。接続させたくないMCPサーバーを止めたい場合は deniedMcpServers を使います。

ほかに2件あります。無関係な失敗がgitの「参照がない」という文言を引用しただけで、元のブランチが削除されたと誤報され、再試行もされない問題。そして、セッション解放の失敗で、終了するセッションに再試行を約束するログが出る問題です。

VS Code拡張では、LaTeXの数式表示が加わりました。$$ や複数行の \[ … \] のブロック、行内の $…$ と \(…\) が対象です。ProとMaxのプランでは、使用量上限のバナーに「Get more usage」のリンクが付き、VS CodeとJetBrainsのパネルで見えます。パネルが固まる会話を開くたびに再読み込みで再発する問題、長い思考のあいだの動作の重さ、診断で [object Object] が出る問題、音声入力に対応しない環境でマイクの権限確認のモジュールを読んでいた問題も修正されています。

使用量上限の待ち時間は、変数ごとに別々に決まる

今回の追加で目につくのは、使用量上限という同じ事象に対して、待ち時間を決める変数が増えた点です。CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS は、遠いリセットを待たない出口を、使用量上限専用に用意します。

CIや評価ハーネスのような無人実行では、放置されたジョブが使えない枠の前で黙って居座るのが、運用側にとって最も気づきにくい失敗です。待ち時間に上限があれば、ジョブは失敗として表に出ます。

一方で、見切った先の処理は利用者が書く必要があります。リクエストが終わったあと、ジョブを再投入するのか、通知を出すのか、変数は何も決めてくれません。上限を置く前に、失敗として返ったときの扱いを決めておくと、設定が運用に収まります。

前のリリースの流れはv2.1.300の記事とv2.1.299の記事から追えます。

まとめ

CIや評価ハーネスで CLAUDE_CODE_RETRY_WATCHDOG を使っている環境では、今回の追加が最も効きます。使用量上限で待つ時間に上限を置けるようになり、遠いリセットを待ち続けるジョブを避けられます。書式と既定値は文書化されていないので、小さな値で一度試すことになります。

OpenTelemetryでツールの判定を集計している場合は、classifier_verdict と permission_mode で、auto modeの分類器による判定をルールによる判定から分けて数えられます。fable エイリアスを使う組織や、WorktreeCreate フックで作業ツリーを管理しているチームは、修正の内容が自分の環境に当たるかを確かめる価値があります。

vim modeを使う人には % の追加が、modを書く人には .catch と $.env.set の戻り値の変更が、それぞれ直接影響します。ほかの環境では、アップデート後の動作は大きく変わりません。

関連ガイド

このバージョン単体の位置づけや前後の版とのつながりは、Claude Code完全ガイドでまとめて確認できます。

この記事を共有:XはてブLinkedIn