Blast Radius: prévia de rm -rf no Claude Code antes de rodar
Segura rm -r, force push e migrações de banco de dados no Claude Code e mostra o que mudariam antes de rodarem.
Permissões
- Executa comandosPode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
- Intercepta chamadas de ferramentasVê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
- Altera a interfaceDesenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
- testado com
- v2.1.291
- último teste
- requer
- Claude Code ≥ 2.1.287
- superfícies
- painel, acima do prompt
- código-fonte
- Hamza Zafar (hamzafer) (MIT)
Instale dentro do Claude Code:
/plugin install blast-radius --marketplace hamzafer/claude-code-modsO que este mod faz?
O Blast Radius oferece uma prévia de rm -rf no Claude Code. É um mod da comunidade criado por Hamza Zafar (hamzafer), da coleção claude-code-mods dele. Quando o Claude está prestes a rodar um comando de shell arriscado pela ferramenta Bash, o mod segura o comando, mostra o que ele mudaria e espera você apertar Cancel ou Proceed.
Três tipos de comando são retidos. Um rm recursivo ganha a lista dos arquivos que apagaria e o tamanho total, como delete 42 files (1.3 MB). ~ e $HOME são expandidos; um caminho com qualquer outra variável de shell, substituição de comando ou ~user mostra "can't preview" em vez de um palpite. Um git push --force lista os commits remotos que seriam perdidos e os locais que seriam enviados, com base no último fetch. Uma migração de banco de dados (prisma, supabase, drizzle-kit, knex, sequelize, rails, alembic, typeorm) não tem como ser prevista, então o mod lista os arquivos sem commit cujos nomes parecem migrações ou schemas.
O relatório abre em um painel lateral, ou na faixa acima do prompt quando o terminal é estreito demais para um painel. O Cancel vem com foco por padrão (atalho c); o Proceed é y. Uma contagem regressiva mostra auto-cancels in 42 s, e sem resposta em 60 segundos o comando é cancelado. De qualquer forma o Claude recebe um motivo, então uma sessão sem ninguém olhando continua em vez de travar. Só um comando é retido por vez; um segundo espera a vez dele e depois ganha a sua própria contagem regressiva completa.
Em comparação com o nosso Block Dangerous Commands, que recusa de cara um conjunto fixo de padrões destrutivos, o Blast Radius é uma proteção do tipo "me pergunte com fatos": ele nunca bloqueia um comando que você aprova e cobre o rm -r comum, não só alvos catastróficos. Os dois podem ser usados juntos. O README do autor exige o Claude Code 2.1.287 ou mais recente.
Demonstração
A gravação cria uma pasta descartável dist com três arquivos pequenos no projeto de demonstração e pede ao Claude que execute rm -r dist. O Blast Radius segura o comando antes que ele rode e mostra o que seria apagado (3 arquivos, 12 KB, com cada caminho listado), com os botões Cancel e Proceed e uma contagem regressiva de cancelamento automático. O Cancel é pressionado, então nada é apagado.
Instalação
Use qualquer um dos métodos do bloco de instalação; eles instalam direto do marketplace do próprio autor. A proteção fica ativa assim que o plugin carrega.
$ install blast-radius
Requer Claude Code ≥ 2.1.287
Instala a partir do marketplace do autor: hamzafer/claude-code-mods
1.Uma linha, dentro do Claude Code
/plugin install blast-radius --marketplace hamzafer/claude-code-modsCole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.
2.Pelo seu shell
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install blast-radius@claude-code-modsDepois execute /reload-plugins em qualquer sessão que já esteja aberta.
3.Experimente sem instalar
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/blast-radiusCarrega o mod só para uma sessão. Nada é adicionado às suas configurações.
Como funciona
O mod usa o hook tool.call para Bash. Uma função pura, classify, divide o comando em &&, ||, ; e quebras de linha e procura os três tipos arriscados. Se nenhum bater, a chamada passa direto com next(e). Esta é a prévia de uma exclusão recursiva, de hooks/register.tsx:
// Unquoted $t expands globs, and nothing else, without running the command.
const script =
'shopt -s nullglob; for t in "$@"; do for p in $t; do [ -e "$p" ] || continue; ' +
'echo "S $(du -sk "$p" | cut -f1)"; find "$p" -type f | head -n 5000 | sed "s/^/F /"; done; done'
const r = await $.process.run(['bash', '-c', script, 'blast-radius', ...targets], init)Os alvos são passados como argumentos em vez de colados no script, e a listagem é limitada a 5000 arquivos. Depois de medir, o mod guarda o comando retido em um átomo $.state, abre o painel blast-radius com $.ui.open e verifica a cada quarto de segundo se um botão foi apertado, se o prazo venceu ou se a chamada foi abortada. Proceed retorna next(e), então o comando roda exatamente como foi escrito. Cancel ou um timeout retornam { deny: ... } com uma mensagem que inclui o resumo da prévia. Antes de tudo isso, $.session.surfaces() é verificado: sem tela, a chamada é negada na hora.
Personalize
Uma opção, timeoutSeconds (padrão 60, mínimo 0), define quanto tempo um comando retido espera antes de ser cancelado; 0 espera sem limite e esconde a contagem regressiva. Altere em /config sob o nome do mod, ou no settings.json em pluginConfigs. A lista de ferramentas de migração é a expressão regular MIGRATION no início do register.tsx, e MAX_LISTED (200) limita quantas linhas o relatório mostra.
Permissões e segurança
Lemos todos os arquivos que o plugin pode executar antes de rodá-lo: hooks/hooks.json, hooks/register.tsx, as declarações de tipos e os testes. Não há package.json, script de instalação nem código empacotado.
Intercepta chamadas de ferramentas aparece porque o mod controla as chamadas a Bash: ele pode segurá-las e negá-las, mas nunca reescreve um comando. Executa comandos aparece por causa de $.process.run. Os programas que ele roda são somente leitura: bash -c com o script de du/find acima, git log --oneline duas vezes para force pushes, git status --porcelain para migrações e sleep 0.25 para o loop de verificação. Cada chamada de prévia tem timeout de 10 segundos; note que du e find em um alvo muito grande podem levar até esse limite. Ele lê a variável de ambiente HOME para expandir ~. Altera a interface cobre o painel e a faixa.
Ele não grava arquivos, não usa a rede e não chama o modelo. O claude plugin validate não relatou erros nem avisos, e os 17 testes do autor passaram no Claude Code 2.1.291. Trate-o como um segundo olhar, não como uma sandbox: um comando que esconda o rm atrás de uma variável ou de outro programa não será classificado.
- Executa comandos
- Pode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
- Intercepta chamadas de ferramentas
- Vê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
- Altera a interface
- Desenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
Compatibilidade e solução de problemas
Verificado com o Claude Code 2.1.291 no macOS (validate e testes). Se um comando arriscado não for retido:
claude --versioné 2.1.287 ou mais recente, e o mod está ativado em/plugin.- O comando é de um dos três tipos. Um simples
rm file.txtsem-rnão é retido. - A prévia do force push conta os commits contra o upstream como estava no último fetch; rode
git fetchpara ter uma lista atualizada. - No
claude -pe em outras sessões sem tela, os comandos retidos são recusados na hora em vez de exibidos.
Perguntas frequentes
- Quais comandos o Blast Radius segura?
- Um rm recursivo (rm -r, rm -rf, rm --recursive, inclusive depois de sudo), git push com -f, --force, --force-with-lease ou um +refspec, e comandos de migração de prisma, supabase, drizzle-kit, knex, sequelize, rails, alembic e typeorm. Cada parte de um comando composto é verificada.
- A prévia executa o comando arriscado?
- Não. Para o rm, ela roda du e find nos alvos em um script bash que só expande globs. Para um force push, roda dois comandos git log contra o upstream como estava no último fetch. Para uma migração, roda git status. Cada um tem timeout de 10 segundos.
- O que acontece se ninguém responder?
- Depois de 60 segundos o comando é cancelado, e o Claude fica sabendo o que teria feito e que não deve tentar de novo por conta própria. Ajuste timeoutSeconds para mudar a espera, ou use 0 para esperar sem limite.
- E no claude -p ou em execuções headless?
- Sem uma tela conectada ninguém pode apertar um botão, então um comando retido é recusado na hora com um motivo que inclui a prévia.
- Qual a diferença para o Block Dangerous Commands (cm-block-dangerous-commands)?
- O Block Dangerous Commands recusa direto os comandos que batem com o padrão e mostra um toast. O Blast Radius pergunta a você, mostra o que seria apagado ou sobrescrito e roda o comando sem alterações se você apertar Proceed.
# Mods relacionados
DestaqueBloquear comandos perigosos
Recusa rm -rf /, force-push na main, DROP TABLE, curl | sh e outros comandos Bash destrutivos antes de rodarem.
- notificação
- Intercepta chamadas de ferramentas
- Altera a interface
testado com v2.1.310
DestaqueBranch do Git acima do prompt
Mostra a branch do Git, a contagem de alterações e o status ahead/behind em uma faixa acima do prompt do Claude Code.
- acima do prompt
- Executa comandos
- Intercepta chamadas de ferramentas
- Altera a interface
testado com v2.1.310
Mais em Proteções de segurança, Git e GitHub.