v0.5.0
0.5.0
- Motion size: a Settings slider and
motionIntensityconfig field (0–3, default 1.0) scale CLAI's idle sway, breathing, and head/posture motion; inhabitants can adjust it through themotion_intensity_setMCP tool. - Richer idle aliveness: idle beat scheduler (glances, micro-aversions, anticipation), eye-lead gaze with head recruitment, physiological state-dependent blink rates (suppressed while reading), and StatePose blending in ProceduralBones.
- User scene packs can be authored as R3F (TSX) components, with live reload from nested source edits.
- Scene layers support a drop-shadow filter.
- Inhabitants can read bundled pack sources through MCP (
bundled_example_read) as authoring references. - The restore UI now lists up to 30 snapshots.
- The first-run tutorial was reworked: fixed sleeps removed, effect shortcuts (F1/F3/F4) demonstrated in place, scene color-theme collaboration shown, and the flow now carries through the pack-creation experience.
- Terminal agent launch is now backed by
TerminalAgentadapters for Claude Code, Codex, and OpenCode. - Codex installs Charminal commands as
$charm-*skills instead of/charm:*slash commands. - OpenCode receives Charminal commands as
/charm-*custom commands throughOPENCODE_CONFIG_CONTENT. - OpenCode persona overlay is injected through
agent.build.promptandagent.plan.promptfile references so primary agents receive Charminal's system prompt. - OpenCode TUI starts with a session-scoped
OPENCODE_TUI_CONFIGtemp config using thesystemtheme, and Charminal sends OpenCode'sSIGUSR2theme refresh hook on scene changes so panel/input colors re-sample the terminal palette without rewriting user OpenCode config files. - Codex and OpenCode now receive Charminal journal/voice reminders through their launch prompt overlays instead of Claude Code hook output.
- Documented that Claude Code hooks are not a cross-agent contract; Codex/OpenCode hook-like surfaces require explicit per-agent capabilities before Charminal treats them as shared behavior.
- Agent
defaultProfilevalues such as"opencode"now launch that agent instead of falling back toterminalAgent. - The Settings Agent dropdown and the Status panel now report the agent that actually launches (honoring
defaultProfile). WhendefaultProfilepins an agent, the dropdown shows that agent and is disabled with a "fixed by defaultProfile" note. - Agent install directories and charm command syntax are now declared by each
TerminalAgentadapter (single source of truth); the Status panel warns if the Rust adapter registry and the TypeScript mirror drift. terminalAgent: "opencode"is accepted in config. OpenCode end-to-end smoke is deferred and remains unverified on this machine.UiAppAPI.setTerminalAgentand related SDK/config types now accept string adapter ids instead of only"claude" | "codex".
Full Changelog: v0.4.0...v0.5.0