Rebuild Fable 5's deep-research fan-out on your own keys (OrcaRouter)
Fan a research prompt out to a panel of models you choose, then fuse or judge the answers with an arbiter, in a routing DSL you version and control.
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 rebuilding a multi-model deep-research panel after losing a single model. CI runs OrcaRouter's DSL lint: routing.yaml parses, version is 1, the deep_research rule carries a parallel panel and an arbiter whose strategy is one of OrcaRouter's allowed values (best_of_n, synthesize, majority, first, tests_pass), and a default exists. No keys, no model calls. The actual deliberation is fenced.
Not for
- Treating a panel as equal to Fable 5, on research it lands close, not equal; and it is not free, every parallel leg bills as its own call
- Coding, where a synthesizer is the wrong judge (see the tests_pass recipe instead)
The Stack
Tested Against
docs.orcarouter.ai/routing/routing-dsl (2026-06)ruby@3.x (YAML stdlib)Side effects & data flow
- Network
- none, local only
- Writes
- ./routing.yaml
- Credentials
- none required
Prerequisites
- An OrcaRouter account (hosted DSL, BYOK)
- Provider API keys to actually run the panel
Steps
- 1
Author the fan-out routing rule and lint it
Pick the panel, pick the arbiter (synthesize to fuse, best_of_n to return the single best verbatim). Write routing.yaml with a deep_research rule that fans out to a parallel panel and resolves it with an arbiter. CI runs the DSL lint and checks the panel, a valid arbiter strategy, version 1, and a default; the panel and judge only run with your keys, so that step is fenced.
cat > routing.yaml <<'YAML' version: 1 rules: - id: deep_research when: task_class == "rag" || reasoning_cue_count > 2 use: parallel: - { model: "anthropic/claude-opus-4.8" } - { model: "openai/gpt-4o" } - { model: "google/gemini-3.1-pro-preview" } arbiter: strategy: synthesize model: "anthropic/claude-opus-4.8" template: best_answer_v1 max_latency_ms: 120000 default: delegate: balanced YAML ruby -ryaml -e ' c = YAML.safe_load(File.read("routing.yaml")) abort "BAD: version must be 1" unless c["version"] == 1 abort "BAD: no default" unless c["default"] rule = (c["rules"] || []).find { |r| r["id"] == "deep_research" } abort "BAD: no deep_research rule" unless rule use = rule["use"] || {} panel = use["parallel"] abort "BAD: deep_research has no parallel panel" unless panel.is_a?(Array) && panel.length >= 2 allowed = ["best_of_n", "synthesize", "majority", "first", "tests_pass"] arb = use["arbiter"] || {} abort "BAD: arbiter strategy not allowed" unless allowed.include?(arb["strategy"]) puts "config OK: deep_research fans out to a " + panel.length.to_s + "-model panel with arbiter strategy " + arb["strategy"] + ", version 1, default present" ' - 2
Run it on your keys (the model step, not checked by CI)
Point your OpenAI-compatible client at OrcaRouter; the deep_research rule fans out and the arbiter fuses or picks. Every leg bills at provider cost, so use it where being wrong is expensive. The deliberation is fenced.
Eval, 2 fixtures
Last passed: verified todayfanout-okcontainstimeout 30s · max $0Expected:
config OK: deep_research fans out to a 3-model panel with arbiter strategy synthesize, version 1, default presentclean-exitexit_codetimeout 30s · max $0Expected:
0
Results
The legitimate replacement for a hosted fusion plugin's research mode: a panel you pick plus an arbiter, billed at provider cost, versioned in your repo. OrcaRouter's own benchmark put a panel within ~1% of Fable 5 on research at roughly half the cost, self-reported and research-only.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Related workflows
- QM: prove the destructive-action denials hold in every security posture, even the loosest
- One shared memory for every coding agent: prove the configs actually point at the same server
- Validate a WrenAI semantic model's references before an agent queries through it
- Wire the DeepWiki MCP into your agent so it looks up repos instead of hallucinating
- Verify an agent-skills plugin before you ship or install it
- WebMCP: declare a site's agent tools, and gate the ones that spend money
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).