flows command group is the primary handle on the Flow lifecycle. Most day-to-day CLI work runs through it. Pin an active Flow with nora flows use <slug> and every subsequent command defaults to that Flow.
Commands
flows list
--json for machine output — one line per Flow.
flows get
- Backup a Flow before a risky change:
nora flows get support > support-backup.json. - Inspect a specific block:
nora flows get support | jq '.blocks[] | select(.id=="ag_1")'. - Compare two workspaces:
diff <(nora --workspace ws1 flows get x) <(nora --workspace ws2 flows get x).
flows snapshot
- Git-tracking your Flows outside of Nora.
- Bulk edits with
jqoryq. - Templates: snapshot one Flow, tweak the JSON, apply as a new Flow.
flows apply
<slug> doesn’t exist, it’s created. On update, the JSON becomes the new Draft — publish separately.
Optional --name "..." sets the display name on creation.
Typical config-as-code workflow:
flows delete
--yes is passed. --yes is for scripts — think before you type it interactively.
flows use and flows current
agents create, tools list, flows publish, etc.) uses the pinned slug.
Switch workspaces? The pin follows you — each workspace remembers its own pinned Flow.
Override for one command without changing the pin:
Publish
--summary <text>— release note (highly recommended; shown in the versions list and audit trail).--author-label <text>— displayed on the version card. Defaults to your account name.
Rollback
Restore Draft from a version
Version metadata
--json for structured output.
Working across workspaces
Many commands accept--workspace per-invocation so scripts can operate on multiple workspaces without switching:
Empty canvases and re-publishing an identical Flow are rejected server-side. This is the same guardrail as the Publish button in the app.