From hook-publisher
Publishes hook scripts to claude-code-plugin repos: validates structure/tests, checks duplicates, generates plugin.json with portable commands, registers marketplace.json. For hook publishing, moving, or packaging.
npx claudepluginhub sean-sunagaku/claude-code-plugin --plugin hook-publisherThis skill uses the workspace's default tool permissions.
Hook スクリプトを claude-code-plugin リポジトリの正しい構造に配置する。
Creates, validates, and refines Claude Code plugin hooks for workflow automation. Supports command hooks (shell scripts), prompt hooks (LLM decisions), event matching, decision schemas, and production safety validation.
Guides creation and configuration of Claude Code plugin hooks for events like PreToolUse, PostToolUse, Stop, and SessionStart using prompt-based and command types.
Manages Claude Code repository hooks for adding, configuring, troubleshooting, enabling/disabling, and enforcing rules. Delegates to docs-management for official documentation.
Share bugs, ideas, or general feedback.
Hook スクリプトを claude-code-plugin リポジトリの正しい構造に配置する。
PLUGIN_REPO=/Users/babashunsuke/Desktop/claude-code-plugin
claude-code-plugin/
├── <category>/ # カテゴリ別ディレクトリ
│ └── <hook-plugin-name>/ # 公開用
│ ├── hooks/
│ │ └── <hook-name>/
│ │ ├── hook.py (or hook.sh)
│ │ └── test.py (or test.sh)
│ └── plugin.json # hook 設定 + メタデータ
├── .internal/ # 内部用
│ └── <hook-plugin-name>/
│ ├── hooks/...
│ └── plugin.json
└── .claude-plugin/
└── marketplace.json
| カテゴリ | 内容 |
|---|---|
agent-toolkit | エージェントチーム構築・運用 |
review | コードレビュー・品質チェック |
| その他 | product, planning, design, development, marketing |
Hook プラグインの plugin.json には hook の登録設定を含める:
{
"name": "<hook-plugin-name>",
"version": "<version>",
"description": "...",
"hooks": {
"<HookEvent>": [
{
"matcher": "<ToolName>",
"hooks": [
{
"type": "command",
"command": "python3 \"$HOME/.claude/plugins/cache/<marketplace>/<hook-plugin-name>/<version>/hooks/<hook-name>/hook.py\""
}
]
}
]
}
}
HookEvent: PreToolUse, PostToolUse, Stop など。
重要: hook の command はプロジェクトの cwd から相対パスで実行される。 プラグインのキャッシュディレクトリは自動解決されないため、以下のルールに従うこと:
$HOME を使う - ユーザー間でポータブルにするため絶対パスの先頭は $HOME にする$HOME/.claude/plugins/cache/<marketplace>/<plugin-name>/<version>/hooks/<hook-name>/hook.pysunagaku-marketplace例(sunagaku-marketplace の agent-teams-log v1.0.0):
python3 "$HOME/.claude/plugins/cache/sunagaku-marketplace/agent-teams-log/1.0.0/hooks/log-agent-messages/hook.py"
NG パターン(プロジェクトローカル依存):
python3 .claude/hooks/log-agent-messages/hook.py
→ プロジェクトにファイルがないと動かない。プラグインのインストールだけで完結しない。
ユーザーに以下を確認:
.claude/hooks/log-agent-messages/)python3 .claude/hooks/<name>/hook.py 等).internal/ 配下)か検証スクリプト: scripts/validate-hook.sh <hook-path>
検証内容:
PLUGIN_REPO に同名の hook プラグインが既に存在するか確認。 存在する場合はユーザーに上書きするか確認。
配置スクリプトを実行:
# 公開用(カテゴリ配下に配置)
scripts/publish-hook.sh <source-path> <plugin-name> <hook-event> <matcher> --category <category>
# 内部用
scripts/publish-hook.sh <source-path> <plugin-name> <hook-event> <matcher> --internal
source-path: コピー元(hook.py があるディレクトリ)plugin-name: プラグイン名(例: agent-teams-log)hook-event: PostToolUse, PreToolUse, Stop 等matcher: ツール名マッチャー(例: SendMessage)。空文字なら全ツール対象--category: カテゴリ名(公開用は必須。agent-toolkit, review 等)--internal: .internal/ 配下に配置(カテゴリ不要)スクリプトが行うこと:
コピー後に構造を表示し、正しく配置されたか確認する。 marketplace.json の登録内容も表示して確認する。