OXYGENOxygen/ Docs
Data

Cells

Where a value came from, which run wrote it, and what it cost.

Trace any value in a table back to the run that produced it and the credits it spent. A cell is one row of one column, and it keeps its own status, error, provenance, and write history.

What the grid shows before you click

Open Tables in the sidebar (/tables), then a table (/tables/<table-id-or-slug>). A tool or enrichment cell that never ran shows a grey Not run chip; an AI or formula cell shows its definition label instead. A cell with work in flight shows a status chip instead of a value:

ChipMeaning
QueuedClaimed by a run, not started
RunningIn flight
RetryingFailed, still inside its attempt budget
Rate limitedProvider throttled it; retries continue
Awaiting callbackWaiting on an async provider response
FailedOut of attempts

Hover the chip for its attempt count and item id. While a run is active, a strip above the grid shows settled/total rows, credits used against the run's ceiling, and a View link to that run.

Open one cell

Double-click the cell or press Enter on it. The Cell details panel opens beside the grid:

  • Last run — Status, Attempts (2 / 3), Completed time, skip reason, and the failure message in red when the last attempt errored.
  • Result — a plain-language verdict for tool output, such as a verified email or an invalid number.
  • Value — the output as an expandable tree. Each field offers Copy value, and Copy reference where the path is referenceable — the {{column_key.field}} token for formula and AI columns.

An empty cell says so: This cell is empty. Run the column to populate a value. On a waterfall enrichment cell, Expand into result columns fans it into per-provider sub-cells; clicking one opens the same panel headed Waterfall attempt.

Inspect from the terminal

oxygen cells inspect <table> <row-id> <column> --history-limit 25 --json

Row ids come from oxygen tables query <table> --limit 1 --json — the field is _row_id. You get the value, identity fields for the row, recent history (10 changes by default, cap 50), and a deep_link shaped https://oxygen-agent.com/tables/<table>?cell=<row-id>:<column-key>.

That link opens a dialog: the value, its confidence badge and via <provider> source, a Timeline of provider attempts (Provider, Operation, Detail, Latency), and Recent writes (When, Source, Status, Run). Only enrichment cells have a timeline.

Full history

oxygen cells history <table> <row-id> <column> --limit 100 --json
oxygen rows history <table> <row-id> --json

Each change carries createdAt, sourceType (api, cli, tool, workflow, system), oldValue, newValue, runId, and runStatus — enough to see that a CRM sync overwrote an AI classification. rows history covers every column on the row and has no web equivalent.

What it cost

The grid prints no per-cell credit number. Two commands do:

oxygen tables preview <table> --include-cell-states --json   # cellStates[row][column].billing
oxygen table-runs get <run-id> --json                        # the run that wrote it

billing reports creditsUsed, creditsSaved, charged, and cacheHit, so a cell served free from cache is distinguishable from one that spent. Pass the runId from any cell change to table-runs get, or open /tables/<table>/runs/<run-id>, which shows Credits used against the run's ceiling. The run list at /tables/<table>/runs is not linked from the grid — reach it by URL, or from a run page's Back to runs.

Rerun one cell

Rerun this cell in the Cell details panel re-executes the executable kinds — ai, tool, enrichment, formula, bind, and lookup. On a paid column the grid's hover button reads Run this cell (uses credits): one click, no dialog, bounded by a one-row ceiling the server derives. The paid kinds (ai, tool, enrichment) mint a durable run; formula, bind, and lookup execute synchronously and mint none. From the CLI, preview first:

oxygen columns run <table> <column> --row-id <row-id> --force --dry-run --json
oxygen columns run <table> <column> --row-id <row-id> --force --approved --max-credits 50 --json

--dry-run shows the resolved model, credit estimate, and rendered prompt without spending. --force is what overwrites a cell that already holds a value. oxygen columns rerun is the narrower AI-only path — --dry-run first, then a required --max-credits, plus --from-review-id to thread a message review's feedback into the prompt.

On this page