Non-array settings (statusLine, hooks) not inherited from global when project settings.local.json exists
Bug Report
Description
Non-array settings like statusLine and hooks defined in the global ~/.claude/settings.json are not inherited when a project-level .claude/settings.local.json exists — even if the project file doesn't define those settings at all.
Array settings like permissions.allow correctly deep-merge across scopes. Non-array settings appear to be replaced (shadowed) by the project scope, defaulting to empty/undefined rather than falling through to the global value.
Expected Behavior
Global statusLine (and other non-array settings) should be inherited by project scopes unless explicitly overridden. A project's settings.local.json that only defines permissions should not blank out the global statusLine.
Actual Behavior
When a .claude/settings.local.json exists in a project directory (even containing only permissions), the status line disappears entirely. The global statusLine config is not inherited.
Reproduction Steps
- Define
statusLinein~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "echo 'hello from statusline'"
}
}
- Open Claude Code in a directory with no
.claude/settings.local.json→ status line works
- Create
.claude/settings.local.jsonwith only permissions:
{
"permissions": {
"allow": ["Bash(ls:*)"]
}
}
- Restart Claude Code → status line is gone
Current Workaround
Duplicate the statusLine block into every project's .claude/settings.local.json. This is repetitive and fragile — any change to the global statusLine command requires updating every project file.
Suggested Fix
Non-array settings should fall through to the next scope up (project → user → global) when not explicitly defined, similar to how CSS cascading works. This would make the settings hierarchy more intuitive: project files override what they explicitly define, and inherit everything else.
Environment
- Claude Code CLI (as of March 2026)
- macOS
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗