Inicio / Extender: habilidades, MCP, subagentes, hooks, plugins
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.
Cinco niveles de precedencia en settings.json, del más fuerte al más débil
Cuatro claves sin fusión entre niveles de settings.json
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 esto establece: En esta sesión, las dos entradas fijadas en niveles distintos, proyecto y usuario, fueron respetadas juntas por permissions.allow.
Lo que esto no establece: Que una clave como fallbackModel o modelSettings, definida en los dos mismos niveles, se habría comportado de la misma manera en esta sesión.
Los tres calibrados falsos más frecuentes
- Demasiado amplio Este resultado prueba que todas las claves de settings.json, sin excepción, se fusionan de esta manera a través de los cinco niveles de precedencia.
- Demasiado estrecho Este resultado no prueba nada, ya que solo se observó un par de comandos en una sola sesión.
- Fuera de tema Este resultado muestra que el archivo .claude/settings.json de este proyecto está versionado en el repositorio git compartido con el resto del equipo.
- 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.
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.
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.
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.
- Anthropic, Claude Code, referencia de los ajustes settings.json consultée le 2026-09-02