Regras condicionais por path que se aplicam automaticamente baseado nos arquivos sendo discutidos
O Path-Specific Rules e um sistema de regras condicionais do ChatCLI que aplica instrucoes automaticamente com base nos caminhos de arquivos sendo discutidos ou editados na conversa. Em vez de carregar todas as regras sempre, o sistema detecta quais arquivos estão em contexto e injeta apenas as regras relevantes.
Path Rules complementam o sistema de bootstrap (RULES.md). Enquanto RULES.md define regras globais, Path Rules define regras especificas para partes do codebase.
A ideia e simples: diferentes partes do codebase tem diferentes convencoes. Código Go segue regras diferentes de templates HTML. Testes tem padroes diferentes de código de producao. Path Rules permite definir tudo isso de forma granular.
Conversa menciona auth/handler.go | vPath matcher: "auth/**" -> auth-rules.mdPath matcher: "*.go" -> go-rules.md | vRegras injetadas no system prompt(apenas as relevantes)
As regras ficam no diretorio .chatcli/rules/ (workspace) ou ~/.chatcli/rules/ (global):
.chatcli/rules/|-- go-rules.md # Regras para arquivos Go|-- test-rules.md # Regras para arquivos de teste|-- api-rules.md # Regras para o modulo de API|-- migration-rules.md # Regras para migrations de banco+-- security-rules.md # Regras para modulos de seguranca
Cada arquivo de regra e um Markdown com frontmatter YAML contendo o campo paths:
---paths: - "*.go" - "**/*.go"description: "Regras para código Go"---# Regras Go## Estilo- Use `gofmt` como formatador padrão- Nomes de variaveis em camelCase- Interfaces com sufixo "-er" quando possuem um único método (Reader, Writer)## Erros- Sempre verifique erros retornados- Use `fmt.Errorf("context: %w", err)` para wrapping- Nunca use `panic()` em código de producao## Testes- Use table-driven tests- Nomeie subtestes descritivamente- Use `t.Helper()` em funcoes auxiliares de teste
O campo paths usa padroes glob para corresponder caminhos de arquivos:
Padrão
Corresponde a
*.go
Arquivos Go no diretorio raiz
**/*.go
Arquivos Go em qualquer subdiretorio
*_test.go
Arquivos de teste Go
src/**
Todos os arquivos dentro de src/
auth/**
Todos os arquivos dentro de auth/
*.{ts,tsx}
Arquivos TypeScript e TSX
migrations/*.sql
Arquivos SQL em migrations/
Dockerfile*
Dockerfiles (Dockerfile, Dockerfile.prod, etc.)
Use ** para correspondencia recursiva em subdiretorios. O padrão *.go corresponde apenas no diretorio raiz, enquanto **/*.go corresponde em toda a arvore.
Path Rules usa lazy loading baseado em dicas da conversa:
1
Deteccao de contexto
O ChatCLI analisa as mensagens recentes e tool calls para identificar quais arquivos estão em contexto (lidos, editados, mencionados).
2
Match de padroes
Os caminhos detectados são comparados contra os padroes paths de cada arquivo de regra.
3
Injecao seletiva
Apenas as regras que correspondem a arquivos em contexto são injetadas no system prompt.
4
Atualizacao dinamica
A cada turno, os padroes são re-avaliados. Novas regras podem ser injetadas e regras irrelevantes podem ser removidas.
Lazy loading garante que o system prompt não fique sobrecarregado com regras irrelevantes. Apenas as regras necessarias para os arquivos em discussao são carregadas, economizando tokens.
---paths: - "**/*.go"description: "Convencoes Go do projeto"---# Regras Go- Use `errors.New()` ou `fmt.Errorf()` para erros, nunca strings cruas- Funcoes exportadas DEVEM ter comentario godoc- Use `context.Context` como primeiro parâmetro quando aplicavel- Prefira `sync.Mutex` a channels para estado compartilhado simples- Não use `init()` exceto para registro de drivers
.chatcli/rules/test-rules.md:
---paths: - "**/*_test.go" - "**/*.test.ts" - "**/*.spec.ts"description: "Padroes para arquivos de teste"---# Regras de Teste- Use table-driven tests em Go- Nomeie subtestes com descricoes claras em ingles- Evite mocks excessivos — prefira fakes ou stubs simples- Cada teste deve ser independente e idemponente- Use `t.Parallel()` quando o teste não depende de estado global
.chatcli/rules/security-rules.md:
---paths: - "auth/**" - "security/**" - "**/middleware/auth*"description: "Regras de segurança para modulos criticos"---# Regras de Seguranca- NUNCA logue tokens, senhas ou API keys- Use `crypto/rand` para geracao de tokens, NUNCA `math/rand`- Valide TODOS os inputs do usuário antes de processar- Use prepared statements para queries SQL (prevencao de injection)- Implemente rate limiting em endpoints de autenticação- Tokens JWT devem ter expiracao máxima de 1 hora
.chatcli/rules/migration-rules.md:
---paths: - "migrations/**" - "db/migrations/**"description: "Regras para migrations de banco de dados"---# Regras de Migrations- Sempre inclua operação UP e DOWN- Nomes no formato: YYYYMMDDHHMMSS_descrição.sql- Evite ALTER TABLE em tabelas grandes sem downtime plan- Use transações explicitas (BEGIN/COMMIT)- Não use DROP COLUMN em producao sem deprecacao previa- Adicione indices em campos usados em WHERE e JOIN
Você pode verificar quais regras estão ativas no momento:
User: Quais path rules estão ativas?Agent: Com base nos arquivos em contexto, as seguintes regras estão ativas: Active Path Rules: go-rules.md (match: auth/handler.go, auth/jwt.go) security-rules.md (match: auth/handler.go, auth/jwt.go) test-rules.md (match: auth/handler_test.go) Total: 3 rules, ~450 tokens