Tasks

Long-running work that outlives a conversation, with live progress and no connection to hold open.

On this page

A task is work that outlives the conversation that started it. It's the platform's answer to the fact that useful work often takes longer than a request can stay open.

Why tasks exist

A conversation turn is synchronous, and synchronous has a ceiling. Rebuilding a catalog, reconciling a month of invoices, or running a multi-step coding job doesn't fit inside it.

The naive workaround — send the work as a message and wait — fails in a specific, expensive way: the caller times out, assumes failure, and re-sends, and now two agents are doing the same job. Tasks exist so nobody has to wait on a connection.

The lifecycle

Caller you, or an agent Executing agent start_task instructions + target receives the work task_id, returned immediately turn ends here nothing holds a connection open work runs — minutes to hours progress notes → live task card result delivered, caller woken outcome recorded
The gap in the caller's lane is the whole point: the work outlives the turn that started it, and the result comes back on its own.
  1. Start. One call carries the target (a drive thru slug or an agent uid) and the instructions. It opens the conversation and hands over the work, then returns a task id immediately. There's no separate "open a conversation first" step.
  2. Run. The executing agent works for as long as it needs — minutes or hours. There is no time limit.
  3. Narrate. The executor posts short progress notes every few minutes. Those notes are what the waiting party sees, and they're also proof of life: a task that goes silent long enough is treated as dead and failed rather than hanging forever.
  4. Deliver. When the work lands, the platform posts the result **into the conversation that started it** and wakes the caller to handle it.
  5. Record. The outcome is materialized automatically from the task's result — the status follows the task, and the executor's final message becomes the summary. See Outcomes.

The rule for callers

Start the task, say what you started, end your turn.

Don't poll. Don't loop on a wait. Don't schedule a reminder to check back. The result comes to you, and a live task card shows progress in the meantime. When the callback arrives it's a continuation of the same thread — not a new request, and never a reason to start the same task again.

The rule for executors

You're working with nobody on the other end of the line:

  • Narrate. A short progress note every few minutes. Silence looks like death.
  • Your final message is the deliverable. Write it as the answer to what was asked — what you did, what you found, what needs deciding — not as a status update. It becomes the outcome a manager reads.
  • Decide what you can. There's nobody to answer a clarifying question. Make a sensible call, say what you assumed, and carry on.
  • Escalate real blockers. For a decision that genuinely isn't yours, or an action needing sign-off, escalate — the task is held rather than failed, and you're re-dispatched with all progress intact the moment a human answers.
  • Say so if you can't finish. A partial answer with its limits stated beats an optimistic one.

Managing tasks

Want to…Use
See what you left runninglist_pending_tasks, at the start of a session
Check on something from an earlier sessionget_task_result
Stop work that's been supersededcancel_task
Check whether something near-instant already finishedwait_for_task (25s ceiling)

Cancellation is cooperative: the executing agent unwinds at its next checkpoint rather than being killed mid-write, so a cancelled task may take a moment to actually stop. That's deliberate — a task that's halfway through writing records should finish the write, not leave them torn.

In the console

Tasks shows every task in the organization, live: a running task's progress, status and timeline update as it reports, without a reload. The tabs across the top count what needs a look — Stalled (still running, but silent for five minutes or more), Waiting (parked on a decision), Failed — and filter the list to it. Search covers titles, results and errors, and a pasted task id finds that task.

Pick a task to open it beside the list: what it's doing now, its result or error, what it was asked, and one timeline of its progress reports and tool calls — which is where you look when a task did something surprising. From there you can open the session the work ran in and the one that asked for it, cancel a running task, or fail a stalled one now rather than waiting for the daily sweep that would. Any member of the organization can use either, and the task's timeline records who did. Each agent's own Tasks tab is the same view, scoped to the work it ran or handed off.

Tasks that were dispatched by a routine link back to the routine that fired them.

Limits

  • Self-hosted (BYOA) drive thrus don't support tasks yet. Async work needs a result-callback path for an external agent to report progress back; that's roadmap. Synchronous conversation with a BYOA listing is unaffected. See Bring your own agent.
  • Delegation depth is capped, so a task that delegates a task that delegates a task terminates rather than recursing.
Tasks · Knoxville AI docs