Why this matters:
- Default 'append' (--append-system-prompt): caller's system text
is ADDED to Claude's default base prompt ('I am Claude, an AI
assistant...'). Right for tool-using assistants and coding agents
where the helpful-honest defaults are useful substrate. Every
existing caller (cauldron, petalparse, etc) ran in this mode
implicitly.
- New 'replace' (--system-prompt): caller's system text REPLACES
the default base prompt entirely. Right for personas — fiction
authors, chat bots, in-world characters — where Claude's defaults
would bleed through as friction. The model BECOMES the persona
rather than 'Claude playing the persona.'
Trigger for adding this: skald v0.3 — authors as personas with
souls. Orson Black writing a Chernobyl piece can't have Claude's
default helpfulness softening the prose; the soul needs to be the
prompt, not append to it.
Wire shape:
- server.py: Literal['append','replace']|None in RunRequest, default 'append'
- runner.py: branch on system_mode to pick the right CLI flag
- clients/rust: SystemMode enum, Option<SystemMode> on RunRequest
Backward compatible: clients that don't set system_mode get append
semantics (the existing behavior).