Columns
Typed actions that produce row-level values, state, and provenance.
A column is a typed action on every row of a table. Some columns hold source data; others compute values, call AI, call provider tools, enrich records, or link workflow state. Every executable column writes cells with status, cost, provenance, and history.
Column kinds
| Kind | Produces | Cost | Determinism |
|---|---|---|---|
manual | Imported, pasted, or entered value | 0 | Static |
source | Provider-sourced or imported fact | 0 or provider-defined | Source-defined |
formula | Computed from other cells in the row | 0 | Deterministic |
ai | LLM call | Credits per call | Non-deterministic |
tool | Provider tool call (catalog) | Varies | Provider-defined |
enrichment | Managed enrichment plan such as work email, mobile phone, or company enrichment | Per provider attempt | Provider-defined |
relation | Link to another table or record set | 0 | Deterministic |
workflow | Workflow-owned status or output | Depends on workflow | Workflow-defined |
system | Oxygen-managed metadata | 0 | System-defined |
Every kind produces a cell with status, provenance, cost, and history.
Adding a column
oxygen columns add <table-id> --label <label> --key <key> --kind <kind> --data-type <type> --jsonManual
oxygen columns add <table-id> --label "Notes" --key notes --kind manual --data-type text --jsonFormula
oxygen columns add <table-id> \
--label "Fit Score Number" \
--key fit_score_number \
--kind formula \
--data-type numeric \
--definition-json '{"expression":"path(fit_score, \"score\")"}' \
--jsonUse formulas to extract scalar fields from JSONB AI or tool outputs before downstream steps use them.
AI
oxygen columns add <table-id> \
--prompt-key icp-fit-scoring \
--input-mapping '{"company_name":{"type":"column","columnKey":"company_name"},"domain":{"type":"column","columnKey":"domain"}}' \
--jsonAI outputs are stored as JSON envelopes. Use a formula column or columns materialize when downstream tools need one specific field.
Tool
oxygen columns add <table-id> \
--label "Person Enrichment" \
--key person_enrichment \
--kind tool \
--data-type jsonb \
--definition-json '{"version":1,"mode":"native","toolId":"blitzapi.person_enrich","inputMapping":{"person_linkedin_url":{"type":"column","columnKey":"linkedin_url"}}}' \
--jsonTool kind binds the column to one provider tool.
Enrichment helper
oxygen enrich-column preview <table-id> \
--capability work_email \
--linkedin-url-column linkedin_url \
--company-domain-column domain \
--limit 10 \
--jsonThe enrichment helper creates or reuses an enrichment column for common waterfall-style jobs. See Waterfalls.
Running a column
oxygen columns run <table-id> <column-key> [--row-id <id> | --limit <n>] --jsonUse a one-row or small pilot first. For large or paid runs, use the durable background path with an explicit row scope and credit ceiling:
oxygen table-runs create <table-id> --column <column-key> --limit 100 --max-credits 50 --jsonMaintenance
oxygen columns rename <table-id> <old-key> --key <new-key> --label "New Label" --json
oxygen columns update <table-id> <column-key> --definition-json '{"inputMapping":{}}' --dry-run --json
oxygen columns archive <table-id> <column-key> --json
oxygen columns rerun --table <table-id> --column <column-key> --row <row-id> --json
oxygen columns materialize <table-id> person_enrichment --preset work_email --jsonRelated
- Cells — per-cell state model.
- Waterfalls — provider fallback for common enrichment jobs.
- Provider catalog — what tools exist.