At a glance
- Three outlets
- Selected carries the row, or the answer you picked; Command carries the command you picked; Dismissed carries nothing
- Emits
- selected on Selected, selectedIndex only for a list row; command on Command
Set it up
Put it after any node that emits a list — a database query, Linear: Query Issues, Installed Apps — and name the columns you want on each row. Type to filter, arrow to move, return to pick.

Inputs
The node has no data source of its own. It reads the list from whatever payload key Rows names — records by default — which is why it has no query, no table picker and no file field. An upstream columns array sets the display order; with none, every column the rows carry is discovered. Rows of plain strings or numbers show under a single value column. An empty list still opens the chooser, so you can see the flow ran and found nothing.
Configure
| Field | Default | What it does |
|---|---|---|
| Rows | records | Which payload key holds the list. Its list button offers every upstream key that is a list. |
| Layout | List | List is one launcher row per record, a glyph plus two lines. Table is a sortable grid, for when the columns are what you are comparing. Grid is cells that stack sideways, for emoji, pictures and anything else you recognise by looking at it; the arrows move in all four directions. |
| Cell Size | Medium | Grid only. Small fits 10 cells to a row and draws the picture alone, with the highlighted cell's name in the footer. Medium fits 6 and Large fits 4, with lines under each picture. |
| Group by | — | Grid only. A column to group the cells by, with a header per distinct value in the order each first appears. A blank value goes under Other. |
| Primary Column | — | The big line. A column the rows do not carry falls back to the first text column. |
| Secondary Column | — | The dim second line. Blank gives single-line rows. |
| Thumbnail Column | — | List and Grid. A column of image paths draws each row's picture; a column of .app paths shows app icons, and is used automatically when this is unset. |
| Search Columns | — | Which columns the search box matches. Blank searches every text column. |
| Prompt | Search… | The search field's placeholder. There is no title bar, so this is the question — write it as one. |
| Math and Conversions | On | Typing math (2 + 2) or a unit conversion (5 km in miles) shows the answer as a pickable row above the matches. Turn it off to keep the list pure — for a flow whose next step needs a real record. |
| Recent Picks First | Off | Grid only. Leads with a row of what this node picked last, newest first. A row is remembered by its primary and secondary text, so a recent whose text now matches no row, or more than one, is left out. Remembered on this Mac, not in the flow. |
| Commands | — | Rows of your own pinned above the list. See Commands. |
| Offer shared flows | Off | Adds every flow you have exposed to AI agents as a Run a flow command, after the ones you listed. |
Rows and the four column fields take a name, not a {{variable}}, so no {{ completion appears in them.
Commands
A command is a row you pin above the records: a name, an icon, and what picking it does. Commands keep their place on top, in the order you list them, and the search filters them like any other row — a command that does not match hides until you clear the search. The first command is highlighted when the chooser opens.

| Kind | What picking it does |
|---|---|
| Wire out | Leaves by the Command outlet with the command's name. One outlet carries every command; a Router on {{command.name}} gives each its own branch. |
| Run a flow | Starts the flow you choose as its own run, as if you had pressed Run on it. Pick from List takes no outlet, so nothing wired to it runs. |
A Run a flow command is subtitled with its flow's name and wears that flow's icon unless you set one of its own. It still shows when the flow is turned off. If the flow is deleted, the command is not offered and the inspector marks it as needing setup. A command cannot run the flow it lives in.
Offer shared flows fills the list for you: every flow you have exposed to AI agents appears as a Run a flow command after the commands you listed, in name order, subtitled Flow. A flow you also listed by hand shows once.
A flow written by hand, or by the Flow Builder, saves commands as an array. A plain string is a Wire out command with that name; an object spells out the rest:
"commands": [
"Lock Screen",
{ "name": "Clipboard History", "icon": "doc.on.clipboard", "kind": "flow", "workflowID": "6F1C…" },
{ "name": "Empty Trash", "icon": "trash", "kind": "wire" }
]
A missing or unknown kind reads as wire. A flow command without a real workflowID is dropped rather than turned into a Wire out one, so a pick meant to start a flow never leaves by Command.
A command that gets its own branch in this flow is wire; flow is only for running another saved flow, and it carries that flow's workflowID. When the Flow Builder writes a flow command with no workflowID and wires the Command outlet into a Router with a case of that name, it saves the command as wire, because the case is the branch the command was meant for. When that branch runs a flow with more than one trigger through a Run Watchflow node, the case's name also chooses which trigger the call enters at; set it yourself under the node's Enter at.
Grid
Grid stacks cells sideways, for emoji, pictures and anything else that is quicker to spot than to read. All four arrows move through the cells. Hold ⌥ or ⌘ with ← or → to move the search field's caret instead.

Small draws the picture alone. Medium and Large add lines underneath, and a Thumbnail column supplies the picture.

Setting Layout to Grid brings up its own fields:

Output
Both keys exist on the Selected path only, merged over the incoming payload.
| Key | Type | Value |
|---|---|---|
selected | JSON | The whole row you picked, as real structure — every column, each cell still its own type. Navigate it with {{selected.email}} |
selectedIndex | Number | Zero-based position of that row in the list, whatever you filtered or sorted on screen |
When you pick an answer
An answer row also leaves by Selected, but it is not a row of the list, so selected holds the answer instead and selectedIndex is absent — test for it if the next step needs a real record.
| Key | Type | Value |
|---|---|---|
selected.value | Number | The result as a real number, so a condition can compare it — 4 for 2 + 2. A whole number keeps every digit; a fraction is rounded to 12 significant digits, so a condition comparing it to the number on the row holds — 0 c to f gives exactly 32. The row itself shows four decimals: 5 km in miles is 3.1069 on the row and 3.10685596119 here |
selected.display | Text | The line the row showed: 2 + 2 = 4, 5 km = 3.1069 mi |
selected.input | Text | What you typed, trimmed |
selected.unit | Text | The target unit's symbol (mi, °C). Conversions only; math has none |
When you pick a command
A Wire out command leaves by Command, merged over the incoming payload. It is not a choice from the list, so selected and selectedIndex are absent — even ones an earlier Pick from List set. Selected still means a record, and Dismissed is unchanged.
| Key | Type | Value |
|---|---|---|
command.name | Text | The command's name, as listed. Route on it with {{command.name}} |
command.index | Number | Zero-based place of the command in the Commands list |
Example: pick an app, copy its path
A hotkey lists the apps on this Mac, the chooser shows them with their real icons, and the one you pick puts its path on the clipboard.

Paste this into the Flow Builder to get the same flow:
On a keyboard shortcut, list my installed apps, let me pick one from a searchable list, and copy its path to the clipboard.
Good to know
Search forgives gaps. The letters you type only have to appear in order, so findm finds Find My. The closest match comes first: letters typed as one run beat letters scattered through a name, and a match at the start of a word ranks higher. A Table you have sorted by a column keeps that order and only filters.
A date or a phone number in the search box can read as math. 2024-10 is a subtraction, so filtering a list by date shows 2024-10 = 2,014 above the matches. The rows keep the highlight whenever any of them match, so ⏎ still picks the row it always did; the answer is picked only when you move up onto it, click it, or nothing else matches. For a list you never want an answer in, turn Math and Conversions off.
Walking away is not a failure. Escape, or a click outside, leaves by Dismissed and the run finishes as completed. Whichever outlet is not taken is skipped in full — which is the point: a Move to Trash behind Selected can never fire on a row nobody picked. A disabled node continues via Dismissed for the same reason.
Nobody home fails the node after fifteen minutes. An unattended chooser gives up rather than holding the run open, and that failure does not take the Dismissed wire either.
Rows serialised into a string are refused before anything opens — parsing them would let you choose between characters. Fix the node above it to emit a real array.
One chooser at a time. A second summon replaces the open one, and the open one fails: nobody answered it, so neither outlet would be honest.
Two choosers in a row share one panel. When a pick leads straight to another Pick from List, the next list swaps into the panel already on screen instead of a new one opening.