はじめに
Claude Code v2.1.301 がリリースされました。今回は mod API の破壊的変更が1件含まれており、既存の mod を作っている人は確認が必要です。
あわせて、見逃すと作業を失うおそれのあった不具合や、無断でクレジットが消費される問題も修正されています。
| 区分 | 内容 |
|---|---|
| 破壊的変更 | mod hook の .catch と $.env.set の挙動変更 |
| 重要な修正 | worktree の無確認削除、fable / best エイリアスのエラー、モデル切り替え時の無断クレジット消費 |
| 追加機能 | 無人リトライの待機上限、OpenTelemetry の classifier 属性、mod Input の複数行入力、vim の %、VS Code の LaTeX 数式 |
この記事では severity が high の4件を中心に、medium の主要な変更も整理します。
📌 影響を受ける人
- mod / プラグインを自作している人(
.catchや$.env.setを使っている場合)WorktreeCreatehook で worktree を作成している人- 組織で
fable/bestエイリアスを使っている人- CI など無人環境で Claude Code を動かしている人
- セルフホストランナーを managed settings で運用している人
変更の全体像
変更内容
1. mod API の挙動変更(破壊的変更)
⚠️ Breaking Change
mod hook の.catchが呼ばれる条件と、$.env.setの戻り値が変わりました。該当する mod は見直しが必要です。
(1) .catch ハンドラの呼ばれる条件が限定された
| 項目 | 内容 |
|---|---|
.catch が実行される条件 |
hook 自体が例外を投げた場合、またはタイムアウトした場合のみ |
| hook 自身の呼び出しの下で発生したイベント | その hook をスキップし、.catch にも問い合わせない |
「hook の呼び出しの下で起きたイベント」を .catch で拾って処理していた mod は、そのイベントが届かなくなります。
(2) $.env.set の戻り値が変わった
| 状況 | resolve する値 |
|---|---|
| 変数の設定または削除が完了した | {} |
| 書き込みが行われなかった | 理由を示す { deny }
|
戻り値の中身を前提にしたコードは動作が変わる可能性があります。
2. WorktreeCreate hook 製 worktree の無確認削除を修正
WorktreeCreate hook で作成した worktree は、未 push のコミットを含んでいる可能性があります。これまでは Claude Code を終了すると、確認なしに削除されていました。作業が失われるおそれのあるバグです。
今回の修正で、削除前に確認が入ります。
3. fable / best エイリアスのエラーを修正
Anthropic API で、組織が最新の Fable モデルを利用できない場合に、fable(および best)エイリアスがエラーになっていました。
修正後は、1つ前の Fable モデルで1回だけ再試行します。
4. 小さいコンテキストのモデルへ切り替える際の要約処理
| 項目 | 内容 |
|---|---|
| 改善 | コンテキストウィンドウが小さいモデルへ切り替えたとき、新モデルに収まらない会話は直前のモデルが先に要約する |
| 修正 | その要約で、確認なしに利用クレジットを消費するケースがあった |
💡 Tips
長い会話の途中で小さいコンテキストのモデルに切り替えると、直前のモデルによる要約が走ります。クレジットを消費する前に確認が入るようになったため、意図しない消費を避けられます。
5. 追加された機能(medium)
| 機能 | 概要 |
|---|---|
CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS |
無人リトライモードで、利用上限のリセットまでの時間がこの値を超える場合、待機せずリクエストを終了する |
OpenTelemetry tool_decision の新属性 |
classifier_verdict と permission_mode を追加。auto mode の classifier による判定と、permission ルールによる判定を区別できる。OTEL_LOG_TOOL_DETAILS=1 の場合は classifier_category(classifier がブロックしたときに一致した組み込みルール名)も出力 |
mod Input の rows
|
ターミナル上に複数行のテキストフィールドを表示。Enter で送信、Shift+Enter または行末のバックスラッシュ+Enter で改行 |
| mod の質問ダイアログのツリー | VS Code・デスクトップ・モバイルで Markdown が使え、最大48行まで表示(ターミナルは従来どおりプレーンテキスト12行) |
| VS Code の LaTeX 数式 |
$$ ブロック、複数行の \[ … \]、インラインの $…$ と \(…\) をレンダリング |
| VS Code / JetBrains | Pro・Max プランの利用上限バナーに「Get more usage」リンクを追加 |
6. その他の主な修正(medium)
| 対象 | 内容 |
|---|---|
| Grep / Glob | 検索プログラムが異常終了したとき「一致なし」と報告していた。修正後は検索失敗をエラーとして返す |
| Read |
.xlsm、.parquet、.epub、.heic などのバイナリをテキストとして読んでいた問題を修正 |
| LLM ゲートウェイ | リクエストと異なるモデル名を応答で返すゲートウェイ経由で、選んでいないモデルで compaction が繰り返される問題を修正 |
| 認証 | 短いコマンドがトークン更新中に終了するとサインアウトされる問題、ディスク不足時に「Please run /login」と誤案内される問題を修正 |
| skill / command | 引数名が非常に多い・長い場合の停止とメモリ消費を修正。展開は先頭64個・各64文字までに制限 |
| workflow | agent が手順を飛ばしても成功と報告される問題、Bash の cd 後に許可を求められる問題を修正 |
| セルフホストランナー | Slack 起動セッションでリポジトリを取得できない問題など3件を修正 |
影響と対応
必ず確認すること(action_required)
-
mod 開発者
-
.catchで hook の呼び出しの下で発生したイベントを処理していないか確認する -
$.env.setの戻り値が{}または{ deny }になる前提でコードを見直す
-
-
セルフホストランナーの管理者
- managed settings で MCP サーバーを制限していると、Slack から開始したセッションがリポジトリを見つけられず、アタッチもできませんでした。修正後は、該当ツールを使わせたくない場合に
deniedMcpServersを使います。
- managed settings で MCP サーバーを制限していると、Slack から開始したセッションがリポジトリを見つけられず、アタッチもできませんでした。修正後は、該当ツールを使わせたくない場合に
推奨する対応
-
WorktreeCreatehook の利用者:更新後は終了時に確認が出ます。未 push のコミットがないか確認してから削除してください。 -
CI / 無人実行の利用者:長時間の待機を避けたい場合は
CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MSを設定する。 -
監視基盤の担当者:OpenTelemetry の
tool_decisionに新属性を取り込むと、classifier による判定と permission ルールによる判定を区別できる。 - CLAUDE.md の更新:以下の内容を追記しておくとチームで共有しやすくなります。
## mod / プラグイン開発
- mod hook の .catch は、hook 自体の例外・タイムアウト時のみ実行される
- $.env.set は {}(完了)または { deny }(書き込みなし)で resolve する
## モデル選択
- fable / best エイリアスは、最新 Fable を利用できない組織では
1つ前の Fable に1回フォールバックする
## 環境変数 / 無人実行
- CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS:
利用上限の待機時間の上限(単位 ms)
## skill / command 作成
- 引数名の展開は先頭64個・各64文字まで
コード例
入力データには、mod の具体的なコードやAPIのシグネチャは含まれていません。以下は、変更点を確認するための考え方を示す疑似コードです。実際の書き方は mod の公式ドキュメントで確認してください。
$.env.set の戻り値
// 疑似コード
const result = await $.env.set("MY_VAR", "value");
// 設定・削除が完了した場合は {}、書き込みが行われなかった場合は { deny }
if (result && result.deny) {
// 書き込みが行われなかった。deny の内容が理由を示す
}
無人リトライの待機上限(環境変数)
# 利用上限のリセットまでの時間がこの値(ミリ秒)を超える場合、待機せずリクエストを終了する
# 例: 30 分 = 1800000 ms
export CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS=1800000
OpenTelemetry の詳細ログ
# classifier_category(classifier がブロックしたときに一致した組み込みルール名)も出力する
export OTEL_LOG_TOOL_DETAILS=1
まとめ
-
破壊的変更:mod hook の
.catchは hook 自体の例外・タイムアウト時のみ実行され、$.env.setは{}または{ deny }で resolve します。mod を自作している人は見直してください。 -
作業喪失の防止:
WorktreeCreatehook で作った worktree が、終了時に無確認で削除されなくなりました。 -
エイリアスの安定化:最新 Fable を使えない組織でも、
fable/bestは1つ前の Fable に1回フォールバックします。 - クレジット消費の透明化:小さいコンテキストのモデルへ切り替える際の要約は、確認なしにクレジットを消費しなくなりました。
-
無人実行・監視の強化:
CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MSと OpenTelemetry の classifier 属性が追加されました。 - 検索の信頼性:Grep・Glob の失敗が「一致なし」と区別されるようになり、モデルが誤った前提で進めるリスクが減りました。
まずは mod の確認と、WorktreeCreate hook・セルフホストランナーを使っている場合の挙動確認から始めるのがおすすめです。