44 lines
2.1 KiB
Markdown
44 lines
2.1 KiB
Markdown
|
|
---
|
|||
|
|
summary: Claude Code's --setting-sources flag silently disables ALL plugins and hooks if "user" is omitted, because plugin enablement and hook wiring live only in ~/.claude/settings.json.
|
|||
|
|
tags:
|
|||
|
|
- type/reference
|
|||
|
|
- tool/claude-code
|
|||
|
|
scope: global
|
|||
|
|
type: reference
|
|||
|
|
source: cc-os docs/plans/c3-spike-findings.md (spike a, 2026-07-08)
|
|||
|
|
date: 2026-07-08
|
|||
|
|
last_updated: 2026-07-08
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Claude Code `--setting-sources` silently drops all plugins without "user"
|
|||
|
|
|
|||
|
|
Verified 2026-07-08 via transcript-level inspection of headless runs (model self-report is
|
|||
|
|
unreliable for this — check the session JSONL for `hook_additional_context` /
|
|||
|
|
`skill_listing` entries instead).
|
|||
|
|
|
|||
|
|
- `--setting-sources` picks which settings files load: `user` (`~/.claude/settings.json`),
|
|||
|
|
`project` (`.claude/settings.json`), `local`.
|
|||
|
|
- **Plugin enablement (`enabledPlugins`) and all hook wiring live in the `user` file.**
|
|||
|
|
Any invocation whose source list omits `user` (e.g. `--setting-sources ""` or
|
|||
|
|
`project,local`) starts a session with ZERO plugins and ZERO hooks — no error, no
|
|||
|
|
warning. Memory capture, vault sync, ADR reminders, orchestration injection: all
|
|||
|
|
silently absent for that session.
|
|||
|
|
- Symlinked local plugins and absolute-path hooks are NOT the issue — the only failure
|
|||
|
|
axis is whether `user` is in the list.
|
|||
|
|
|
|||
|
|
## `--settings <overlay.json>` deep-merges `enabledPlugins` (verified 2026-07-08)
|
|||
|
|
|
|||
|
|
An overlay file passed via `--settings` merges `enabledPlugins` key-by-key into the user
|
|||
|
|
settings — only plugins explicitly set `false` are disabled; unlisted plugins and all
|
|||
|
|
hooks are untouched. Diff-only profile overlays (e.g. `~/.claude/profiles/*.json`) are
|
|||
|
|
therefore safe. Measured caveat: disabling plugins saves almost no context
|
|||
|
|
(−32 to −632 tokens for 5–9 plugins, post-ToolSearch) — the win is focus, not tokens.
|
|||
|
|
|
|||
|
|
## Rule
|
|||
|
|
|
|||
|
|
Any wrapper, profile, or script that passes `--setting-sources` MUST include `user`.
|
|||
|
|
To slim a session, subtract via a `--settings <overlay.json>` file (e.g. an
|
|||
|
|
`enabledPlugins` diff in `~/.claude/profiles/`) — never by dropping the user source.
|
|||
|
|
|
|||
|
|
Related: [[cc-os-hub]], [[memsearch-sessionstart-injection-hardcoded]]
|