Welcome screen reads principal.name from settings.json, ignores settings.local.json
Description
The Claude Code welcome screen ("Welcome back {name}") reads principal.name from settings.json but ignores settings.local.json. This is inconsistent with how other settings (like env, model, etc.) work, where settings.local.json overrides settings.json.
Expected behavior
settings.local.json should override settings.json for all fields, including custom/unrecognized fields like principal.name that the welcome screen reads.
Actual behavior
The welcome screen always displays the name from settings.json, even when settings.local.json contains a different principal.name.
Why this matters
In a multi-user team sharing a single PAI config repo (~/.claude/), each person needs a different welcome screen name. Currently the only workaround is to sed the shared settings.json locally and use git update-index --skip-worktree to prevent git pull from reverting it.
Reproduction
- Set
settings.json:{ "principal": { "name": "Default" } } - Set
settings.local.json:{ "principal": { "name": "Alice" } } - Restart Claude Code
- Welcome screen says "Welcome back Default" instead of "Welcome back Alice"
Additional context
Also noticed that principal is not in the settings.local.json JSON schema (rejected as "Unrecognized field"), even though settings.json accepts it via additionalProperties: {}. The schema for local settings should match or extend the base schema.
Environment
- Claude Code CLI (latest as of 2026-02-07)
- macOS
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗