Carlos Tapia
← Todas las notas

Cómo darle permisos a un agente de código sin pasarle tus llaves

· 4 min de lectura

agente(rol: front)src/web/escribe aquí~/.ssh ~/.awsno las ve.secrets/solo su llaveinternetsolo github.com.git/hooks/no puede dejar nada

Un agente de código que trabaja solo corre con tu usuario: lee ~/.ssh, ~/.aws, el .env y tus variables de entorno, escribe en cualquier parte del repositorio y se conecta a cualquier sitio. El riesgo está en las veces que se equivoca o sigue instrucciones que encontró en un archivo, una issue o una página web. Los ejemplos de configuración son de seisin y tartaros, dos herramientas mías; la idea sirve con cualquier sandbox.

1. Dónde escribe

Cada agente escribe solo en su carpeta. En seisin se declara en un archivo en la raíz del repo, y lo que no aparece queda negado:

[roles.frontend]
writes = ["src/web/**", "public/**"]

[roles.backend]
writes = ["src/api/**", "migrations/**"]
seisin run frontend -- claude -p "arregla el formulario de contacto"

Si el agente del front intenta escribir en src/api/, el sistema operativo se lo niega y seisin dice de quién es el archivo.

2. Qué credenciales ve

Fuera del entorno del agente, un archivo por llave, y cada rol nombra las que necesita:

[keys]
dir = ".secrets"

[roles.frontend]
keys = ["deploy-token.txt"]

Por defecto seisin deja leer todo lo demás, incluidos ~/.ssh y ~/.aws. Para cerrarlos:

[runtime]
read = "territory"

3. A qué dominios sale

Casi siempre basta con la API del modelo, GitHub y uno o dos más:

[network]
allow = ["github.com", "*.github.com"]

[roles.backend]
network = ["api.stripe.com"]

La lista de un rol reemplaza a la general: el backend de este ejemplo sale solo a api.stripe.com.

4. Qué deja para después

Un hook de git, un .claude/settings.json o un .mcp.json escritos dentro de la carpeta permitida se ejecutan después, fuera del sandbox. En mi medición de tres sandboxes fue la categoría con más escapes: 37 de 79. tartaros deja esos archivos sin permiso de escritura a cualquier profundidad, incluidos repositorios anidados:

tartaros run --write ./repo --read-deny ~/.ssh --read-deny ~/.aws \
  --allow-domain api.anthropic.com --allow-domain github.com \
  -- claude --dangerously-skip-permissions -p "arregla los tests que fallan"

Con un solo agente, el sandbox de Claude Code o Codex ya cubre escritura y red; revisa los puntos 2 y 4.

Pruébalo

Pídele al agente, dentro del sandbox:

cat ~/.ssh/id_ed25519
curl https://example.com
echo 'echo hola' > .git/hooks/pre-commit

Las tres tienen que fallar y lo que necesita para trabajar tiene que seguir andando. El laboratorio de sandboxes tiene 196 contratos de este tipo (al 26 de octubre de 2026) para correr contra el tuyo.

Relacionadas