Devotd Github
新着評価

second-time-is-a-bug-book/book-companion — フックの fail closed 修正

second-time-is-a-bug-book/book-companion が文書化した Cursor フック ラッパー例が、終了コード 0 のときだけ許可する fail closed 形式に変更された。

リポジトリ情報second-time-is-a-bug-book/book-companion ↗

second-time-is-a-bug-book/book-companion が文書化した Cursor フック ラッパー例が、終了コード 0 のときだけ許可する fail closed 形式に変更された。

GitHub の説明: Companion code for the book "The Second Time Is A Bug"

スター
★ 2
フォーク
0
言語
TypeScript
ライセンス
MIT
原文を見る ↗GitHub で見る ↗

second-time-is-a-bug-book/book-companion は書籍「The Second Time Is A Bug」のサンプルコードを収めるリポジトリである。2026年10月27日のコミット b0a04d5 は docs/tool-wiring.md の1ファイルのみを変更した(4行追加、4行削除)。内容は、Cursor フックを包むシェルラッパー例の判定順序を反転したものである。以前はガードが終了コード 2 のときだけ拒否し、それ以外は許可していたが,如今は終了コード 0 のときだけ許可し、それ以外はすべて拒否する。

フック(hook)は、エージェントがシェルコマンドを実行する前にユーザー作成のスクリプトを差し入れ、許可か拒否かを判断する Cursor の機能である。ドキュメントは .cursor/hooks.json に "version": 1 を置き、preToolUse が Shell に掛かった場合に tool_input.command を、beforeShellExecution は command を渡すことを説明している。終了コード 2 はデフォルトでブロックするが、フックが "failClosed": true を指定しない場合、スクリプトがクラッシュまたはタイムアウトすると許可 쪽に流れる。例は guards/destructive-command.ts を呼び出してコマンドを検査し、判定結果を JSON で出力するが、出力が正しい JSON でなければブロックされることも、空出力は許可されることも文書化されていない。そのため例には jq が必要である。

判定を反転した理由は単純である。2 以外なら許可という規則では、スクリプトの失敗がむしろ実行を通過させるが、0 以外なら拒否という規則では、失敗自体がブロックにつながる。ドキュメントはそれに合わせてフックにも failClosed を指定するよう案内している。ただし実際のガードスクリプトはこのリポジトリには存在しない。コメントにも .cursor/hooks/guard.sh は略記された例でありこのリポジトリには含まれないと記されている。確認できるのは文書が推奨する設定の方向が変わったという事実までであり、フックが実際にどう動くかは、このコミット一つでは判断がつかない。根拠は GitHub コミット b0a04d5(2026-10-27)である。