Cap 14: Permisos y Sandbox
Permission Modes
Claude Code tiene modos de permisos predefinidos que controlan qué puede hacer sin preguntar:
| Modo | Lectura | Edición | Bash | Uso |
|---|---|---|---|---|
default | Auto | Pregunta | Pregunta | Uso normal |
acceptEdits | Auto | Auto | Pregunta | Confiar en ediciones |
plan | Auto | Bloqueado | Bloqueado | Solo exploración |
bypassPermissions | Auto | Auto | Auto | Sin restricciones |
# Iniciar en modo plan para investigar
claude --permission-mode plan
# Aceptar ediciones automáticamente
claude --permission-mode acceptEdits
Cambiar durante sesión
Dentro de una sesión puedes cambiar de modo:
/plan # Cambiar a modo plan
/permissions # Ver y editar permisos
Wildcard syntax detallado
La sintaxis de permisos usa patrones con wildcards para definir reglas granulares.
Patrones por herramienta
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"WebSearch",
"Bash(git *)",
"Bash(bun test *)",
"Bash(bun run build)",
"Bash(ls *)",
"Bash(cat *)",
"Edit(src/**)",
"Write(src/**)",
"mcp__context7__*"
],
"deny": [
"Bash(rm -rf *)",
"Bash(curl * | bash)",
"Bash(git push --force *)",
"Edit(.env*)",
"Write(.env*)"
]
}
}
Sintaxis de patrones
| Patrón | Significado |
|---|---|
* | Cualquier secuencia de caracteres |
** | Recursivo en directorios |
Tool | Toda la herramienta sin restricción |
Tool(pattern) | Herramienta con patrón específico |
Herramientas y sus patrones
| Herramienta | Qué filtra el patrón | Ejemplo |
|---|---|---|
Bash(...) | El comando a ejecutar | Bash(npm test *) |
Read(...) | Ruta del archivo | Read(src/**) |
Edit(...) | Ruta del archivo | Edit(*.ts) |
Write(...) | Ruta del archivo | Write(src/**) |
WebFetch(...) | Dominio | WebFetch(domain:github.com) |
Task(...) | Nombre del agente | Task(code-reviewer) |
Skill(...) | Nombre del skill | Skill(testing) |
mcp__srv__tool | Herramienta MCP | mcp__playwright__* |
Sandbox
El sandbox aísla la ejecución de comandos bash para prevenir daños accidentales.
Activar sandbox
# Via CLI
/sandbox
# Via settings
{
"sandbox": {
"enabled": true
}
}
Configuración del sandbox
{
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true,
"excludedCommands": ["docker", "ssh"],
"network": {
"allowedDomains": ["github.com", "registry.npmjs.org"],
"deniedDomains": ["*.malicious.com"],
"allowLocalBinding": false
}
}
}
Campos de sandbox
| Campo | Tipo | Descripción |
|---|---|---|
enabled | boolean | Activar sandbox |
autoAllowBashIfSandboxed | boolean | Auto-aprobar bash dentro del sandbox |
excludedCommands | string[] | Comandos que salen del sandbox |
Network isolation
| Campo | Descripción |
|---|---|
allowedDomains | Solo permitir estos dominios |
deniedDomains | Bloquear estos dominios |
allowLocalBinding | Permitir bind a puertos locales |
Combinando permisos con sandbox
La configuración más segura para trabajo autónomo:
{
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true,
"network": {
"allowedDomains": ["github.com", "registry.npmjs.org"]
}
},
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Edit(src/**)",
"Write(src/**)",
"Bash(bun test *)",
"Bash(git *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push *)",
"Edit(.env*)"
]
}
}
Permisos en equipos
Compartir configuración de permisos del proyecto vía .claude/settings.json (commiteable):
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(npm test *)",
"Bash(npm run lint *)"
],
"defaultMode": "default"
}
}
Override personal vía .claude/settings.local.json (gitignored):
{
"permissions": {
"allow": [
"Edit(src/**)",
"Bash(docker *)"
]
}
}
Las listas se fusionan: las reglas del equipo + las personales aplican juntas.
Siguiente: Plugins