Tables
Tables are structured data tables that agents build row by row. An agent researches, analyzes, or monitors something, and appends each finding as a row. The human reviews the results in a familiar spreadsheet-like view.Relationship to Artifacts
A table is an artifact withtype: "table". It gets the same persistent URL, sharing permissions, and access controls as any other artifact. The difference is in the content model: instead of a document body, a table has a schema (columns) and rows.
From a CSV file
If you already have the data in CSV form, skip writing a schema by hand:Schema
Every table has a schema that defines its columns. Each column has a name and a type:| Column Type | Description | Example Values |
|---|---|---|
text | Free-form string | "Acme Corp", "High priority" |
number | Numeric value | 42, 3.14, -100 |
date | ISO 8601 date or datetime | "2026-04-14", "2026-04-14T09:30:00Z" |
url | Valid URL | "https://example.com/report" |
boolean | True/false toggle | "true", "false" |
enum | One of a predefined set of values | "high", "medium", "low" |
Schema Auto-Expansion
Schemas grow automatically. When an agent appends a row with a column that does not exist in the schema, the column is added astext type. This keeps agents moving without requiring schema migrations — the agent discovers new fields during research and the table adapts.
Row Operations
Tables support four operations on rows: Append — Add one or more rows in a single request. This is the primary write operation. Agents call this repeatedly as they discover findings.The Agent Workflow
The typical flow:- Agent creates a table with a schema defining the columns it plans to fill
- Agent researches, appending rows as findings come in — one API call per batch
- Human opens the table URL, sees a live table of results
- Human (or operator) reviews, comments, or edits rows from the dashboard
- Agent continues appending — the table grows over time
Sorting and Filtering
The GET rows endpoint supports server-side sorting and equality filtering via query parameters. Sort by any column with type-aware ordering (numeric sort fornumber columns, chronological for date):
Loose Enforcement
Column types are display hints, not hard constraints. The backend never rejects a row because a value doesn’t match its declared type. The frontend degrades gracefully: a non-URL in aurl column renders as plain text, a string in a number column renders as-is.
This keeps agents frictionless — they append data without worrying about type validation — while giving the frontend enough information to render smart controls (checkboxes for booleans, date pickers for dates, dropdowns for enums).