mcpField
H
hook-manager

hook-manager

github.com/b-open-ioエージェントワークフロー1652 回インストール4 週間前に更新
リポジトリ

hook-manager について

Claude Code、Codex、Grok Build向けの b-open-io core プラグイン付属フックを管理するスキルです。最新の一覧を読み、階層型設定で有効・無効を切り替え、初期設定や診断も案内します。

主な機能

  1. 01プラグインのフック一覧を読み込み
  2. 02プロジェクト別・ユーザー別に設定
  3. 03初期設定と段階選択を案内
  4. 04設定判定と前提条件を診断

活用シーン

  1. 01初回設定でフックの状態を指定
  2. 02プロジェクトのワークフローフックを調整
  3. 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 の判定がある最初のファイルが優先されます)。

  1. $BOPEN_HOOKS_CONFIG — 明示的な上書き(テスト、スクリプト用)
  2. <project>/.claude/bopen-hooks.json — プロジェクトごと(Claude)
  3. <project>/.grok/bopen-hooks.json — プロジェクトごと(Grok)
  4. ~/.claude/core/hooks-config.json — ユーザーごと(Claude)
  5. ~/.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] が含まれている場合、ユーザーはまだ設定を持っていません。タスクを中断せず、自然な区切りでセットアップを提案してください。手順は次のとおりです。

  1. マニフェストを読み取り(上記のコマンド)、AskUserQuestion(multiSelect)を使ってフックを次の 2 つの階層に分けて提示します。
    • ガード(有効を推奨):tier: "guard" のエントリです。作業の損失、シークレットの露出、チケットのない公開を防ぎます。
    • ワークフロー(任意):tier: "workflow" のエントリです。
  2. 以下の前提条件を確認し、結果を推奨内容に反映します(例:agent-browser がインストールされていない場合、agent-browser-solo はひそかにネイティブの WebFetch にフォールバックします。そのため、有効のままでも安全です)。
  3. フックのマップ全体を含む ~/.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、またはプラグインのキャッシュ内にあるものを編集しません。
  • ユーザーに保護対象を伝えずに、ガードフックを無効にすることはありません。

コメント