[BUG] Project-scoped settings don't resolve from subdirectories, making project scope identical to local scope
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
- Create a project with
.git/and.claude/settings.jsoncontainingenabledPlugins - Install a plugin at project scope:
claude /install-plugin my-plugin --scope project - Verify plugins work from the project root
mkdir -p src/feature && cd src/feature- 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.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗