Skip to content
Development
Skill

/hookify-rules

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.

From plugin
ecc
239k200 skills72 agents109 commands7 hooks
+1
Install
$ npx -y skills add affaan-m/ECC --skill hookify-rules --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/hookify-rules

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

hookify-rules.SKILL.md
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

---
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)

---
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

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:

---
name: my-rule
enabled: true
event: bash
pattern: dangerous_command
---
Warning message here
Read more
Ships withecc

Your agent can write code, but ECC gives it a coordinated engineering system and toolbox: it plans before it builds, verifies changes with tests, reviews its own work from a fresh context, remembers what matters, and turns repeated wins into reusable skills

Get the whole plugin