Como fazer um Mod do Claude Code segurar um comando de shell arriscado antes de ele rodar (o exemplo Blast Radius)

painel do mod Blast Radius em Claude Code mods bloqueando comando de shell arriscado
Resposta rápida

O Blast Radius é o mod de exemplo da Anthropic que segura comandos perigosos (rm -rf, git reset –hard, git clean, git push –force e migrations) antes de rodarem. Ele intercepta o tool.call do Bash, calcula o que o comando tocaria e abre um painel com Proceed e Cancel. O foco começa no Cancel, e sem resposta em 10 minutos o comando é recusado. Os Claude Code mods exigem a v2.1.287 ou mais nova. Atenção ao bug aberto na v2.1.288 (Issue #99130) e ao travamento de 10 minutos no claude -p

Deixar o agente rodar rm -rf ou um git push --force sem freio nenhum é tipo entregar a chave do carro e ir dormir no banco de trás…

Funciona até o dia que não funciona haha

Fala aí, beleza? Os mods chegaram ao Claude Code na versão 2.1.287, publicada no npm em 1º de outubro de 2026, e a documentação oficial já cita um exemplo muito massa: o Blast Radius

Ele segura um comando de shell arriscado, mostra o que esse comando mudaria e te dá dois botões: seguir ou cancelar 🙂

Neste post vou te mostrar o padrão por trás disso (interceptar a chamada de ferramenta antes dela rodar) e como instalar o exemplo oficial, passo a passo

Bora?

O que é um Mod do Claude Code e por que ele consegue barrar um comando?

Um mod é um módulo pequeno em TypeScript ou JavaScript, entregue dentro de um plugin comum

A graça dele é que ele intercepta eventos do Claude Code: chamadas de ferramenta, prompts, turnos, slash commands e até o desenho da UI

E é aí que mora o poder de barrar um comando

Quando o Claude decide chamar o Bash, isso vira um evento tool.call, e o mod fica no meio do caminho entre a decisão e a execução

Se você conhece middleware de servidor web, é bem semelhante: a requisição passa por você antes de chegar no destino, e você decide se ela segue 😀

As três respostas do tool.call:

No evento tool.call o mod tem três jeitos de responder:

  • Observar: deixa passar do jeito que veio, só olhando
  • Reescrever: troca o comando por uma versão mais segura antes de seguir
  • Negar: não chama o next e devolve um { deny } com o motivo

O contrato, de forma resumida, fica assim:

// observar: segue normalmente
await next(e)

// reescrever: segue com um comando mais seguro
next({ ...e, command: safer })

// negar: NÃO chama next e explica o motivo
return { deny: "motivo que o Claude vai ler" }

E o detalhe mais legal: o Claude lê o motivo da negação como resultado da ferramenta

Ou seja, ele não fica perdido sem saber por que o comando não rodou, ele recebe a explicação e pode ajustar o plano

O que o Blast Radius mostra antes de cada comando perigoso?

O Blast Radius fica no repositório claude-code-playground da Anthropic, na pasta claude-code/mods/blast-radius

Quando o Claude chama o Bash com certos comandos, ele para a chamada, calcula o que o comando tocaria e abre um painel

O que aparece depende do comando:

Comando O que o painel mostra
rm -r, rm -f, rm -rf Os arquivos que seriam apagados, com quantidade e tamanho total
git reset --hard Os arquivos com mudanças não commitadas
git clean Os caminhos não rastreados que seriam removidos
git push --force (também -f, --force-with-lease, +ref) Os commits do branch remoto que seu HEAD não tem e que o push descartaria
manage.py migrate, db:migrate, alembic upgrade, prisma migrate As migrations pendentes

Se liga nesse detalhe que faz MUITA diferença: se a linha de comando muda de pasta antes, com cd dir &&, pushd/popd ou git -C dir, o Blast Radius faz a medição nessa pasta

Sem isso, a medição podia olhar o diretório errado e te mostrar "nada vai ser apagado" quando na real ia sumir uma pasta inteira kkk

Pré-requisitos para instalar o Blast Radius:

Antes de sair instalando, confere essa lista:

  • Claude Code v2.1.287 ou mais novo: é a versão em que os mods chegaram
  • bash, git, find e du no PATH: o Blast Radius usa essas ferramentas pra fazer as checagens

Tome cuidado com o bug da v2.1.288:

A documentação diz que os mods vêm ligados por padrão

Porém, tem um bug aberto (a Issue #99130): na v2.1.288 uma chave remota de rollout desliga os mods de plugins instalados, enquanto os mods embutidos carregam mesmo assim

A mensagem de log cita the rollout switch served off

Então se você instalou tudo certinho e o painel nunca aparece, olha o log antes de achar que fez algo errado

Inspecione antes de instalar:

A doc recomenda instalar mods só de fontes confiáveis e inspecionar antes com:

claude plugin validate

Mesmo sendo um exemplo da própria Anthropic, vale criar o hábito, porque (como você vai ver mais pra frente) mod não é sandbox

Passo a passo: instalar o Blast Radius no Claude Code

  1. Clone o repositório oficial:
git clone https://github.com/anthropics/claude-code-playground.git
  1. Entre na pasta dos mods:
cd claude-code-playground/claude-code/mods

Erro comum deste passo: pular o cd e seguir pro próximo comando na raiz do repositório

  1. Adicione a pasta como marketplace de plugins:
claude plugin marketplace add ./

Erro comum deste passo: o ./ aponta pra pasta atual, então se você não estiver dentro de claude-code/mods, ele vai apontar pro lugar errado

  1. Instale o Blast Radius no escopo do usuário:
claude plugin install blast-radius@claude-code-playground-mods --scope user

Erro comum deste passo: faltar find ou du no PATH, já que o mod depende deles (junto com bash e git) pra medir o estrago

  1. Se você já tinha uma sessão do Claude Code aberta, recarregue os plugins dentro dela:
/reload-plugins

Erro comum deste passo: esquecer o /reload-plugins e achar que o mod não funciona, quando na real a sessão só não carregou ele ainda

E se mesmo assim nada acontecer e você estiver na v2.1.288, lembra do bug da chave de rollout que falei ali em cima 😛

Como usar o painel Proceed / Cancel sem rodar o comando por engano?

O fluxo é simples

O Claude chama o Bash com um comando coberto, o Blast Radius segura a chamada e abre o painel com dois botões:

  • Proceed: roda o comando
  • Cancel: recusa o comando

E aqui vem a parte que eu acho muito bem pensada: o foco começa no Cancel

Ou seja, apertar Enter recusa o comando, não roda

Pra escolher, você tem algumas opções:

  • Apertar 1 pra Proceed ou 2 pra Cancel
  • Clicar no botão
  • Usar Tab até o botão e apertar Enter

E se você não responder?

Se ninguém responder em 10 minutos, o comando é recusado

Interromper o turno com Esc também recusa

Nos dois casos o Claude vê a recusa e o motivo, então ele sabe que o comando não rodou

Erro comum: estar no automático, apertando Enter pra tudo, e achar que Enter confirma

Aqui ele faz o contrário, e isso é bom! O padrão seguro é não fazer nada destrutivo

O padrão por trás do Blast Radius para você criar o seu próprio Mod

O Blast Radius é um exemplo, mas a ideia por trás dele serve pra muiiito mais coisa

A técnica demonstrada tem três partes:

  • Segurar o tool.call até o usuário responder: a chamada fica parada enquanto o painel está aberto
  • Retornar { deny } com um motivo útil: em vez de só barrar, o mod explica pro Claude por que barrou, e ele consegue usar isso pra mudar de estratégia
  • Rodar as checagens de dry-run via $.process.run: passando os caminhos como argumentos, pra que nada neles rode como shell

E esse último ponto é o mais importante, se liga

Que dry-run? É a simulação: antes de deixar o rm -rf rodar, o mod precisa descobrir quais arquivos ele apagaria

Só que esses caminhos vêm do comando que o Claude gerou

Se o mod montasse uma string e mandasse pro shell, um nome de arquivo malicioso podia virar comando, e aí a ferramenta de segurança vira a própria brecha xD

Passando os caminhos como argumentos, eles são tratados só como dados

É a mesma ideia do modo plano no Claude Code: segurar o agente antes da ação irreversível, só que aqui o freio fica no comando em si

Pra criar o seu, a melhor referência é ler o código na pasta claude-code/mods/blast-radius do repositório e adaptar o padrão pros comandos perigosos do seu projeto

Problema conhecido: rm -rf travado 10 minutos só no modo não interativo (claude -p)

Sintoma: no modo não interativo (claude -p), um rm -rf segurado sempre espera os 10 minutos inteiros e depois é recusado, mesmo quando não apagaria nada

Causa: no modo não interativo não tem ninguém pra responder o painel, então o comando fica esperando até estourar o tempo (está registrado na Issue #2 do claude-code-playground)

Solução: não tem correção confirmada até aqui, então o caminho é evitar que o mod carregue nessas execuções

  • Desativar o plugin na aba Installed do /plugin
  • Ou usar "disableAllHooks": true em ~/.claude/settings.json

Só lembra que o disableAllHooks desliga todos os mods que você instalou, em todas as sessões, então não esquece de voltar depois

Cuidados de segurança: um Mod não é sandbox

Essa parte é ULTRA importante, então lê com calma

Mods não rodam em sandbox

Eles têm o mesmo acesso à máquina que o próprio Claude Code: leem arquivos, enxergam chaves de API em variáveis de ambiente, veem todo prompt e podem aprovar chamadas de ferramenta por você

E mais: com o sandbox ligado, ele isola os comandos Bash do Claude, mas um processo iniciado por um mod roda fora dele

Regras de deny vencem o mod, mas com uma pegadinha:

As regras de deny e os hooks gerenciados têm precedência, então um mod do usuário não consegue aprovar uma chamada que uma regra de deny recusa

Porém, as regras de deny não valem pro $.fs e o $.process do próprio mod

Exemplo: com Read(.env) negado, um mod ainda consegue ler o arquivo via $.fs.read

Por isso o claude plugin validate e a regra de instalar só de fonte confiável não são frescura

Como desligar os mods:

  • Todos os mods que você instalou, em todas as sessões: "disableAllHooks": true em ~/.claude/settings.json
  • Um mod específico: desative ou desinstale o plugin dele na aba Installed do /plugin

Mods embutidos não podem ser desinstalados

E nas empresas?

Nas managed settings dá pra usar:

  • allowManagedModsOnly: bloqueia mods instalados pelo usuário
  • allowManagedHooksOnly: mais amplo
  • disableAllHooks: desliga tudo

Além disso, um guard embutido, o sec-default@builtin, carrega antes dos mods do usuário quando há managed settings ou login em plano Team/Enterprise

Vale a pena usar o Blast Radius?

Pra quem deixa o agente rodar comandos no terminal, é um freio muito massa

Ele não bloqueia tudo no escuro: mostra o que vai ser apagado, quais commits somem, quais migrations vão rodar, e só aí você decide

E o design é conservador do jeito certo: foco no Cancel, recusa depois de 10 minutos sem resposta, Esc também recusa

As ressalvas são reais, então não ignora:

  • O bug da chave de rollout na v2.1.288 pode desligar o mod sem você perceber
  • No claude -p ele trava 10 minutos em cada rm -rf segurado
  • Mod não é sandbox, então confiança na fonte é obrigatória

O próximo passo é instalar, rodar o claude plugin validate e abrir o código na pasta blast-radius pra entender o padrão

Depois disso, adaptar pros comandos perigosos do seu projeto fica bem mais tranquilo 😀

E aí, vai deixar o agente rodar rm -rf sem freio ainda? haha

Até o próximo post!

Perguntas frequentes

Qual a versão mínima do Claude Code pra usar o Blast Radius?

Precisa do Claude Code v2.1.287 ou mais novo, que foi quando os mods chegaram, publicado no npm em 1º de outubro de 2026. Antes dessa versão o evento tool.call que o Blast Radius usa nem existe. Vale só confirmar que não caiu na v2.1.288 com o bug da chave de rollout que falamos no post.

O que acontece se eu não responder ao painel do Blast Radius?

Se ninguém clicar em Proceed ou Cancel em 10 minutos, o comando é recusado automaticamente. Apertar Esc pra interromper o turno também recusa o comando na hora. Ou seja, o padrão seguro é sempre negar quando fica em dúvida.

O Blast Radius roda em sandbox, tipo isolado da minha máquina?

Não. Mods não rodam em sandbox e têm o mesmo acesso à máquina que o próprio Claude Code, incluindo arquivos e variáveis de ambiente. Mesmo com o sandbox do Claude Code ligado isolando o Bash, um processo que o mod inicia roda fora desse isolamento, por isso a doc recomenda inspecionar com claude plugin validate antes de instalar.

Dá pra usar o Blast Radius no modo claude -p, sem interação?

Dá, mas tem um problema conhecido registrado na Issue #2 do repositório claude-code-playground. No claude -p um rm -rf segurado sempre espera os 10 minutos inteiros antes de ser recusado, mesmo quando o comando não ia apagar nada. Então em automações sem interação humana isso pode travar o fluxo por bem mais tempo que o esperado.

Como desativo o Blast Radius sem precisar desinstalar?

Pela aba Installed do /plugin dá pra desativar ou desinstalar só esse plugin, já que ele não é um mod embutido. Se quiser desligar TODOS os mods instalados de uma vez, em qualquer sessão, basta colocar "disableAllHooks": true no arquivo ~/.claude/settings.json.

Uma regra de deny consegue travar o Blast Radius mesmo ele querendo deixar passar?

Sim, quando o assunto é a chamada de ferramenta do Claude. As regras de deny e os hooks gerenciados têm precedência, então se uma regra de deny recusa uma chamada, o Blast Radius (ou qualquer mod do usuário) não consegue aprovar essa chamada por cima. O limite é outro: as regras de deny não valem para o $.fs e o $.process do próprio mod. Por exemplo, com Read(.env) negado, o Claude não lê o arquivo, mas um mod ainda consegue ler via $.fs.read, porque aí não é uma chamada de ferramenta do Claude passando pelo deny.



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