Cinco hábitos, cinco comandos
Toda lista de hábitos do Claude Code diz o que fazer. Esta transforma cada hábito em um comando que o Claude Code executa, para que o hábito se sustente quer o modelo leia a regra ou não. Rodamos os cinco em um repo de verdade, o ledgerly, uma pequena API de faturamento em Node 20 e TypeScript, com o Claude Code 2.1.294.
O motivo está nas próprias boas práticas da Anthropic: uma linha como "Always typecheck before you finish" no seu CLAUDE.md "funciona quase sempre, não sempre". Os cinco comandos abaixo são /goal, um hook PreToolUse, /context com /clear, /skill-doctor e um subagent revisor somente leitura.
Por que um hábito anotado falha
O CLAUDE.md é o arquivo de instruções que o Claude lê no início de cada sessão, um readme escrito para um colega novo: comandos, convenções e regras. É onde a maioria dos hábitos vai parar, muitas vezes com os mais importantes em maiúsculas, como "NEVER edit src/store/migrations.ts".
A documentação de memória da Anthropic é explícita sobre o que esse arquivo é: o Claude o lê como contexto, não como configuração imposta. Cada linha é um conselho pesado contra a tarefa em andamento. A diferença é a mesma entre um checklist de code review numa página de wiki e uma verificação no seu pipeline de CI: o primeiro depende de alguém ler, o segundo roda de qualquer jeito.
O gesto: abra o seu CLAUDE.md e marque cada linha que precisa valer todas as vezes. Deixe o resto onde está, já que o arquivo continua sendo o lugar certo para o que o Claude não consegue deduzir do seu código, e a documentação recomenda menos de 200 linhas por arquivo.
Hábito um: dizer o que é pronto
O Claude para quando o trabalho parece pronto. Se nada diz a ele se o trabalho está mesmo pronto, notam as boas práticas da Anthropic, você vira a suíte de testes.
O /goal define uma linha de chegada uma vez só. Depois de cada turno, um modelo pequeno e rápido lê a conversa e responde: atendida, ainda não atendida ou impossível. Ele não executa comandos nem lê arquivos, então escreva a condição como algo que a própria saída do Claude consiga mostrar, como a saída completa dos testes.
| Rodado no ledgerly | O que vimos |
|---|---|
| Sessão normal, mesmo pedido de feature | Os testes rodaram dentro de uma chamada de ferramenta recolhida; a resposta dizia "pnpm test passes (37/37)" |
Com /goal e a condição "full pnpm test output printed" |
A resposta imprimiu a execução inteira, "Tests 44 passed (44)", e depois "Goal achieved (45s · 1 turn · 5.1k tokens)" |
Digite /goal sozinho para ver o status e /goal clear para removê-lo. Para um conserto de uma linha você não precisa dele; a documentação diz que ele importa mais em execuções longas, em que o Claude às vezes encerra um turno com itens ainda em aberto.
Hábito dois: uma regra que não quebra
Uma regra em maiúsculas é respeitada na maioria das vezes, e esse é justamente o problema. Um hook é um pequeno script que o Claude Code executa sozinho em um momento fixo; um hook PreToolUse roda antes de cada chamada de ferramenta. O nosso lê o caminho do arquivo e, quando é src/store/migrations.ts, imprime "migrations.ts is append-only: add a new migration file instead" e sai com o código 2. O guia de hooks diz que o código de saída 2 bloqueia a chamada e devolve a mensagem ao Claude, e o bloqueio vale mesmo com os pedidos de permissão desligados.
Nas nossas execuções: com a regra no CLAUDE.md, o Claude recusou a edição por conta própria. Com a regra removida, o Claude foi atrás do arquivo de migrations duas vezes e o hook bloqueou as duas edições; o Claude editou o resto e relatou "A project hook blocked both of my edits to that file." Em duas execuções posteriores, ele leu o script do hook primeiro e nunca tentou o arquivo.
Um hook só bloqueia o que consegue casar, um caminho ou um comando. Regras de julgamento, como "escreva código limpo", ficam no CLAUDE.md, e um padrão estreito evita que o hook bloqueie o seu próprio trabalho.
Hábito três: uma tarefa, um contexto
O contexto é tudo o que o modelo vê a cada turno: suas instruções, os arquivos que ele leu e a conversa inteira. O /context o mostra como uma grade; o /clear esvazia a conversa, e os arquivos e as configurações continuam.
/context no ledgerly |
Total | Mensagens |
|---|---|---|
| Depois da tarefa concluída | 57.5k de 1m tokens | 26.4k tokens |
Depois do /clear |
31.1k de 1m tokens | 130 tokens |
Segundo a documentação, usar /clear entre tarefas sem relação não custa nada, e depois de duas correções que falharam você limpa e escreve um prompt melhor. No meio de uma tarefa, use /compact com um foco.
Hábito quatro: carregue só o que você usa
Uma skill é uma instrução empacotada que o Claude carrega quando uma tarefa combina com ela. A skill completa só é carregada quando roda, mas a sua linha de listagem fica no prompt a cada turno, e o orçamento das listagens é de cerca de 1% da janela de contexto, então as skills menos usadas perdem as descrições primeiro.
O /skill-doctor lista todas as skills com o seu custo de contexto e a frequência com que você as usou. Na nossa máquina ele relatou:
| Tipo | Carregadas mas nunca invocadas |
|---|---|
| Skills pessoais | 13 |
| Sincronizadas do claude.ai | 14 |
| Skills de plugin | 25 |
Ele também listou 4 plugins não usados recentemente. Desligue uma skill em /skills; as skills sincronizadas voltam se você as apagar, então desligue-as no claude.ai; as skills de plugin passam pelo gerenciador de plugins. Uma linha de listagem é pequena, então isso reduz ruído em vez de liberar metade do seu contexto.
Hábito cinco: olhos novos no diff
Um subagent é uma segunda sessão do Claude iniciada para um único trabalho, com seu próprio contexto vazio, que devolve um resumo. A documentação da Anthropic diz sem rodeios: entregar a mesma tarefa a um subagent não melhora a resposta, mas um revisor novo ajuda porque não viu o seu raciocínio.
Nosso revisor mora em .claude/agents/reviewer.md com ferramentas somente leitura: Read, Grep, Glob, Bash(git diff:*) e Bash(git status:*). No diff das faturas vencidas, a própria revisão da sessão autora achou um bug real: faturas com a mesma data de vencimento eram ordenadas por id como texto. O revisor achou o mesmo bug e o teste que faltava em 28 segundos, e depois conferiu uma a uma todas as convenções do README. Ele também afirmou que a checagem de tipos estava limpa, algo que as ferramentas dele não podiam rodar, e a sessão principal o marcou como não verificado. Chame-o uma vez por feature, antes do merge.
Qual hábito configurar primeiro
Comece pelo hook, na regra que já foi quebrada mais de uma vez no seu repo. O /clear e o /skill-doctor não custam nada. Guarde o /goal para execuções longas e o revisor para o merge. A regra a manter: se um hábito precisa valer todas as vezes, faça dele algo que o Claude Code executa, não algo que o Claude lê.
AIDive