Deliverables & artifacts

A successful run returns a narrative (assistantMessage) plus zero or more structured payloads. The runner must create matching tool outputs before citing placeholders — otherwise the job can fail validation after repair rounds.

Inline placeholders (all kinds)

Syntax is case-insensitive for the word artifact. Identifiers are case-sensitive unless noted.

TopicSpecification
Chart`{{artifact:chart:<id>}}` — id matches any chart tool (`create_pie_chart`, `create_bar_chart`, `create_line_chart`, `create_area_chart`, `create_scatter_chart`, `create_stacked_bar_chart`).
Table`{{artifact:table:<id>}}` — id matches `create_table` payload.
List`{{artifact:list:<id>}}` — id matches `create_list`.
Checklist`{{artifact:checklist:<id>}}` — id matches `create_checklist` (interactive in chat; updates persist to Storage).
SVG`{{artifact:svg:<id>}}` — id matches `create_svg`.
File`{{artifact:file:<path>}}` — path matches `create_file` `name` exactly (including folders).

Global limits (per completed job)

Aligned with server validation and the runner; values are subject to change in code but documented here for operators.

TopicSpecification
Assistant message≤ 24,000 characters
Files≤ 24 files; each `.md` or `.txt`; content ≤ 48,000 chars per file
Charts (total)≤ 12 (any mix of supported chart kinds)
Tables (datasets)≤ 8
Lists≤ 12 lists; ≤ 48 items per list; ≤ 512 chars per item
Checklists≤ 8 per job; ≤ 64 items each; item label ≤ 320 chars; each item has stable `id` (`^[a-zA-Z0-9_-]+$`, ≤ 48 chars) and `checked` boolean
SVGs≤ 8; raw SVG ≤ 64,000 chars; id regexp `^[a-zA-Z0-9_-]+$`
Tool / repair roundsLarge tool loop cap (e.g. 24 rounds); up to 4 deliverable repair rounds if placeholders lack tools

create_file

Long-form text artifacts for specs, prompts, and copy-paste bundles.

TopicSpecification
Parameters`name` (path ending in `.md` or `.txt`), `content` (full UTF-8 body)
Name rulesDisplayed path; folders allowed (e.g. `specs/MVP.md`). Must match `{{artifact:file:<name>}}` exactly.
When to useAuthoritative docs. Prefer `create_list` for static bullets, or `create_checklist` for tickable tasks in the UI.

create_pie_chart

Part-of-whole visualization (composition, shares, survey breakdown).

TopicSpecification
Parameters`id`, optional `title`, `segments`: `[{ label, value }]` with finite non-negative numbers
Segments≤ 24 segments; values need not sum to 100 (UI normalizes)
Placeholder`{{artifact:chart:<id>}}` — same `id` string

create_bar_chart

Compare magnitudes across categories (matrix/scorecard style).

TopicSpecification
Parameters`id`, optional `title`, `labels[]`, `series[]` (each `{ name, values[] }`), optional `orientation`
Orientation`vertical` (columns) or `horizontal` (bars) — for long category labels use horizontal
Constraints≤ 32 category labels; ≤ 8 series; each `values` length must equal `labels` length
Placeholder`{{artifact:chart:<id>}}`

create_line_chart

Trends over an ordered X axis (time series, phases, sequential benchmarks).

TopicSpecification
Parameters`id`, optional `title`, `labels[]` (ordered), `series[]` with `values[]` aligned to labels
Placeholder`{{artifact:chart:<id>}}`
Not forPart-of-whole (use pie) or simple category comparison (often bar)

create_area_chart

Like a line chart with the area under each series filled — good for cumulative or emphasized trends.

TopicSpecification
ParametersSame shape as `create_line_chart` (`labels[]`, `series[]` with `values[]`)
Placeholder`{{artifact:chart:<id>}}`

create_scatter_chart

Points in X/Y space — correlations, latency vs throughput, experiment sweeps.

TopicSpecification
Parameters`id`, optional `title`, `series[]` with `name` and `points: { x, y, label? }[]` (finite `x` / `y`)
Placeholder`{{artifact:chart:<id>}}`

create_stacked_bar_chart

Stacked vertical or horizontal bars — composition per category when values are additive (non-negative).

TopicSpecification
ParametersSame shape as `create_bar_chart` (`labels[]`, `series[]`, optional `orientation`)
Placeholder`{{artifact:chart:<id>}}`

create_table

Rectangular grids — mandatory instead of markdown pipe tables in the narrative.

TopicSpecification
Tool shapeWrapper with `table`: `{ kind: "table", id, title?, columns: string[], rows: string[][] }`
Constraints≤ 12 columns; ≤ 80 rows; ≤ 512 chars per cell
Placeholder`{{artifact:table:<id>}}` must match `table.id`

create_list

Structured bullets or ordered steps rendered in the dashboard (not raw markdown list syntax).

TopicSpecification
Tool shape`{ kind: "list", id, title?, ordered?: boolean, items: string[] }`
ItemsPlain strings — no `-` or `1.` prefixes in items
Ordered`ordered: true` for runbooks, phases, numbered steps
Placeholder`{{artifact:list:<id>}}`

create_checklist

Same storage layout as lists, but each row is an object with a stable id, label, and checked boolean. In the workspace chat, users can toggle checks; only the checked flags are accepted updates server-side.

TopicSpecification
Tool shape`{ kind: "checklist", id, title?, items: { id, label, checked }[] }`
Item rulesAt least one item; duplicate item `id`s (case-insensitive) rejected; `checked` is only honored when `true`
Placeholder`{{artifact:checklist:<id>}}`

create_svg

Inline vector diagrams (architecture sketch, simple flows). Not for data charts.

TopicSpecification
Tool shape`{ id, title?, content }` where `content` is a full `&lt;svg&gt;…&lt;/svg&gt;` document
SafetyRejected if markup matches script/event/embed patterns; no foreignObject / iframe
Placeholder`{{artifact:svg:<id>}}`

Where results appear

  • Chat — narrative interleaved with embedded charts, tables, files, lists, checklists, SVGs at placeholder positions.
  • Storage — browse and open every deliverable for the workspace after a successful run.

Runner API reference · Runners & queues