[BUG] Project-scoped settings don't resolve from subdirectories, making project scope identical to local scope

Resolved 💬 3 comments Opened Apr 6, 2026 by flound1129 Closed Apr 10, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Project-scoped settings (.claude/settings.json) are not discovered when Claude Code is started from a subdirectory of the project. This makes "project scope" functionally identical to "local scope" — both only work from the exact directory they're in.

Example structure:

my-project/
├── .git/
├── .claude/
│   └── settings.json    ← enabledPlugins configured here
├── src/
│   └── feature/         ← start claude here, plugins gone
└── packages/
    └── app/             ← start claude here, plugins gone

enabledPlugins, hooks, mcpServers, and all other project-scoped config silently disappear the moment you cd into any subdirectory. There's no error — things just stop working.

The docs describe three scopes with clear intent:

  • User (~/.claude/settings.json) — applies everywhere
  • Project (.claude/settings.json) — applies to the project, committed to git
  • Local (.claude/settings.local.json) — applies to the project, gitignored

But in practice, project and local have identical resolution behavior: "this exact directory only." The only difference is whether the file is gitignored. That's not a scope distinction — it's a visibility distinction.

CLAUDE.md already traverses parent directories correctly, which makes this inconsistency more confusing. Users configure plugins at project scope, everything works, then they cd src/ and have to re-bootstrap.

What Should Happen?

.claude/settings.json should resolve by walking up from the working directory to the nearest .git root (same as CLAUDE.md does). All project-scoped config — enabledPlugins, hooks, mcpServers, etc. — should be available from any subdirectory within the project.

Steps to Reproduce

  1. Create a project with .git/ and .claude/settings.json containing enabledPlugins
  2. Install a plugin at project scope: claude /install-plugin my-plugin --scope project
  3. Verify plugins work from the project root
  4. mkdir -p src/feature && cd src/feature
  5. Start claude — installed plugins are gone

Claude Model

Opus

Is this a regression?

I don't know

Claude Code Version

2.1.92

Platform

Anthropic API

Operating System

Ubuntu/Debian Linux

Terminal/Shell

Xterm

Additional Information

Related issues that touch parts of this but don't call out the core problem:

  • #12962 — settings.json parent directory traversal for monorepos
  • #26489 — skills/agents/commands should traverse parent directories

Neither of those frames the issue as: project scope is broken by design because it doesn't traverse, making it indistinguishable from local scope in practice.

View original on GitHub ↗

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