Cap 7: Settings

Por: Artiko
claude-codesettingspermisosconfiguración

Jerarquía de Settings

Claude Code carga settings de 5 niveles, de menor a mayor prioridad:

NivelArchivoAlcanceCompartible
1Defaults internosBase
2~/.claude/settings.jsonGlobal usuarioNo
3.claude/settings.jsonProyectoSí (commiteable)
4.claude/settings.local.jsonProyecto localNo (gitignored)
5Managed policyOrganizaciónAdmin

Los niveles superiores sobrescriben los inferiores. Las listas (como allow) se fusionan.

Estructura del archivo

{
  "model": "sonnet",
  "permissions": {
    "allow": [],
    "deny": []
  },
  "hooks": {},
  "mcpServers": {},
  "env": {}
}

Permissions

Tres modos de decisión

ModoComportamiento
allowEjecutar sin preguntar
askPreguntar al usuario (default)
denyBloquear siempre

Configuración de permisos

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(git *)",
      "Bash(npm test)",
      "Bash(bun *)",
      "Edit(src/**)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl * | bash)",
      "Edit(.env*)"
    ]
  }
}

Wildcard syntax

La sintaxis de patrones para permisos:

PatrónSignificado
ReadPermitir toda lectura
Bash(git *)Comandos git
Bash(npm test)Solo npm test exacto
Edit(src/**)Editar cualquier archivo en src/ recursivo
Edit(*.ts)Editar archivos TypeScript
mcp__context7__*Todas las herramientas de Context7
Bash(docker *)Comandos docker

Ejemplos comunes

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "WebSearch",
      "WebFetch",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(bun test *)",
      "Bash(bun run build)",
      "Bash(ls *)",
      "Edit(src/**)",
      "Write(src/**)"
    ]
  }
}

Permission modes

Modos predefinidos que agrupan conjuntos de permisos:

ModoDescripción
defaultPregunta para acciones potencialmente peligrosas
acceptEditsAuto-acepta ediciones, pregunta para bash
planSolo lectura, no puede modificar archivos
bypassPermissionsEjecuta todo sin preguntar (peligroso)
# Iniciar en modo plan
claude --permission-mode plan

# Iniciar aceptando ediciones
claude --permission-mode acceptEdits

Settings importantes

Modelo y comportamiento

SettingTipoDescripción
modelstringModelo por defecto
fastModebooleanModo rápido activado
outputStylestring"Explanatory" o "Learning"
effortLevelstringNivel de esfuerzo del modelo

Interfaz

SettingTipoDescripción
themestringTema visual
spinnerVerbsstring[]Verbos del spinner
spinnerTipsstring[]Tips del spinner
statusLineobjectConfiguración de status line

Sandbox

SettingTipoDescripción
sandboxobjectConfiguración de sandbox
networkIsolationbooleanAislar red
excludedCommandsstring[]Comandos excluidos del sandbox

Variables de entorno

Las env vars se pueden configurar en settings:

{
  "env": {
    "ANTHROPIC_API_KEY": "sk-...",
    "NODE_ENV": "development"
  }
}

Env vars útiles del sistema

VariableDescripción
CLAUDE_MODELModelo a usar
ANTHROPIC_API_KEYAPI key de Anthropic
CLAUDE_CODE_MAX_OUTPUT_TOKENSMáx tokens de salida
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICDeshabilitar telemetría
CLAUDE_CODE_USE_BEDROCKUsar AWS Bedrock
CLAUDE_CODE_USE_VERTEXUsar Google Vertex

Editar settings

# Abrir settings globales
claude settings

# Ver configuración actual
claude config list

Permission Modes — Decisión Matrix Completa

El examen pregunta cuándo usar cada modo, no solo qué hace cada uno.

Los 4 modos

default — pide confirmación para operaciones potencialmente peligrosas

acceptEdits — acepta automáticamente ediciones de archivos

plan — solo puede leer, planifica pero no ejecuta

bypassPermissions — sin prompts de confirmación

Diagrama de decisión

quadrantChart
  title Permission Modes — Seguridad vs Autonomía
  x-axis Baja Autonomía --> Alta Autonomía
  y-axis Baja Seguridad --> Alta Seguridad
  quadrant-1 Alta seguridad, alta autonomía
  quadrant-2 Alta seguridad, baja autonomía
  quadrant-3 Baja seguridad, baja autonomía
  quadrant-4 Baja seguridad, alta autonomía
  plan: [0.15, 0.95]
  default: [0.45, 0.75]
  acceptEdits: [0.70, 0.50]
  bypassPermissions: [0.95, 0.05]

Escenario → modo recomendado

EscenarioModo recomendado
Explorar codebase nuevo sin tocar nadaplan
Code review de PR externoplan
Refactoring de módulo propioacceptEdits
Pair programming con nuevo colaboradordefault
Primer uso con proyecto desconocidodefault
CI/CD en branch de featurebypassPermissions
Producción / datos realesdefault (nunca bypass)

Wildcard syntax — comportamiento exacto

Ambigüedad común en el examen: qué coincide exactamente con cada patrón.

Reglas de * y **

Implicación de seguridad de Bash(git *):

* coincide con todo el resto del string, entonces git * SÍ coincide con git push --force. Si quieres limitar, usar patrones más específicos como Bash(git status) o Bash(git log *).

Tabla de ejemplos concretos

PatrónCoincide conNo coincide con
Bash(git *)git status, git push --force, git add .npm install
Bash(npm run *)npm run build, npm run test:e2enpm install, npm ci
Edit(src/*.ts)src/app.ts, src/index.tssrc/utils/helper.ts
Edit(src/**)src/utils/helper.ts, src/a/b/c.ts/home/user/other.ts
Bash(docker *)docker build ., docker rm -f containerdocker-compose up

Prioridad deny sobre allow

deny siempre tiene prioridad sobre allow, sin importar el nivel de jerarquía:

{
  "permissions": {
    "allow": ["Bash(git *)"],
    "deny": ["Bash(git push *)"]
  }
}

En el ejemplo anterior, git status está permitido pero git push origin main está bloqueado.


Siguiente: Memory y CLAUDE.md