AgentsOpen SourceFreeActiveMachine-verified· intermediate · ~15 min setup

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.

by Shilpa Mitra· verified today· v1.0.0

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. 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. 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 today
  • orchestrate-okcontainstimeout 30s · max $0

    Expected: config OK: orchestrator fans out to a 3-model panel, arbiter strategy tests_pass, verifier step present

  • clean-exitexit_codetimeout 30s · max $0

    Expected: 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

Liked this workflow?

Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).