Cómo darle permisos a un agente de código sin pasarle tus llaves
· 4 min de lectura
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
- Tres de cada cuatro escapes de sandbox que medí no rompen ninguna regla configurada sandbox-runtime, nono y Codex contra 168 tests de las suites de sus propios proyectos. La mayoría de los escapes sale de los valores por defecto.
- Si el agente sabe de quién es el archivo, no lo toca, pero lo rodea Qué hacen Claude Code, Codex y opencode cuando el kernel les niega escribir un archivo de otro rol. Con la negación sola, dos de los tres insisten en todas las corridas. Si saben de antemano quién es el dueño, ninguno lo intenta, pero dos de los tres siguen arreglando el bug en sus propios archivos. El mensaje de seisin al negar nunca llegó a mostrarse.