Essa habilidade deve ser usada quando o usuário pede para "criar uma regra hookify", "escrever uma regra hook", "configurar hookify", "adicionar uma regra hookify", ou precisa de orientação sobre sintaxe e padrões de regras hookify.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill writing-rules --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Writing Rules?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/artubss-writing-rules)More formats (shields.io, HTML) on the badges page.
---
name: Writing Hookify Rules
description: Essa habilidade deve ser usada quando o usuário pede para "criar uma regra hookify", "escrever uma regra hook", "configurar hookify", "adicionar uma regra hookify", ou precisa de orientação sobre sintaxe e padrões de regras hookify.
version: 0.1.0
---
# Escrevendo Regras Hookify
## Visão Geral
Regras Hookify são arquivos markdown com YAML frontmatter que definem padrões a serem monitorados e mensagens a exibir quando esses padrões são detectados. Regras são armazenadas em arquivos `.claude/hookify.{nome-da-regra}.local.md`.
## Formato de Arquivo de Regra
### Estrutura Básica
```markdown
---
name: identificador-da-regra
enabled: true
event: bash|file|stop|prompt|all
pattern: padrão-regex-aqui
---
Mensagem a mostrar ao Claude quando essa regra é acionada.
Pode incluir formatação markdown, avisos, sugestões, etc.
```
### Campos do Frontmatter
**name** (obrigatório): Identificador único para a regra
- Use kebab-case: `warn-dangerous-rm`, `block-console-log`
- Seja descritivo e orientado à ação
- Comece com verbo: warn, prevent, block, require, check
**enabled** (obrigatório): Booleano para ativar/desativar
- `true`: Regra ativa
- `false`: Regra desabilitada (não será acionada)
- Pode alternar sem deletar a regra
**event** (obrigatório): Em qual evento hook acionar
- `bash`: Comandos da ferramenta Bash
- `file`: Ferramentas Edit, Write, MultiEdit
- `stop`: Quando o agente quer parar
- `prompt`: Quando o usuário envia um prompt
- `all`: Todos os eventos
**action** (opcional): O que fazer quando a regra corresponde
- `warn`: Mostrar mensagem mas permitir operação (padrão)
- `block`: Prevenir operação (PreToolUse) ou parar sessão (Stop events)
- Se omitido, usa padrão `warn`
**pattern** (formato simples): Padrão regex para corresponder
- Usado para regras simples de uma única condição
- Corresponde contra comando (bash) ou novo_texto (file)
- Sintaxe de regex do Python
**Exemplo:**
```yaml
event: bash
pattern: rm\s+-rf
```
### Formato Avançado (Múltiplas Condições)
Para regras complexas com múltiplas condições:
```markdown
---
name: warn-env-file-edits
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.env$
- field: new_text
operator: contains
pattern: API_KEY
---
Você está adicionando uma chave de API a um arquivo .env. Certifique-se de que esse arquivo está em .gitignore!
```
**Campos de condição:**
- `field`: Qual campo verificar
- Para bash: `command`
- Para file: `file_path`, `new_text`, `old_text`, `content`
- `operator`: Como corresponder
- `regex_match`: Correspondência de padrão regex
- `contains`: Verificação de substring
- `equals`: Correspondência exata
- `not_contains`: Substring NÃO deve estar presente
- `starts_with`: Verificação de prefixo
- `ends_with`: Verificação de sufixo
- `pattern`: Padrão ou string para corresponder
**Todas as condições devem corresponder para a regra ser acionada.**
## Corpo da Mensagem
O conteúdo markdown após o frontmatter é mostrado ao Claude quando a regra é acionada.
**Boas mensagens:**
- Explicam o que foi detectado
- Explicam por que é problemático
- Sugerem alternativas ou melhores práticas
- Usam formatação para clareza (negrito, listas, etc.)
**Exemplo:**
```markdown
⚠️ **Console.log detectado!**
Você está adicionando console.log ao código de produção.
**Por que isso importa:**
- Logs de debug não devem ir para produção
- Console.log pode expor dados sensíveis
- Impacta performance do navegador
**Alternativas:**
- Use uma biblioteca de logging apropriada
- Remova antes de fazer commit
- Use builds de debug condicionais
```
## Guia de Tipo de Evento
### Eventos bash
Correspondem a padrões de comando Bash:
```markdown
---
event: bash
pattern: sudo\s+|rm\s+-rf|chmod\s+777
---
Comando perigoso detectado!
```
**Padrões comuns:**
- Comandos perigosos: `rm\s+-rf`, `dd\s+if=`, `mkfs`
- Escalação de privilégios: `sudo\s+`, `su\s+`
- Problemas de permissão: `chmod\s+777`, `chown\s+root`
### Eventos file
Correspondem a operações de Edit/Write/MultiEdit:
```markdown
---
event: file
pattern: console\.log\(|eval\(|innerHTML\s*=
---
Padrão de código potencialmente problemático detectado!
```
**Corresponder em diferentes campos:**
```markdown
---
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.tsx?$
- field: new_text
operator: regex_match
pattern: console\.log\(
---
Console.log em arquivo TypeScript!
```
**Padrões comuns:**
- Código de debug: `console\.log\(`, `debugger`, `print\(`
- Riscos de segurança: `eval\(`, `innerHTML\s*=`, `dangerouslySetInnerHTML`
- Arquivos sensíveis: `\.env$`, `credentials`, `\.pem$`
- Arquivos gerados: `node_modules/`, `dist/`, `build/`
### Eventos stop
Correspondem quando o agente quer parar (verificações de conclusão):
```markdown
---
event: stop
pattern: .*
---
Antes de parar, verifique:
- [ ] Testes foram executados
- [ ] Build foi bem-sucedido
- [ ] Documentação foi atualizada
```
**Use para:**
- Lembretes sobre etapas obrigatórias
- Listas de verificação de conclusão
- Aplicação de processo
### Eventos prompt
Correspondem ao conteúdo do prompt do usuário (avançado):
```markdown
---
event: prompt
conditions:
- field: user_prompt
operator: contains
pattern: deploy to production
---
Checklist de deployment em produção:
- [ ] Testes passando?
- [ ] Revisado pela equipe?
- [ ] Monitoramento pronto?
```
## Dicas para Escrever Padrões
### Noções Básicas de Regex
**Caracteres literais:** A maioria dos caracteres corresponde a si mesmos
- `rm` corresponde a "rm"
- `console.log` corresponde a "console.log"
**Caracteres especiais precisam escapar:**
- `.` (qualquer char) → `\.` (ponto literal)
- `(` `)` → `\(` `\)` (parênteses literais)
- `[` `]` → `\[` `\]` (colchetes literais)
**Metacaracteres comuns:**
- `\s` - espaço em branco (espaço, tabulação, quebra de linha)
- `\d` - dígito (0-9)
- `\w` - caractere de palavra (a-z, A-Z, 0-9, _)
- `.` - qualquer caractere
- `+` - um ou mais
- `*` - zero ou mais
- `?` - zero ou um
- `|` - OU
**Exemplos:**
```
rm\s+-rf Corresponde a: rm -rf, rm -rf
console\.log\( Corresponde a: console.log(
(eval|exec)\( Corresponde a: eval( ou exec(
chmod\s+777 Corresponde a: chmod 777, chmod 777
API_KEY\s*= Corresponde a: API_KEY=, API_KEY =
```
### Testando Padrões
Teste padrões regex antes de usar:
```bash
python3 -c "import re; print(re.search(r'seu_padrao', 'texto_teste'))"
```
Ou use testadores regex online (regex101.com com sabor Python).
### Armadilhas Comuns
**Muito abrangente:**
```yaml
pattern: log # Corresponde a "log", "login", "dialog", "catalog"
```
Melhor: `console\.log\(|logger\.`
**Muito específico:**
```yaml
pattern: rm -rf /tmp # Corresponde apenas ao caminho exato
```
Melhor: `rm\s+-rf`
**Problemas de escapar:**
- Strings entre aspas YAML: `"pattern"` requer aspas invertidas duplas `\\s`
- Padrão sem aspas: `pattern: \s` funciona como está
- **Recomendação**: Use padrões sem aspas em YAML
## Organização de Arquivo
**Localização:** Todas as regras no diretório `.claude/`
**Nomenclatura:** `.claude/hookify.{nome-descritivo}.local.md`
**Gitignore:** Adicione `.claude/*.local.md` ao `.gitignore`
**Bons nomes:**
- `hookify.dangerous-rm.local.md`
- `hookify.console-log.local.md`
- `hookify.require-tests.local.md`
- `hookify.sensitive-files.local.md`
**Nomes ruins:**
- `hookify.rule1.local.md` (não descritivo)
- `hookify.md` (faltando .local)
- `danger.local.md` (faltando prefixo hookify)
## Fluxo de Trabalho
### Criando uma Regra
1. Identifique o comportamento indesejado
2. Determine qual ferramenta está envolvida (Bash, Edit, etc.)
3. Escolha o tipo de evento (bash, file, stop, etc.)
4. Escreva padrão regex
5. Crie arquivo `.claude/hookify.{nome}.local.md` na raiz do projeto
6. Teste imediatamente - regras são lidas dinamicamente no próximo uso da ferramenta
### Refinando uma Regra
1. Edite o arquivo `.local.md`
2. Ajuste padrão ou mensagem
3. Teste imediatamente - mudanças entram em vigor no próximo uso da ferramenta
### Desabilitando uma Regra
**Temporário:** Configure `enabled: false` no frontmatter
**Permanente:** Delete o arquivo `.local.md`
## Exemplos
Veja `${CLAUDE_PLUGIN_ROOT}/examples/` para exemplos completos:
- `dangerous-rm.local.md` - Bloqueie comandos rm perigosos
- `console-log-warning.local.md` - Avise sobre console.log
- `sensitive-files-warning.local.md` - Avise sobre edição de arquivos .env
## Referência Rápida
**Regra mínima viável:**
```markdown
---
name: minha-regra
enabled: true
event: bash
pattern: comando_perigoso
---
Mensagem de aviso aqui
```
**Regra com condições:**
```markdown
---
name: minha-regra
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.ts$
- field: new_text
operator: contains
pattern: any
---
Mensagem de aviso
```
**Tipos de evento:**
- `bash` - Comandos Bash
- `file` - Edições de arquivo
- `stop` - Verificações de conclusão
- `prompt` - Entrada do usuário
- `all` - Todos os eventos
**Opções de field:**
- Bash: `command`
- File: `file_path`, `new_text`, `old_text`, `content`
- Prompt: `user_prompt`
**Operadores:**
- `regex_match`, `contains`, `equals`, `not_contains`, `starts_with`, `ends_with`Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!