medjbilou/claude-skill-router

Roteador de skills. Use SOMENTE quando a mensagem do usuário contiver "/route" (no início, no final ou enviado sozinho após uma solicitação); nunca por iniciativa própria. Seleciona de 1 a 5 melhores skills dentre todas as instaladas para a solicitação do usuário, mostra quais carrega e por quê, carrega-as, realiza o trabalho e sugere quais skills executar em seguida e quando. "/route build" cria o catálogo pessoal de skills (execute uma vez), "/route refresh" ressincroniza o catálogo após instalar ou remover skills.

O que é claude-skill-router?

Este é um roteador inteligente de habilidades (skills) para agentes de IA como Claude Code, Cursor ou Codex. Ele intercepta solicitações do usuário marcadas com `/route` e seleciona automaticamente de 1 a 5 skills instaladas mais adequadas para atender à solicitação completa. O roteador analisa o prompt do usuário, consulta o catálogo pessoal de skills (armazenado em `~/.claude/route-catalog/`), e carrega as skills mais relevantes na ordem correta (planejamento, construção, verificação). Ele também gerencia todo o ciclo: executa o trabalho, verifica o progresso parcial ou total, gera um log estruturado das operações e sugere quais skills executar em seguida com base nas instruções NEXT de cada skill carregada. O `/route build` deve ser executado uma vez para criar o catálogo, e `/route refresh` é usado depois de instalar ou remover skills para manter o catálogo sincronizado. O comportamento é estritamente orientado pelo prompt do usuário, respeitando regras de override, perfis de projeto e arquivos CLAUDE.md.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/medjbilou/claude-skill-router/tree/HEAD/skills/route

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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:

  • /route está na mesma mensagem que o prompt (antes ou depois): a solicitação é a mensagem inteira sem a palavra /route.
  • /route foi 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 /route chegar, 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.md e siga-o. Se for refresh, 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

  1. Execute python3 <base>/scripts/inventory.py --check a 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.
  2. Se --check relatar 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ê.
  3. Na pasta do catálogo que --check imprime em sua primeira linha, leia INDEX.md e, se presente, PROFILE.md (a pilha e hábitos do usuário).
  4. 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.

#SkillPor que estaCarregar
1skill-nameuma linha ligada à solicitaçãoskill / 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 como args.
  • [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.py sem 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:

ParteSkillStatusEvidê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.

  1. Execute python3 <base>/scripts/inventory.py --check. Se imprimir NO CATALOG, execute a construção em vez disso.
  2. Para cada NOVA skill: leia seu SKILL.md (frontmatter e primeiras ~80 linhas), escolha o arquivo de categoria cujo Escopo (Scope) se encaixa (inventory.py lista 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 tiver disable-model-invocation: true, e [project] quando residir no .claude/skills de um repositório. Se o arquivo de categoria ainda não existir, crie-o com o mesmo cabeçalho (# nome, Scope:, Default picks:).
  3. Para cada entrada REMOVIDA: apague sua linha e remova-a de qualquer texto "Default picks".
  4. Execute inventory.py --index, depois --check novamente até que imprima catalog in sync. Relate o que foi adicionado e removido.

Habilidades Relacionadas