Ir al contenido
Mastering Claude

Inicio / Extender: habilidades, MCP, subagentes, hooks, plugins

Extender: habilidades, MCP, subagentes, hooks, plugins9 minApplication

settings.json en profundidad

Cinco niveles de settings.json se suceden del más fuerte al más débil, una clave escalar común a dos archivos se decide según el nivel más prioritario, pero la mayoría de las listas, entre ellas permissions.allow y permissions.deny, se fusionan entre niveles en lugar de sobrescribirse.

Un settings.json de proyecto reemplaza el del usuario en una clave escalar que ambos archivos definen, y cinco niveles se suceden antes de llegar a este resultado (fuente code.claude.com/docs/en/settings, consultada el 2026-09-02).

Cinco niveles, uno solo gana por defecto

Del más fuerte al más débil: los ajustes gestionados, impuestos por un MDM o por la consola claude.ai; la opción --settings pasada en la línea de comandos, válida para una sola sesión; .claude/settings.local.json, privado del equipo, nunca compartido por git; .claude/settings.json, compartido por git con el resto del equipo en ese proyecto; y por último ~/.claude/settings.json, fijado una vez para todos los proyectos abiertos en ese equipo. Ante una clave simple presente en dos niveles a la vez, el de rango más fuerte se impone por completo, el nivel más débil no se lee. Los ajustes gestionados quedan fuera del alcance de edición desde el puesto de trabajo, impuestos por una organización, mientras que los otros cuatro niveles son simples archivos de texto que cualquiera puede abrir y modificar directamente.

Las listas se fusionan, salvo cuatro claves

La regla cambia en cuanto una clave lleva una lista. permissions.allow y permissions.deny, entre otras, se fusionan entre niveles: una entrada fijada a nivel de usuario sigue activa aunque el proyecto agregue otra al lado. Cuatro claves escapan a esta fusión, cada una según su propia regla en lugar de una regla única. fallbackModel toma el valor completo del nivel más prioritario que la define. modelPicker toma el valor completo del más prioritario entre los ajustes gestionados, --settings y los settings de usuario, e ignora simplemente la clave si solo está fijada a nivel de proyecto o local. availableModels, cuando los ajustes gestionados la definen, se aplica tal cual e ignora lo que agreguen el usuario, el proyecto o el local, y tampoco se fusiona entre varias fuentes gestionadas entre sí. modelSettings se resuelve modelo por modelo, con effortLevel, cada entrada precisando por sí misma qué archivo se aplica a qué modelo.

{
  "permissions": {
    "allow": ["Bash(npm test)"],
    "deny": []
  },
  "env": {
    "NODE_ENV": "development"
  }
}

El bloque env sigue la misma regla

El bloque env insertado en un archivo de ajustes es una clave ordinaria que sigue los mismos cinco niveles que el resto del archivo, pero la mayoría de sus valores, al igual que las reglas permissions.allow, solo entran en vigor después de que cada compañero de equipo haya confiado en la carpeta del proyecto. Una variable de entorno del shell no es un nivel de esta pila: cuando un comportamiento dispone a la vez de una variable y de una clave de ajuste, cuál de las dos se aplica se decide par por par, no por nivel, ANTHROPIC_MODEL exportada en el shell se impone por ejemplo sobre la clave model de cualquier archivo, mientras que ANTHROPIC_DEFAULT_MODEL solo se aplica si ningún archivo fija model.

Esta jerarquía cobra todo su sentido en cuanto entra en juego un hook: la declaración de un evento, como la descrita en los eventos de hook, del desencadenamiento al mensaje, también vive en este mismo archivo, y sigue exactamente el mismo orden de prioridad entre proyecto y equipo personal.

Figure 1

Cinco niveles de precedencia en settings.json, del más fuerte al más débil

Ajustes gestionados
Impuestos por un MDM o por la consola claude.ai, fuera del alcance de un archivo local.
--settings, línea de comandos
Pasado al inicio, válido para la sesión en curso únicamente.
.claude/settings.local.json
Privado del equipo, nunca compartido por git.
.claude/settings.json
Compartido por git con el resto del equipo en ese proyecto.
~/.claude/settings.json
Fijado una vez, válido en todos los proyectos abiertos desde ese equipo.
El apilamiento coloca arriba el nivel que gana cuando una misma clave escalar está definida en varios niveles a la vez.
Figure 2

Cuatro claves sin fusión entre niveles de settings.json

4claves
claves de settings.json exceptuadas de la fusión de listas, cada una con su propia regla: fallbackModel, modelPicker, availableModels, modelSettings
code.claude.com/docs/en/settings, 2026-09-02
La mayoría de las listas de settings.json se fusionan entre niveles, estas cuatro claves son excepción y siguen la regla de las claves escalares.
Calíbralo tú mismo

Una desarrolladora agrega la entrada Bash(npm test) a permissions.allow en el archivo .claude/settings.json de su proyecto. El archivo ~/.claude/settings.json de su equipo ya lleva la entrada Bash(git log) en la misma tabla permissions.allow. Luego abre una nueva sesión Claude Code en ese proyecto y lanza los dos comandos.

Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.

Lo que hay que recordar
  • Cinco niveles de precedencia se suceden en settings.json: ajustes gestionados, línea de comandos --settings, settings locales de proyecto, settings compartidos de proyecto, settings de usuario, del más fuerte al más débil.
  • Un settings.json compartido de proyecto prima sobre el del usuario en cuanto una misma clave escalar figura en ambos archivos.
  • La mayoría de las listas, entre ellas permissions.allow y permissions.deny, se fusionan entre niveles en lugar de sobrescribirse una a otra.
  • Cuatro claves son excepción a esta fusión, fallbackModel, modelPicker, availableModels y modelSettings, cada una según su propia regla: modelPicker ignora por ejemplo simplemente la clave fijada a nivel de proyecto o local, en lugar de retroceder hacia ella.
  • El bloque env sigue los cinco niveles del archivo pero espera la confianza de la carpeta para la mayoría de sus valores, y una variable de shell no es un nivel de esta pila: su arbitraje con una clave de ajuste se decide par por par.
Hazlo ahora

Abre o crea el archivo .claude/settings.json de tu proyecto actual, y agrega una entrada explícita en permissions.allow para un comando que validas a mano desde hace varios días en ese proyecto, luego reinicia una sesión y verifica que la confirmación ya no aparece.

Lo que queda por verificar

Estos puntos dependen de una interfaz o de una regla que puede haber cambiado desde la redacción. Verifícalos en tu propia pantalla antes de fiarte de ellos.

  • La lista de las cuatro claves exceptuadas de la fusión entre niveles puede ampliarse con una futura versión de Claude Code, a reverificar en https://code.claude.com/docs/en/settings antes de fundamentar un ajuste crítico en este comportamiento.
Verificar en la fuente

Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.