Pular para o conteúdo
claudemods

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-marketplace
Todas as opções de instalação ↓

O 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. 1.Uma linha, dentro do Claude Code

    /plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace

    Cole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.

  2. 2.Pelo seu shell

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-block-dangerous-commands@claudemods

    Depois execute /reload-plugins em qualquer sessão que já esteja aberta.

  3. 3.Experimente sem instalar

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commands

    Carrega 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çãoTipoPadrãoO que faz
modestring (block | warn)"block"Mode. block refuses a matching command; warn lets it run and shows a toast.
blockForcePushbooleantrueBlock force-push to main/master. Refuse git push --force / -f / +main to main or master.
blockHardResetbooleanfalseBlock git reset --hard. Also refuse git reset --hard (off by default: it is a common, recoverable-ish workflow).
extraPatternsstring[]Extra patterns. Additional JavaScript regular expressions; a Bash command matching any of them is treated as dangerous.
allowPatternsstring[]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-plugins depois de uma instalação pelo shell.
  • Confira se mode está como block, e não warn, em /config.
  • Verifique se alguma entrada de allowPatterns não está correspondendo a mais coisas do que você pretendia.
  • A proteção cobre apenas a ferramenta Bash. Edições de arquivos feitas por Edit e Write nã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.
Branch do Git acima do prompt em execução no Claude Code

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 em execução no Claude Code

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 em execução no Claude Code

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.