Duas skills do Claude Code em conflito: qual delas vence e como resolver?

Conflito entre skills no Claude Code tem duas caras bem diferentes, e cada uma pede uma correção própria. Quando duas skills têm o MESMO nome, a resolução é por origem: enterprise sobrepõe pessoal, pessoal sobrepõe projeto, e skill sobrepõe comando de mesmo nome. Aí o ajuste é no nome do diretório, porque é dele que vem o comando. Quando os nomes são diferentes e mesmo assim o modelo aciona a skill errada, o problema está na description, o único critério que ele tem na hora de escolher. Nesse caso a saída é escopo explícito e gatilho negativo apontando a skill certa.
Você baixa uma skill pronta, coloca do lado da sua, e as duas começam a mandar coisas opostas sobre o mesmo assunto
Aí bate a dúvida: qual delas o Claude Code vai obedecer?
Existem dois tipos MUITO diferentes de conflito aqui, e confundir um com o outro é exatamente o que faz a sua correção não pegar
O primeiro é colisão de nome: duas skills se chamam igual e existe uma regra de precedência decidindo quem responde ao comando
O segundo é colisão de escopo: os nomes são diferentes, mas as duas descrições se aplicam à mesma tarefa, e o modelo escolhe a inadequada
Nome se resolve no diretório, escopo se resolve na description
Bora ver sintoma por sintoma? 🙂
Sintoma 1: duas skills com o mesmo nome e só uma responde ao comando
Você digita /deploy esperando a skill do projeto e vem outra coisa
Ou pior: você jura que editou o arquivo certo, salvou, rodou de novo e o comportamento não mudou nadinha
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
A causa: resolução por origem
Quando skills têm o mesmo nome em níveis diferentes, o Claude Code resolve por origem, nesta ordem de precedência: enterprise sobrepõe pessoal, e pessoal sobrepõe projeto
O exemplo da documentação oficial de skills é bem direto: se existe uma skill deploy em ~/.claude/skills/ e outra no .claude/skills/ do projeto, o /deploy roda a pessoal
Ou seja, aquela skill que você criou meses atrás pra usar em todos os projetos está calando a do repositório atual
A tabela abaixo resume quem vence quem:
| Disputa | Quem responde ao comando |
|---|---|
| Mesmo nome em enterprise, pessoal e projeto | Enterprise, depois pessoal, depois projeto |
Skill pessoal x skill de projeto (deploy) |
A pessoal, de ~/.claude/skills/ |
| Skill x comando de mesmo nome | A skill |
| Skill sua x bundled de mesmo nome | A sua (mas os aliases da embutida continuam da embutida) |
| Skill local x skill sincronizada do claude.ai | A local |
| Skill de plugin x skill de projeto | As duas convivem, o plugin tem namespace |
Como resolver:
- Localize onde vive cada
SKILL.mdenvolvido: skill pessoal fica em~/.claude/skills/<nome-da-skill>/SKILL.mde vale em todos os projetos, skill de projeto fica em.claude/skills/<nome-da-skill>/SKILL.mde vale só naquele projeto - Decida qual das duas precisa continuar acessível pelo comando atual
- Renomeie a PASTA da outra, não o campo
namedo frontmatter
Esse passo 3 é onde quase todo mundo se ferra: em skill pessoal ou de projeto, o campo name define só o rótulo exibido nas listagens, o comando continua vindo do nome do diretório
Mudar name e achar que o comando mudou junto é o erro comum aqui
~/.claude/skills/deploy/SKILL.md -> /deploy (pessoal, vence)
.claude/skills/deploy/SKILL.md -> sombreada
.claude/skills/deploy-projeto/SKILL.md -> /deploy-projeto (resolvido)
(Em skill de plugin a história muda: lá o name define o último segmento do comando, e o prefixo do plugin permanece)
Como prevenir:
Convenção de nome por origem, decidida ANTES de instalar skill de terceiro
Se toda skill sua de repositório nasce com um sufixo do projeto, a skill baixada nunca tem com quem brigar
Sintoma 2: o conflito não é entre skills, é com um comando ou com uma skill embutida
Dois cenários bem parecidos e igualmente confusos
O primeiro: seu /deploy de sempre some depois que você criou uma skill nova
O segundo: você fez a sua versão de /code-review, digita /review por costume, e roda a embutida
A causa: precedência de skill e aliases que não te pertencem
Se uma skill e um comando dividem o mesmo nome, a skill tem precedência
Com .claude/commands/deploy.md e .claude/skills/deploy/SKILL.md no mesmo projeto, o /deploy roda a skill
E tem a segunda camada: uma skill de qualquer nível sobrepõe a bundled skill de mesmo nome, mas NÃO os aliases dela
Uma skill code-review no .claude/skills/ do projeto substitui a /code-review embutida, e digitar o alias embutido /review nunca roda a sua
Pra fechar o quadro: alguns comandos embutidos são entregues pela própria ferramenta Skill, então também podem ser sombreados
Estão nessa lista o /init, o /review e o /security-review
Como resolver:
- Confira se o nome que você escolheu é de um embutido
- Escolha um nome que não colida, algo como
code-review-hdcno lugar decode-review - Nunca conte com o alias: chame a sua skill pelo nome completo dela
O erro comum do passo 3 é assumir simetria: você sobrepôs a skill, então acha que sobrepôs tudo que chega nela
Não é assim, o alias continua apontando pro lado embutido
Como prevenir:
Tratar nome de embutido como palavra reservada
Se o comando já existe no Claude Code, ele não é seu, ponto
Sintoma 3: nomes diferentes, mas o Claude sempre aciona a skill errada
Esse aqui é o conflito chato de verdade
As duas skills têm nomes distintos, nenhuma sombreia a outra, e mesmo assim o modelo escolhe justamente a que tem a regra oposta à que você queria
A causa: a description é o único critério de escolha
Na inicialização, só o name e a description de cada skill instalada entram no system prompt
Esse é o primeiro nível da divulgação progressiva: o corpo do SKILL.md só é carregado quando a skill é acionada
Traduzindo: aquele texto lindo de instrução que você escreveu dentro do arquivo não participa da decisão
A description é o que o modelo usa pra decidir qual skill se aplica
Se as duas descrições são amplas, você criou um ponto de decisão ambíguo
E aqui vale o princípio de design da própria Anthropic: um dos modos de falha mais comuns é um conjunto de ferramentas inchado, que cobre funcionalidade demais ou gera pontos de decisão ambíguos sobre qual usar
Se um engenheiro humano não consegue dizer com certeza qual deve ser usada, não dá pra esperar que o agente faça melhor
Leia sua description em voz alta e responda honestamente: você saberia escolher só com aquilo?
Como resolver:
- Abra o
SKILL.mddas duas skills envolvidas - Reescreva cada description dizendo o que a skill faz E quando usar, em terceira pessoa
- Troque o genérico pelo específico
A recomendação oficial é description específica em vez de ampla, com escopo explícito
Os exemplos do guia são ótimos pra calibrar: Processes PDF legal documents for contract review no lugar de Processes documents
E PayFlow payment processing for e-commerce. Use specifically for online payment workflows, not for general financial queries
O erro comum do passo 2 é misturar ponto de vista, escrevendo "eu faço" ou "você deve" no meio
Ponto de vista inconsistente na description causa problema de descoberta, justamente porque ela é injetada no system prompt
Como prevenir:
Toda vez que entrar uma skill nova no MESMO domínio, revise a description das que já existem ali
Skill nova não chega sozinha, ela chega dentro de um vizinhança
Sintoma 4: as duas skills se aplicam de verdade e o escopo precisa de fronteira
Situação diferente da anterior: aqui as duas descrições estão certas
Cada uma descreve bem o que faz, e ainda assim elas competem, porque o território realmente se toca
A causa: sobreposição legítima
Não tem descrição errada pra corrigir
Tem fronteira faltando
Isso não é exclusivo de skill, é a mesma confusão de quando duas ferramentas do mesmo fornecedor cobrem assuntos vizinhos e ninguém sabe qual abrir, tipo a relação entre Gemini e NotebookLM
Enquanto ninguém escreve a fronteira, ela não existe
Como resolver: gatilho negativo
A recomendação oficial pra skills que se sobrepõem é usar gatilho negativo na description, apontando qual é a skill correta
O exemplo do guia:
---
name: data-analysis
description: Advanced data analysis for CSV files. Use for statistical modeling, regression, clustering. Do NOT use for simple data exploration (use data-viz skill instead)
---
Se liga no detalhe que faz a diferença: a description não só recusa, ela ENDEREÇA
Dizer "não use pra X" sem dizer quem usa deixa o modelo sem destino
E aplique nos dois lados: se a A aponta pra B, a B tem que apontar pra A no caso inverso
Gatilho negativo só de um lado resolve metade do conflito
Como prevenir:
Cada skill nova declara explicitamente o que NÃO é dela
É uma linha a mais na description e economiza uma tarde de investigação depois
Sintoma 5: a skill de outro projeto aparece onde não deveria
Você achava que aquela skill era coisa de um repositório só
Aí ela pipoca em outro contexto e atropela a regra local
A causa: alcance de nível e diretórios pais
Skill pessoal vale em todos os projetos, sem exceção
E skill de projeto não vem de um lugar só: elas carregam do .claude/skills/ do diretório onde o Claude Code foi iniciado E de todo diretório pai até a raiz do repositório
É isso que amplia o campo de colisão
Em monorepo isso pesa MUITO: você abre o Claude Code dentro de um pacote e leva junto tudo que está nos níveis acima
Como resolver:
- Liste de onde a skill indesejada está vindo: pasta pessoal, pasta do pacote atual ou algum diretório pai
- Decida qual deve ser o alcance real dela
- Mova o
SKILL.mdpro nível que corresponde a esse alcance
O erro comum do passo 1 é olhar só a pasta do projeto atual e não subir a árvore até a raiz do repositório
Como prevenir:
Decida o nível pelo ALCANCE, nunca pela conveniência de onde o arquivo caiu na hora que você criou
É o mesmo cuidado de quem precisa compartilhar memória entre agentes sem espalhar estado onde não deveria
Sintoma 6: você já ajustou tudo e ainda quer desligar uma das duas
Às vezes o ajuste fino não basta
Você quer silenciar a skill perdedora sem apagar o arquivo, porque ela ainda serve pra outra coisa
A causa: por padrão o modelo pode acionar qualquer skill instalada
Enquanto ela estiver instalada e visível, ela é candidata
Como resolver: as três formas documentadas de controle
- Desabilitar todas: negue a ferramenta Skill em
/permissions - Permitir ou negar skills específicas com regras de permissão:
Skill(nome)faz correspondência exata eSkill(nome *)cobre o prefixo com qualquer argumento - Esconder uma skill individual do modelo com
disable-model-invocation: trueno frontmatter dela
---
name: deploy-manual
description: Deploy manual do ambiente de produção. Use apenas quando solicitado explicitamente
disable-model-invocation: true
---
O erro comum do passo 1 é usar a bomba atômica quando o problema era uma skill só: negar a ferramenta derruba TODAS
E tem mais um nível de controle, dentro do frontmatter, pro que a skill pode fazer enquanto está ativa: allowed-tools concede ferramentas sem aprovação por uso quando a skill é acionada, e disallowed-tools remove ferramentas do pool disponível do Claude enquanto ela está ativa
Como prevenir:
Aplique sempre o controle mais restrito que resolve o caso
Se dá pra resolver no frontmatter de uma skill, não mexa na permissão global
Sintoma 7: a precedência não está sendo aplicada e as duas skills aparecem
Esse é o caso que quebra a teoria bonitinha
Você criou a skill de projeto com o mesmo nome de uma global esperando sobrepor, e as duas aparecem no seletor
A causa: comportamento relatado publicamente
Existe uma issue pública sobre isso: a issue #25209 do repositório anthropics/claude-code, aberta em 12/02/2026, relata skill de projeto com mesmo nome de skill global aparecendo nas duas no seletor de skills, em vez de o comportamento de sobreposição ser aplicado
Como resolver:
Não dependa da sobreposição como mecanismo de desligamento
Sobrepor é uma regra de resolução de comando, não um botão de desligar
- Dê nomes distintos às duas skills
- Se quiser mesmo silenciar uma, desabilite de forma explícita (o Sintoma 6 tem as três formas)
Como prevenir:
Prefira sempre a separação por nome à disputa por precedência
Duas skills com nomes diferentes nunca dependem de quem ganha de quem
Como juntar skills de origens diferentes sem elas se atropelarem
Agora a parte prática: três arranjos que funcionam quando o material vem de lugares diferentes
Arranjo 1: a skill de terceiro empacotada como plugin
Skills de plugin usam namespace, e por isso não colidem com os outros níveis
O formato é plugin-name:skill-name
Uma skill em my-plugin/skills/deploy/SKILL.md vira /my-plugin:deploy e carrega junto com uma skill deploy do projeto, sem uma matar a outra
É o arranjo mais limpo pra material de origem externa: a origem fica no próprio comando
Arranjo 2: a genérica no pessoal, a especializada no projeto
A skill ampla, que vale em qualquer repositório, mora em ~/.claude/skills/
A especializada mora no .claude/skills/ do projeto, com nome PRÓPRIO (nada de repetir o nome da genérica) e com gatilho negativo na description dos dois lados
Assim você nem entra na briga de precedência, o modelo escolhe pelo escopo escrito
Arranjo 3: a skill que só roda quando você pedir
Tem skill que não deveria ser acionada sozinha nunca
Essa recebe disable-model-invocation: true e sai do radar do modelo, continuando disponível pra quando você chamar
Testando os ajustes sem reiniciar nada
O melhor da mecânica: editar skill não exige reiniciar a sessão
Ao adicionar, editar ou remover uma skill em ~/.claude/skills/, no .claude/skills/ do projeto ou em um .claude/skills/ dentro de diretório passado por --add-dir, o Claude Code detecta a mudança na sessão atual, sem reinício
Dá pra ajustar a description, testar, ajustar de novo, tudo na mesma conversa
Só não quebre a skill no meio do ajuste: todo SKILL.md precisa do frontmatter YAML entre os marcadores ---, com name e description obrigatórios, mais o conteúdo markdown com as instruções
E os limites de validação:
name: máximo 64 caracteres, só letras minúsculas, números e hífens, sem tags XML e sem palavras reservadasdescription: máximo 1024 caracteres, não vazia, sem tags XML
Aquele gatilho negativo caprichado cabe folgado em 1024 caracteres, então não tem desculpa pra description preguiçosa 😀
Conclusão
Conflito de nome e conflito de escopo parecem o mesmo problema, mas não são
Nome se resolve por precedência: enterprise sobre pessoal, pessoal sobre projeto, skill sobre comando, e o comando vindo do nome do diretório
Escopo se resolve na description, porque ela é a única coisa da skill que o modelo vê antes de decidir
O próximo passo é bem concreto: abra o SKILL.md das duas skills envolvidas, confira o nome do DIRETÓRIO de cada uma e leia as duas descriptions lado a lado
Se as duas descrevem a mesma tarefa, aplique o gatilho negativo nos dois lados, apontando a skill certa
Só depois disso vá pras permissões, que são o último recurso e não o primeiro
até o próximo post!
Perguntas frequentes
Skill de plugin com o mesmo nome de uma skill de projeto gera conflito?
Não. Skill de plugin usa namespace, então uma deploy dentro de my-plugin/skills/deploy/SKILL.md vira /my-plugin:deploy e carrega junto com uma deploy do projeto, sem sombrear nada. As duas convivem no mesmo Claude Code.
Como impedir que o Claude acione uma skill específica sem apagar o arquivo dela?
Tem três caminhos documentados. Dá pra negar a ferramenta Skill inteira em /permissions, liberar ou bloquear skills pontuais com Skill(nome) ou Skill(nome *), ou colocar disable-model-invocation: true no frontmatter daquela skill pra escondê-la sem tocar nas outras.
Preciso reiniciar o Claude Code depois de renomear a pasta de uma skill?
Não precisa. Ao adicionar, editar ou remover uma skill em ~/.claude/skills/, no .claude/skills/ do projeto ou num diretório passado por –add-dir, o Claude Code detecta a mudança na sessão atual. Se o comportamento não mudou depois de editar, o problema é outro, geralmente é ter mexido no name em vez da pasta.
allowed-tools e disallowed-tools no SKILL.md resolvem conflito de qual skill é acionada?
Não, esses campos atuam depois que a skill já foi escolhida. allowed-tools concede ferramentas sem aprovação por uso, e disallowed-tools remove ferramentas do pool disponível enquanto ela está ativa. Quem decide qual skill entra em ação é a description, não o ferramental dela.
Existe bug conhecido de skill de projeto não sobrepor skill global de mesmo nome?
Sim, existe uma issue pública no repositório anthropics/claude-code relatando exatamente isso: as duas skills aparecem juntas no seletor em vez de a precedência pessoal sobre projeto ser aplicada. O link do relato está na seção do Sintoma 7. Vale conferir se o seu caso bate com essa descrição antes de assumir que é erro de configuração sua.
Por que duas skills com nomes totalmente diferentes ainda disputam a mesma tarefa?
Porque só o name e a description entram no system prompt na inicialização, o corpo do SKILL.md fica de fora até a skill ser acionada. Se as duas descriptions cobrem o mesmo escopo de forma ampla, o modelo não tem critério pra separar uma da outra. A saída recomendada é description específica, com escopo explícito e, se precisar, um gatilho negativo apontando pra skill correta.
Formações
Formação SAAS com IA
Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!
- 291 aulas
- 18 projetos
- 24h 17min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
ChatGPT: o que é, como usar, dicas e como acessar login
ChatGPT é uma ferramenta de processamento de linguagem natural (NLP) baseada na arquitetura GPT-3.5, desenvolvida pela OpenAI. Sua criação representa um marco significativo no campo […]
