Claude Settings

Scopes (Highest Wins)

Scope File Shared?
Managed system managed-settings.json / plist / registry / server Org-wide, IT
User ~/.claude/settings.json Just you, all projects
Project <repo>/.claude/settings.json Team (git)
Local <repo>/.claude/settings.local.json Just you; Claude keeps it out of git (adds to global excludes)

Precedence, highest first: Managed → command line (--settings) → project local → shared project → user. Lists (like permissions.allow) merge across files instead of overriding. A few restrictive keys honor the stricter value from any scope. ~/.claude.json holds MCP servers and per-project state (written by Claude, don't edit).
Verify with /status (shows "Setting sources") and claude doctor. Edits to most keys reload live. Full key list: code.claude.com/docs/en/settings-reference.

Key Reference

Area Keys
Auth apiKeyHelper, awsAuthRefresh, awsCredentialExport, forceLoginMethod (claudeai/console), forceLoginOrgUUID
Storage cleanupPeriodDays (default 30, min 1, 0 is rejected), autoMemoryDirectory, autoMemoryEnabled, plansDirectory (default ~/.claude/plans)
Env "env": { "NODE_ENV": "development" } applied every session
Model model, availableModels (doesn't affect "Default"), deniedModels, fallbackModel, modelOverrides (e.g. Bedrock ARNs), effortLevel, maxEffortLevel, alwaysThinkingEnabled, fastMode, fastModePerSessionOptIn
Output outputStyle, language, includeGitInstructions (env CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS wins)
Git attribution.commit / .pr / .sessionUrl (or false to hide all); includeCoAuthoredBy deprecated
Updates autoUpdatesChannel: stable (~1 week old) or latest; companyAnnouncements
UI showTurnDuration, spinnerVerbs (append/replace), spinnerTipsEnabled, spinnerTipsOverride, terminalProgressBarEnabled, prefersReducedMotion
Teams teammateMode: in-process (default) / auto / tmux / iterm2
Permissions see Claude Permissions
MCP enableAllProjectMcpServers, enabledMcpjsonServers, disabledMcpjsonServers; managed only: allowedMcpServers, deniedMcpServers
Plugins (managed only) strictKnownMarketplaces, blockedMarketplaces, pluginTrustMessage
Lockdown (managed only) allowManagedPermissionRulesOnly, allowManagedMcpServersOnly, allowManagedHooksOnly
Hooks hooks, disableAllHooks, allowedHttpHookUrls, httpHookAllowedEnvVars (see Claude Hooks and Automation)
Misc otelHeadersHelper, statusLine, fileSuggestion, respectGitignore, editorMode (normal/vim), fastMode, sandbox.* (see Claude Permissions)
Removed/deprecated teammateDefaultModel (removed v2.1.234), taskOutputMaxChars (v2.1.277), permissionExplainerEnabled (v2.1.257), disableArtifact → enableArtifact, includeCoAuthoredBy → attribution
CLAUDE.md claudeMdExcludes (see Claude Memory)

Snippets

{
  "model": "opus",
  "outputStyle": "Explanatory",
  "attribution": { "commit": "", "pr": "" },
  "autoUpdatesChannel": "stable",
  "cleanupPeriodDays": 14,
  "env": { "LOG_LEVEL": "info" },
  "spinnerVerbs": { "mode": "append", "verbs": ["Pondering", "Brewing"] }
}

Status line

Bottom bar driven by a script; receives session JSON on stdin.

{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 2, "refreshInterval": 10, "hideVimModeIndicator": false } }

Output Styles

Style Behavior
Default Standard software-engineering instructions
Proactive Starts work immediately, assumes on routine decisions, no plan mode unless asked
Concise Leads with the result, no preamble/recap (v2.1.237+)
Explanatory Adds Insight blocks explaining choices
Learning Insights plus TODO(human) bits for you to write

Switch with /output-style <name> (case-insensitive), /config → Output style, or "outputStyle": "Explanatory" (case-sensitive; a wrong case gives Default). The command saves to .claude/settings.local.json; applies from your next message.
Custom styles: Markdown files in ~/.claude/output-styles/, .claude/output-styles/ or the managed dir. Frontmatter: name, description, keep-coding-instructions (default false: a custom style drops Claude Code's built-in software-engineering instructions), force-for-plugin (plugin styles). Styles are instructions, not guarantees; use hooks for must-happen behavior. They affect the main conversation and forks, not other subagents.


Related: Claude Permissions, Claude Memory, Claude Hooks and Automation