Blast Radius: vista previa de rm -rf en Claude Code antes de ejecutarlo
Retiene rm -r, force push y migraciones de base de datos en Claude Code y muestra qué cambiarían antes de ejecutarse.
Permisos
- Ejecuta comandosPuede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
- 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
- panel, sobre el prompt
- código fuente
- Hamza Zafar (hamzafer) (MIT)
Instalar dentro de Claude Code:
/plugin install blast-radius --marketplace hamzafer/claude-code-mods¿Qué hace este mod?
Blast Radius ofrece una vista previa de rm -rf en Claude Code. Es un mod de la comunidad creado por Hamza Zafar (hamzafer), de su colección claude-code-mods. Cuando Claude está a punto de ejecutar un comando de shell peligroso a través de la herramienta Bash, el mod lo retiene, te muestra qué cambiaría y espera a que pulses Cancel o Proceed.
Se retienen tres tipos de comando. Un rm recursivo recibe una lista de los archivos que borraría y su tamaño total, por ejemplo delete 42 files (1.3 MB). ~ y $HOME se expanden; una ruta con cualquier otra variable de shell, una sustitución de comandos o ~user muestra "can't preview" en lugar de una suposición. Un git push --force lista los commits remotos que se perderían y los locales que se enviarían, según el último fetch. Una migración de base de datos (prisma, supabase, drizzle-kit, knex, sequelize, rails, alembic, typeorm) no se puede previsualizar, así que el mod lista los archivos sin commit cuyos nombres parecen migraciones o esquemas.
El informe se abre en un panel lateral, o en la franja sobre el prompt cuando la terminal es demasiado estrecha para un panel. Cancel tiene el foco por defecto (tecla c); Proceed es y. Una cuenta atrás muestra auto-cancels in 42 s, y si no hay respuesta en 60 segundos el comando se cancela. En cualquier caso Claude recibe un motivo, así que una sesión desatendida sigue adelante en lugar de quedarse bloqueada. Solo se retiene un comando a la vez; un segundo espera su turno y después recibe su propia cuenta atrás completa.
Frente a nuestro Block Dangerous Commands, que rechaza de entrada un conjunto fijo de patrones destructivos, Blast Radius es una protección de tipo "pregúntame con datos": nunca bloquea un comando que apruebas y cubre el rm -r corriente, no solo los objetivos catastróficos. Los dos se pueden usar juntos. El README del autor pide Claude Code 2.1.287 o posterior.
Demo
La grabación crea una carpeta desechable dist con tres archivos pequeños en el proyecto de demostración y pide a Claude que ejecute rm -r dist. Blast Radius retiene el comando antes de que se ejecute y muestra qué borraría (3 archivos, 12 KB, con cada ruta listada) con los botones Cancel y Proceed y una cuenta atrás de autocancelación. Se pulsa Cancel, así que no se borra nada.
Instalación
Usa cualquiera de los métodos del bloque de instalación; instalan directamente desde el marketplace del propio autor. La protección está activa en cuanto se carga el plugin.
$ install blast-radius
Requiere Claude Code ≥ 2.1.287
Se instala desde el marketplace del autor: hamzafer/claude-code-mods
1.Una línea, dentro de Claude Code
/plugin install blast-radius --marketplace hamzafer/claude-code-modsPé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 hamzafer/claude-code-mods claude plugin install blast-radius@claude-code-modsDespués ejecuta /reload-plugins en cualquier sesión que ya esté abierta.
3.Pruébalo sin instalarlo
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/blast-radiusCarga el mod solo para una sesión. No se añade nada a tu configuración.
Cómo funciona
El mod se engancha a tool.call para Bash. Una función pura, classify, divide el comando por &&, ||, ; y saltos de línea y busca los tres tipos peligrosos. Si ninguno coincide, la llamada pasa directamente con next(e). Esta es la vista previa de un borrado recursivo, 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)Los objetivos se pasan como argumentos en lugar de pegarse en el script, y el listado se limita a 5000 archivos. Tras medir, el mod guarda el comando retenido en un átomo de $.state, abre el panel blast-radius con $.ui.open y consulta cada cuarto de segundo si se ha pulsado un botón, si ha vencido el plazo o si la llamada se ha abortado. Proceed devuelve next(e), así que el comando se ejecuta exactamente como está escrito. Cancel o un tiempo agotado devuelven { deny: ... } con un mensaje que incluye el resumen de la vista previa. Antes de todo eso se comprueba $.session.surfaces(): si no hay pantalla, la llamada se deniega de inmediato.
Personalízalo
Una opción, timeoutSeconds (60 por defecto, mínimo 0), fija cuánto espera un comando retenido antes de cancelarse; 0 espera indefinidamente y oculta la cuenta atrás. Cámbiala en /config bajo el nombre del mod, o en settings.json bajo pluginConfigs. La lista de herramientas de migración es la expresión regular MIGRATION al principio de register.tsx, y MAX_LISTED (200) limita cuántas líneas muestra el informe.
Permisos y seguridad
Leemos todos los archivos que el plugin puede ejecutar antes de ponerlo en marcha: hooks/hooks.json, hooks/register.tsx, las declaraciones de tipos y los tests. No hay package.json, script de instalación ni código empaquetado.
Intercepta llamadas a herramientas aparece porque el mod controla las llamadas a Bash: puede retenerlas y denegarlas, pero nunca reescribe un comando. Ejecuta comandos aparece por $.process.run. Los programas que ejecuta son de solo lectura: bash -c con el script de du/find de arriba, git log --oneline dos veces para los force push, git status --porcelain para las migraciones y sleep 0.25 para su bucle de sondeo. Cada llamada de vista previa tiene un tiempo límite de 10 segundos; ten en cuenta que du y find sobre un objetivo muy grande pueden tardar hasta ese límite. Lee la variable de entorno HOME para expandir ~. Modifica la interfaz cubre el panel y la franja.
No escribe archivos, no usa la red ni llama al modelo. claude plugin validate no informó de errores ni avisos, y los 17 tests del autor pasaron en Claude Code 2.1.291. Tómalo como una segunda mirada, no como un sandbox: un comando que esconda rm tras una variable u otro programa no se clasificará.
- Ejecuta comandos
- Puede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
- 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
Comprobado con Claude Code 2.1.291 en macOS (validate y tests). Si un comando peligroso no se retiene:
claude --versiones 2.1.287 o posterior, y el mod está habilitado en/plugin.- El comando es de uno de los tres tipos. Un simple
rm file.txtsin-rno se retiene. - La vista previa del force push cuenta los commits contra el upstream tal como estaba en el último fetch; ejecuta
git fetchpara tener una lista actualizada. - En
claude -py otras sesiones sin pantalla, los comandos retenidos se rechazan de inmediato en lugar de mostrarse.
Preguntas frecuentes
- ¿Qué comandos retiene Blast Radius?
- Un rm recursivo (rm -r, rm -rf, rm --recursive, también después de sudo), git push con -f, --force, --force-with-lease o un +refspec, y los comandos de migración de prisma, supabase, drizzle-kit, knex, sequelize, rails, alembic y typeorm. Se comprueba cada parte de un comando compuesto.
- ¿La vista previa ejecuta el comando peligroso?
- No. Para rm ejecuta du y find sobre los objetivos en un script de bash que solo expande los globs. Para un force push ejecuta dos comandos git log contra el upstream tal como estaba en el último fetch. Para una migración ejecuta git status. Cada uno tiene un tiempo límite de 10 segundos.
- ¿Qué pasa si nadie responde?
- A los 60 segundos el comando se cancela y se le dice a Claude qué habría hecho y que no lo reintente por su cuenta. Ajusta timeoutSeconds para cambiar la espera, o ponlo a 0 para esperar indefinidamente.
- ¿Y con claude -p o ejecuciones sin interfaz?
- Sin una pantalla conectada nadie puede pulsar un botón, así que un comando retenido se rechaza de inmediato con un motivo que incluye la vista previa.
- ¿En qué se diferencia de Block Dangerous Commands (cm-block-dangerous-commands)?
- Block Dangerous Commands rechaza directamente los comandos que coinciden y muestra un toast. Blast Radius te pregunta, te muestra qué se borraría o sobrescribiría y ejecuta el comando sin cambios si pulsas Proceed.
# Mods relacionados
DestacadoBloquear comandos peligrosos
Rechaza rm -rf /, force-push a main, DROP TABLE, curl | sh y otros comandos Bash destructivos antes de que se ejecuten.
- aviso
- Intercepta llamadas a herramientas
- Modifica la interfaz
probado con v2.1.310
DestacadoRama 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.310
Más en Protecciones de seguridad, Git y GitHub.