Entiende qué es un mod de Claude Code
En los videos que circularon sobre mods de Claude Code aparecieron dos protecciones: una guarda de colisión (dos agentes en el mismo archivo) y una de "radio de impacto" (el tamaño del daño que puede causar un comando que borra).
La idea es excelente. El kit crea su propia versión, solo con recursos oficiales: los hooks de Claude Code. La división es simple: la regla queda en el script, la pantalla queda en el mod.
🆕 ¿Eres nuevo aquí? Cuatro palabras de este módulo
- Hook (gancho) — un comando que Claude Code ejecuta automáticamente en un momento determinado.
PreToolUsese ejecuta antes de una herramienta (editar, ejecutar Bash);PostToolUsese ejecuta después. - Plugin — un paquete oficial que añade hooks, comandos o pantallas a Claude Code. Tiene un
.claude-plugin/plugin.jsoncon nombre y versión. - Mod — el apodo que los videos les dieron a los plugins. En el kit, los mods están en
runtime/mods/. - Worktree — una segunda copia de trabajo del mismo repositorio Git, en una carpeta separada. Dos agentes, dos copias, ninguno interfiere con el otro.
Cómo leer el diagrama: la caja ámbar es el punto de control. Todas las ediciones y todos los comandos pasan por ahí antes de ejecutarse. Si no hay riesgo, sigue por la flecha azul. Si hay riesgo, el guardián no bloquea ni permite: te devuelve la pregunta (N2).
.claude/settings.json del kit (la protección ya viene activada)"PreToolUse": [
{
"matcher": "Edit|Write|MultiEdit|NotebookEdit",
"hooks": [ { "type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/runtime/mods/runtime-guarda/hooks/colisao.mjs\" pre",
"timeout": 10 } ]
},
{
"matcher": "Bash",
"hooks": [ { "type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/runtime/mods/runtime-guarda/hooks/raio.mjs\"",
"timeout": 15 } ]
}
]
…
"PostToolUse": [ … colisao.mjs pos … ]
matcher indica en qué herramienta se activa el gancho. Editar provoca la colisión; Bash activa el rayo.se ejecuta antes o después
el «mod» oficial
colisao.mjs · raio.mjs
el panel
Mira la protección contra colisiones en acción
El problema es real. Ocurrió en un proyecto nuestro: una sesión vació un archivo que otra estaba editando. Ninguna de las dos se equivocó por sí sola. Cada una creía que el archivo era solo suyo.
La colisión se resuelve con memoria. Después de cada edición, anota «esta sesión modificó este archivo ahora». Antes de la siguiente edición, comprueba la anotación y la fecha del archivo.
Cómo leer el diagrama: la flecha azul es la edición normal de la sesión A, que queda anotada. La flecha roja es la sesión B que llega dentro de la ventana de 30 minutos. Quien responde la pregunta del recuadro ámbar eres tú.
Después de editar: anota
colisao.mjs pos registra la ruta del archivo, el id de la sesión y la hora en toques.json. El registro es atómico: dos sesiones no corrompen el registro.
Antes de editar: comprueba
colisao.mjs pre revisa si otra sesión modificó el archivo o si la fecha del archivo cambió externamente en los últimos 30 minutos.
Si hay riesgo: preguntar
El texto que genera el script es: Guarda de colisão: Outra sessão (<id>) editou <arquivo> há <N> min. Seguir mesmo assim, usar outra cópia (worktree) ou cancelar?
✓ Preguntar cuándo
- ✓ Otra sesión de Claude editó el archivo hace menos de 30 min
- ✓ El archivo cambió por fuera: Codex, editor u otra persona
✗ Se queda quieta cuando
- ✗ El archivo es nuevo (no hay nada que proteger)
- ✗ Fue la misma sesión que editó por última vez
- ✗ El último cambio tiene más de 30 min
Probado en el CHANGELOG 0.3.0: con 5 casos (archivo antiguo, modificado desde fuera, misma sesión, otra sesión, inexistente), la colisión solo pregunta en los casos de otra sesión y de modificación desde fuera. Dentro de Claude, se bloqueó una edición de un archivo de otra sesión y el archivo quedó intacto.
⚠️ Límite de Codex
Codex todavía no tiene un gancho equivalente de «antes de editar». La protección resguarda las sesiones de Claude y detecta ediciones hechas por Codex según la fecha del archivo. No impide que Codex edite. Si Codex y Claude van a trabajar en la misma carpeta, dale a cada uno un worktree.
💡 Ajusta la ventana
Si tu equipo trabaja despacio, aumenta la ventana: INEMA_COLISAO_MIN=60 haz que la protección considere la última hora en vez de 30 minutos.
Prueba el alcance antes de borrar
O rayo va antes de un rm o git clean. Cuenta cuántos archivos existentes se borrarían, suma el tamaño y enumera las primeras rutas. Después pregunta: «¿Hay una copia de seguridad? Confirma para continuar.»
El rayo no borra nada: solo lee el disco. Y si el comando no borraría ningún archivo existente, no hace nada. Puedes probar el script por separado, sin abrir Claude, enviándole el mismo pedido que Claude enviaría.
rm -rEn la terminal. Cambia /caminho/do/kit por la carpeta donde clonaste el kit:
mkdir -p /tmp/teste-raio/x && echo a > /tmp/teste-raio/x/a && cd /tmp/teste-raio
printf '{"cwd":"%s","tool_name":"Bash","tool_input":{"command":"rm -r x"}}' "$PWD" \
| node /caminho/do/kit/runtime/mods/runtime-guarda/hooks/raio.mjs
Resultado comprobado en CHANGELOG 0.3.0 / esperado según la receta R7:
a saída traz "permissionDecision":"ask" e o texto Raio: este comando apaga 1 arquivo(s)
x sigue ahí. El comando de arriba solo le preguntó al rayo; no borró nada.🆕 ¿Eres nuevo aquí? Qué es lo que el printf … | haz
O printf arma un texto en el formato que Claude Code entrega al hook: la carpeta (cwd), la herramienta (Bash) y el comando (rm -r x). La barra | mete ese texto dentro del raio.mjs. Es un ensayo: el hook responde como respondería a Claude.
| Caso probado (CHANGELOG 0.3.0) | El rayo… |
|---|---|
rm -r, rm -f *.txt, git clean -fd | cuenta exactamente los archivos que se borrarían y pregunta |
rm de archivo inexistente, ls | nada que borrar: no pregunta |
Claude en el modo que lo permite todo, pidiendo rm -r pasta | la bloquea con "Raio"; carpeta intacta |
💡 Dos capas, no una
O .claude/settings.json ya lo rechaza rm -rf de una vez (módulo 4.1). El rayo cubre el resto: rm -r, rm con comodín, git clean. La negación es un muro; el rayo es una puerta que solo se abre con tu aprobación.
tamaño del daño
archivos y tamaño
nunca borra
la pregunta final
Lleva la protección a otro proyecto
En la carpeta del kit, la protección ya está activada. Pero Sônia tiene otra carpeta, la de los cierres mensuales, donde también ejecuta agentes. Quiere la misma protección allí.
La receta R7 ofrece dos formas. Elige uno, no los dos.
Forma 1 · Solo en esta sesión
Abre Claude cargando la guarda como plugin. Cuando cierras la sesión, se termina.
Bueno para probar o para un proyecto pasajero.
Forma 2 · Fijo en el proyecto
Copia el bloque hooks del .claude/settings.json del kit para el .claude/settings.json del otro proyecto, cambiando la ruta.
Bueno para la carpeta que usas todos los días.
En la terminal, dentro de la carpeta del otro proyecto (cambia /caminho/do/kit):
claude --plugin-dir /caminho/do/kit/runtime/mods/runtime-guarda
Resultado comprobado en CHANGELOG 0.3.0:
com --plugin-dir runtime-guarda e o modo que libera tudo, rm -r pasta foi barrado pelo "Raio" e a pasta ficou intacta; Edit em arquivo editado por outra sessão foi barrado pela "colisão".
rm -r. Tiene que detenerse y mostrar la pregunta del Raio. Responde «no».💡 Por qué cambia el camino
En el kit, settings usa $CLAUDE_PROJECT_DIR/runtime/mods/…, es decir, "la carpeta de este proyecto". En el otro proyecto no existe runtime/. Por eso, en el modo 2, la ruta tiene que apuntar a donde realmente está el kit.
solo en esta sesión
fijo en el proyecto
nunca ambos
apunta al kit
Abre el panel del equipo
En el módulo 3.3, liberaste sesiones con claude --bg y lo siguió con observar.mjs, en otra terminal. El panel incluye esta lista en Claude Code. Es opcional.
Muestra cada sesión en segundo plano con nombre, estado y minutos, y un botón Actualizar y un botón Detener en las que están en ejecución. Solo tu clic para una sesión.
En la terminal, dentro de la carpeta del kit. Después, ya en la sesión, escribe /painel:
claude --plugin-dir runtime/mods/runtime-painel
Para revisar el mod antes de usarlo:
claude plugin validate runtime/mods/runtime-painel claude plugin test runtime/mods/runtime-painel
Resultado comprobado en CHANGELOG 0.3.0:
validate: passa test: 1 pass
/painel abre un panel con las sesiones de claude --bg de esta carpeta y los botones Actualizar y Parar.Cómo leer el diagrama: es una ilustración, no una captura de pantalla. La línea r4-revisor · done · 7 es la misma sesión que el observar.mjs mostró en el módulo 3.3. El botón rojo solo aparece en sesiones que todavía están en ejecución.
| observar.mjs | /painel | |
|---|---|---|
| Dónde se ejecuta | otro terminal | dentro de la sesión de Claude |
| Finalizar sesión | tú escribes claude stop <id> | botón Detener |
| Necesita instalarse | no, ya viene en el kit | cargar el mod con --plugin-dir |
Qué revisar en la tabla: ambos leen la misma lista de sesiones. Elige según tu comodidad, no por la función.
el comando nuevo
lee de nuevo
solo con un clic tuyo
prueba del mod
Lee el código antes de instalar un mod
Los mods y plugins se ejecutan con los mismos permisos de Claude Code. Un hook puede leer tus archivos, ejecutar comandos y acceder a la red sin preguntar. Por eso protege bien y por eso un mod malintencionado puede causar mucho daño.
La regla de la receta R7: lee el código de cualquier mod de terceros antes de instalarlo. No necesitas programar para esto. Pídele al agente que lea y explique, sin ejecutar nada.
Abre claude en la carpeta del kit y pega (para un mod de terceros, cambia las rutas):
Lee runtime/mods/runtime-guarda/.claude-plugin/plugin.json, runtime/mods/runtime-guarda/hooks/hooks.json, colisao.mjs y raio.mjs. Dime en lenguaje sencillo: en qué momento se ejecuta cada hook, qué lee, qué escribe y si accede a la red. No instales ni ejecutes nada.
toques.json; ninguno de los dos se conecta a la red.✓ Señales de un mod saludable
- ✓
plugin.jsoncon autor, licencia y dirección del código - ✓
hooks.jsoncorto: puedes ver cada gancho - ✓ Guarda solo en un lugar conocido
- ✓ Preguntar en vez de decidir por tu cuenta
✗ Señales de alerta
- ✗ Código confuso que nadie puede leer
- ✗ Lee credenciales, tokens o la carpeta de configuración de otra herramienta
- ✗ Envía datos a una dirección de internet
- ✗ Aprueba permisos por su cuenta
Prueba rápida (opcional): la guardia detecta un riesgo en una edición. ¿Qué hace?
las de Claude Code
todo mod de terceros
sin ejecutar nada
la pregunta clave
🎓 Resumen del módulo
Próximo módulo:
4.4 — Laboratorio y proyecto final