mastering-hooks
Contents
Overview
RuleZ is a high-performance AI policy engine that intercepts AI coding assistant events and executes configured actions. It works across multiple platforms through adapter-based event translation.
User Prompt --> AI Assistant --> RuleZ Binary --> [Match Rules] --> Execute Actions
| |
v v
PreToolUse inject/run/block
PostToolUse context/validation
BeforeAgent
PermissionRequest
Supported platforms:
- Claude Code (native) - Full event support
- Gemini CLI - Via adapter with dual-fire events
- GitHub Copilot - Via adapter
- OpenCode - Via adapter with dual-fire events
System components:
- RuleZ Binary (Rust): Fast, deterministic hook execution at runtime
- hooks.yaml: Declarative configuration defining rules, matchers, and actions
- Platform Adapters: Translate platform-specific events to unified RuleZ event types
- This Skill: Intelligent assistant for setup, debugging, and optimization
Decision Tree
What do you need?
|
+-- New to RuleZ? --> [1. Install & Initialize]
|
+-- Have hooks.yaml but hooks not working? --> [4. Troubleshoot]
|
+-- Need to add new behavior? --> [2. Create Rules]
|
+-- Want to understand existing config? --> [3. Explain Configuration]
|
+-- Performance or complexity issues? --> [5. Optimize]
|
+-- Setting up for Gemini/Copilot/OpenCode? --> [6. Multi-Platform Setup]
Capabilities
1. Install & Initialize RuleZ
Use when: Setting up RuleZ for the first time in a project or user-wide.
Checklist:
- Verify RuleZ binary is installed:
rulez --version - Initialize configuration:
rulez init(creates.claude/hooks.yaml) - Register with Claude Code:
rulez install(project-local) orrulez install --global - Validate configuration:
rulez validate - Verify installation: Check
.claude/settings.jsonfor hook entries
Reference: cli-commands.md
2. Create Hook Rules
Use when: Adding new behaviors like context injection, command validation, or workflow automation.
Checklist:
- Identify the event type (PreToolUse, PostToolUse, BeforeAgent, etc.)
- Define matchers (tools, extensions, directories, patterns)
- Choose action type (inject, run, block, require_fields)
- Write the rule in hooks.yaml
- Validate:
rulez validate - Test with:
rulez debug <event> --tool <tool_name>
Rule anatomy:
rules:
- name: rule-name # kebab-case identifier
matchers:
operations: [PreToolUse] # When to trigger
tools: [Write, Edit] # What to match
extensions: [.py] # Optional: file filters
actions:
inject: .claude/context/python-standards.md # What to do
Reference: hooks-yaml-schema.md | rule-patterns.md
3. Explain Configuration
Use when: Understanding what existing hooks do, why they exist, or how they interact.
Checklist:
- Run
rulez explain rule <rule-name>for specific rule analysis - Run
rulez explain rulesfor full configuration overview - Check rule precedence (first match wins within same event)
- Identify potential conflicts or overlaps
Example output from rulez explain rule python-standards:
Rule: python-standards
Event: PreToolUse
Triggers when: Write or Edit tool used on .py files
Action: Injects content from .claude/context/python-standards.md
Reference: cli-commands.md
4. Troubleshoot Hook Issues
Use when: Hooks not firing, unexpected behavior, or error messages.
Diagnostic checklist:
- Validate config:
rulez validate- catches YAML/schema errors - Check registration:
cat .claude/settings.json | grep hooks - Enable debug logging:
rulez debug PreToolUse --tool Write --verbose - Check logs:
rulez logs --limit 20 - Verify file paths: Ensure all
path:references exist
Common issues:
| Symptom | Likely Cause | Fix |
|---|---|---|
| Hook never fires | Event/matcher mismatch | Use rulez debug to trace matching |
| "file not found" | Invalid path in action | Check relative paths from project root |
| Context not injected | Script returns invalid JSON | Validate script output format |
| Permission denied | Script not executable | chmod +x script.sh |
| Event not firing on Gemini | Wrong event name | Check platform-adapters.md for mappings |
Reference: troubleshooting-guide.md
5. Optimize Configuration
Use when: Too many rules, slow execution, or complex maintenance.
Optimization checklist:
- Consolidate overlapping rules with broader matchers
- Use
enabled_whenfor conditional rules instead of duplicates - Move shared context to reusable markdown files
- Order rules by frequency (most common first)
- Use
blockearly to short-circuit unnecessary processing
Reference: rule-patterns.md
6. Multi-Platform Setup
Use when: Configuring RuleZ to work with Gemini CLI, GitHub Copilot, or OpenCode in addition to Claude Code.
Key concepts:
- RuleZ uses platform adapters to translate each platform's native events into unified RuleZ event types
- Write rules using RuleZ event types (e.g.,
PreToolUse) — adapters handle translation automatically - Some platforms fire dual events (e.g., Gemini's
BeforeAgentfires bothBeforeAgentandUserPromptSubmit)
Checklist:
- Install RuleZ:
rulez install - Write rules using standard RuleZ event types
- Test with
rulez debug <event>to verify matching - Review platform-adapters.md for platform-specific event mappings
Reference: platform-adapters.md
When NOT to Use This Skill
- Simple Claude Code configuration: Use
settings.jsondirectly for basic permissions - One-time context injection: Just paste into your prompt
- Dynamic runtime decisions: RuleZ is deterministic; use MCP servers for complex logic
References
| Document | Purpose |
|---|---|
| quick-reference.md | Events, matchers, actions, file locations |
| hooks-yaml-schema.md | Complete YAML configuration reference |
| cli-commands.md | All CLI commands with examples |
| rule-patterns.md | Common patterns and recipes |
| troubleshooting-guide.md | Diagnostic procedures |
| platform-adapters.md | Multi-platform event mappings and dual-fire |
Example: Complete hooks.yaml
# .claude/hooks.yaml
version: "1"
rules:
# Inject Python standards before writing Python files
- name: python-standards
matchers:
operations: [PreToolUse]
tools: [Write, Edit]
extensions: [.py]
actions:
inject: .claude/context/python-standards.md
# Block dangerous git commands
- name: block-force-push
priority: 10
matchers:
operations: [PreToolUse]
tools: [Bash]
command_match: "git push.*--force"
actions:
block: true
# Run security check before committing
- name: pre-commit-security
matchers:
operations: [PreToolUse]
tools: [Bash]
command_match: "git commit"
actions:
run: .claude/validators/check-secrets.sh
# Track agent activity (works on Claude Code and Gemini)
- name: log-agent-start
description: Ensure agents follow project conventions
matchers:
operations: [BeforeAgent]
actions:
inject_inline: |
**Agent Policy**: Follow project conventions in CLAUDE.md.