You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Workflow columns, against the docs-writing playbook: killed the banned
'Term — desc' bullets in the Configure list (term + verb form), restored the one
universal analog (spreadsheet macro), fixed the clipped 'On,/Off,' fragments,
replaced an invented <start.companyDomain> tag with the verified description,
and thinned em-dashes to four page-wide with no clustering. Also repointed
[File] block mentions back to /integrations/file now that the page exists again
(FileV5 is visible upstream); the Files-store links stay on /files.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A generated file is an artifact a workflow run creates: a report, a CSV, a rendered audio clip. It starts as a value a block produces and becomes a workspace file when a [File](/files) block writes it to the [Files](/files) store. Once saved, it has a name, a size, and a URL, and any later run can read it back.
10
+
A generated file is an artifact a workflow run creates: a report, a CSV, a rendered audio clip. It starts as a value a block produces and becomes a workspace file when a [File](/integrations/file) block writes it to the [Files](/files) store. Once saved, it has a name, a size, and a URL, and any later run can read it back.
11
11
12
12
Like a build pipeline that produces artifacts and stores them in an artifact repository, a workflow produces file artifacts that land in your workspace Files store, indexed by ID and shared across every workflow.
13
13
@@ -27,7 +27,7 @@ A block's output is remembered under the block's name for the rest of the run, a
27
27
28
28
## Saving content with the File block
29
29
30
-
The [File](/files) block's **Write** operation creates a new workspace file. It takes two required fields: a `fileName` (like `report.md`) and the `content` string to store. It returns the saved file's details.
30
+
The [File](/integrations/file) block's **Write** operation creates a new workspace file. It takes two required fields: a `fileName` (like `report.md`) and the `content` string to store. It returns the saved file's details.
A file is a document, image, spreadsheet, or PDF in your workspace. A workflow can read a file to act on its contents, pass a file to a block or tool that needs one (attach a PDF to an email, send an image to a vision model), or produce a new file and save it. The [File](/files) block is how a file enters or leaves a workflow; the work in between is done by whatever block the task calls for.
11
+
A file is a document, image, spreadsheet, or PDF in your workspace. A workflow can read a file to act on its contents, pass a file to a block or tool that needs one (attach a PDF to an email, send an image to a vision model), or produce a new file and save it. The [File](/integrations/file) block is how a file enters or leaves a workflow; the work in between is done by whatever block the task calls for.
12
12
13
13
What you do with a file depends on the task, so this page covers the File block's operations and how a file moves between blocks rather than one fixed recipe. The example we'll use throughout reads `report.pdf`, asks an agent to summarize it, and saves the summary as `summary.md`, which exercises reading, processing, and writing in one workflow.
Copy file name to clipboardExpand all lines: apps/docs/content/docs/en/tables/workflow-columns.mdx
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ import { Image } from '@/components/ui/image'
10
10
11
11
A [table](/tables) is a grid of typed columns. Usually you type a column's values in. A **workflow column** is different: its values come from a [workflow](/workflows) that runs once per row. For each row, the workflow reads the columns you choose as input, runs its blocks, and writes its results back into columns on that same row.
12
12
13
-
This is what makes a table active. Instead of running a workflow by hand and pasting the results in, you attach the workflow to the table and it fills each row on its own.
13
+
This is what makes a table active. Instead of running a workflow by hand and pasting the results in, you attach the workflow to the table and it fills each row on its own — a bit like a spreadsheet macro that runs on every row, except each step is a full workflow.
14
14
15
15
The running example is a table of AI startups, `ai_startup_customers`. The company is typed in; three workflow groups fill everything else:
16
16
@@ -25,7 +25,7 @@ The running example is a table of AI startups, `ai_startup_customers`. The compa
25
25
-**Company Info** reads the domain and fills `employee_count` and `description`.
26
26
-**Lead Score Enrichment** reads the info and writes `lead_score`, `priority`, and `score_reasoning`.
27
27
28
-
Each group's header spans the columns it owns, every row has a run button (▷), and the toolbar shows the work in flight — here, **21 running**, with **Stop all** beside it.
28
+
Each group's header spans the columns it owns, every row has a run button (▷), and the toolbar shows the work in flight: here, **21 running**, with **Stop all** beside it.
A **workflow group** is the unit you configure: one workflow, plus how its inputs and outputs map to columns, plus what makes it run. One group can produce several result columns from a single run per row — Lead Score Enrichment fills `lead_score`, `priority`, and `score_reasoning` together.
42
+
A **workflow group** is the unit you configure: one workflow, plus how its inputs and outputs map to columns, plus what makes it run. One group can produce several result columns from a single run per row: Lead Score Enrichment fills `lead_score`, `priority`, and `score_reasoning` together.
43
43
44
-
Click a group's header to open **Configure workflow**. It previews the workflow it will run, and holds everything that defines the group:
44
+
A group's **Configure workflow** panel holds everything that defines it, with a preview of the workflow it will run:
@@ -50,10 +50,10 @@ Click a group's header to open **Configure workflow**. It previews the workflow
50
50
height={792}
51
51
/>
52
52
53
-
-**Workflow**— which workflow runs per row (here, *Lead Score Enrichment*).
54
-
-**Add column inputs**— map columns to the workflow's inputs.
55
-
-**Output columns**— which workflow outputs to write back (here, 3 selected).
56
-
-**Auto-run workflow** and **Run after**— when rows run (below).
53
+
-**Workflow**picks which workflow runs per row; here, *Lead Score Enrichment*.
54
+
-**Add column inputs**maps columns to the workflow's inputs.
55
+
-**Output columns**picks which workflow outputs to write back; here, 3 are selected.
56
+
-**Auto-run workflow** and **Run after**control when rows run (both below).
57
57
58
58
### Input columns
59
59
@@ -66,21 +66,21 @@ Click a group's header to open **Configure workflow**. It previews the workflow
66
66
height={604}
67
67
/>
68
68
69
-
When the group runs a row, that row's `domain` value becomes the workflow's input, read inside it as `<start.companyDomain>`. The workflow only sees the columns you mapped; the rest of the row is untouched, and inputs are read-only during the run.
69
+
When the group runs a row, that row's `domain` value becomes the workflow's input, read from its [Start](/triggers/start) trigger like any other input. The workflow only sees the columns you mapped; the rest of the row is untouched, and inputs are read-only during the run.
70
70
71
71
### Output columns
72
72
73
73
**Output columns** receive the workflow's results. Each one binds a workflow output to a column name — in the panel above, the workflow's `employee count` output writes to the `employee_count_0` column and `description` writes to `description`. The workflow runs once per row; every output you selected is written to its column, and outputs you didn't select are discarded.
74
74
75
75
### Run after
76
76
77
-
**Run after** is the set of columns that must be filled before the group runs on a row. Company Info runs after `domain`: a row with an empty `domain` waits, and the moment Company Domain fills it, that row becomes eligible. Lead Score Enrichment runs after the info columns — six dependencies in the panel above.
77
+
**Run after** is the set of columns that must be filled before the group runs on a row. Company Info runs after `domain`: a row with an empty `domain` waits, and the moment Company Domain fills it, that row becomes eligible. Lead Score Enrichment runs after the info columns, the six dependencies in the panel above.
78
78
79
79
A dependency can be a typed column or another group's output column. That second case is what makes cascades work (below). At least one dependency is required when auto-run is on.
80
80
81
81
### Auto-run
82
82
83
-
**Auto-run** decides whether the group fires on its own. On, a group runs a row as soon as that row's Run-after columns are filled, no click needed — that's how 21 rows end up running at once in the example. Off, the group is manual: it runs only when you trigger it.
83
+
**Auto-run** decides whether the group fires on its own. With auto-run on, a group runs a row as soon as that row's Run-after columns are filled, no click needed; that's how 21 rows end up running at once in the example. With it off, the group is manual: it runs only when you trigger it.
84
84
85
85
You trigger a group by hand from its column header menu:
86
86
@@ -104,15 +104,15 @@ While a group works a row, its output cells show their state instead of a value:
104
104
|**Cancelled**| The run was stopped before it finished. |
105
105
|**Not found**| An enrichment finished but matched nothing for this row. |
106
106
107
-
When a value arrives, it replaces the badge, and cells that finish stay filled even while other columns on the row are still running. You can see this in the example table: most rows are fully scored while a few show **Not found** where an enrichment came up empty — and the lead scorer still ran on those rows, working with what it had.
107
+
When a value arrives, it replaces the badge, and cells that finish stay filled even while other columns on the row are still running. You can see this in the example table: most rows are fully scored, while a few show **Not found** where an enrichment came up empty. The lead scorer still ran on those rows, working with what it had.
108
108
109
109
<Callouttype="info">
110
110
On error, the row stays in the **Error** state. Auto-run skips errored rows, so a failure doesn't loop. To retry, fix the input and use **Run all rows**, which re-runs regardless of the auto-run setting. A row is only ever worked by one run at a time, so re-running doesn't race.
111
111
</Callout>
112
112
113
113
## Cascades
114
114
115
-
Because a group can run after another group's output column, you can chain groups across the table. The example is a three-stage **cascade**: Company Domain fills `domain` from the company name, Company Info runs after `domain` and fills the info columns, and Lead Score Enrichment runs after those and writes the score. Each row advances through the stages independently — the moment its own Run-after columns are filled, it becomes eligible for the next group, which is why some rows in the screenshot are fully scored while others are still mid-pipeline.
115
+
Because a group can run after another group's output column, you can chain groups across the table. The example is a three-stage **cascade**: Company Domain fills `domain` from the company name, Company Info runs after `domain` and fills the info columns, and Lead Score Enrichment runs after those and writes the score. Each row advances through the stages independently: the moment its own Run-after columns are filled, it becomes eligible for the next group. That's why some rows in the screenshot are fully scored while others are still mid-pipeline.
0 commit comments