# Apply Technique: Claude Code Hooks Mastery
## What This Is
This is a comprehensive resource for developers to gain precise control over the Claude AI coding assistant's behavior using hooks. It enables the creation of custom automations, enforcement of quality checks, and integration with other services directly into the AI's workflow.
Source: https://github.com/disler/claude-code-hooks-mastery
## Before You Start
Scan my workspace and analyze:
- The project language, framework, and directory structure
- Existing AI provider config (check .env, .env.local, config files for API keys — OpenRouter, OpenAI, Anthropic, Google AI, etc.)
- Whether this repository or a similar tool is already cloned or installed
Then ask me before proceeding:
1. Which AI provider/API should this use? (Use whatever I already have configured, or ask me to set one up — options include direct provider APIs or a unified service like OpenRouter)
2. Where in my project should this be integrated?
3. Are there any customizations I need (model preferences, naming conventions, constraints)?
## Fetch the Source
Clone or inspect the repository to understand what needs to be installed:
```bash
gh repo clone disler/claude-code-hooks-mastery
```
Review the README, directory structure, and any install instructions before proceeding.
## What to Implement
This is an **AI Technique** — a pattern or methodology for working with AI models.
- Explain how this technique applies to my current project and what benefit it provides
- Implement it in a way that fits my existing codebase — suggest concrete files to modify or create
- If it requires specific model capabilities (structured output, function calling, etc.), verify my current provider supports them
- Show me a working example I can test immediately
## Additional Context
- Clone the repository `https://github.com/disler/claude-code-hooks-mastery.git` into a local directory for the user to explore and use as a reference.
- Verify if `uv` (from Astral) is installed in the user's environment, as it is a required dependency. If not present, instruct the user on how to install it or offer to run the installation command.
- Scan the cloned repository's hook examples. Prompt the user to select one (e.g., `UserPromptSubmit` hook for prompt validation) and assist them in configuring it within their `claude-code.json` settings file, linking it to the corresponding Python script from the repository.
## Reference Implementation
```
```mermaid
flowchart TB
subgraph SESSION["🟢 Session Lifecycle"]
direction TB
SETUP[["🔧 Setup<br/>(init/maintenance)"]]
START[["▶️ SessionStart<br/>(startup/resume/clear)"]]
END[["⏹️ SessionEnd<br/>(exit/sigint/error)"]]
end
subgraph MAIN["🔄 Main Conversation Loop"]
direction TB
PROMPT[["📝 UserPromptSubmit"]]
CLAUDE["Claude Processes"]
subgraph TOOLS["🛠️ Tool Execution"]
direction TB
PRE[["🔒 PreToolUse"]]
PERM[["❓ PermissionRequest"]]
EXEC["Tool Executes"]
POST[["✅ PostToolUse"]]
FAIL[["❌ PostToolUseFailure"]]
end
subgraph SUBAGENT["🤖 Subagent Lifecycle"]
direction TB
SSTART[["🚀 SubagentStart"]]
SWORK["Subagent Works"]
SSTOP[["🏁 SubagentStop"]]
end
NOTIFY[["🔔 Notification<br/>(Async)"]]
STOP[["🛑 Stop"]]
end
subgraph COMPACT["🗜️ Maintenance"]
PRECOMPACT[["📦 PreCompact"]]
end
SETUP --> START
START --> PROMPT
PROMPT --> CLAUDE
CLAUDE --> PRE
PRE --> PERM
PERM --> EXEC
EXEC --> POST
EXEC -.-> FAIL
CLAUDE -.-> SSTART
SSTART --> SWORK
SWORK --> SSTOP
POST --> CLAUDE
CLAUDE --> STOP
CLAUDE -.-> NOTIFY
STOP --> PROMPT
STOP -.-> END
PROMPT -.-> PRECOMPACT
PRECOMPACT -.-> PROMPT
```
```
## Guidelines
- Adapt everything to my existing project — do not assume a specific stack or directory layout
- Use whichever AI provider I already have configured; if I need a new one, tell me what to sign up for and I'll give you the key
- Check my .env files for existing API keys (OpenRouter, OpenAI, Anthropic, Google AI) before asking me to add one
- Review any fetched code for safety before installing or executing it
- After setup, run a quick verification and show me a summary of exactly what was installed, where, and how to use it