Skip to content

Move all Claude Code settings to user-settings and global-config#400

Merged
alex-feel merged 1 commit into
mainfrom
alex-feel-dev
Jul 3, 2026
Merged

Move all Claude Code settings to user-settings and global-config#400
alex-feel merged 1 commit into
mainfrom
alex-feel-dev

Conversation

@alex-feel

Copy link
Copy Markdown
Owner

The dedicated root YAML keys duplicated settings.json fields under toolbox-specific kebab-case names, splitting one configuration surface across two naming conventions and two write paths. user-settings now carries raw settings.json content and global-config carries raw ~/.claude.json content, with known built-in keys validated fail-fast (value shapes, camelCase naming, section placement) in both the runtime script and the Pydantic model via parity-tested shared constants. In isolated environments the user-settings content is built into ~/.claude/{cmd}/config.json, which the launcher passes via --settings, so profile settings keep outranking a repository's project settings and the toolbox does not write the isolated settings.json. Auto-update and IDE-extension controls now target global-config, user-settings.env, and os-env-variables. The permissions defaultMode enum gains auto, dontAsk, and delegate, and the max effort level accepts Sonnet models.

BREAKING CHANGE: the root YAML keys model, permissions, attribution, always-thinking-enabled, company-announcements, env-variables, and effort-level are no longer supported and are reported as unknown keys. Migrate them into the user-settings section using camelCase settings.json names: model, permissions (defaultMode, additionalDirectories, allow, deny, ask), attribution, alwaysThinkingEnabled, companyAnnouncements, effortLevel, and env replacing env-variables (values must be strings, or null to delete). env-variables is no longer a valid merge-keys entry; list user-settings instead to deep-merge env across inherited configs. A CLAUDE_CONFIG_DIR isolation-directory override belongs in user-settings.env.

The dedicated root YAML keys duplicated settings.json fields under toolbox-specific kebab-case names, splitting one configuration surface across two naming conventions and two write paths.
user-settings now carries raw settings.json content and global-config carries raw ~/.claude.json content, with known built-in keys validated fail-fast (value shapes, camelCase naming, section placement) in both the runtime script and the Pydantic model via parity-tested shared constants.
In isolated environments the user-settings content is built into ~/.claude/{cmd}/config.json, which the launcher passes via --settings, so profile settings keep outranking a repository's project settings and the toolbox does not write the isolated settings.json.
Auto-update and IDE-extension controls now target global-config, user-settings.env, and os-env-variables.
The permissions defaultMode enum gains auto, dontAsk, and delegate, and the max effort level accepts Sonnet models.

BREAKING CHANGE: the root YAML keys model, permissions, attribution, always-thinking-enabled, company-announcements, env-variables, and effort-level are no longer supported and are reported as unknown keys.
Migrate them into the user-settings section using camelCase settings.json names: model, permissions (defaultMode, additionalDirectories, allow, deny, ask), attribution, alwaysThinkingEnabled, companyAnnouncements, effortLevel, and env replacing env-variables (values must be strings, or null to delete).
env-variables is no longer a valid merge-keys entry; list user-settings instead to deep-merge env across inherited configs.
A CLAUDE_CONFIG_DIR isolation-directory override belongs in user-settings.env.
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  scripts
  setup_environment.py 1920, 1980, 2059, 6129, 11300, 11308-11312, 11432-11443, 11776-11777, 11918, 11923, 11938-11939
  scripts/models
  environment_config.py 224, 243-271, 287-314, 330-351, 379-438, 454-467, 498, 504-507, 540, 546-549, 896, 998-1004, 1233, 1352-1363, 1413
Project Total  

This report was generated by python-coverage-comment-action

@alex-feel alex-feel merged commit 1e6b1cc into main Jul 3, 2026
17 checks passed
@alex-feel alex-feel deleted the alex-feel-dev branch July 3, 2026 09:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant