PTENES
Saltar al contenido
MÓDULO 4.3

🧱 Guardia y panel

Cuando varios agentes trabajan al mismo tiempo, pueden ocurrir dos problemas: que uno sobrescriba lo que hizo otro y que un comando borre demasiado. La protección del kit pregunta antes. El panel muestra al equipo sin salir de Claude Code.

6
Temas
~35
Minutos
R7
Receta
Práctico
Tipo
0 de 60%
1

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. PreToolUse se ejecuta antes de una herramienta (editar, ejecutar Bash); PostToolUse se ejecuta después.
  • Plugin — un paquete oficial que añade hooks, comandos o pantallas a Claude Code. Tiene un .claude-plugin/plugin.json con 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.
el agente pide Edit · Bash PreToolUse colisao.mjs pre raio.mjs sin riesgo: continúa riesgo: "ask" tú decides PostToolUse anota quién editó registro: ~/.local/state/inema-runtime/toques.json (se limpia después de 24 h)

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).

📄 Fragmento del .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 … ]
Qué revisar: o matcher indica en qué herramienta se activa el gancho. Editar provoca la colisión; Bash activa el rayo.
🪝
Hook

se ejecuta antes o después

🧩
Plugin

el «mod» oficial

📜
Regla en el script

colisao.mjs · raio.mjs

🖥️
Pantalla en el mod

el panel

2

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.

sesión A edita a las 10:00 sesión B intenta a las 10:10 agenda.csv de Clara Protección contra colisiones otra sesión editó hace 10 min ¿continuar · worktree · cancelar?

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ú.

1

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.

2

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.

3

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.

3

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.

🎯 Objetivo: ver al rayo pedir confirmación antes de un rm -r

En 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)
Cómo verificar: busca las dos expresiones en la salida. Después verifica: la carpeta 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 -fdcuenta exactamente los archivos que se borrarían y pregunta
rm de archivo inexistente, lsnada que borrar: no pregunta
Claude en el modo que lo permite todo, pidiendo rm -r pastala 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.

💥
Radio

tamaño del daño

🔢
Cuenta

archivos y tamaño

👀
Solo lee

nunca borra

💾
¿Respaldo?

la pregunta final

4

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.

🎯 Objetivo: abrir Claude en otro proyecto con la protección activada

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".
Cómo verificar: en la sesión, pídele a Claude que borre una carpeta de prueba con 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.

🧳
--plugin-dir

solo en esta sesión

📌
Bloque hooks

fijo en el proyecto

☝️
Una forma

nunca ambos

🗂️
Recorrido real

apunta al kit

5

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.

🎯 Objetivo: abrir el panel del equipo en segundo plano

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
Cómo verificar: o /painel abre un panel con las sesiones de claude --bg de esta carpeta y los botones Actualizar y Parar.
Equipo en segundo plano Actualizar leído a las <hora> nombreestadomin r4-revisordone7 <otra sesión><en ejecución><N> Detener

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 ejecutaotro terminaldentro de la sesión de Claude
Finalizar sesióntú escribes claude stop <id>botón Detener
Necesita instalarseno, ya viene en el kitcargar 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.

📊
/painel

el comando nuevo

🔄
Actualizar

lee de nuevo

⏹️
Detener

solo con un clic tuyo

🧪
1 pase

prueba del mod

6

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.

🎯 Objetivo: entender qué hace un mod antes de activarlo

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.
Cómo verificar: la respuesta tiene que coincidir con este módulo: el rayo solo lee el disco; la colisión solo escribe en toques.json; ninguno de los dos se conecta a la red.

✓ Señales de un mod saludable

  • ✓ plugin.json con autor, licencia y dirección del código
  • ✓ hooks.json corto: 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?

🔑
Permisos

las de Claude Code

📖
Leer antes

todo mod de terceros

🤖
El agente explica

sin ejecutar nada

🌐
¿Red?

la pregunta clave

🎓 Resumen del módulo

✓
Mod es un plugin oficial con hooks — la regla está en el script; la pantalla, en el mod.
✓
La colisión pregunta antes de pisar al otro — ventana de 30 min; solo se detecta Codex.
✓
El rayo muestra el daño antes — cuenta archivos y tamaño, nunca borra.
✓
Otro proyecto: una sola forma — --plugin-dir o el bloque hooks.
✓
Panel opcional, código siempre leído — mod funciona con tus permisos.

Próximo módulo:

4.4 — Laboratorio y proyecto final