mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-07 01:33:31 +08:00
129 lines
3.5 KiB
Markdown
129 lines
3.5 KiB
Markdown
---
|
|
name: hookify-rules
|
|
description: This skill should be used when the user asks to create a hookify rule, write a hook rule, configure hookify, add a hookify rule, or needs guidance on hookify rule syntax and patterns.
|
|
---
|
|
|
|
# Writing Hookify Rules
|
|
|
|
## Overview
|
|
|
|
Hookify rules are markdown files with YAML frontmatter that define patterns to watch for and messages to show when those patterns match. Rules are stored in `.claude/hookify.{rule-name}.local.md` files.
|
|
|
|
## Rule File Format
|
|
|
|
### Basic Structure
|
|
|
|
```markdown
|
|
---
|
|
name: rule-identifier
|
|
enabled: true
|
|
event: bash|file|stop|prompt|all
|
|
pattern: regex-pattern-here
|
|
---
|
|
|
|
Message to show Claude when this rule triggers.
|
|
Can include markdown formatting, warnings, suggestions, etc.
|
|
```
|
|
|
|
### Frontmatter Fields
|
|
|
|
| Field | Required | Values | Description |
|
|
|-------|----------|--------|-------------|
|
|
| name | Yes | kebab-case string | Unique identifier (verb-first: warn-*, block-*, require-*) |
|
|
| enabled | Yes | true/false | Toggle without deleting |
|
|
| event | Yes | bash/file/stop/prompt/all | Which hook event triggers this |
|
|
| action | No | warn/block | warn (default) shows message; block prevents operation |
|
|
| pattern | Yes* | regex string | Pattern to match (*or use conditions for complex rules) |
|
|
|
|
### Advanced Format (Multiple Conditions)
|
|
|
|
```markdown
|
|
---
|
|
name: warn-env-api-keys
|
|
enabled: true
|
|
event: file
|
|
conditions:
|
|
- field: file_path
|
|
operator: regex_match
|
|
pattern: \.env$
|
|
- field: new_text
|
|
operator: contains
|
|
pattern: API_KEY
|
|
---
|
|
|
|
You're adding an API key to a .env file. Ensure this file is in .gitignore!
|
|
```
|
|
|
|
**Condition fields by event:**
|
|
- bash: `command`
|
|
- file: `file_path`, `new_text`, `old_text`, `content`
|
|
- prompt: `user_prompt`
|
|
|
|
**Operators:** `regex_match`, `contains`, `equals`, `not_contains`, `starts_with`, `ends_with`
|
|
|
|
All conditions must match for rule to trigger.
|
|
|
|
## Event Type Guide
|
|
|
|
### bash Events
|
|
Match Bash command patterns:
|
|
- Dangerous commands: `rm\s+-rf`, `dd\s+if=`, `mkfs`
|
|
- Privilege escalation: `sudo\s+`, `su\s+`
|
|
- Permission issues: `chmod\s+777`
|
|
|
|
### file Events
|
|
Match Edit/Write/MultiEdit operations:
|
|
- Debug code: `console\.log\(`, `debugger`
|
|
- Security risks: `eval\(`, `innerHTML\s*=`
|
|
- Sensitive files: `\.env$`, `credentials`, `\.pem$`
|
|
|
|
### stop Events
|
|
Completion checks and reminders. Pattern `.*` matches always.
|
|
|
|
### prompt Events
|
|
Match user prompt content for workflow enforcement.
|
|
|
|
## Pattern Writing Tips
|
|
|
|
### Regex Basics
|
|
- Escape special chars: `.` to `\.`, `(` to `\(`
|
|
- `\s` whitespace, `\d` digit, `\w` word char
|
|
- `+` one or more, `*` zero or more, `?` optional
|
|
- `|` OR operator
|
|
|
|
### Common Pitfalls
|
|
- **Too broad**: `log` matches "login", "dialog" — use `console\.log\(`
|
|
- **Too specific**: `rm -rf /tmp` — use `rm\s+-rf`
|
|
- **YAML escaping**: Use unquoted patterns; quoted strings need `\\s`
|
|
|
|
### Testing
|
|
```bash
|
|
python3 -c "import re; print(re.search(r'your_pattern', 'test text'))"
|
|
```
|
|
|
|
## File Organization
|
|
|
|
- **Location**: `.claude/` directory in project root
|
|
- **Naming**: `.claude/hookify.{descriptive-name}.local.md`
|
|
- **Gitignore**: Add `.claude/*.local.md` to `.gitignore`
|
|
|
|
## Commands
|
|
|
|
- `/hookify [description]` - Create new rules (auto-analyzes conversation if no args)
|
|
- `/hookify-list` - View all rules in table format
|
|
- `/hookify-configure` - Toggle rules on/off interactively
|
|
- `/hookify-help` - Full documentation
|
|
|
|
## Quick Reference
|
|
|
|
Minimum viable rule:
|
|
```markdown
|
|
---
|
|
name: my-rule
|
|
enabled: true
|
|
event: bash
|
|
pattern: dangerous_command
|
|
---
|
|
Warning message here
|
|
```
|