OpenFlow

OpenFlow: a visual builder for running multi-agent workflows in parallel

OpenFlow is a visual builder for multi-agent workflows. Role cards are wired on a canvas into a pipeline, swarm or orchestration and run as parallel agents over a project folder, one omp process per card.

The problem

Parallel agent sessions each cost money against a model provider and can be rate limited, and a run can continue long after its author stops watching. OpenFlow's design answers this with explicit wiring, caps on rounds, depth and dispatches, and a coach strip that reports how far to trust a run when it has findings to state.

01 / 07

The problem

OpenFlow is designed for multi-agent work in which role agents pass output to each other, such as a planner that feeds an architect, which feeds a coder (packages/flow/README.md, intro). Each concurrent card is another live session against a model provider, and the README warns that a wide layer run flat out is how a graph earns 429s and a bill nobody sized (packages/flow/README.md, Engine). The design notes say the modes are meant to be left alone, so a run must report how it ended (FLOW.md, Architecture, settled).

02 / 07

How it works

Cards are role cards dragged onto a canvas, wired, saved and run. Each card has a role, instructions and a model (packages/flow/README.md, intro; FLOW.md, Architecture, settled). A canvas runs in one mode, pipeline, swarm or orchestration, and a gauntlet is a toggle on orchestration rather than a fourth mode (packages/flow/README.md, Modes; FLOW.md, Architecture, settled).

Each card session is one omp --mode rpc-ui process that the canvas host starts, in its own process group and the card's working directory, driven over omp's RPC protocol (packages/flow/README.md, Omp engine and requirements; How the host drives Omp). OpenFlow has no agent loop of its own. Prompt Uplift, shared memory and Agent Swarm are added around each card (packages/flow/README.md, intro). Nodes are grouped into topological layers. The nodes in a layer run concurrently, each in its own process, and the whole layer is awaited before the next starts. Each prompt opens with a briefing that maps every card, its layer and its wiring (packages/flow/README.md, Engine; The pipeline briefing).

03 / 07

Operational flow

  1. Start. bun openflow.ts checks which omp it finds and prints omp <version>, or a warning with the fix. It starts either way, and Omp settings explain any problem. OPENFLOW_PROJECT names the repo the agents read and write (packages/flow/README.md, Run it).
  2. Save. A canvas is saved as .openflow/pipelines/<name>.json. Saving under a name another pipeline holds is refused (packages/flow/README.md, Files it writes).
  3. Validate. The engine checks that the graph is a DAG, that nodes are reachable and that each model resolves against the omp catalog. In orchestration, preflight prints the session count before anything is spent (packages/flow/README.md, Engine; Orchestration).
  4. Run and record. Each card's task is uplifted if Prompt Uplift applies, memory is read, and the prompt is assembled from briefing, role instructions, task, upstream output and any memory block. The host maps omp's frames onto events that drive the node badges. Each node's final text is written to .openflow/runs/<id>.json, checkpointed during the run, and each finished card writes one fact to shared memory (packages/flow/README.md, Engine; Shared memory with Agent Substrate).
  5. On failure. A node error stops its downstream branch, which is marked skipped. Siblings finish and the run ends error. A node past its timeout, 30 minutes by default, is given up on. If prompt uplift fails, a dialog offers three choices: run the original prompt, retry uplift, or cancel the card (packages/flow/README.md, Engine; Prompt Uplift).
  6. On stop or exit. Stop interrupts in-flight sessions and dispatches nothing further. The host closes every omp process when the canvas exits normally, such as on Ctrl+C (packages/flow/README.md, Engine; Stop anything already running).
  7. On interruption. The page offers Resume for a run abandoned more than five minutes ago. Finished cards keep their answers and do not run again (packages/flow/README.md, Resuming an interrupted run; How the host drives Omp).

04 / 07

Modes

Pipeline is the default. Nodes run in dependency order. Pipe mode sets what a node receives: ancestors gives every upstream output, and direct gives only the cards wired straight into it (packages/flow/README.md, Engine).

Swarm treats every non-synthesizer card as a peer, and the edges between cards are never read. Round 1 gives every agent the run task. Each later round re-prompts every agent with its peers' answers from the previous round. One synthesizer card reads the final round and writes the verdict. Rounds default to 3 and are capped at 6. A swarm costs agents × rounds + 1 sessions, so four agents at six rounds is 25 sessions (packages/flow/README.md, Modes, Swarm).

Orchestration is a tree with one root, the card nothing points at, and every other card owed to exactly one parent. The orchestrator uses openflow_dispatch and openflow_finish tool calls, with a fenced block as the fallback (packages/flow/README.md, Modes, Orchestration). Depth defaults to 2 (capped at 4), and dispatches per orchestrator default to 3 (capped at 6). An orchestration costs 1 + Σ(children × dispatches) sessions per level (packages/flow/README.md, Modes, Orchestration).

Gauntlet is orchestration that stops on a written bar instead of a count. Builders work, and critics, which are cards with the reviewer role, judge the result against the bar. A critic gets a new session for every verdict. A final answer that no critic has judged is refused once, and a second one fails the run (packages/flow/README.md, Modes, Gauntlet). Three bounds are live at once, and the first to fire wins: spend (default $5, at most $500), wall clock (default 60 minutes, at most 12 hours), and stall, meaning the same batch dispatched three rounds running. A model the catalog cannot price blocks the run (packages/flow/README.md, Modes, Gauntlet).

05 / 07

Integration points

  • Omp. Cards, the model catalog and the terminal run under the omp profile openflow, with their own logins, config and sessions. Cards do not load your omp extensions unless you opt in. Every *_API_KEY variable in OpenFlow's environment reaches every card. At most 32 omp card sessions run at once (packages/flow/README.md, Omp engine and requirements; How the host drives Omp).
  • Agent Substrate shared memory. Before a card is sent, the host reads the project's memory scope, up to Most memories per card (8 by default). Reads time out after 3 seconds and fail open. Share memory across the cards of a run turns the feature off. The token goes only to https:// URLs, loopback hosts, or the exact SUBSTRATE_URL address (packages/flow/README.md, Shared memory with Agent Substrate; Omp settings).
  • Prompt Uplift. A claude-ultrathink planner, run through the Claude CLI, decides whether a task needs a spec. A clear task is sent as written, and a vague one is rewritten into a spec. The planner times out after 240 seconds by default (packages/flow/README.md, Prompt Uplift).
  • Agent Swarm. agent-swarm's omp extension loads into a card's own session in mode off, auto (the default) or always. A card whose swarm is on receives the signing key by value if it is set as SWARM_ED25519_KEY or SWARM_SIGNING_KEY (packages/flow/README.md, Agent Swarm in cards).
  • Terminal dock. Ctrl+opens a dock that runs in the project folder, with anompkind under the OpenFlow profile or ashell` kind. The README describes the terminal as code execution as you, and gates it with a request header, an origin check and a one-shot WebSocket ticket (packages/flow/README.md, Terminal).

06 / 07

Requirements

  • Bun 1.3 or newer, and Git (packages/flow/README.md, Install).
  • omp 18.12.2 or newer on PATH, or the absolute path set as Binary in Omp settings. Install it with bun add -g @oh-my-pi/pi-coding-agent (packages/flow/README.md, Omp engine and requirements).
  • A login in the OpenFlow profile. A fresh install has none (packages/flow/README.md, First run).
  • Optional, per feature: the claude CLI and a claude-ultrathink checkout for Prompt Uplift; Agent Substrate and its token for shared memory; an agent-swarm checkout with python3, cryptography and a signing key for Agent Swarm. A card still runs without any of them (packages/flow/README.md, Omp engine and requirements).

07 / 07

Scope and status

  • OpenFlow is an app run from its repository. It is not published to npm (packages/flow/README.md, intro).
  • It is a fork of an upstream agent codebase whose engine it no longer runs. Its cards run on Omp (packages/flow/README.md, intro; Omp engine and requirements).
  • The plans in packages/flow/docs/ describe the earlier engine and are kept as history. The package README and FLOW.md describe how it works now (packages/flow/README.md, intro).

Questions

Frequently asked questions

01

Which engine runs the agents?

Each card runs as one omp session, which the canvas host starts as one `omp --mode rpc-ui` process. OpenFlow is a fork of an upstream agent codebase, but its README says it no longer runs that engine.

02

What omp version does OpenFlow need?

omp 18.12.2 or newer, set as MIN_OMP_VERSION in packages/flow/shared/omp.ts. The launcher prints a warning when omp is missing or too old, but it still starts so Omp settings can say what is wrong.

03

Do cards share what they learn?

Only through Agent Substrate, and only when it is configured. The host reads project memory before a card is sent and writes one fact when the card finishes. A card still runs without memory, and it shows whether memory is off or unavailable.

Sources

Sources

  • OpenFlow package README swcstudiospace/autonogrammer-ai, packages/flow/README.md
  • OpenFlow working rules (FLOW.md) swcstudiospace/autonogrammer-ai, FLOW.md
  • Omp engine constants (MIN_OMP_VERSION) swcstudiospace/autonogrammer-ai, packages/flow/shared/omp.ts