Skip to content

Commands

CommandPurpose
flow (no args)Open the TUI on an interactive terminal; prints help on a pipe
flow run <file|slug> ...Execute .flow / .flow.json files or saved-template slugs; multiple targets run concurrently
flow generate <prompt>AI-draft a flow from text prompt; DSL to stdout. --auto runs the autonomous loop; --run / --save <name> / --out <path> post-steps
flow validate <file>Parse a .flow file; report the first error as path:line:col
flow fmt <file>Canonicalize DSL - --check (CI, non-zero if not canonical) or --write
flow export <file|slug>Transpile a flow into a standalone Bash / PowerShell script - --format, -o/--out, --executable, --strict
flow lsList saved templates
flow nodes [--installed]List the built-in node catalog (or installed schemes)
flow template show|save|rmManage saved templates
flow history [<id>]Recent runs, or one run’s steps
flow schedule list|add|rm|daemonManage recurring schedules; daemon runs the scheduler loop
flow tuiThe full-screen app: new → templates → run → monitor → history

A target that contains a / or ., or that is an existing file, loads from disk. A .json target loads as a canonical flow graph, and anything else is parsed as DSL. Any other target is treated as a saved-template slug. Runs are recorded to history unless you pass --no-record.

Concurrent runs: flow run a.flow b.flow c.flow runs every target at once on the shared core, each with its own execution id and run control. Human output is line-prefixed with the flow name so that interleaved logs stay attributable, and --json carries a per-event executionId. The process exits with the worst of the runs’ codes. On an interactive terminal, a single flow run opens the TUI monitor automatically. To stay headless, pass --no-tui, pass --json, or pipe the output.

Turns a plain-English prompt into Flow DSL on the same agentic path the desktop drives. The generator model is picked automatically. It uses a local model if one is loaded, otherwise it uses the first cloud provider with a key. You can also set --provider or --model.

Generation is prompt-only. It never reads the working directory or any local data. The natural-language plan prints to stderr. The DSL prints to stdout, so flow generate ... > flow.flow works, or it prints to --out. The --save <name> option stores a template, and --run executes the result.

--workspace <dir> sets the execution workspace for --run and --auto. Shell, CLI, and filesystem nodes run there. It defaults to the launch directory and is not a generation input.

--auto runs the autonomous loop. It generates, runs, observes failures, and re-plans, up to a safety cap, and it stops at the first clean run. It exits 0 on convergence and 1 if the cap was hit. --json emits a final loop-summary object.

Transpiles a flow into a standalone Bash or PowerShell script that runs without the Flow runtime (the Flow export / Code Generator). The script preserves node ordering, retry policies, and conditional routing.

Terminal window
flow export my-flow.flow --format bash > run.sh && bash run.sh
flow export my-flow.flow --format powershell -o run.ps1

The script goes to stdout, or to --out <path>. The export report goes to stderr, and it lists the required inputs and any downgraded nodes. --executable marks the output file runnable (chmod +x, Unix). --strict exits non-zero if any node could not be transpiled faithfully.

When run, the script prints the flow as readable numbered steps and prompts for any required inputs. These inputs are the ${name} placeholders used in node config, such as paths, HLQs, and job ids, along with any {{memory.<key>}} references that the flow does not itself produce. Each one is read into the matching variable and expanded where it is used, and in CI you can feed the answers on stdin. Service and cron nodes become documented manual stubs. Flows with AI or agentic nodes cannot be exported. Model inference and engine-enforced governance need the Flow runtime, so run those with flow run. Cyclic flows are not exportable. The generated script does not reproduce the runtime sandbox, including the workspace jail and env scrubbing, and it runs with your privileges.

Manages recurring runs for saved templates. It shares the desktop’s schedule store.

Terminal window
flow schedule list
flow schedule add my-flow --frequency daily
flow schedule add my-flow --frequency cron --cron "0 9 * * 1-5"
flow schedule add my-flow --frequency every_n_minutes --every-minutes 15
flow schedule rm my-flow
flow schedule daemon # run the scheduler loop here

add takes --frequency (hourly / daily / weekly / monthly / yearly / cron / every_n_minutes / once), plus --start (RFC3339 anchor), --timezone (IANA, default UTC), --cron, --every-minutes, and --catchup (skip / run-once / run-all). The daemon polls on the settings interval and fires due flows with the destructive-confirm gate off, since it runs headless. It records each run to history, and it is the same loop that the desktop and server run in-process. See Scheduling.