Bloquear comandos perigosos no Claude Code antes que rodem
Recusa rm -rf /, force-push na main, DROP TABLE, curl | sh e outros comandos Bash destrutivos antes de rodarem.
Permissões
- 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
- notificação
- código-fonte
- ClaudeMods (MIT)
Instale dentro do Claude Code:
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplaceO que este mod faz?
Este mod permite bloquear comandos perigosos no Claude Code antes que ele os execute pela ferramenta Bash. Antes de qualquer comando de shell rodar, ele é comparado com uma lista curta de regras. Se houver correspondência, o comando é recusado, o Claude fica sabendo qual regra disparou e por quê, e você vê um toast com o nome da regra. Comandos seguros passam sem nenhuma alteração.
As regras embutidas cobrem rm -rf em /, ~, $HOME, . ou *; git push --force para main ou master; git clean -fdx; os comandos SQL DROP TABLE, DROP DATABASE, DROP SCHEMA e TRUNCATE; chmod -R 777 /; mkfs; dd gravando em um dispositivo de disco; redirecionar a saída para um disco bruto; encadear curl ou wget direto em um shell; e a clássica fork bomb. git reset --hard está disponível como regra opcional. Requer Claude Code 2.1.287 ou posterior.
Demonstração
A gravação pede ao Claude que faça algo destrutivo em um projeto de demonstração. O mod recusa a chamada Bash, um toast mostra o nome da regra que correspondeu, e o Claude lê o motivo e responde sem executar o comando.
Instalação
Use um dos métodos de instalação do bloco. A proteção fica ativa a partir da próxima chamada de ferramenta; não é preciso reiniciar depois de /reload-plugins.
$ install cm-block-dangerous-commands
Requer Claude Code ≥ 2.1.287
1.Uma linha, dentro do Claude Code
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplaceCole 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 rotbit/claudemods-marketplace claude plugin install cm-block-dangerous-commands@claudemodsDepois execute /reload-plugins em qualquer sessão que já esteja aberta.
3.Experimente sem instalar
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commandsCarrega o mod só para uma sessão. Nada é adicionado às suas configurações.
Como funciona
Toda a lógica fica em um único hook tool.call. Trecho de hooks/register.ts:
on('tool.call', { tool: 'Bash' }, ($, e, next) => {
const match = findMatch(e.command, settings)
if (match === undefined) return next(e)
if (settings.mode === 'warn') {
$.ui.toast(`${$.plugin.name}: "${match.name}" is running (warn mode)`)
return next(e)
}
$.ui.toast(`${$.plugin.name}: blocked "${match.name}"`)
return { deny: denyReason($.plugin.name, match) }
}).catch(($, e, next) =>
next.called
? next(e)
: { deny: `${$.plugin.name}: its check failed, so the command was not run to be safe.` },
)O filtro { tool: 'Bash' } significa que o hook só enxerga comandos de shell. A função findMatch em hooks/rules.ts verifica primeiro allowPatterns, depois as regras embutidas (pulando as que estão desativadas) e, por fim, seus extraPatterns. Sem correspondência, next(e) executa o comando normalmente. Com correspondência, o hook retorna { deny: reason }, e esse motivo vira o resultado da ferramenta que o Claude lê.
O handler .catch é o que transforma isto em uma proteção de verdade, e não apenas em um filtro. Se a verificação lançar um erro antes de next ser chamado, a chamada é negada em vez de liberada: o mod falha de forma fechada. Um hook session.start mostra um toast uma única vez se algum dos seus padrões personalizados não for uma expressão regular válida.
Cada regra em rules.ts é um simples dado com um id, um nome, um motivo de uma frase e comandos de exemplo que os testes verificam.
Personalize
Altere estas opções em /config. mode: warn transforma a proteção em um aviso: os comandos que correspondem continuam rodando, e você recebe um toast. extraPatterns e allowPatterns aceitam expressões regulares JavaScript, uma por entrada. Para mudar uma regra embutida, edite o pattern dela no array RULES em hooks/rules.ts.
| Configuração | Tipo | Padrão | O que faz |
|---|---|---|---|
| mode | string (block | warn) | "block" | Mode. block refuses a matching command; warn lets it run and shows a toast. |
| blockForcePush | boolean | true | Block force-push to main/master. Refuse git push --force / -f / +main to main or master. |
| blockHardReset | boolean | false | Block git reset --hard. Also refuse git reset --hard (off by default: it is a common, recoverable-ish workflow). |
| extraPatterns | string | [] | Extra patterns. Additional JavaScript regular expressions; a Bash command matching any of them is treated as dangerous. |
| allowPatterns | string | [] | Allow patterns. JavaScript regular expressions; a Bash command matching any of them is never blocked, whatever else it matches. |
Altere isso no Claude Code com /config — o mod recarrega na hora.
Permissões e segurança
Intercepta chamadas de ferramentas é a razão de existir do mod: ele vê cada comando Bash antes que rode e pode negá-lo. Ele nunca reescreve um comando e nunca executa nenhum por conta própria. Altera a interface cobre os toasts. O mod não tem acesso próprio a arquivos, rede, modelo ou comandos.
Isto é uma proteção contra acidentes, não uma sandbox. Um comando construído para escapar dos padrões vai passar, então mantenha os prompts de permissão do Claude Code ativados. Desative o mod com /plugin disable cm-block-dangerous-commands, ou inicie uma sessão com todos os mods desligados usando claude --safe-mode.
- 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
Testado com Claude Code 2.1.291 no terminal, no macOS. Se comandos que você esperava ver bloqueados continuarem rodando:
- Verifique se
claude --versioné 2.1.287 ou posterior e se o mod está ativado em/plugin. - Execute
/reload-pluginsdepois de uma instalação pelo shell. - Confira se
modeestá comoblock, e nãowarn, em/config. - Verifique se alguma entrada de
allowPatternsnão está correspondendo a mais coisas do que você pretendia. - A proteção cobre apenas a ferramenta
Bash. Edições de arquivos feitas porEditeWritenão são verificadas.
Se um comando seguro for recusado, adicione um padrão de liberação bem específico em vez de colocar o mod inteiro em modo de aviso.
Perguntas frequentes
- Isso substitui os prompts de permissão do Claude Code?
- Não. É uma proteção baseada em padrões contra acidentes comuns. Um comando ofuscado pode passar por uma expressão regular, então mantenha os prompts de permissão e as regras de negação ativados.
- O que o Claude vê quando um comando é bloqueado?
- A chamada é negada com um motivo que nomeia a regra, explica o porquê e sugere pedir que você mesmo execute o comando ou ajustar allowPatterns ou mode em /config. Normalmente o Claude escolhe um comando mais seguro ou pergunta a você.
- Como libero um comando específico?
- Adicione uma expressão regular a allowPatterns em /config. Uma correspondência ali sempre tem prioridade sobre as regras embutidas e sobre seus extraPatterns.
- O git reset --hard é bloqueado?
- Não por padrão, porque é um fluxo de trabalho comum e muitas vezes intencional. Ative blockHardReset para bloqueá-lo.
- E se o próprio mod travar?
- O hook tool.call falha de forma fechada. Se a verificação lançar um erro antes de o comando rodar, o comando é negado com uma mensagem dizendo que a verificação falhou.
# Mods relacionados

Branch 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.291

Aviso de conclusão
Um toast "Done in 2m 14s" e um som curto quando um turno longo do Claude termina, com notificação opcional no desktop.
- notificação
- Executa comandos
- Altera a interface
- Reproduz som
testado com v2.1.291

Contador de chamadas de ferramentas
Conta as chamadas de ferramentas do Claude por turno e por sessão, mostra o total junto ao spinner e adiciona /tally.
- spinner
- transcrição
- status
- Intercepta chamadas de ferramentas
- Altera a interface
- Adiciona comandos/ferramentas
testado com v2.1.291
Mais em Proteções de segurança, Git e GitHub.