-p "message"
for one turn of plain-text output, a bare -p reading the message from stdin, and
--json for the machine-readable line. The JSON contract is the same one
python -m app.cli.chat_once emits, so a script can move between the two without
changing its parser. Headless runs never open the setup wizard or the session
pickers: the user resolves from --user or the last-used user, and a missing
user or missing API key fails fast to stderr with a pointer at ziro setup.
The important behavioural rule is fail-closed: a headless run has no human to ask,
so any permission interrupt that would raise an approval prompt is auto-denied
rather than blocking. Plugin trust behaves the same way: dangerous grants stay
inert in a headless run regardless of what is recorded.
This page is in progress. See the chat-once reference for
the flag list and CLI reference for the dispatch rule.
chat_once
Flags, JSON fields, and the background job queue.
Background jobs
Submitting and polling work that outlives one turn.