Bloquear comandos peligrosos en Claude Code antes de que se ejecuten
Rechaza rm -rf /, force-push a main, DROP TABLE, curl | sh y otros comandos Bash destructivos antes de que se ejecuten.
Permisos
- Intercepta llamadas a herramientasVe cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
- Modifica la interfazDibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
- probado con
- v2.1.291
- última prueba
- requiere
- Claude Code ≥ 2.1.287
- superficies
- aviso
- código fuente
- ClaudeMods (MIT)
Instalar dentro de Claude Code:
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace¿Qué hace este mod?
Este mod te permite bloquear comandos peligrosos en Claude Code justo antes de que se ejecuten a través de su herramienta Bash. Antes de que se ejecute cualquier comando de shell, se compara con una lista breve de reglas. Si hay coincidencia, el comando se rechaza, Claude recibe qué regla se activó y por qué, y tú ves un toast con el nombre de la regla. Los comandos seguros pasan sin ningún cambio.
Las reglas integradas cubren rm -rf sobre /, ~, $HOME, . o *; git push --force a main o master; git clean -fdx; las sentencias SQL DROP TABLE, DROP DATABASE, DROP SCHEMA y TRUNCATE; chmod -R 777 /; mkfs; dd sobre un dispositivo de disco; redirigir la salida a un disco en bruto; canalizar curl o wget hacia una shell; y la clásica fork bomb. git reset --hard está disponible como regla opcional. Requiere Claude Code 2.1.287 o posterior.
Demo
La grabación pide a Claude que haga algo destructivo en un proyecto de demostración. El mod rechaza la llamada a Bash, un toast muestra la regla que coincidió, y Claude lee el motivo y responde sin ejecutar el comando.
Instalación
Usa uno de los métodos de instalación del bloque. La protección está activa desde la siguiente llamada a una herramienta; no hace falta reiniciar después de /reload-plugins.
$ install cm-block-dangerous-commands
Requiere Claude Code ≥ 2.1.287
1.Una línea, dentro de Claude Code
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplacePégala en una sesión abierta (v2.1.275+). Claude Code te pedirá primero añadir el marketplace.
2.Desde tu shell
claude plugin marketplace add rotbit/claudemods-marketplace claude plugin install cm-block-dangerous-commands@claudemodsDespués ejecuta /reload-plugins en cualquier sesión que ya esté abierta.
3.Pruébalo sin instalarlo
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commandsCarga el mod solo para una sesión. No se añade nada a tu configuración.
Cómo funciona
Toda la lógica está en un único hook de tool.call. Extraído 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.` },
)El filtro { tool: 'Bash' } hace que el hook solo vea comandos de shell. findMatch, en hooks/rules.ts, comprueba primero allowPatterns, después las reglas integradas (omitiendo las desactivadas) y, por último, tus extraPatterns. Si no hay coincidencia, next(e) ejecuta el comando con normalidad. Si la hay, el hook devuelve { deny: reason }, y ese motivo se convierte en el resultado de la herramienta que Claude lee.
El manejador .catch es lo que convierte esto en una protección y no en un simple filtro. Si la comprobación lanza un error antes de llamar a next, la llamada se deniega en lugar de permitirse: el mod falla de forma cerrada. Un hook de session.start muestra un toast una sola vez si alguno de tus patrones personalizados no es una expresión regular válida.
Cada regla de rules.ts son datos simples: un id, un nombre, un motivo de una frase y comandos de ejemplo que comprueban los tests.
Personalízalo
Cambia estas opciones en /config. mode: warn convierte la protección en un aviso: los comandos que coinciden se siguen ejecutando y recibes un toast. extraPatterns y allowPatterns aceptan expresiones regulares de JavaScript, una por entrada. Para cambiar una regla integrada, edita su pattern en el array RULES de hooks/rules.ts.
| Ajuste | Tipo | Valor por defecto | Qué hace |
|---|---|---|---|
| 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. |
Cámbialos en Claude Code con /config: el mod se recarga en caliente.
Permisos y seguridad
Intercepta llamadas a herramientas es la razón de ser del mod: ve cada comando de Bash antes de que se ejecute y puede denegarlo. Nunca reescribe un comando ni ejecuta ninguno por su cuenta. Modifica la interfaz cubre los toasts. No tiene acceso propio a archivos, red, modelo ni comandos.
Es una protección contra accidentes, no un sandbox. Un comando diseñado para esquivar los patrones pasará, así que mantén activadas las solicitudes de permiso de Claude Code. Desactiva el mod con /plugin disable cm-block-dangerous-commands, o inicia una sesión con todos los mods desactivados usando claude --safe-mode.
- Intercepta llamadas a herramientas
- Ve cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
- Modifica la interfaz
- Dibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
Compatibilidad y solución de problemas
Probado con Claude Code 2.1.291 en la terminal de macOS. Si siguen ejecutándose comandos que esperabas que se bloquearan:
- Comprueba que
claude --versionsea 2.1.287 o posterior y que el mod esté habilitado en/plugin. - Ejecuta
/reload-pluginsdespués de una instalación desde la shell. - Comprueba en
/configquemodeseablocky nowarn. - Comprueba que ninguna entrada de
allowPatternscoincida con más de lo que pretendías. - La protección solo cubre la herramienta
Bash. Las ediciones de archivos medianteEdityWriteno se comprueban.
Si se rechaza un comando seguro, añade un patrón de permiso específico en lugar de pasar todo el mod a modo aviso.
Preguntas frecuentes
- ¿Sustituye esto a las solicitudes de permiso de Claude Code?
- No. Es una protección basada en patrones frente a accidentes habituales. Un comando ofuscado puede colarse por una expresión regular, así que mantén activadas las solicitudes de permiso y las reglas de denegación.
- ¿Qué ve Claude cuando se bloquea un comando?
- La llamada se deniega con un motivo que nombra la regla, explica por qué y sugiere pedirte que lo ejecutes tú o ajustar allowPatterns o mode en /config. Normalmente Claude elige un comando más seguro o te pregunta.
- ¿Cómo permito un comando concreto?
- Añade una expresión regular a allowPatterns en /config. Una coincidencia ahí siempre tiene prioridad sobre las reglas integradas y tus extraPatterns.
- ¿Se bloquea git reset --hard?
- No por defecto, porque es un flujo de trabajo común y a menudo intencionado. Activa blockHardReset para bloquearlo.
- ¿Qué pasa si el propio mod falla?
- El hook de tool.call falla de forma cerrada. Si la comprobación lanza un error antes de que se ejecute el comando, este se deniega con un mensaje que indica que la comprobación falló.
# Mods relacionados

Rama git sobre el prompt
Tu rama git, los archivos cambiados y el estado ahead/behind en una franja de una línea sobre el prompt de Claude Code.
- sobre el prompt
- Ejecuta comandos
- Intercepta llamadas a herramientas
- Modifica la interfaz
probado con v2.1.291

Aviso de finalización
Un toast «Done in 2m 14s» y un sonido al terminar un turno largo de Claude, más un aviso de escritorio opcional.
- aviso
- Ejecuta comandos
- Modifica la interfaz
- Reproduce sonido
probado con v2.1.291

Contador de llamadas a herramientas
Cuenta las llamadas a herramientas por turno y sesión, muestra el total junto al spinner y añade /tally con un desglose.
- spinner
- transcripción
- estado
- Intercepta llamadas a herramientas
- Modifica la interfaz
- Añade comandos/herramientas
probado con v2.1.291
Más en Protecciones de seguridad, Git y GitHub.