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.301 変更点まとめ:mod の .catch と $.env.set の挙動変更

0
Posted at

はじめに

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 を使っている場合)
  • WorktreeCreate hook で 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)

  1. mod 開発者
    • .catch で hook の呼び出しの下で発生したイベントを処理していないか確認する
    • $.env.set の戻り値が {} または { deny } になる前提でコードを見直す
  2. セルフホストランナーの管理者
    • managed settings で MCP サーバーを制限していると、Slack から開始したセッションがリポジトリを見つけられず、アタッチもできませんでした。修正後は、該当ツールを使わせたくない場合に deniedMcpServers を使います。

推奨する対応

  • WorktreeCreate hook の利用者:更新後は終了時に確認が出ます。未 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 を自作している人は見直してください。
  • 作業喪失の防止:WorktreeCreate hook で作った worktree が、終了時に無確認で削除されなくなりました。
  • エイリアスの安定化:最新 Fable を使えない組織でも、fable / best は1つ前の Fable に1回フォールバックします。
  • クレジット消費の透明化:小さいコンテキストのモデルへ切り替える際の要約は、確認なしにクレジットを消費しなくなりました。
  • 無人実行・監視の強化:CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS と OpenTelemetry の classifier 属性が追加されました。
  • 検索の信頼性:Grep・Glob の失敗が「一致なし」と区別されるようになり、モデルが誤った前提で進めるリスクが減りました。

まずは mod の確認と、WorktreeCreate hook・セルフホストランナーを使っている場合の挙動確認から始めるのがおすすめです。

参考: Claude Code v2.1.301 リリースノート

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?