feat(claude-code): sync settings and keybindings to Claude Code v2.1.220 - #6131
Conversation
- Fix wrong schema key: rename maxSkillDescriptionChars -> skillListingMaxDescChars to match documented settings.json field name (was breaking real validation) - Add "manual" as accepted alias for permissions.defaultMode/"default" (v2.1.200; UI now labels this mode "Manual"; permission-modes.md docs lag the changelog) - Add attribution.sessionUrl property (settings.md#attribution-settings); supersedes SchemaStore#5833 with verbatim doc wording - Add 14 documented env vars: OTEL per-signal mTLS certs (LOGS/METRICS/TRACES CLIENT_KEY/CLIENT_CERTIFICATE), CLAUDE_AFK_COUNTDOWN_MS/TIMEOUT_MS, CLAUDE_CODE_BRIDGE_SESSION_ID, CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF, CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS, CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK, CLAUDE_DISABLE_ADOPT, VERTEX_REGION_CLAUDE_5_SONNET - Add app:diffFileListUp/app:diffFileListDown to keybindings builtinAction enum (confirmed against generated v2.1.200 defaults, undocumented on keybindings.md) - Accuracy fixes: autoMemoryEnabled storage path, CLAUDE_ENABLE_STREAM_WATCHDOG default behavior (on-by-default since v2.1.196), CLAUDE_CODE_DEBUG_LOGS_DIR (file not directory), API_TIMEOUT_MS max value, outputStyle missing "Proactive", CLAUDE_CODE_DISABLE_MOUSE_CLICKS incorrectly marked UNDOCUMENTED (now documented) - Doc link upgrades: sandbox.enableWeakerNetworkIsolation, ANTHROPIC_BEDROCK_SERVICE_TIER, several plugin/marketplace env vars, CLAUDE_CODE_SCROLL_SPEED/DISABLE_MOUSE Skipped - marketplace .git-suffix relaxation — already covered by open PR SchemaStore#5874 (independently verified correct against plugin-marketplaces.md) - permissionRule tool-name pattern staleness (~18 missing/3 stale tool names) — large surface, deferred to a dedicated follow-up sync Supersedes SchemaStore#5833 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Schema: - Add 17 settings properties: askUserQuestionTimeout, workflowSizeGuideline, teammateDefaultModel, enableArtifact, emojiCompletionEnabled, vimInsertModeRemaps, processWrapper, diffTool, externalEditorContext, autoConnectIde, autoInstallIdeExtension, permissionExplainerEnabled, disableSideloadFlags, forceLoginGatewayUrl, browserExternalPageTools, disableBrowserExternalNavigation, disableMobileSimulatorTools - Add sandbox.credentials.allowPlaintextInject, sandbox.filesystem.disabled, sandbox.network.tlsTerminate; add sandbox.network.strictAllowlist and the DirectoryAdded hook as UNDOCUMENTED (changelog v2.1.219 only) - Add 21 documented environment variables to $.env.properties; remove CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE, removed in v2.1.160 and now a no-op - Fix fastMode (Opus 5 default since v2.1.219; Opus 4.7 fast mode removed), forceLoginMethod (add gateway), forceLoginOrgUUID (accepts an array), disableDeepLinkRegistration (claude-cli:// scheme), CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT (stdio no longer exempt since v2.1.203), CLAUDE_CODE_SCROLL_SPEED (fractional values allowed), CLAUDE_CODE_BRIDGE_SESSION_ID, and Vertex AI naming - Add Artifact, EnterWorktree, ShareOnboardingGuide and Workflow to the permissionRule pattern, partially addressing the staleness deferred in SchemaStore#5891 - Add marketplace source skipLfs and the inline "settings" source variant, whose nested plugins[].source follows the documented plugin source types - Keybindings: add footer:dismiss; remove doctor:fix and the Doctor context, which existed only before v2.1.205 Tests: - modern-complete-config.json: every new property, using non-default values - enum-coverage.json, edge-cases.json, basic-config.json: remaining enum values - env-variables.json, hooks-complete.json, permissions-advanced.json, marketplace-host-pattern.json: coverage for the new surfaces - claude-code-keybindings: drop Doctor blocks, bind footer:dismiss Negative tests: - invalid-enum-values.json: new enums and boolean-style environment variables - Add invalid-inline-marketplace-source.json, invalid-inline-marketplace-plugin-source.json, invalid-vim-insert-mode-remap.json, invalid-tls-terminate-property.json - Add removed-doctor-action.json and removed-doctor-context.json Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Thanks for the PR! This section of the codebase is owned by @domdomegg, @bogini, and @sarahdeaton - if they write a comment saying "LGTM" then it will be merged. |
…eckpointing var Both are documented but appear in neither the settings.md nor env-vars.md reference tables, so table-based sweeps miss them. Found by auditing which documentation pages no schema-sync agent currently owns. - requireCoworkFullVmSandbox: managed-settings policy key that runs Claude's tools in an isolated VM and disables the iOS Simulator pane, documented on desktop-ios-simulator.md - CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING: enables file checkpointing for a non-interactive `claude -p --rewind-files` run, documented on agent-sdk/file-checkpointing.md Tests: modern-complete-config.json, env-variables.json Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ected The v2.1.220 sync added `tabs:previous` and `footer:openSelected` to the `builtinAction` enum but no positive test fixture exercised them, so the enum coverage check failed: #$defs/builtinAction — positive_uncovered — [tabs:previous, footer:openSelected] Add both to the Scroll context block in the exhaustive-coverage fixture. Keybindings coverage now reports 7 passed, 0 failed, 1 skipped (the skip is Default Value Coverage, which is not applicable — the schema declares no defaults). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
LGTM |
|
Merging because @domdomegg is a code-owner of all the changes - thanks! |
|
@miteshashar @domdomegg thank you both for maintaining these schemas on schema store I'm building a tool that supports enterprise AI governance admins in configuring their organization's Claude usage. The tool does policy (i.e. org intent) to configuration translation and outputs settings + a plugin that aim to enforce the policy. Having the settings schema is super helpful for validating the outputs before admins distribute them in their org. I'm wondering if there are plans to also update/maintain the plugin schema that @dhollman originally added back in #5603. I have been doing my best to keep my plugin validator up to date based on a periodic agent-driven scan of the markdown docs on the anthropic website, but a formal schema would obviously be more effective. TYIA |
Syncs
claude-code-settings.jsonandclaude-code-keybindings.jsonfrom the last synced v2.1.195 (#5867) up to v2.1.220. Supersedes #5891 (v2.1.200), whose changes are included here in full.v2.1.220 itself is "Bug fixes and reliability improvements" with no settings surface; the last version carrying schema-affecting changes in this range is v2.1.219.
Additions were reconciled against the full settings.md and env-vars.md reference tables, not just the changelog — that sweep surfaced a number of documented keys that predate this window.
Schema
New settings properties
askUserQuestionTimeout(enum60s/5m/10m/never, defaultnever) — idle timeout before an unansweredAskUserQuestionauto-continues, per settings#available-settings (v2.1.200).workflowSizeGuideline(enumunrestricted/small/medium/large, defaultunrestricted) per workflows#set-a-size-guideline (v2.1.202).teammateDefaultModel(string|null) per agent-teams.enableArtifact(boolean) per artifacts (v2.1.196). Nodefault— the docs state that when unset it follows per-account availability; the table'strueis an Example, not a default.emojiCompletionEnabled(boolean, defaulttrue) per interactive-mode#emoji-shortcodes (v2.1.217).vimInsertModeRemaps(object, two-character keys) per interactive-mode#remap-insert-mode-key-sequences (v2.1.208). Values are typed as plain strings rather thanconst: "<Esc>"— the docs say entries with a different target are ignored, not rejected, so aconstwould fail configs that Claude Code accepts.processWrapper(string) per corporate-launcher (v2.1.210).diffTool(enumauto/terminal, defaultauto),externalEditorContext,autoConnectIde,autoInstallIdeExtension,permissionExplainerEnabledper settings#global-config-settings.disableSideloadFlags(v2.1.193),forceLoginGatewayUrl,browserExternalPageTools(enumdisabled),disableBrowserExternalNavigation,disableMobileSimulatorTools,requireCoworkFullVmSandbox.Two of these appear in no reference table at all, and were found by auditing which documentation pages no part of my sync tooling currently reads:
requireCoworkFullVmSandbox— documented only at desktop-ios-simulator#turn-off-simulator-access: "runs Claude's tools inside an isolated virtual machine instead of on your Mac, disables the simulator pane and Claude's simulator tools entirely".CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING— documented only at agent-sdk/file-checkpointing, and required for a non-interactiveclaude -p --resume --rewind-filesrun. Absent from env-vars.md.Sandbox
sandbox.credentials.allowPlaintextInject(boolean, defaultfalse) andsandbox.network.tlsTerminate(object withcaCertPath/caKeyPath) per sandboxing#protect-credentials (v2.1.199).sandbox.filesystem.disabled(boolean, defaultfalse) per sandboxing#disable-filesystem-isolation (v2.1.216).sandbox.network.strictAllowlist— UNDOCUMENTED, from changelog v2.1.219; absent fromsandboxing.md.Hooks
DirectoryAdded— UNDOCUMENTED, from changelog v2.1.219; fires after/add-diror the SDKregister_repo_rootcontrol request registers a new working directory mid-session. Not in thehooks.mdlifecycle table.Accuracy fixes
fastMode: default model is Opus 5 as of v2.1.219 (was Opus 4.8). Opus 4.7 fast mode was removed on 2026-07-24 and is no longer listed as supported — per fast-mode.forceLoginMethod: add"gateway"per authentication#restrict-login-to-your-organization (v2.1.212).forceLoginOrgUUID: nowoneOfstring|array — the docs accept an array of UUIDs, with an empty array failing closed. The previous string-only schema rejected valid managed configs.disableDeepLinkRegistration: protocol handler isclaude-cli://, notclaude://(verified against deep-links, incl. theHKEY_CURRENT_USER\Software\Classes\claude-cliregistry key).permissionRulepattern: addArtifact,EnterWorktree,ShareOnboardingGuide,Workflow— all four are listed "Permission required: Yes" in tools-reference. Partially addresses the pattern staleness deferred in feat(claude-code): sync settings and keybindings to Claude Code v2.1.200 #5891.CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT: stdio servers are no longer exempt (since v2.1.203); documents the per-transport defaults (300000ms network / 1800000ms stdio), the.mcp.jsonper-server floor, and the IDE/SDK in-process exemption.CLAUDE_CODE_SCROLL_SPEED: the documented range allows fractional values below 1, so the previous "(1-20)" was wrong.CLAUDE_CODE_BRIDGE_SESSION_ID: restores the unset-on-disconnect behavior and the correspondence with the session'sclaude.ai/codeURL.CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE— env-vars marks it removed in v2.1.160 and a no-op; the schema described it as functional.CLAUDE_CODE_USE_VERTEX,CLAUDE_CODE_SKIP_VERTEX_AUTH,ANTHROPIC_VERTEX_BASE_URL,ANTHROPIC_VERTEX_PROJECT_ID,CLOUD_ML_REGION,GOOGLE_APPLICATION_CREDENTIALS,ENABLE_TOOL_SEARCH) plusVERTEX_REGION_CLAUDE_5_SONNET, which also carried an undocumentedCLOUD_ML_REGION=globalclause. TheVERTEX_REGION_CLAUDE_*region entries keep the old phrasing, matching their variable names.Marketplaces
extraKnownMarketplaces.*.source: addskipLfsto thegithubandgitvariants per settings#available-settings (v2.1.153).extraKnownMarketplaces.*.source: add the inline"settings"source variant (name+plugins), which previously failed validation outright against every existinganyOfbranch. Nestedplugins[].sourcefollows the plugin-marketplaces#plugin-sources table —github,url,git-subdir,npm, each withref/shawhere documented. Note thatgitis a marketplace source type, not a plugin source type; relative-path sources are excluded because the docs require inline plugins to reference external sources.Environment variables
Add 22 documented environment variables to
$.env.properties:CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS(v2.1.217),CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION(v2.1.212),CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH(v2.1.217),CLAUDE_CODE_ENABLE_APPEND_SUBAGENT_PROMPT(v2.1.205),CLAUDE_CODE_FORWARD_SUBAGENT_TEXT(v2.1.211) per sub-agents.ANTHROPIC_FOUNDRY_AUTH_TOKEN(v2.1.203),CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MSandCLAUDE_CODE_SKIP_AWS_CRED_CACHE(v2.1.207),CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD(v2.1.208),VERTEX_REGION_CLAUDE_5_OPUS(v2.1.219),CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS,CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK.CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH,OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT(v2.1.214) per monitoring-usage#common-configuration-variables.CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING,CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS(v2.1.212),CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION(v2.1.212),CLAUDE_CODE_TEAM_TEARDOWN_PARK_TIMEOUT_MS(v2.1.206),CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS(v2.1.211),CLAUDE_CODE_PROCESS_WRAPPER(v2.1.208),CLAUDE_PID(v2.1.214),FORCE_HYPERLINK.Keybindings
builtinAction: addfooter:dismiss(bound to Backspace and Delete in the Footer context in the generated v2.1.219 defaults).builtinAction/context: removedoctor:fixandDoctor— keybindings documents these as having existed only before v2.1.205, and they are absent from the generated v2.1.219 defaults.Tests
modern-complete-config.json: all 17 new top-level properties, the four sandbox sub-properties, and theDirectoryAddedhook. Non-default values are used throughout to satisfy the coverage gate's default-value check.enum-coverage.json,edge-cases.json,basic-config.json: remaining enum values forforceLoginMethod,askUserQuestionTimeout,workflowSizeGuideline,diffTool,browserExternalPageTools, and the opposite0/1values for the new boolean-style environment variables — closes the coverage gate's enum check.env-variables.json: all 21 new environment variables.hooks-complete.json:DirectoryAddedhandler.permissions-advanced.json: rules for the four newly permission-gated tools.marketplace-host-pattern.json:skipLfson both agitand agithubmarketplace source, plus an inline"settings"marketplace exercisinggithub,npm, andgit-subdirplugin sources.claude-code-keybindings/all-contexts.json,current-actions.json: drop theDoctorblocks; addfooter:dismisson Backspace/Delete in the Footer context.Negative tests
invalid-enum-values.json: invalid values foraskUserQuestionTimeout,workflowSizeGuideline,diffTool,browserExternalPageTools, and the six new boolean-style environment variables.invalid-inline-marketplace-source.json(new): inline"settings"marketplace missing the requiredpluginsarray.invalid-inline-marketplace-plugin-source.json(new): nested plugin usingsource: "git", which is a marketplace source type rather than a plugin source type.invalid-vim-insert-mode-remap.json(new): a three-character remap key, violating the documented two-character rule.invalid-tls-terminate-property.json(new): unknown property insidesandbox.network.tlsTerminate.claude-code-keybindings/removed-doctor-action.json,removed-doctor-context.json(new): assert that the removeddoctor:fixaction andDoctorcontext are now rejected.Skipped
.git-suffix relaxation for git repository URLs — covered by @esp0's open PR feat(claude-code-settings): allow git marketplace URLs without .git suffix #5874, which I independently re-verified as correct against plugin-marketplaces. The\.git$pattern is left untouched here so as not to conflict with it.leftArrowOpensAgentskey — covered by @l46983284-cpu's open PR fix(claude-code-settings): drop global leftArrowOpensAgents key #6127. I confirmed the key is absent from the settings.md properties table (it is a/configpreference stored in~/.claude.json), so the removal is correct; leaving it here so fix(claude-code-settings): drop global leftArrowOpensAgents key #6127 lands on its own merit.ultracodesetting — settings.md states the key "isn't read fromsettings.json" and is set via/effort ultracode,--settings, or an SDK control request. Same treatment aseffortLevel: max.CLAUDE_CODE_CONNECT_TIMEOUT_MS(removed v2.1.186),CLAUDE_CODE_ENABLE_OPUS_4_7_FAST_MODE(removed v2.1.142),ENABLE_PROMPT_CACHING_1H_BEDROCK(deprecated alias forENABLE_PROMPT_CACHING_1H).Cd,KillShell, andMultiEditin thepermissionRulepattern no longer appear in tools-reference. Retained rather than removed — dropping them would break existing permission rules, and their absence from the table may be a documentation gap rather than a removal.agents,skills, andmcpfrom the settings.md sweep — these are rows in the "where things live" and configuration-scope tables, notsettings.jsonkeys.🤖 Generated with Claude Code