Runs
The Runs page at Dashboard → Runs is the durable record of every agent invocation. A run is one shot at one agent — the smallest unit of work in Catentio.
If you want pipeline-driven multi-step work, you want Projects. Runs are the building block underneath; every project produces runs as its subtasks execute.
The runs list
The list view shows the trailing 200 runs by default, with columns:
| Column | What it is |
|---|---|
| Agent | The slug of the agent that ran. |
| Status | queued, running, succeeded, failed, cancelled. |
| Started | Relative timestamp. |
| Duration | Wall-clock from queued to terminal state. |
| Cost | Dollar cost, summed across all model calls inside the run. |
| Message preview | First 80 characters of the original prompt. |
Filters in the top bar: by agent, by status, by date range, by project (if the run was spawned by a project subtask).
Click any row to open the run detail page.
The run detail page
This is the dashboard's run-of-the-mill page (sorry). It's also the one you'll spend the most time on. Sections:
Header
Run ID (run_…), agent slug, status badge, elapsed time, total cost. Action buttons: Cancel (only while running), Re-invoke (creates a new run with the same input).
Original message
The exact prompt that started the run, rendered as markdown. If the run was spawned by a project subtask, this is the subtask's compiled instruction.
Streaming output
The agent's response, streamed in real time while the run is running, frozen at completion. Rendered as markdown with syntax-highlighted code blocks. If the agent used a tool mid-run, the tool call and its result are inlined.
For runs that decomposed via the task runner, the output is structured as a tree of subtasks, each with its own status, attempts, and output.
Tool calls
A flat list of every tool the agent invoked during the run, with input parameters and result. Click any call to expand the full payload — useful for debugging when "the agent said it did X" doesn't match what actually happened.
Cost breakdown
Per-model rollup of input/output tokens and dollar cost. A run that called Sonnet then escalated to Opus shows both line items.
The total here matches the Cost column in the list. If the run is still active, the total is "best-effort so far" — it'll settle on completion.
Artifacts
Files, screenshots, JSON payloads the run produced. Each is downloadable and linked to the tool call that wrote it.
Events
The outbox events emitted during the run, ordered by timestamp. Shape: { kind, payload, recordedAt, deliveredAt }. Useful for verifying downstream webhook delivery.
Memory writes
Any entries this run added to the memory layer, with the namespace and the kind. Click through to inspect.
Cancelling a run
Click Cancel at the top of a running run. The runtime sends an interrupt to the spawned Claude CLI session. Cancellation is cooperative — the agent gets a chance to flush state before exiting — so it's not instant. Expect a few seconds.
A cancelled run keeps everything it wrote up to the interrupt point. The status flips to cancelled and the cost is final.
You cannot cancel a queued run that hasn't picked up yet — just delete it from the queue:
catentio-saas runs cancel run_xyz
Re-invoking
The Re-invoke button creates a fresh run with the exact same input as the original. Useful for:
- Re-trying a flaky agent step that produced wrong output the first time.
- A/B-ing a prompt change — re-invoke the original, then invoke a new variant.
Each re-invocation is a new run with a new ID. The original is preserved.
There's no "retry" semantically the same way projects have retry-subtask. Runs are immutable.
Cost tracking
Cost is the headline number on every run. Catentio tracks it by inspecting every Anthropic API call the spawned Claude session makes:
- Input + output tokens, per model, per call.
- Cached vs. non-cached tokens (with the lower cached price).
- Tool use cycles count as the prompt that triggered them — not as separate calls.
The math is exposed in the per-model breakdown panel. If you spot a number that looks wrong, hover the model row for the raw call list.
Cost for the workspace (rolled up across all runs) lives at Dashboard → Cost.
Querying via API
The list endpoint supports the same filters as the UI:
catentio-saas runs list --agent cimi --status succeeded --limit 50
Or with the SDK:
const runs = await catentio.runs.list({ agent: 'cimi', status: 'succeeded', limit: 50 });
Fetch a single run by ID:
const run = await catentio.runs.get('run_01HXYZ...');
The detail payload includes everything the detail page shows: original message, output, tool calls, cost, artifacts, events.
Retention
Runs are kept forever in v1 — we don't expire them. The runtime's janitor scheduled job (see Concepts → Scheduled jobs) reclaims related disk artifacts (large screenshots, temp scratch) on a 30-day window, but the run record + cost + event timeline survive indefinitely.
Next
- Portal → Agents — the source of runs.
- Portal → Projects — runs orchestrated into pipelines.
- API reference — the underlying REST surface.