Melhores Práticas para Comandos, Hooks e Subagentes Personalizados
Estas são as convenções que valem a pena adotar assim que um projeto começa a depender de comandos, hooks e subagentes personalizados além de um experimento pontual.
Cada regra abaixo reflete um modo de falha real, um matcher ambíguo, um prompt de tarefa vago, um hook que roda de forma muito ampla, que aparece rapidamente assim que esses pontos de extensão são usados para trabalho real.
Como Usar Esta Lista
- Trate as regras como padrões para desviar deliberadamente, não como leis, pois a tolerância ao risco de cada projeto difere.
- Revise as seções de hooks e comandos sempre que
settings.jsonou.claude/commands/crescer além de um punhado de entradas; as convenções decaem mais rapidamente sob acúmulo silencioso. - Aplique as regras de subagente por tarefa, pois a quantidade certa de delegação varia com a independência e o tamanho do trabalho real.
- Emparelhe as regras de PreToolUse com uma lista concreta de caminhos protegidos para o seu projeto; uma regra sem um alvo concreto não impõe nada.
A - Nomenclatura e Descoberta
- Dê a cada comando uma
descriptionem seu frontmatter. Sem isso, um comando fica invisível no autocompletar, e os colegas de equipe voltam a implementar a mesma solicitação do zero. - Nomeie comandos pela ação, não pelo solicitante.
/pre-reviewé lido claramente meses depois;/chris-checknão sobrevive à saída da pessoa da equipe. - Mantenha nomes de arquivos e slugs de comandos estáveis após o compartilhamento. Renomear um comando quebra a memória muscular de cada colega de equipe e qualquer documentação que o referencie pelo nome.
- Agrupe comandos relacionados com um prefixo compartilhado quando o conjunto crescer.
/pr-review,/pr-summarizee/pr-changelogsão lidos como uma família no autocompletar; três nomes não relacionados não o são.
B - Escopo de Matchers de Hook
- Combine hooks com o conjunto de ferramentas mais restrito que realiza o trabalho. Um hook de formatação precisa de
Edit|Write, não de um match sem escopo em todas as chamadas de ferramenta. - Prefira um arquivo de script dedicado em vez de um comando inline longo em settings.json. Um script é testável e comparável por si só; uma linha única extensa em JSON não é.
- Proteja contra dados de evento ausentes ou malformados antes de agir. Um hook que assume que um caminho de arquivo está sempre presente falhará ruidosamente, ou silenciosamente, na primeira vez que não estiver.
- Mantenha hooks rápidos. Um hook PostToolUse é executado em cada edição correspondente; um lento (uma suíte de testes completa, uma compilação grande) adiciona essa latência a cada edição individual, não apenas às que importam.
- Controle de versão de cada script de hook junto com o projeto. Um hook que existe apenas na máquina de um contribuidor é um hook que o resto da equipe realmente não tem.
C - Usando PreToolUse para Limites Reais
- Reserve PreToolUse para regras que devem ser mantidas mesmo contra um prompt enganoso. Qualquer coisa formulada como "isso nunca deve acontecer" pertence aqui, não em uma etapa de limpeza PostToolUse.
- Emita uma decisão explícita de bloqueio, não apenas um código de saída diferente de zero. Uma resposta estruturada
{"decision": "block", "reason": "..."}é o sinal confiável; códigos de saída sozinhos podem ser interpretados de forma inconsistente. - Escreva razões de bloqueio para um humano lendo a transcrição posteriormente. "Bloqueado" não explica nada; "este caminho está protegido, peça a um humano para fazer essa alteração diretamente" explica.
- Ancore padrões de caminhos protegidos à estrutura de diretórios real, não apenas a uma extensão de arquivo. Um padrão como
*.jsonprotegendo um único arquivo de lock acabará bloqueando todos os arquivos JSON no projeto. - Emparelhe uma proteção PreToolUse com proteções normais em nível de repositório. Um hook só é acionado dentro do próprio caminho de chamada de ferramenta do Claude Code; ele não é um substituto para proteção de branch ou permissões de arquivo impostas em outro lugar.
D - Delegando Trabalho para Subagentes
- Escreva prompts de tarefas de subagente como se o subagente não tivesse visto mais nada. Porque não viu; qualquer coisa que a sessão pai saiba e não reafirme simplesmente não está disponível para o subagente.
- Escope as ferramentas de um subagente ao que seu trabalho realmente exige. Um subagente de pesquisa que nunca edita arquivos não deve ter
EditouWriteem sua lista de ferramentas, como uma questão de aplicação, não apenas de organização. - Peça um resumo, não o conteúdo completo dos arquivos, na instrução de relatório. Um subagente que despeja arquivos inteiros de volta para o pai derrota o propósito de economia de contexto de delegar em primeiro lugar.
- Execute subagentes em paralelo apenas quando as peças forem genuinamente independentes. Uma tarefa onde um subagente precisa das descobertas de outro primeiro deve ser executada sequencialmente, não concorrentemente.
- Combine o número de subagentes paralelos com a quantidade de síntese que a sessão principal pode realmente fazer depois. Gerar mais subagentes do que você pode ler e combinar de forma significativa apenas atrasa a resposta.
- Reserve subagentes para tarefas grandes ou isoladas o suficiente para justificar a sobrecarga. Uma pesquisa de uma linha raramente precisa de sua própria janela de contexto; uma exploração de quarenta etapas geralmente precisa.
E - Impedindo que os Três Pontos de Extensão Colidam
- Não peça a um hook para fazer uma chamada de julgamento. Um hook não tem raciocínio de modelo anexado a ele; se a decisão requer ponderar contexto, ela pertence ao prompt de um comando ou à tarefa de um subagente, não a um script shell.
- Não use um comando onde um hook garantiria o resultado. Se algo deve acontecer todas as vezes, sem exceções, um comando que o usuário precisa se lembrar de digitar é o mecanismo errado; use um hook em vez disso.
- Documente qual dos três pontos de extensão uma nova automação usa e por quê. Um membro da equipe depurando comportamento inesperado precisa saber rapidamente se deve procurar em
.claude/commands/,settings.jsonou uma definição de subagente. - Revise os hooks de
settings.jsone.claude/commands/juntos durante o onboarding. Ambos são verificados no repositório e ambos moldam o que "digitar uma solicitação" ou "uma edição acontecendo" realmente faz; pular qualquer um deixa um novo membro da equipe com uma imagem incompleta.
FAQs
Qual dessas regras é mais importante para um projeto pequeno que está apenas começando?
Dar aos comandos uma description clara e escopar os matchers de hook de forma restrita. Ambos são baratos de fazer desde o início e caros de refazer depois que um projeto acumulou uma dúzia de comandos indocumentados ou um hook excessivamente amplo.
É aceitável pular a escrita de uma descrição para um comando?
Para um comando puramente pessoal e descartável, sim. Para qualquer coisa verificada em um repositório compartilhado, pular isso significa que os colegas de equipe não podem descobrir que o comando existe sem abrir o arquivo diretamente.
Por que a seção de nomenclatura adverte contra nomear um comando após uma pessoa?
Porque um comando sobrevive à pessoa que o escreveu; um nome ligado à ação (/pre-review) permanece significativo muito depois que um nome ligado ao autor (/chris-check) perdeu seu contexto.
Qual é o erro mais comum com matchers de hook?
Deixar o matcher sem escopo, de modo que o hook seja acionado em todas as chamadas de ferramenta em vez de apenas nas ferramentas que ele realmente se importa, adicionando ruído e latência a ações não relacionadas.
Por que a seção PreToolUse insiste em uma decisão de bloqueio explícita em vez de apenas um código de saída diferente de zero?
Porque o tratamento do código de saída pode variar por configuração, enquanto uma carga útil explícita {"decision": "block", "reason": "..."} é a maneira inequívoca e documentada de sinalizar um bloqueio.
Todo arquivo protegido deve ter sua própria entrada de hook PreToolUse separada?
Não. Um único script de proteção com uma lista de padrões de caminhos protegidos é mais fácil de auditar como um todo do que as mesmas regras espalhadas por muitas entradas de hook separadas.
Quando é aceitável pular o escopo das ferramentas de um subagente?
Quando a tarefa do subagente realmente exige o mesmo acesso amplo que a sessão pai, como um subagente explicitamente encarregado de fazer um conjunto coordenado de edições em vários arquivos. O escopo é um padrão, não um requisito absoluto.
O que acontece se eu disparar subagentes em paralelo para uma tarefa que acaba tendo uma dependência que eu perdi?
O subagente que precisava da informação perdida geralmente produzirá um relatório mais fraco ou incorreto, pois não tem como solicitar esse contexto no meio da tarefa; capturar dependências antes de gerar evita isso.
Por que a lista adverte contra pedir a um hook para fazer uma chamada de julgamento?
Porque um hook é um comando shell sem raciocínio de modelo anexado; pedir a ele para "decidir" algo significa escrever lógica condicional frágil para aproximar uma chamada de julgamento que um comando ou subagente poderia realmente raciocinar.
Como essas melhores práticas mudam entre um projeto solo e um projeto de equipe?
A justificativa permanece a mesma, mas o custo de ignorá-las aumenta acentuadamente em uma equipe: um comando indocumentado ou um hook excessivamente amplo afeta todos que puxam o repositório, não apenas a pessoa que o escreveu.
Existe uma melhor prática para revisar hooks e comandos ao longo do tempo?
Revise-os sempre que settings.json ou o diretório de comandos crescer além de um punhado de entradas, pois as convenções tendem a decair silenciosamente à medida que mais automações se acumulam sem que ninguém audite o conjunto completo em conjunto.
Essas práticas se aplicam igualmente a comandos com escopo de projeto e com escopo de usuário?
A disciplina de nomenclatura e descrição é importante para ambos, mas o controle de versão de scripts e a documentação de qual ponto de extensão está em uso são mais importantes para comandos e hooks com escopo de projeto, pois são o que uma equipe inteira compartilha.
Relacionado
- Comandos, Hooks e Subagentes Personalizados: Para Que Serve Cada Um - a distinção fundamental em que essas práticas se baseiam.
- Escrevendo Seu Primeiro Comando de Barra Personalizado com Frontmatter Markdown - onde as convenções de nomenclatura e descrição se aplicam diretamente.
- Bloqueando Edições de Arquivo de Risco com um Hook PreToolUse - um exemplo completo e funcional das práticas PreToolUse acima.
- Gerando Subagentes Paralelos para Tarefas de Pesquisa Isoladas - as práticas de fan-out em um walkthrough completo.
- Eventos Comuns de Hook e Quando Usar Cada Um - combinando o evento de um hook com seu trabalho real.
Versões da Stack: Escrito contra a linha de modelos Claude atual em ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão) e Claude Haiku 4.5. Nomes de modelos, preços e recursos do produto mudam rapidamente - verifique as especificações atuais em platform.claude.com/docs antes de confiar neles.