hook-manager について
Claude Code、Codex、Grok Build向けの b-open-io core プラグイン付属フックを管理するスキルです。最新の一覧を読み、階層型設定で有効・無効を切り替え、初期設定や診断も案内します。
主な機能
- 01プラグインのフック一覧を読み込み
- 02プロジェクト別・ユーザー別に設定
- 03初期設定と段階選択を案内
- 04設定判定と前提条件を診断
活用シーン
- 01初回設定でフックの状態を指定
- 02プロジェクトのワークフローフックを調整
- 03フックが操作を拒否またはスキップした理由を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ b-open-io/ prompts --skill hook-managerインストール後、Claude Code で/hook-managerを入力して読み込まれたか確認します。
同梱ファイル.clawnet/unsigned-skill.jsonREADME.md
詳細
フックマネージャー
Claude Code、Codex、Grok Build におけるコアプラグイン付属のフックを管理します。カタログの信頼できる唯一の情報源は、インストール済みプラグイン内の hooks/manifest.json です。記憶している一覧に頼らず、実際に読み取ってください。
cat "$(ls -d ~/.claude/plugins/cache/b-open-io/core/*/ | sort -V | tail -1)hooks/manifest.json"
各エントリには name、event、matcher、tier、runtimes、summary、description が含まれます。フックはプラグインのインストール時に自動登録されます。このスキルでは、実際に実行するフックを制御します。
設定ファイル
フックごとの有効化/無効化は JSON 設定で管理します。解決順序は次のとおりです(フックに対して明示的な true/false の判定がある最初のファイルが優先されます)。
$BOPEN_HOOKS_CONFIG— 明示的な上書き(テスト、スクリプト用)<project>/.claude/bopen-hooks.json— プロジェクトごと(Claude)<project>/.grok/bopen-hooks.json— プロジェクトごと(Grok)~/.claude/core/hooks-config.json— ユーザーごと(Claude)~/.grok/core/hooks-config.json— ユーザーごと(Grok)
{
"version": 1,
"hooks": {
"bouncer": true,
"damage-control": true,
"publish-gate": true,
"agent-browser-solo": true,
"session-context": true,
"hammertime": true,
"browser-intent": true
}
}
フックが無効になるのは、明示的に false が設定されている場合のみです。ファイルがない、キーがない、JSON を解析できない場合は、すべて有効として扱います。設定の破損によってガードがひそかに無効になることは決してありません。変更は次回のフック呼び出しから反映され、再起動は不要です。
初回セットアップ([BOPEN-HOOKS-SETUP] ディレクティブ)
セッションコンテキストに [BOPEN-HOOKS-SETUP] が含まれている場合、ユーザーはまだ設定を持っていません。タスクを中断せず、自然な区切りでセットアップを提案してください。手順は次のとおりです。
- マニフェストを読み取り(上記のコマンド)、AskUserQuestion(multiSelect)を使ってフックを次の 2 つの階層に分けて提示します。
- ガード(有効を推奨):
tier: "guard"のエントリです。作業の損失、シークレットの露出、チケットのない公開を防ぎます。 - ワークフロー(任意):
tier: "workflow"のエントリです。
- ガード(有効を推奨):
- 以下の前提条件を確認し、結果を推奨内容に反映します(例:agent-browser がインストールされていない場合、agent-browser-solo はひそかにネイティブの WebFetch にフォールバックします。そのため、有効のままでも安全です)。
- フックのマップ全体を含む
~/.claude/core/hooks-config.json(Claude/Codex)または~/.grok/core/hooks-config.json(Grok)を書き込みます。すべてのフックに明示的なブール値を設定してください。すべて既定値の場合も同様です。このファイルを書き込むと、セットアップ通知が以後表示されなくなります。
フックの有効化/無効化
Read ツールと Write ツールを使って、ユーザー設定(リポジトリに限定した変更の場合はプロジェクト設定)を編集します。読み取り、ブール値を切り替え、書き戻してください。ファイルがない場合は、上記のテンプレートから作成します。プラグインのキャッシュ内のファイルは編集しないでください。更新時に上書きされます。
設定を書き込むたびに確認プロンプトが表示されます。damage-control はこれらのファイルを ask 階層として扱い、ユーザーが明示的に許可しない限りガードを解除できないようにしています(Codex では書き込みが明示的に拒否されるため、ユーザー自身にファイルを編集してもらってください)。これは意図された動作です。回避しないでください。
ガードを無効にする前に警告してください。bouncer は git reset --hard によるものと同等の作業損失を防ぎ、damage-control は .env などのゼロアクセスパスを強制し、publish-gate はチケットのない npm/オンチェーンの公開をブロックします。無効にするかどうかはユーザーの判断ですが、どの保護が失われるのかを明確に伝えてください。
診断
フックが正常に動作しない場合、またはユーザーが「X はなぜブロック/スキップされたのか」と尋ねた場合:
# Which config verdict applies to a hook?
for f in "$BOPEN_HOOKS_CONFIG" ./.claude/bopen-hooks.json ./.grok/bopen-hooks.json ~/.claude/core/hooks-config.json ~/.grok/core/hooks-config.json; do
[ -f "$f" ] && echo "$f: $(jq -r '.hooks["<name>"] // "no verdict"' "$f")"
done
# Prerequisites
command -v jq || echo "jq missing — hooks skip JSON parsing without it"
command -v agent-browser || echo "agent-browser missing — agent-browser-solo falls back to native WebFetch"
[ -n "$LINEAR_API_KEY" ] || echo "LINEAR_API_KEY unset — publish-gate denies gated publishes"
command -v python3 || echo "python3 missing — hammertime and JSON escaping degrade"
- 強制拒否は、構造化された権限拒否としてモデルに提示されます。Codex ランタイムでは、終了コード 2 の stderr JSON として届きます。どちらも意図された動作です。
- hammertime には独自の制御機能もあります。オン/オフより細かいルール調整には、
Skill(core:hammertime)とhammertime:manageスキルを使用します。 - 各フックの動作に関する決定版のリファレンスは、プラグインの
hooks/ディレクトリにあるスクリプトのヘッダーです。推測する前に読んでください。
このスキルが決して行わないこと
- フックはプラグインに付属し、
claude plugin update core@b-open-ioで更新されるため、フックファイルを~/.claudeにコピーしません。 hooks/*.sh、claude-hooks.json、またはプラグインのキャッシュ内にあるものを編集しません。- ユーザーに保護対象を伝えずに、ガードフックを無効にすることはありません。