C.W.K.
Lesson 05 of 05 · published

Two Channels — WebUI Vault vs Terminal CLAUDE.md

~10 min · channels, setting-sources

Level 0Curious
0 XP0/52 lessons0/16 achievements
0/100 XP to next level100 XP to go0% complete

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:

  1. ContextEngine packs the vault into system_prompt on session start.
  2. Filesystem settings — Claude Code's normal channel — is what terminal Pippa uses when she's invoked via the claude CLI 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.

Progress

Progress is local-only — sign in to sync across devices.