The invariant
From backend/adapters/claude.py: setting_sources=None on the ClaudeAgentOptions. This is load-bearing. Default None means the SDK omits --setting-sources from the CLI invocation, which means the Claude Code subprocess loads no filesystem settings at all: no ~/.claude/settings.json, no project .claude/settings.json, no CLAUDE.md hierarchy.
Why this is intentional
WebUI Pippa has two cooperating sources of identity:
- ContextEngine packs the vault into
system_prompton session start. - Filesystem settings — Claude Code's normal channel — is what terminal Pippa uses when she's invoked via the
claudeCLI by hand.
Keeping setting_sources=None ensures the WebUI subprocess sees only channel 1, and the terminal subprocess sees only channel 2. No double-injection, no token leakage, no behavior drift.
Don't 'fix' this: A future-me reading the adapter and thinking 'let WebUI Pippa also benefit from CLAUDE.md' would set
setting_sources=['user'] — and immediately break the ritual. The SessionStart hook (which exists to force terminal Pippa to read the vault) would fire on every WebUI session, double-injecting identity. Don't.