Dois mods brigando no Claude Code: como saber se o problema é conflito entre eles

diagrama mostrando conflito entre mods no Claude Code na mesma cadeia de evento
Resposta rápida

Quando o Claude Code parece ignorar sua instrução depois de instalar mods, a causa pode ser conflito entre mods no Claude Code. Vários mods no mesmo evento rodam em cadeia, na ordem de carregamento, e um deles pode reescrever ou omitir texto do prompt, ou devolver um resultado sem chamar next e encerrar a cadeia. Para isolar: rode claude –safe-mode, ative o log com –debug-file ou /debug, desabilite um mod por vez em /plugin > Installed e repita o prompt que falha até achar o culpado

Fala aí, beleza? Se o Claude Code começou a ignorar uma instrução sua logo depois que tu instalou uns mods, se liga: o culpado pode não ser o modelo

Pode ser dois mods disputando o mesmo evento 😛

Os mods chegaram ao Claude Code na versão 2.1.287, lançada em 1º de outubro de 2026

E o que é um mod? São plugins que mudam a aparência e o comportamento do Claude Code, feitos de handlers de evento em JavaScript ou TypeScript

O Claude Code chama esses handlers quando acontece um evento (uma chamada de ferramenta, o envio de um prompt, o desenho da interface) e o handler pode observar, alterar ou assumir esse evento

Dá pra empilhar mods de autores diferentes, o que é muiiito massa

Porém é exatamente aí que nasce o conflito entre mods no Claude Code…

Como os mods rodam em cadeia no Claude Code

Antes de caçar o problema, vale entender o PORQUÊ ele acontece

Quando vários mods escutam o mesmo evento, eles rodam na ordem em que são carregados

O primeiro a carregar vê o evento primeiro e vê o resultado por último

Se você conhece middleware de servidor web (tipo Express), a ideia é bem semelhante: cada um recebe a requisição, faz o que quer e passa adiante 🙂

Qual a ordem de carregamento dos mods?

Segundo a documentação de mods, a cadeia segue a origem de cada mod:

  1. O guard embutido sec-default@builtin (que aparece no /plugin como cc-plugin-sec-default), os mods da organização em prependPlugins e os demais mods da organização que não estão em appendPlugins
  2. Os mods que você instala
  3. Os mods da organização listados em appendPlugins
  4. Os outros mods embutidos no Claude Code

E entre os mods que você instala, um mod roda antes dos mods que ele lista como dependencies no manifesto

O que é o next?

Um hook é registrado com on(nome do evento, matcher opcional, hook), assim:

on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))

E o que esse next faz?

Ele é o próximo handler da cadeia: roda os hooks seguintes e, depois deles, o comportamento do próprio Claude Code

Guarda essa informação, porque ela é a chave do problema todo 😀

Por que o conflito aparece como "o agente ignorou minha instrução"

O sintoma clássico é esse: tu escreve uma instrução no prompt, ou tem uma regra de projeto, e parece que ela simplesmente não teve efeito

A reação natural é culpar o modelo

Mas tem duas causas bem comuns vindas da cadeia de mods

Causa 1: um mod de prompt reescreveu ou apagou o texto

Os eventos de prompt cobrem o texto que você digita e também o texto que o Claude Code manda ao Claude por conta própria, como o system prompt e os lembretes

  • prompt.submit vê cada prompt antes do turno e pode reescrever ou acrescentar texto
  • prompt.compose devolve as seções do system prompt na ordem de envio
  • prompt.section roda uma vez por seção nomeada e pode devolver { text } ou { text: null } para omitir a seção
  • prompt.context roda uma vez por conversa, para o contexto enviado com a primeira mensagem

Ou seja: um mod pode reescrever ou omitir o que outro mod (ou você mesmo) colocou

E aí o Claude nunca recebe a instrução, não é que ele ignorou, ela nem chegou lá 🙂

Causa 2: um hook encerrou a cadeia sem chamar next

Se um hook devolve um resultado sem chamar next, a cadeia é interrompida

Os mods seguintes não rodam, e o comportamento do próprio Claude Code também não

Em eventos tool.call, por exemplo, um objeto como { deny: 'Use the file tools.' } responde ao evento sem chamar next:

on('tool.call', { tool: 'Bash' }, async ($, e, next) => ({ deny: 'Use the file tools.' }))

Se um mod carregado antes faz isso, o mod que vem depois pode estar perfeito e mesmo assim nunca vai rodar

Como saber qual mod vence?

Pela ordem da cadeia que a gente viu lá em cima

Quem roda antes vê o evento primeiro e pode reescrever, omitir ou encerrar tudo antes que o outro tenha chance

Como prevenir esse tipo de briga?

Desconfie sempre que dois mods mexem no mesmo evento, principalmente nos eventos de prompt e em tool.call

É bem parecido com dois devs mexendo no mesmo repositório sem coordenação: cada um faz sentido sozinho, juntos dá ruim haha

Como isolar o mod culpado removendo um por vez

Bora pra prática? A ideia é simples: ir tirando peças até o problema sumir

  1. Confirme que o problema vem de personalização. Inicie uma sessão com safe mode:
claude --safe-mode

Isso desliga todos os mods instalados só naquela sessão

Se o prompt que falhava passa a funcionar, a pista é forte

Erro comum deste passo: concluir na hora que é mod. Tome cuidado! O safe mode também desliga as suas outras personalizações, então ele confirma que é personalização, não que é mod

  1. Ligue o log de debug. Inicie assim:
claude --debug-file /tmp/claude.log

Ou rode /debug no meio da sessão para ativar o log e descobrir o caminho dele

Segundo a documentação de hooks, o log mostra quais hooks deram match, os exit codes, o stdout e o stderr

Erro comum deste passo: olhar só a saída do terminal e esquecer de abrir o log, que é onde ficam os detalhes de execução

  1. Desabilite um mod por vez. Abra /plugin, vá na aba Installed e desabilite (ou desinstale) um único mod

Se preferir o terminal:

claude plugin disable nome@marketplace

Depois repita exatamente o prompt que estava falhando

Voltou a funcionar? Achou o culpado (ou pelo menos uma das partes da briga)

Erro comum deste passo: desligar vários de uma vez e perder qual era o culpado. E se liga: os plugins desabilitados ficam agrupados num cabeçalho recolhido no fim da lista, então não se assusta achando que sumiram 😀

  1. Se precisar, desligue todos os seus mods em todas as sessões. Defina isso no ~/.claude/settings.json:
{
  "disableAllHooks": true
}

Vale pra todas as sessões, inclusive se tu tá rodando o Claude Code em dois projetos ao mesmo tempo

Para religar, é só desfazer a mesma mudança

Erro comum deste passo: esquecer de reverter e passar dias se perguntando por que nenhum mod funciona kkk

Quando não é conflito: erro ou timeout dentro de um mod

Nem toda instrução "ignorada" é briga entre mods

Um hook que falha sozinho também pode dar exatamente esse sintoma

Como identificar o erro de um hook?

O on() devolve um registro com o método .catch(handler), que define o tratador de erro do hook

Dentro do .catch, next.error.kind vale 'throw' ou 'timeout', e next.error.message traz o texto do erro

Então a solução é conferir o log de debug e, se você é o autor do mod, tratar o erro nesse .catch

Como prevenir?

Trate os erros nos seus próprios hooks

Um mod que falha em silêncio é o tipo de coisa que te faz perder uma tarde inteira culpando o mod do vizinho…

Próximo passo: empilhar mods sem briga

Recapitulando:

  • A cadeia tem ordem, e quem roda primeiro vê o evento primeiro e o resultado por último
  • Um hook pode encerrar tudo devolvendo um resultado sem chamar next
  • Mods de prompt podem reescrever ou omitir texto, então a instrução pode nem chegar ao Claude

O próximo passo é manter instalados só os mods que você realmente usa

E quando aparecer um mod novo (tipo os exemplos que a Anthropic mostrou no anúncio dos mods, como token weather, blast radius e replay theater), teste ele isolado antes de empilhar com os outros

Assim, se algo quebrar, tu já sabe de onde veio 🙂

Espero que tenha ajudado, até o próximo post!

Perguntas frequentes

Como saber se dois mods estão em conflito no Claude Code?

O sinal clássico é uma instrução sua sendo ignorada depois de instalar mods novos. Rode a sessão com claude –safe-mode: se o prompt volta a funcionar, o problema está na cadeia de mods, e não no modelo.

Dois mods podem escutar o mesmo evento ao mesmo tempo no Claude Code?

Sim, e é esperado: isso é o que permite empilhar mods de autores diferentes. O risco aparece quando os dois reescrevem o mesmo prompt ou respondem o mesmo tool.call de jeitos incompatíveis.

O que acontece se um mod não chamar o next?

A cadeia é interrompida ali mesmo. Os mods seguintes não rodam, e o comportamento padrão do próprio Claude Code também não roda.

Dá pra desligar só um mod sem afetar os outros?

Sim. Abra /plugin, vá na aba Installed e desabilite ou desinstale o plugin específico. No terminal, o mesmo resultado sai com claude plugin disable nome@marketplace.

O safe mode do Claude Code desliga só os mods?

Não, ele desliga todos os mods instalados naquela sessão e também as suas outras personalizações. Por isso o safe mode prova que o problema é personalização, mas não prova sozinho que é mod.

Qual mod roda primeiro quando tem mais de um instalado?

Primeiro vêm o guard embutido sec-default, os mods da organização em prependPlugins e os demais mods da organização que não estão em appendPlugins, depois os mods que você instalou, depois os da organização em appendPlugins e por fim os outros mods embutidos. Entre os que você instalou, um mod roda antes das suas dependencies listadas no manifesto.



Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 30min

Blog | Mais populares