Loading the documentation…
Some work takes longer than a chat turn. DataMind Oda starts it in the background as a job, keeps working with you, and collects the result when the job finishes. This page covers where jobs appear, how they are read, waited for and stopped, and how you learn that one finished. How jobs are owned, kept and limited is in Background jobs: limits and lifecycle.
Long work becomes a job of the chat that started it, whichever kind it is:
started background subagent job <id>, and its result waits in that job. See Background subagents and job collection.workflow "<name>" started in the background as job <jobId>. Its return value arrives with the completion notice; check on it with job_output, stop it with job_kill.Oda manages every kind through the same three job tools: job_output reads a job, job_list lists the chat's jobs, and job_kill stops one. In the chat these calls appear as steps such as Read output from background job <id>, List background jobs and Kill background job <id>.
<id> [<kind>] <status> - <label>, for example bash-1 [bash] running - pnpm test. With no jobs, it answers (no background jobs).[status: <status>]; with nothing new to add, it answers (no new output).▸ <phase> when a phase starts, plain log lines the run writes, and agent #1 <label> started with a matching line naming the outcome as each helper agent starts and ends. The current phase also shows on the row as its progress line.[output truncated], and [some output was dropped from memory; full output: …] when the full output was saved to a file.stopping until its work actually ends, then settles as killed.job_kill, which takes a short reason; a background workflow stopped with no reason records background workflow job killed. The receipt reads requested cancellation of job <id>, or job <id> had already finished <status> when there was nothing left to stop.cancelled by the user. Stop all stops every running background row in the panel at once.background job <id> (<kind>: <label>) finished [status: . . . ]. Read its output with job_output. The notice names the job and its state; the output stays in the job, where Oda reads it.job_kill posts no notice. A job you stopped from its row still sends its notice, so Oda learns how it ended.Yes. A read returns the output that is new since the last read and closes with the job's current state; with nothing new, it answers (no new output). A background workflow reports only its status until it settles, and its return value arrives with the completion notice.
In the Activity tab of the side panel, under Running: a chat's background processes gather in a Background jobs list, and the Activity pill at the top of the chat counts what is under way. Oda's own listing reads the same jobs out in the chat, one line each.
started in the background as job <id> mean?Oda has accepted the work as a background job, and the chat is free again. Oda checks it with job_output and stops it with job_kill, and a workflow's return value arrives with the completion notice.
▸ <phase> marks a phase of the run starting. A plain line is a log message the run wrote. agent #1 <label> started and the matching line with its outcome track each helper agent the run starts and ends.
The view keeps only a bounded tail of the newest text. Where earlier output was dropped or is no longer kept, it marks the gap at that point; output after the mark continues as normal. How much output a job keeps is on Background jobs: limits and lifecycle.
As one row, with each round of the loop as a member of that row.
Up to 30 seconds by default, and never longer than 10 minutes. If the wait runs out, the job keeps running and can be checked again.
The wait ends at once and Oda takes your message. The job itself keeps running; ask Oda about it again when you want its output.
running means the work is going on now; stopping means a stop was asked for, and the job ends once its work actually stops; completed means the work finished on its own; killed means it was stopped before it could finish; failed means it ended with a problem.
One press stops it, with no confirmation. The stop is a request: the job reads stopping until its work really ends, then settles as killed with the reason cancelled by the user. Because the stop came from you, Oda still receives the completion notice.
A completion notice appears in the chat: background job <id> (<kind>: <label>) finished [status: . If Oda is busy, the notice folds into its next step; if the chat is idle, Oda opens a new turn for it. Ask Oda for the output when you want it in the chat.
Two cases stay quiet. A job Oda stopped itself with job_kill posts no notice, because Oda stopped it on purpose. And the waking is budgeted: after three completion wakes in a row, Oda waits for your next message instead of waking the chat again.