home/dot_claude/skills/hook-creator/SKILL.md
Claude Code / Copilot CLI 両対応の hook を作成・検証する。「hook を作って」「ツール実行をブロックしたい」「hook が動かない」「PreToolUse / Stop を書いて」「Claude の hook を Copilot で動かしたい」と言われたときに使う。
npx skillsauth add applejxd/dotfiles hook-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Claude Code / Copilot CLI 双方で動く hook を作成・検証するための skill。 今回の hook 移植プロジェクトで得た知見 (仕様差、出力規約、落とし穴) を 凝縮した references / templates / scripts / payload examples を備える。
スコープ外: 既存 hook を一括変換する自動マイグレーションツール。
必要に応じて手作業で references/ を参照しながら対応する。
以下が未確定の場合、まとめて確認する:
すでに会話の文脈で答えが見えている項目は再確認しない。
新規 hook を書く前に、~/.claude/hooks/lib/agent_compat.py または
~/.claude/hooks/lib/agent_compat.sh が存在するか確認する:
ls -la "$HOME/.claude/hooks/lib/" 2>/dev/null
templates/agent_compat.py または .sh を
~/.claude/hooks/lib/ にコピーして使うreferences/hook-spec.md の対応表で Claude/Copilot 両側の名前を確認references/decision-output.md で正しい JSON 出力規約を確認references/hook-spec.md の正規化マッピングで kind に統一agent_compat.py の get_path() / get_command() を利用~/.copilot/hooks/*.json または ~/.claude/settings.json)
への登録
→ templates/hook-config-examples.json の該当箇所をコピペscripts/verify-hook.sh に examples/payloads/*.json を流して挙動確認| 用途 | テンプレート | 配置先 (推奨) |
|---|---|---|
| Python の PreToolUse hook | templates/agent_compat.py + 自作スクリプト | ~/.claude/hooks/<name>.py |
| Bash の PostToolUse hook | templates/agent_compat.sh + 自作スクリプト | ~/.claude/hooks/<name>.sh |
| Claude の hook 設定 | templates/hook-config-examples.json (_claude_example) | ~/.claude/settings.json の hooks 節 |
| Copilot の hook 設定 | templates/hook-config-examples.json (_copilot_example) | ~/.copilot/hooks/<name>.json |
Copilot CLI 用設定ファイルからスクリプトを呼ぶときは absolute path が安全:
{ "bash": "python $HOME/.claude/hooks/my_hook.py" }
$HOME は環境変数として展開される。${CLAUDE_PROJECT_DIR} のような Claude 専用
変数は Copilot では展開されないので注意 (references/pitfalls.md 参照)。
skill の base directory にある scripts/verify-hook.sh と
examples/payloads/*.json を使う。Claude / Copilot どちらの hook かによらず
動作する。
LLM が skill の絶対パスを推論する必要がある場合は、以下のいずれかで取得する:
# Copilot CLI から見える skill base
ls -d ~/.copilot/skills/hook-creator
# Claude Code から見える skill base
ls -d ~/.claude/skills/hook-creator
bash ~/.claude/skills/hook-creator/scripts/verify-hook.sh \
"python ~/.claude/hooks/check_bash.py" \
~/.claude/skills/hook-creator/examples/payloads/pretool-bash.json
出力:
=== exit code === で 0/2/その他=== stdout (parsed) === で JSON とその decision フィールド抽出=== verdict === で「両ツール対応か」「Claude 専用か」「no-op か」を判定bash ~/.claude/skills/hook-creator/scripts/check-hook-config.sh
JSON 形式エラー、参照スクリプトの不在、matcher の anchored 規則違反などを検出。
examples/payloads/ の 4 ファイルでひととおり試せる:
| payload | 用途 |
|---|---|
| pretool-bash.json | bash 系 PreToolUse (env でブロック確認) |
| pretool-edit.json | ファイル系 PreToolUse (/tmp/ でブロック確認) |
| posttool-edit.json | PostToolUse |
| stop.json | Stop / TaskCompleted / agentStop (hook_event_name 書き換えで試す) |
references/pitfalls.md の特に致命的な 4 項目:
${CLAUDE_SKILL_DIR} / ${COPILOT_SKILL_DIR} は Copilot で展開されない詳細は references/pitfalls.md 全項目を参照。
このリポジトリでは hook 関連ファイルを以下の場所で管理:
| 種類 | chezmoi source | 配備先 |
|---|---|---|
| 共通ヘルパ | home/dot_claude/hooks/lib/{agent_compat.py,agent_compat.sh} | ~/.claude/hooks/lib/ |
| Python hook 本体 | home/dot_claude/hooks/executable_<name>.py | ~/.claude/hooks/<name>.py (実行属性付) |
| Bash hook 本体 | home/dot_claude/hooks/executable_<name>.sh | ~/.claude/hooks/<name>.sh (実行属性付) |
| Claude 設定 | home/dot_claude/dot_settings.json (の hooks 節) | ~/.claude/settings.json |
| Copilot 設定 | home/dot_copilot/hooks/<name>.json | ~/.copilot/hooks/<name>.json |
新規スクリプトを追加するときは:
home/dot_claude/hooks/executable_<name>.{py,sh} を作成chezmoi apply ~/.claude/hooks/ で配備scripts/verify-hook.sh で動作確認feat(hooks): add <name> for <purpose>)agent_compat.{py,sh}) は両ツールの最小公倍数 (stdout JSON + exit 0) を使う前提。これを破る必要が出たらまず pitfalls.md を確認tools
GitHub issue の CRUD・コメント・ラベル・assignee 操作と、GitHub Projects v2 のカスタムフィールド更新を行う。「issue 作って」「issue を Project に入れて」「Project のステータスを In Progress にして」等で使う。標準操作は github MCP、Projects v2 は gh CLI を使い分ける。
content-media
Solution design assistant
development
Python test generation assistant
tools
Project planning assistant