happier-session-control
Manage Happier sessions (list/status/send/wait/history/stop + execution runs) via the happier CLI JSON contract.
Happier Session Control (CLI JSON)
This skill enables an agent framework (for example OpenClaw) to control Happier sessions using the existing happier CLI in --json mode.
Prerequisites
- The
happierCLI is installed and authenticated. - If using multiple servers/profiles, pass server selection flags before
session(prefix-only):happier --server <profile-id-or-name> session list --jsonhappier --server-url <url> --webapp-url <url> session list --json
Contract
All JSON outputs are a pure-stdout envelope:
{ "v": 1, "ok": true, "kind": "...", "data": {} }
or:
{ "v": 1, "ok": false, "kind": "...", "error": { "code": "..." } }
Common error codes to handle:
not_authenticated: runhappier auth loginon the host (or mount/provide a validHAPPIER_HOME_DIR).session_id_ambiguous: pick deterministically fromerror.candidates(prefer exact id; otherwise ask the user).session_not_found: callhappier session list --jsonand retry.unsupported: feature disabled by server policy or backend doesn’t support the requested intent.
Auth Commands (JSON)
Check auth status without scraping human output:
happier auth status --json
Session Commands
List sessions:
happier session list --json
Inspect session status (server snapshot):
happier session status <session-id-or-prefix> --json
Inspect session status with a best-effort live refresh:
happier session status <session-id-or-prefix> --live --json
Create/load a session by tag:
happier session create --tag <tag> --json
Send a message to a session:
happier session send <session-id-or-prefix> "<message>" --json
Send a message and wait until the session is idle:
happier session send <session-id-or-prefix> "<message>" --wait --timeout 300 --json
Wait for a session to become idle:
happier session wait <session-id-or-prefix> --timeout 300 --json
Stop a session:
happier session stop <session-id-or-prefix> --json
Read session history (compact is recommended for prompt stuffing):
happier session history <session-id-or-prefix> --limit 50 --format compact --json
Execution Run Commands
Start an execution run:
happier session run start <session-id-or-prefix> --intent review --backend claude --json
List runs for a session:
happier session run list <session-id-or-prefix> --json
Get a run:
happier session run get <session-id-or-prefix> <run-id> --include-structured --json
Send input to a run:
happier session run send <session-id-or-prefix> <run-id> "<message>" --json
Stop a run:
happier session run stop <session-id-or-prefix> <run-id> --json
Execute an action on a run:
happier session run action <session-id-or-prefix> <run-id> <action-id> --input-json '<json>' --json
Wait for a run to finish:
happier session run wait <session-id-or-prefix> <run-id> --timeout 300 --json
Stream turn IO for a streaming run (e.g. intent=voice_agent):
happier session run stream-start <session-id-or-prefix> <run-id> "<message>" --json
happier session run stream-read <session-id-or-prefix> <run-id> <stream-id> --cursor 0 --json
happier session run stream-cancel <session-id-or-prefix> <run-id> <stream-id> --json
Server Commands (JSON)
List server profiles:
happier server list --json
Current active server:
happier server current --json
Add a server profile non-interactively:
happier server add --name "My Server" --server-url https://example.com --webapp-url https://example.com --use --json
Switch active server:
happier server use <id-or-name> --json
Remove a server profile:
happier server remove <id-or-name> --force --json
Probe server reachability/version:
happier server test [<id-or-name>] --json
Set a one-off custom server as active:
happier server set --server-url https://example.com --webapp-url https://example.com --json