creating-hooks

Creates Claude Code hooks for automation and workflow customization. Guides through hook events, configuration, and script creation. Use when user wants to create a hook, automate Claude Code, or asks about hook events.

240 stars

Best use case

creating-hooks is best used when you need a repeatable AI agent workflow instead of a one-off prompt. It is especially useful for teams working in multi. Creates Claude Code hooks for automation and workflow customization. Guides through hook events, configuration, and script creation. Use when user wants to create a hook, automate Claude Code, or asks about hook events.

Creates Claude Code hooks for automation and workflow customization. Guides through hook events, configuration, and script creation. Use when user wants to create a hook, automate Claude Code, or asks about hook events.

Users should expect a more consistent workflow output, faster repeated execution, and less time spent rewriting prompts from scratch.

Practical example

Example input

Use the "creating-hooks" skill to help with this workflow task. Context: Creates Claude Code hooks for automation and workflow customization.
Guides through hook events, configuration, and script creation.
Use when user wants to create a hook, automate Claude Code, or asks about hook events.

Example output

A structured workflow result with clearer steps, more consistent formatting, and an output that is easier to reuse in the next run.

When to use this skill

  • Use this skill when you want a reusable workflow rather than writing the same prompt again and again.

When not to use this skill

  • Do not use this when you only need a one-off answer and do not need a reusable workflow.
  • Do not use it if you cannot install or maintain the related files, repository context, or supporting tools.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/creating-hooks/SKILL.md --create-dirs "https://raw.githubusercontent.com/aiskillstore/marketplace/main/skills/brendanshields/creating-hooks/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/creating-hooks/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How creating-hooks Compares

Feature / Agentcreating-hooksStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Creates Claude Code hooks for automation and workflow customization. Guides through hook events, configuration, and script creation. Use when user wants to create a hook, automate Claude Code, or asks about hook events.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Creating Hooks

Guides creation of Claude Code hooks for automation and workflow customization.

## Quick Start

1. Choose hook event (when should it trigger?)
2. Configure in settings.json
3. Create hook script
4. Test the hook

## Workflow: Create New Hook

```
Progress:
- [ ] Select hook event
- [ ] Add to settings.json
- [ ] Create hook script
- [ ] Test and validate
```

### Step 1: Select Hook Event

| Event | When It Triggers | Common Use |
|-------|------------------|------------|
| `PreToolUse` | Before tool runs | Block/modify tools |
| `PostToolUse` | After tool succeeds | Validate, log, feedback |
| `UserPromptSubmit` | User sends message | Inject context, validate |
| `SessionStart` | Session begins | Load context, init state |
| `SessionEnd` | Session ends | Cleanup, save state |
| `Stop` | Agent finishes | Decide if should continue |

Full event reference: [reference.md](reference.md)

### Step 2: Configure settings.json

Location priority (highest wins):
1. `.claude/settings.local.json` (local, not committed)
2. `.claude/settings.json` (project)
3. `~/.claude/settings.json` (user)

Basic structure:
```json
{
  "hooks": {
    "EventName": [
      {
        "matcher": "ToolPattern",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/my-hook.sh\""
          }
        ]
      }
    ]
  }
}
```

### Step 3: Create Hook Script

Use templates from [templates/](templates/) directory.

Key requirements:
- Read JSON from stdin
- Use exit codes for control (0=success, 2=block)
- Output JSON for decisions

### Step 4: Test

Run hook manually with test input:
```bash
echo '{"tool_name":"Write"}' | bash .claude/hooks/my-hook.sh
```

## Hook Configuration

### Matcher Patterns

```json
"matcher": "Write"           // Exact match
"matcher": "Edit|Write"      // Multiple tools
"matcher": "mcp__.*"         // MCP tools (regex)
"matcher": "*"               // All tools
```

Matchers apply to: `PreToolUse`, `PostToolUse`, `PermissionRequest`

### Timeout

```json
{
  "type": "command",
  "command": "...",
  "timeout": 120
}
```
Default: 60 seconds. Max recommended: 300 seconds.

## Exit Codes

| Code | Meaning | Behavior |
|------|---------|----------|
| 0 | Success | Continue normally |
| 2 | Block | Stop action, show error |
| Other | Non-blocking error | Log only (verbose mode) |

## JSON Output

Return JSON to stdout for decisions:

```json
{
  "decision": "block",
  "reason": "Why blocked",
  "additionalContext": "Info for Claude"
}
```

Decision values by event:
- `PreToolUse`: `allow`, `deny`, `ask`
- `PostToolUse`: `block` (with reason)
- `UserPromptSubmit`: `block` (with reason)
- `Stop`: `block` (requires reason)

## Security Best Practices

1. **Quote all variables**: `"$VAR"` not `$VAR`
2. **Use absolute paths**: `"$CLAUDE_PROJECT_DIR/..."`
3. **Validate inputs**: Check before processing
4. **Block path traversal**: Reject paths with `..`
5. **Set timeouts**: Prevent runaway scripts

## Environment Variables

Available in all hooks:
- `CLAUDE_PROJECT_DIR` - Project root path
- `CLAUDE_CODE_REMOTE` - "true" if web environment

SessionStart only:
- `CLAUDE_ENV_FILE` - Path to persist env vars

## Common Patterns

### Inject Context on Session Start

```bash
#!/bin/bash
# Output context for Claude
echo '{"additionalContext": "Project uses TypeScript"}'
exit 0
```

### Block Dangerous File Edits

```bash
#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
if [[ "$FILE" == *".env"* ]]; then
  echo "Blocking edit to sensitive file" >&2
  exit 2
fi
exit 0
```

### Log All Tool Usage

```bash
#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
echo "$(date -Iseconds) $TOOL" >> "$CLAUDE_PROJECT_DIR/.claude/tool.log"
exit 0
```

See [reference.md](reference.md) for complete event details and more examples.

Related Skills

hooks-management

242
from aiskillstore/marketplace

Use PROACTIVELY when you need to create, update, configure, or validate Claude hooks for various events and integrations

when-creating-slash-commands-use-slash-command-encoder

242
from aiskillstore/marketplace

Create ergonomic slash commands for fast access to micro-skills with auto-discovery and parameter validation

when-creating-skill-template-use-skill-builder

242
from aiskillstore/marketplace

Create new Claude Code Skills with proper YAML frontmatter, progressive disclosure structure, and complete directory organization

when-creating-presentations-use-pptx-generation

242
from aiskillstore/marketplace

Enterprise-grade PowerPoint deck generation using evidence-based prompting, workflow enforcement, constraint-based design

hooks-automation

242
from aiskillstore/marketplace

Automated coordination, formatting, and learning from Claude Code operations using intelligent hooks with MCP integration. Includes pre/post task hooks, session management, Git integration, memory coordination, and neural pattern training for enhanced development workflows.

creating-issues

242
from aiskillstore/marketplace

Issue creation expertise and convention enforcement. Auto-invokes when creating issues, writing issue descriptions, asking about issue best practices, or needing help with issue titles. Validates naming conventions, suggests labels, and ensures proper metadata.

creating-feedback-loops

242
from aiskillstore/marketplace

Expert at creating continuous improvement feedback loops for Claude's responses. Use when establishing self-improvement processes, tracking progress over time, or implementing iterative refinement workflows.

building-hooks

242
from aiskillstore/marketplace

Expert at creating and modifying Claude Code event hooks for automation and policy enforcement. Auto-invokes when the user wants to create, update, modify, enhance, validate, or standardize hooks, or when modifying hooks.json configuration, needs help with event-driven automation, or wants to understand hook patterns. Also auto-invokes proactively when Claude is about to write hooks.json files, or implement tasks that involve creating event hook configurations.

creating-agents

242
from aiskillstore/marketplace

Creates Claude Code subagents for task delegation. Guides through agent configuration, tool selection, and system prompts. Use this skill when the user wants to create a new agent, delegate tasks to specialists, or asks about subagents.

creating-bauplan-pipelines

242
from aiskillstore/marketplace

Creates bauplan data pipeline projects with SQL and Python models. Use when starting a new pipeline, defining DAG transformations, writing models, or setting up bauplan project structure from scratch.

creating-financial-models

242
from aiskillstore/marketplace

This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions

creating-claude-hooks

242
from aiskillstore/marketplace

Use when creating or publishing Claude Code hooks - covers executable format, event types, JSON I/O, exit codes, security requirements, and PRPM package structure