Hook Creation Skill
Creates Claude Code hook scaffolds following a standardized pattern. Run skill-hook in any directory to generate a complete hook project.
Quick Start
bash
# Install globally bun add -g git+ssh://git@github.com/example/skill-hook.git # Create a hook (interactive) skill-hook # Or with a name directly skill-hook my-hook
What Gets Created
Running skill-hook <name> creates:
code
hook-<name>/ ├── src/ │ ├── index.ts # CLI entry point │ ├── commands/ │ │ ├── run.ts # Main hook logic │ │ ├── setup.ts # Setup command │ │ ├── test.ts # Manual testing │ │ └── config.ts # Configuration management │ ├── core/ │ │ └── <name>.ts # Hook-specific logic (implement here) │ └── utils/ │ ├── logger.ts # Configurable logging │ └── claude.ts # Claude config helpers ├── hook.config.json # Self-describing metadata ├── package.json ├── tsconfig.json ├── bunfig.toml ├── README.md └── HOOK.md
Usage
bash
skill-hook [name] [options] Options: --event <event> PreToolUse, PostToolUse, or Stop (default: PreToolUse) --matcher <match> Tool matcher: Bash, Write, Edit, * (default: *) --output <dir> Output directory (default: current) --help Show help
Hook Events
| Event | When | Can Block |
|---|---|---|
| PreToolUse | Before tool executes | Yes |
| PostToolUse | After tool executes | No |
| Stop | When agent stops | No |
After Creating
- •
cd hook-<name> - •
bun install - •Edit
src/core/<name>.ts- implement your logic - •Test:
bun run src/index.ts test - •Push to GitHub
- •Install:
bun add -g git+ssh://git@github.com/example/hook-<name>.git - •Setup:
hook-<name> setup
Hook Output Format
typescript
{ "decision": "allow" } // Allow operation
{ "decision": "block", "reason": "Why blocked" } // Block (PreToolUse only)
{ "decision": "error", "message": "Error msg" } // Error occurred