Generated: 2026-04-01 Extraction basis:
- user-facing config tool settings
- full settings schema
- settings merge and policy behavior
There are two different settings surfaces:
ConfigToolexposes a small user-facing writable subset.SettingsSchemadefines the full settings contract across user, project, local, and managed policy sources.
The user-facing config panel exposes a small writable subset. The full settings contract is much broader and includes enterprise policy, plugins, marketplaces, MCP policy, hooks, remote mode, updater policy, memory, and assistant-mode settings.
This document is intentionally self-contained. It summarizes not just the names of settings, but also the merge rules and trust rules that determine which values actually win at runtime.
For self-contained transfer, here is the full top-level key inventory exposed by the settings contract:
$schemaapiKeyHelperawsCredentialExportawsAuthRefreshgcpAuthRefreshxaaIdpfileSuggestionrespectGitignorecleanupPeriodDaysenvattributionincludeCoAuthoredByincludeGitInstructionspermissionsmodelavailableModelsmodelOverridesenableAllProjectMcpServersenabledMcpjsonServersdisabledMcpjsonServersallowedMcpServersdeniedMcpServershooksworktreedisableAllHooksdefaultShellallowManagedHooksOnlyallowedHttpHookUrlshttpHookAllowedEnvVarsallowManagedPermissionRulesOnlyallowManagedMcpServersOnlystrictPluginOnlyCustomizationstatusLineenabledPluginsextraKnownMarketplacesstrictKnownMarketplacesblockedMarketplacesforceLoginMethodforceLoginOrgUUIDotelHeadersHelperoutputStylelanguageskipWebFetchPreflightsandboxfeedbackSurveyRatespinnerTipsEnabledspinnerVerbsspinnerTipsOverridesyntaxHighlightingDisabledterminalTitleFromRenamealwaysThinkingEnabledeffortLeveladvisorModelfastModefastModePerSessionOptInpromptSuggestionEnabledshowClearContextOnPlanAcceptagentcompanyAnnouncementspluginConfigsremoteautoUpdatesChanneldisableDeepLinkRegistrationminimumVersionplansDirectoryclassifierPermissionsEnabledminSleepDurationMsmaxSleepDurationMsvoiceEnabledassistantassistantNamechannelsEnabledallowedChannelPluginsdefaultViewprefersReducedMotionautoMemoryEnabledautoMemoryDirectoryautoDreamEnabledshowThinkingSummariesskipDangerousModePermissionPromptskipAutoPermissionPromptuseAutoModeDuringPlanautoModedisableAutoModesshConfigsclaudeMdExcludespluginTrustMessage
The interactive config tool exposes this user-facing writable subset:
themeeditorModeverbosepreferredNotifChannelautoCompactEnabledautoMemoryEnabledautoDreamEnabledfileCheckpointingEnabledshowTurnDurationterminalProgressBarEnabledtodoFeatureEnabledmodelalwaysThinkingEnabledpermissions.defaultModelanguageteammateModeclassifierPermissionsEnabledwhenUSER_TYPE === 'ant'voiceEnabledwhenVOICE_MODEremoteControlAtStartupwhenBRIDGE_MODEtaskCompleteNotifEnabledwhenKAIROSorKAIROS_PUSH_NOTIFICATIONinputNeededNotifEnabledwhenKAIROSorKAIROS_PUSH_NOTIFICATIONagentPushNotifEnabledwhenKAIROSorKAIROS_PUSH_NOTIFICATION
Notable characteristics:
- each key declares
source: 'global' | 'settings' - some keys sync directly to AppState for immediate UI effect
modeluses dynamic options and async validationpermissions.defaultModechanges enum membership when transcript-classifier features are enabled
The settings system is layered. Effective settings are assembled from multiple sources in this order:
- plugin-provided base settings
userSettingsprojectSettingslocalSettingsflagSettingspolicySettings
Higher layers override lower ones.
Important merge semantics:
- objects deep-merge rather than replace wholesale
- arrays concatenate and deduplicate rather than last-write-wins replace
- unknown fields are often preserved on disk instead of being stripped
- invalid fields are usually ignored at runtime but left in place for repair
permissionsis intentionally permissive and preserves unknown keys for compatibility
Policy settings have their own internal precedence. Only one policy source wins:
- remote managed settings
- admin-only MDM / HKLM / macOS plist
- file-based managed settings
- HKCU fallback
That is different from ordinary settings merging. For policy, it is "first source wins", not "merge all policy layers".
Managed file settings also support a drop-in directory:
managed-settings.jsonis the base- files in
managed-settings.d/merge on top alphabetically - later drop-ins win
Important meta-rules in the settings system:
- backward-compatible schema evolution is expected
- unknown fields are often preserved instead of destroyed
- invalid fields are usually ignored rather than stripped from disk
permissionsuses.passthrough()to keep unknown keys
This is a deliberate compatibility strategy, not an accident.
$schemaapiKeyHelperawsCredentialExportawsAuthRefreshgcpAuthRefreshxaaIdpwhenCLAUDE_CODE_ENABLE_XAAforceLoginMethodforceLoginOrgUUIDotelHeadersHelper
These settings mostly configure how Claude Code acquires credentials, not how the model behaves.
fileSuggestionrespectGitignorecleanupPeriodDaysenvattribution.commitattribution.princludeCoAuthoredByincludeGitInstructionsoutputStylelanguagefeedbackSurveyRatespinnerTipsEnabledspinnerVerbsspinnerTipsOverridesyntaxHighlightingDisabledterminalTitleFromRenamealwaysThinkingEnabledeffortLevelfastModefastModePerSessionOptInpromptSuggestionEnabledshowClearContextOnPlanAcceptcompanyAnnouncementsprefersReducedMotionshowThinkingSummaries
permissions.allowpermissions.denypermissions.askpermissions.defaultModepermissions.disableBypassPermissionsModepermissions.disableAutoModewhen classifier is enabledpermissions.additionalDirectorieshooksdisableAllHooksdefaultShellallowManagedHooksOnlyallowedHttpHookUrlshttpHookAllowedEnvVarsallowManagedPermissionRulesOnly
Important policy detail:
- managed settings can force only managed hooks or only managed permission rules to apply
- this is stronger than ordinary user/project merge semantics
projectSettingsis intentionally excluded from some trust-sensitive acknowledgements so a checked-in repo cannot silently opt a user into dangerous behavior
enableAllProjectMcpServersenabledMcpjsonServersdisabledMcpjsonServersallowedMcpServersdeniedMcpServersallowManagedMcpServersOnlyremote.defaultEnvironmentIdchannelsEnabledallowedChannelPlugins
Notable policy semantics:
deniedMcpServerstakes precedence overallowedMcpServersallowManagedMcpServersOnlyrestricts the allowlist source, not the denylist source- channel notifications are opt-in and separately allowlisted
- MCP allow and deny arrays merge across settings sources, so users and policy can both contribute entries
worktree.symlinkDirectoriesworktree.sparsePathsdefaultShell
This is where the repo encodes operational tradeoffs for large repos and multi-worktree setups.
strictPluginOnlyCustomizationstatusLineenabledPluginsextraKnownMarketplacesstrictKnownMarketplacesblockedMarketplacespluginConfigs[pluginId].mcpServerspluginConfigs[pluginId].options
Two especially important admin controls:
strictPluginOnlyCustomizationstrictKnownMarketplaces
Together they can force customization to come only from approved plugin sources.
modelavailableModelsmodelOverrideseffortLeveladvisorModelagent
availableModels is an enterprise allowlist. modelOverrides remaps Anthropic model IDs to provider-specific IDs.
autoMemoryEnabledautoMemoryDirectoryautoDreamEnabledplansDirectoryminSleepDurationMswhen proactive/KairosmaxSleepDurationMswhen proactive/Kairos
assistantassistantNamedefaultView
These are product-mode settings, not just presentation toggles.
autoUpdatesChannelminimumVersiondisableDeepLinkRegistrationwhenLODESTONE
skipAutoPermissionPromptuseAutoModeDuringPlanautoMode.allowautoMode.soft_denyautoMode.denyas ant-only back-compat aliasautoMode.environmentdisableAutoModesshConfigs[]claudeMdExcludespluginTrustMessage
These were easy to miss because they appear after the long main body of the schema, but they are part of the same public settings contract.
The settings system does not treat all sources as equally trustworthy.
Admin-trusted sources:
- managed policy
- plugin-provided customization
- built-in or bundled product surfaces
Potentially user-controlled or repo-controlled sources:
- user settings
- project settings
- local settings
- flag settings
This matters because some policy switches do not merely override values; they disable entire customization surfaces from untrusted sources.
strictPluginOnlyCustomization currently supports these surfaces:
skillsagentshooksmcp
When enabled by policy:
- user and project customization for those surfaces is skipped
- managed policy and plugin-provided definitions still load
- the system intentionally degrades toward "less locked" if it encounters future unknown surface names rather than rejecting the whole policy file
The major managed-policy surfaces are:
allowManagedHooksOnlyallowManagedPermissionRulesOnlyallowManagedMcpServersOnlystrictPluginOnlyCustomizationstrictKnownMarketplacesblockedMarketplacesavailableModelsmodelOverridesallowedChannelPlugins
This means the settings system is also the policy system.
The strictPluginOnlyCustomization policy uses unusually defensive preprocessing logic:
- unknown future surface names are filtered out rather than breaking the whole managed-settings file
- invalid non-array values are
.catch(undefined)-dropped instead of invalidating the entire file
The design goal is clear in comments:
- degrade toward "less locked"
- never degrade toward "whole managed settings file rejected"
The currently recognized customization surfaces are:
skillsagentshooksmcp
extraKnownMarketplaces has an important consistency check:
- for
source: 'settings', the object key must matchsource.name
This exists to keep marketplace reconciliation idempotent and avoid endless cache churn.
Several settings have extra trust or safety handling beyond simple merge precedence:
skipDangerousModePermissionPromptis only trusted from user, local, and managed settings, not project settingsskipAutoPermissionPromptfollows the same trusted-source patternuseAutoModeDuringPlanis effectively opt-out across trusted sources; any trustedfalsedisables itautoModeis merged only from trusted sources because a checked-in project file should not silently widen a user's automatic permission envelopeautoMemoryDirectoryis ignored from checked-in project settings for security reasons
These exceptions are important because they show the team explicitly defending against hostile or surprising repository-level configuration.
The earlier reports covered feature flags and some policy behavior, but not the full shape of the settings contract.
The source code reveals that settings are simultaneously:
- user preferences
- runtime feature toggles
- enterprise policy controls
- plugin/marketplace trust configuration
- remote session defaults
- updater/version policy
- memory and assistant-mode configuration
That makes SettingsSchema one of the highest-value source-extraction targets in the repo.