Escrevendo regras
Redija, defina o escopo e mantenha as regras de comportamento do Apothem.
As regras são arquivos Markdown em src/apothem/rules/ com extensão .md.
Frontmatter da regra
---
name: "..."
description: "..."
pathFilter: "" # empty string for always-on; a glob for path-filtered
alwaysApply: true # true for always-on; false for path-filtered
---Escopos da regra
O escopo de uma regra é definido por dois campos do frontmatter, alwaysApply e pathFilter:
alwaysApply | pathFilter | Quando é aplicada |
|---|---|---|
true | "" (vazio) | Sempre ativa: toda sessão, todo arquivo |
false | um glob como "**/*.py" | Filtrada por caminho: somente quando o arquivo ativo corresponde ao glob |
Cinco regras distribuídas são sempre ativas: agnostic-posture, authority-inquiry,
session-closure, context-management e o índice de regras. Uma regra sempre ativa
custa contexto em toda sessão, então uma nova regra DEVERIA ser filtrada por caminho com globs
que nomeiem os arquivos que ela governa; um filtro apenas ** não define escopo algum, e o Claude
Code carrega essa regra na inicialização como uma regra sempre ativa. O
corpus distribuído limita o conjunto sempre ativo a essa lista e a um teto de bytes; uma
regra promovida a sempre ativa altera ambos na mesma mudança. Nomeie cada regra que você
adicionar no índice de regras (apothem-rule-index), para que uma sessão em um harness que
não define o escopo das regras por caminho ainda a encontre. Uma regra companheira
(<parent>-<aspect>) recebe o pathFilter da sua regra-mãe, ou um mais restrito, de modo que
nunca carregue sem a regra-mãe. Não dê a uma regra sua o nome
apothem-rule-index: uma instalação faz backup e sobrescreve um arquivo de regra com esse
nome.
Regra de exemplo
---
name: "python-conventions"
description: "Python style conventions for this project"
pathFilter: "**/*.py"
alwaysApply: false
---
# Python conventions
- Use type annotations on all public functions.
- Maximum line length: 88 characters.
- Prefer explicit over implicit.Aplicando regras aos harnesses
Depois de escrever uma regra, atualize cada adaptador de harness instalado. Execute apothem harnesses list para ver o conjunto instalado e, em seguida, chame update uma vez por harness:
apothem update --harness claude-code
apothem update --harness cursor --project /path/to/projectUm harness de escopo de projeto precisa de --project no update, como na segunda linha;
um harness de escopo de usuário não precisa.
Validação de regras
Execute o validador de frontmatter contra o arquivo de regra que você escreveu. A partir de um
checkout do Apothem, PYTHONPATH=src torna o pacote importável; depois de uma instalação por script,
use PYTHONPATH="$HOME/.apothem/src" no lugar dele.
PYTHONPATH=src python -m apothem.conformity.gate --check frontmatter-grep src/apothem/rules/<rule>.mdUma verificação por gravação, como frontmatter-grep, recebe o arquivo a verificar, ou
--stdin para ler o conteúdo da entrada padrão; sem nenhum dos dois, ela espera por
entrada na entrada padrão. Uma verificação independente recebe, em vez disso, um diretório raiz, como em
--check naming-grep ..