コマンドフックを設定していたのに、タイムアウトしたまま次の処理に進んでいた。onFailure のデフォルトは continue(失敗してもスルー)なので、フックが止まるはずのアクションが実行されていた——気づいたのは、ログを見返したときだった。
v2.1.295 でこの挙動に「ブロック」の選択肢が追加された。2026-10-09 にリリースされた Claude Code v2.1.295 は Added 14 件・Fixed 33 件という大型アップデートで、全変更は GitHub のリリースノート に載っている。この記事では無人・スケジュール実行で Claude Code を使っている現場に直結する7点を整理する。
この記事で分かること:
onFailure: "block"でフック失敗時に処理を止める方法CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MSで429/529の無限待ちに上限をつける方法claude -pの出力ドロップ・/loopの無音停止・FORCE_COLOR=3引き継ぎの修正内容
1. フック失敗が「通過」から「ブロック」に変わった——onFailure: "block"
コマンドフックや HTTP フックを「処理の前に必ず通す関門」として使っている場合、onFailure のデフォルトは "continue"(フックが失敗・タイムアウトしても次へ進む)だった。
v2.1.295 で "block" が追加された。設定例は次の通り:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "check-safety.sh",
"timeout": 5000,
"onFailure": "block"
}]
}]
}
}
onFailure: "block" を設定すると、フックが起動できない・タイムアウト・想定外の終了コードで終わった場合に、対象の操作をブロックする。
onFailure を設定しなければデフォルトは引き続き "continue" のまま。既存フックの挙動は変わらない。新しく「止めたい」フックには明示的に書く必要がある。
セキュリティ用途(実行前チェック)やコスト管理用途(過大なリクエストを弾く)でフックを使っているなら、要確認の変更だ。
2. 429/529 の「無限待ち」に上限をつける——CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS
無人実行(CLAUDE_CODE_RETRY_WATCHDOG=true)の状態で 429(Rate Limit)や 529(Overloaded)が返ると、Claude Code は自動でリトライを続ける。これまで上限はなく、スケジュール実行の場合に「次のジョブが始まっても前のジョブがまだ待っている」という事態が起きる可能性があった。
v2.1.295 で CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS が追加された。
CLAUDE_CODE_RETRY_WATCHDOG=true \
CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS=1800000 \
claude -p "...プロンプト..."
上の例では最大 30 分(1,800,000 ms)待ってから諦める。スケジュール間隔に合わせた値を入れておくと、ジョブの積み上がりを防げる。設定を入れていない既存の自動化タスクは追加を検討したい。
3. claude -p の出力ドロップが修正された
claude -p でバックグラウンドの処理が別ターンを開始すると、前のターンの出力が捨てられる問題があった。スクリプトが Claude の返答を解析して次の処理に渡すケースでは、解析対象が消えて処理が詰まる原因になっていた。
修正内容は「各ターンの返答はそのターンが終了した時点でプリントする」というもの。出力の順序が変わる場合はあるが、内容が落ちることはなくなった。claude -p の出力をパイプやファイルに渡して利用している場合は恩恵を受けやすい。
4. バックグラウンドセッションの /loop が通知なしに止まる問題が修正
/loop をバックグラウンドに移した後、ループが止まっても通知なしに終了していたバグが修正された。あわせて、バックグラウンドに移した後も Esc でキャンセルが効くようになった。
「ループを背景に回して別の作業をしていたら、気づいたら止まっていた」という状況が減る。バックグラウンドでの長時間ループを使っている場合は恩恵がある。
5. バックグラウンドセッションが FORCE_COLOR=3 を引き継ぐ問題が修正
バックグラウンドセッションが FORCE_COLOR=3 を引き継ぐと、Claude が読む出力にカラーエスケープコードが混入する問題があった。出力をスクリプトで解析する構成では、エスケープコードのせいで解析が狂う可能性があった。
夜間の自動実行で「Claude に出力を読ませる」構成を使っているなら、この修正で処理の安定性が上がる。
6. MCP サーバー関連の修正3件
| バグ内容 | 修正内容 |
|---|---|
| ページネーションカーソルが同一のとき、同じページを最大20回リクエストしていた | 検出してループを止めるように |
| アウテージから15秒後に切断→タイトな再接続ループに入っていた | バックオフ(最大30秒)を入れて暴走を防止 |
CSS / JavaScript / XML / フォント類が全て .bin で保存され、Read ツールが拒否していた |
拡張子を正しく判定するように |
7. claude -p が「何を待っているか」を stderr に出力するようになった
claude -p を起動したまま最後のターンが終わってもプロセスが終了しないとき、何を待っているかを stderr に出力するようになった。「なぜ終わらないのか」が分かるようになり、デバッグ時間が短くなる。あわせて、claude -p がスタックしているときはターミナルが終了待ちである旨も表示されるようになった。
変更の全体像(追加・修正の分類)
| カテゴリ | Added | Fixed |
|---|---|---|
| フック・権限 | 2件(onFailure, --tools修正) | 3件 |
| バックグラウンド実行 | 2件(Backgroundingメッセージ等) | 6件 |
| MCP サーバー | 0件 | 3件 |
| Claude apps gateway | 5件 | 4件 |
| その他 UX・バグ | 5件 | 17件 |
リリースノートの原文は GitHub で確認できる。
まとめ
-
onFailure: "block"でフック失敗を「通過」から「ブロック」に切り替えられる -
CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MSで 429/529 の無限待ちに上限をつけられる -
claude -pの出力ドロップ・バックグラウンド/loopの無音停止・FORCE_COLOR=3引き継ぎが修正された
v2.1.295 はバグフィックスが 33 件と多め。特にフックの onFailure: "block" と 429 待ち上限の2つは、無人実行の設定を見直すきっかけになりそうな変更だ。
皆さんの現場で Claude Code をスケジュール実行や CI で動かしている場合、今回の変更で一番気になった項目はどれですか?
- 関連:noteでのAI・自動化実務についてはこちら https://note.com/light_tern636/n/n7b89f6c6c5a2
技術的な相談(Copilot・AIエージェント構築、60分のビデオチャット)も受け付けています。ご相談の際は「Qiitaを見た」とお書きください:https://coconala.com/services/4209036