Skip to main content

Configuration System & Settings Management

Claude Code uses a layered configuration system supporting multi-level overrides from user to enterprise.

Layered Architecture

Priority order (lowest to highest): userSettings < projectSettings < localSettings < flagSettings < policySettings < cliArg < session.

Settings Files

FileLocationPurposeGit Tracked
User~/.claude/settings.jsonPersonal preferencesN/A
Project.claude/settings.jsonTeam shared configYes
Local.claude/settings.local.jsonPersonal local overridesNo
Managedmanaged-settings.json + drop-insEnterprise managementN/A

Settings Schema

Settings use Zod for type-safe validation, covering permissions (allow/deny/ask rules, defaultMode), model, theme, mcpServers, and more.

MDM / Enterprise Settings

  • macOS: Reads MDM config via plutil, prefetched in parallel with startup
  • Windows: Reads from Windows Registry via reg query
  • Remote Managed Settings: HTTP fetch from Anthropic servers for centralized enterprise management

ConfigTool

Allows the agent to read/modify a whitelisted subset of settings at runtime.

Key Source Files

FileResponsibility
src/utils/settings/settings.tsMain settings loader
src/utils/settings/types.tsSettings schema (Zod)
src/utils/settings/constants.tsSource priority order
src/utils/config.tsProject/global config
src/services/remoteManagedSettings/Remote managed settings
src/tools/ConfigTool/Runtime config tool

Next

Go to 14-compact-context-mgmt.md to learn about context compaction.

Hands-on Experiment

This chapter has a corresponding Python experiment:

Lab 13 — Config System

Covers: layered config, deep merge, Pydantic validation

cd experiments && python -m exp_13_config_system.main --mock