Non-array settings (statusLine, hooks) not inherited from global when project settings.local.json exists

Resolved 💬 3 comments Opened Mar 2, 2026 by fastmovin Closed Mar 6, 2026

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

  1. Define statusLine in ~/.claude/settings.json:
{
  "statusLine": {
    "type": "command",
    "command": "echo 'hello from statusline'"
  }
}
  1. Open Claude Code in a directory with no .claude/settings.local.json → status line works
  1. Create .claude/settings.local.json with only permissions:
{
  "permissions": {
    "allow": ["Bash(ls:*)"]
  }
}
  1. 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

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗