244d296646
Personality persistence used to be split per surface: the TUI/desktop wrote the NAME to display.personality while the CLI/gateway wrote rendered TEXT into agent.system_prompt (and their /personality none only blanked the text, leaving the name behind). When #81946 made display.personality authoritative everywhere, stale names written long ago resurrected personalities users had turned off - kawaii defaulting on after updating. - hermes_cli/personality.py: new single owner of personality state. Built-in personality definitions, neutral-name normalization, rendering, availability (built-ins overlaid by agent.personalities), overlay resolution, and the ONLY sanctioned persistence path (persist_personality -> display.personality; never agent.system_prompt). - v34 config migration: one-time reset of display.personality to none (announcing which personality was cleared and how to re-enable), plus a scrub of agent.system_prompt when it verbatim-equals a known personality render (machine-written by the old CLI/gateway). Hand-written manual prompts are never touched. - All surfaces rewired through the module: CLI /personality (incl. active marker in the list), gateway /personality, TUI config.set + slash path (which previously applied without persisting), TUI config.get (reports the EFFECTIVE personality), completer, hermes config display, and the tui_gateway health probe. - cli.py/config duplicates removed: built-ins now defined once; the desktop mirrors them from one lib module (src/lib/personalities.ts). - Docs updated: selection lives in display.personality, built-ins always available, one-time reset note.