Build the Fugu pattern in the open: fan out, assign roles, verify
Run the idea under Fugu, a panel of models with roles and a verifier or a tests-passing arbiter, with your own keys and every hop visible, so the black box is a choice and not a lock-in.
Run this workflow
CI-verified, 2/2 fixtures passing.
Build this with your agent
One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.
Intended Use
Anyone who wants orchestration they can inspect. CI validates the orchestration config against a local fixture: version is 1, the panel has at least two models, roles or an allowed arbiter strategy are set, and a verifier step exists. No keys, no inference. The multi-model run is fenced.
Not for
- Expecting it to beat a trained conductor on raw quality, it usually trails by a little; you trade that for transparency and predictable cost
- Quick single-shot prompts, fanning those out is pure overhead
The Stack
Tested Against
sakana.ai/fugu (the pattern, 2026-06)ruby@3.x (YAML stdlib)Side effects & data flow
- Network
- none, local only
- Writes
- ./orchestrate.yaml
- Credentials
- none required
Prerequisites
- An OpenAI-compatible router (e.g. OrcaRouter) + provider keys to actually run it
Steps
- 1
Author the orchestration config and validate it
Write orchestrate.yaml: a panel of models with roles (thinker/worker/verifier) and an arbiter strategy, plus a verifier step. CI parses it and asserts the panel, the roles or arbiter strategy, and a verifier are present. Running the panel needs keys and is fenced. See also the panel+judge and tests_pass recipes.
cat > orchestrate.yaml <<'YAML' version: 1 orchestrator: panel: - { model: "anthropic/claude-opus-4.8", role: thinker } - { model: "openai/gpt-5.5", role: worker } - { model: "google/gemini-3.1-pro", role: verifier } arbiter: strategy: tests_pass verify: required: true YAML ruby -ryaml -e ' c = YAML.load_file("orchestrate.yaml") abort "BAD: version must be 1" unless c["version"] == 1 o = c["orchestrator"] || {} panel = o["panel"] abort "BAD: panel needs at least 2 models" unless panel.is_a?(Array) && panel.length >= 2 roles = panel.map { |p| p["role"] }.compact allowed = ["best_of_n", "synthesize", "majority", "first", "tests_pass"] arb = o["arbiter"] || {} has_strategy = allowed.include?(arb["strategy"]) abort "BAD: set roles or an arbiter strategy" unless roles.include?("verifier") || has_strategy verify = o["verify"] || {} has_verifier = verify["required"] == true || roles.include?("verifier") abort "BAD: a verifier step must exist" unless has_verifier puts "config OK: orchestrator fans out to a " + panel.length.to_s + "-model panel, arbiter strategy " + arb["strategy"].to_s + ", verifier step present" ' - 2
Run it on your keys (the model step, not checked by CI)
Point the config at your router (OrcaRouter or similar) and run it with your provider keys. You see every hop: which model took which role, what the verifier rejected, and the real per-call cost. The multi-model run is fenced.
Eval, 2 fixtures
Last passed: verified todayorchestrate-okcontainstimeout 30s · max $0Expected:
config OK: orchestrator fans out to a 3-model panel, arbiter strategy tests_pass, verifier step presentclean-exitexit_codetimeout 30s · max $0Expected:
0
Results
Fugu's edge is a trained conductor, but the core pattern (thinker / worker / verifier, or a panel with an arbiter that keeps the answer your tests pass) is reproducible with open routers and your own keys. A DIY orchestrator usually trails a trained one on raw quality; in return you see which model did what and get a bill you can predict.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Related workflows
- Sakana Fugu: A/B it on your own task before you migrate
- Run GLM-5.2 fully local on a Mac Studio and drive it with Hermes
- Eve: make evals the deploy gate, not a vibe check
- Eve: gate the dangerous tool behind a human, in one field
- OrcaRouter: only fan out when it is worth it
- OrcaRouter for coding: judge by passing tests, not by vibes
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).