TL;DR: After months exploring multi-agent orchestration with OpenClaw and Lobster, I hit a wall: no existing tool offered simple declarative spec + runtime-agnostic execution + first-class control flow. So I designed duckflux — a minimal YAML-based workflow DSL with loops, conditionals, parallelism, and events built in. The spec is done (v0.2), a Go CLI runner is working, and the next step is integrating it as the orchestration engine inside OpenClaw.
This article is the third in a series about building deterministic multi-agent development pipelines. If you're joining now, here's the short version.
In the first article, I documented two months of trial and error trying to build a code → review → test pipeline with autonomous AI agents. The core thesis: LLMs are unreliable routers — they forget steps, miscount iterations, skip transitions. Orchestration must be deterministic and implemented in code, not delegated to inference. After five failed attempts (Ralph Orchestrator, OpenClaw sub-agents, a custom event bus, skill-driven self-orchestration, and plugin hooks), I found Lobster — OpenClaw's built-in workflow engine. It was close, but lacked native loop support. I contributed a pull request adding sub-workflow steps with loops.
In the second article, I zoomed out. The problem wasn't just orchestration — it was multi-agents × multi-projects × multi-providers × multi-channels. I compiled a dataset of agent configuration formats across providers, proposed the Monoswarm pattern (a monorepo layout for managing agent swarms), and identified the still-missing piece: an orchestration layer that ties agent events to workflow transitions across projects.
Both articles ended with the same conclusion: we need a proper workflow DSL.
Lobster was the closest thing to what I needed, but it was designed for linear pipelines with approval gates. My pull request added loops, but the deeper issues remained:
if/then/else).I looked at the broader landscape:
| Tool | Where it falls short |
|---|---|
| Argo Workflows | Turing-complete YAML disguised as config. A conditional loop requires template recursion, manual iteration counters, and string-interpolated type casting. |
| GitHub Actions | No conditional loops. Workarounds require unrolling or recursive reusable workflows. |
| Temporal / Inngest | Code-first — Go/TS/Python SDKs. The code IS the spec. No declarative layer. |
| Airflow / Prefect | DAGs are acyclic by definition — conditional loops are architecturally impossible. |
| n8n / Make | Visual-first, JSON-heavy specs. Loop constructs require JavaScript function nodes. Specs are unreadable as text. |
| Lobster | Linear pipelines with approval gates. No native loops, no parallelism, no conditionals. |
The gap was clear: no existing tool combines a simple declarative spec + runtime-agnostic execution + first-class control flow (loops, conditionals, parallelism) + events.