Rota
Argumentos: $ARGUMENTS
<base> abaixo significa o "Diretório base para esta skill" mostrado acima deste texto. O script é
<base>/scripts/inventory.py. O catálogo pessoal reside em ~/.claude/route-catalog/ (ou em
$ROUTE_CATALOG_DIR), nunca dentro do plugin.
0. Encontre a solicitação
O usuário escreve um prompt normal e adiciona /route a ele. Descubra a solicitação a partir das palavras do próprio usuário:
/routeestá na mesma mensagem que o prompt (antes ou depois): a solicitação é a mensagem inteira sem a palavra/route./routefoi enviado sozinho: a solicitação é a mensagem anterior do usuário (ou mensagens, se pertencerem à mesma tarefa), lida em conjunto com a conversa. Nunca trate a palavra solta "/route" como a solicitação.- Os argumentos acima contêm texto: trate-o como a solicitação ou parte dela, mas a mensagem do próprio usuário prevalece se divergir.
- Se você já havia começado a trabalhar naquela solicitação antes de
/routechegar, veja o que está feito e roteie apenas o trabalho restante. Não refaça etapas concluídas. - Se a solicitação for
build, leia<base>/BUILD.mde siga-o. Se forrefresh, vá para Refresh.
Mantenha o prompt do usuário como a tarefa. Não o reduza à parte que uma skill cobre: cada parte do prompt deve ser coberta por uma skill carregada ou pelo seu próprio trabalho.
1. Entenda a solicitação
Escreva uma linha para si mesmo: o objetivo, a entregável, a tecnologia ou arquivos envolvidos, e a fase (planejar, construir, depurar, revisar, verificar, lançar, documentação, mídia, operações). Use a conversa: uma solicitação como "consertar isso" ou "fazer o vídeo" refere-se ao que acabou de ser discutido. Não explore o código-fonte ainda.
Saída precoce: se a solicitação for trivial (uma renomeação, uma correção de uma linha, uma pergunta simples), imprima "Nenhuma skill necessária: " e faça a tarefa. Não leia o catálogo.
Se o CLAUDE.md do projeto exigir um primeiro passo antes de qualquer trabalho (por exemplo, "pesquise o runbook pelo texto do erro antes de diagnosticar"), execute essa etapa agora. Seu resultado pode mudar quais skills são necessárias.
2. Encontre candidatos
- Execute
python3 <base>/scripts/inventory.py --checka partir do diretório atual.NO CATALOG: informe ao usuário que o roteador precisa de um/route buildúnico, ofereça-se para executá-lo agora e, enquanto isso, atenda à solicitação com as skills que você pode ver em sua própria lista de habilidades.- Caso contrário, imprime
catalog in sync, ou NOVAS skills (instaladas, não no catálogo, com sua descrição) e entradas REMOVIDAS (não mais instaladas). NOVAS skills são candidatas válidas. Nunca selecione uma REMOVIDA.
- Se
--checkrelatar substituições (overrides) como presentes, leia esse arquivo primeiro. Ele contém as próprias regras de roteamento do usuário ("polimento de UI -> better-ui, nunca impeccable"). Uma substituição que corresponde à solicitação supera o catálogo, suas escolhas Padrão e seu próprio julgamento. Mencione a substituição na coluna Por quê. - Na pasta do catálogo que
--checkimprime em sua primeira linha, leiaINDEX.mde, se presente,PROFILE.md(a pilha e hábitos do usuário). - Selecione de 1 a 3 categorias que correspondam à solicitação e leia apenas esses arquivos de categoria.
Cada linha de skill lê:
- `nome` [carregar] USE: ... | NOT: ... | NEXT: ... | NEEDS: ...
3. Escolha o conjunto
- Selecione o menor conjunto que cubra a solicitação inteira: geralmente de 1 a 3 skills, nunca mais que 5.
- Uma skill por tarefa. Nunca carregue duas skills que façam a mesma tarefa; siga as "Escolhas Padrão" da categoria.
- Obedeça ao campo NOT de cada skill. Se NOT nomear uma skill melhor para esta solicitação, escolha aquela.
- Para a mesma tarefa, prefira uma skill de projeto (
[project], deste repositório.claude/skills) ou uma das skills personalizadas do próprio usuário em vez de uma skill genérica. - Se uma skill listar NEEDS que estão faltando aqui, informe e escolha a próxima melhor skill.
- Se nenhuma skill agregar valor real, diga "Nenhuma skill necessária" e faça a tarefa.
- Se duas interpretações muito diferentes da solicitação levarem a skills diferentes, faça uma pergunta curta com as opções antes de carregar qualquer coisa.
4. Mostre o plano, depois carregue
Imprima esta tabela como texto visível antes da primeira chamada de Skill. É saída obrigatória, não narração: imprima-a mesmo quando um estilo sucinto ou "sem texto antes de chamadas de ferramentas" estiver ativo.
| # | Skill | Por que esta | Carregar |
|---|---|---|---|
| 1 | skill-name | uma linha ligada à solicitação | skill / read / builtin / project |
Uma linha pode ser condicional: escreva "apenas se <condição>" na coluna Por que e carregue-a apenas quando a condição for válida.
Adicione uma nota "Efeito colateral" abaixo da tabela para cada etapa que envia mensagens, implanta, exclui dados, gasta créditos pagos ou escreve em produção, seja uma skill ou o próprio trabalho. Pergunte antes dessa etapa. Caso contrário, continue sem esperar.
Carregue as skills na ordem da tabela (planeje primeiro, depois construa, depois verifique):
[skill],[builtin],[project]: chame a ferramenta Skill com o nome exato e passe a parte da solicitação que essa skill deve manipular comoargs.[read <caminho>]: a ferramenta Skill recusa esta skill (apenas usuário). Leia o arquivo em<caminho>e siga como se estivesse carregado.- Se uma chamada de Skill falhar, leia o SKILL.md da skill em vez disso (
inventory.pysem sinalizador imprime cada caminho) e informe.
5. Faça o trabalho
Siga as skills carregadas em conjunto. Quando duas delas entrarem em conflito, a mais específica vence para aquela
parte da tarefa. Os arquivos CLAUDE.md do usuário e instruções explícitas superam todas as skills.
Se uma nova necessidade surgir no meio do caminho (por exemplo, a correção precisa de uma migração), carregue mais uma skill e
anuncie em uma linha: "Também carregando x: ".
6. Verifique, registre, relate e sugira o que executar em seguida
Verificação final: quando duas ou mais skills foram carregadas ou a solicitação tinha várias partes, verifique cada parte antes da resposta final. Para cada skill carregada e cada parte da solicitação não coberta por skill, decida concluído / parcial / bloqueado, com evidência (um arquivo:linha, um resultado de teste, uma saída de comando). Coloque na resposta final como uma tabela curta:
| Parte | Skill | Status | Evidência |
|---|
Se uma parte estiver parcial ou bloqueada, diga o que está faltando em vez de considerar a tarefa concluída. Pule a tabela para uma solicitação de skill única com uma única parte.
Registro: execute python3 <base>/scripts/inventory.py --log '<json>' uma vez, com um objeto JSON:
request (a solicitação em no máximo 160 caracteres, sem segredos), loaded (skills carregadas), used
(skills carregadas cujas instruções realmente moldaram o trabalho), unused (carregadas mas não necessárias),
skipped (linhas planejadas que não foram executadas), next (as Próximas skills que você sugere), no_skill
(verdadeiro quando nenhuma skill foi necessária), check ("done", "partial", "blocked" ou "n/a"). O registro faz parte
do roteamento, não opcional. Se o comando falhar, informe em uma linha e continue.
inventory.py --report mais tarde mostra o que /route carregou, o que o trabalho usou e quantas Próximas skills
o usuário seguiu.
Comece a resposta final com uma linha que diz quais skills foram executadas, para que o usuário veja mesmo que a
tabela tenha rolado para longe: Skills usadas: a, b(adicione pulada c: `` quando uma linha planejada não
foi executada, ou Skills usadas: nenhuma (<motivo>)).
Termine a resposta final com esta seção:
Próximas skills
nome-da-skill: quando (agora / antes do commit / antes do push / após o deploy / uma vez por semana), e por quê.
Forneça no máximo 3. Retire-as dos campos NEXT das skills carregadas, das "Escolhas Padrão" das categorias que você leu e de etapas que o CLAUDE.md do projeto exige (por exemplo, uma execução completa de testes antes do push). Mantenha apenas aquelas que se encaixam no que realmente aconteceu e não as execute. Esta seção também se aplica quando nenhuma skill foi carregada.
Refresh
Execute quando o usuário instalar, remover ou atualizar skills ou plugins.
- Execute
python3 <base>/scripts/inventory.py --check. Se imprimirNO CATALOG, execute a construção em vez disso. - Para cada NOVA skill: leia seu SKILL.md (frontmatter e primeiras ~80 linhas), escolha o arquivo de categoria
cujo Escopo (Scope) se encaixa (
inventory.pylista as categorias fixas em sua TAXONOMY), e anexe uma linha no mesmo formato das outras linhas naquele arquivo. Use[read <caminho absoluto>]quando seu frontmatter tiverdisable-model-invocation: true, e[project]quando residir no.claude/skillsde um repositório. Se o arquivo de categoria ainda não existir, crie-o com o mesmo cabeçalho (# nome,Scope:,Default picks:). - Para cada entrada REMOVIDA: apague sua linha e remova-a de qualquer texto "Default picks".
- Execute
inventory.py --index, depois--checknovamente até que imprimacatalog in sync. Relate o que foi adicionado e removido.