Documentation
All documents

Conversations, tasks & approvals

How a message becomes a task, the six states it passes through, and the three approval modes.

All

The model

A conversation is a thread bound to one agent and optionally to one working directory. A task is a single message inside it. Each task gets an id you can poll until it reaches a terminal state.

Task states

StateMeaning
queuedAccepted, not yet written into the terminal
sentWritten into the running session
workingThe agent is producing output
completedFinished, with a parsed result
completed_with_rawFinished, but only raw screen output could be captured
failedEnded with an error; a failure reason is attached

Poll GET /api/message/:id to follow a task. The response carries status, plus response, rawOutput, error, failureReason, modelId, duration and completedAt as they become available.

Approval modes

ModeBehaviour
safeRuns routine commands; asks before anything risky
askAllAsks for approval before every command
autoApproves without asking

The mode is stored globally and can be overridden per conversation. When a command needs approval, POST /api/message answers with status pending_approval plus an approval object; resolve it with POST /api/approvals/:id using approve, deny or always_approve. GET /api/approvals lists what is waiting.

Conversation lifecycle

OperationEndpoint
List / createGET, POST /api/conversations
Read / update / deleteGET, PATCH, DELETE /api/conversations/:id
Make activePOST /api/conversations/:id/activate
Send a taskPOST /api/message
Follow a taskGET /api/message/:id

Creating a conversation accepts agentId, workdir, approvalMode and an optional firstMessage. Updating accepts title, archived, pinned, workdir, agentId, approvalMode, modelId and modelProviderId.

No manual session start on mobile

Current iOS and Android builds have no Start Session / Stop Session buttons. Sessions are managed by the desktop app; phones create conversations and send tasks into them.