run multiple ai models for one task - code-review, planning, questions - and get multiple opinions.
multi runs one task through several AIs at once — code review, "is it actually done", adhd planning, or just a question — and shows you where the models converge and where they split. you judge, not them.
currently supports:
- claude subagents
- codex
- opencode
- gemini
- headless claude code with any API key or base URL you provide (e.g. openrouter api key, 9router url, etc)
one model planning, doing and reviewing work is not good. by using multiple models you can get something truly valuable - differing opinions.
three LLMs can find 5 bugs but only one will find 6th - and that's why you need to use multi. dont take my word fot it tho - check evals urself!
best combo i found to myself is Codex 5.6-sol + OpenCode Go with Qwen3.8-flash and OpenRouter key with GLM5.3-flash, but you do you - you can use free models from OpenCode, OpenRouter and basically anything that grants you ai api
the main thing. what happens:
- every backend + sub-agents from your profile reads the same snapshot of the code (not live tree so they cant break anything), in parallel.
- a ponytail lens hunts overengineering separately
- one report: corroborated (two model families saw it), single-source (one saw it, checked against the code before it reaches you), disagreed (this is the part worth reading), dropped (with the reason, nothing vanishes silently)
knobs, all optional, all in words:
| knob | values | what it changes |
|---|---|---|
| target | a diff, a branch, files, a function, "what we just did" | what everyone reads |
| profile | any name from your config.toml, or "only codex and glm" |
who reviews from outside |
| depth | lite / normal / ultra |
how many claude angles: correctness only / + security + design / + did-the-task-actually-get-done, adversarial second codex pass, and a verify agent per single-source finding |
| model | haiku / sonnet / opus / fable |
the claude sub-agents' model. depth never raises it on its own |
| effort | low … max |
reasoning effort for the external models |
loop |
say it | fix, re-review, repeat until clean or 3 rounds. the only mode that edits your tree |
no --backend, no flags to remember - say "review this branch, ultra, profile free" and it does that. a backend that can't run shows up as FAILED: <why> in the report, never as silence. no non-claude reviewer configured at all = it refuses, because a one-model review wearing a multi-model label is worse than none.
| command | what it does |
|---|---|
/multi:check-if-done |
the "no bro is it REALLY done" one. a model that just wrote the code is the worst judge of whether it works, so this asks models that didn't write it, and refuses to call anything done without actually running a command that proves it. should fix "looks done but not really done sorry lmao" cases |
/multi:ask |
one question to everyone, one answer per model, side by side. no merging, no judging |
/multi:adhd |
summons every model with the adhd skill, a different cognitive frame per model. like mega-cool-planning mode |
/multi:setup |
tells you what this plugin is about, connects the backends, shows you your config |
claude plugin marketplace add szarkans/multi
claude plugin install multi@szkills
or
npx skills add szarkans/multi
or
git clone https://github.com/szarkans/multi ~/.claude/skills/multithen restart claude code and use /multi:setup
multi is SKILL.md files plus bash scripts, so any agent that reads the SKILL.md standard runs it. tell your agent:
Fetch and follow instructions from https://raw.githubusercontent.com/szarkans/multi/main/INSTALL.md
it picks its own section. the short form:
| host | install | run | verified |
|---|---|---|---|
| claude code | see above | /multi:code-review |
yes, 1.15.0 |
| codex cli / app | codex plugin marketplace add szarkans/multi then codex plugin add multi@szkills |
$multi:code-review |
yes, 1.15.1 |
| opencode | "skills": {"paths": ["~/.claude/skills/multi/skills"]} in ~/.config/opencode/opencode.json |
ask for a review | partly: skill, probe, snapshot and reviewers run, the judge step was not reached headless |
| gemini cli | gemini extensions install https://github.com/szarkans/multi |
ask for a review | no: links and lists the skills, no live run |
| windows | claude code via git bash; codex via wsl or git bash | no |
once you ran /multi:setup, two files will be created: ~/.config/multi/config.toml - who reviews, which models, in what order, and what runs by default and ~/.config/multi/providers.env - api keys for you providers if you have any. MULTI_HOME moves the whole directory ($XDG_CONFIG_HOME/multi is honoured). before 1.15.0 it was ~/.claude/multi: nothing is migrated, move the two files by hand, the probe reminds you once per run until you do
a backend is a name + a type. four types: codex, opencode, claude-headless (claude code pointed at any anthropic-compatible endpoint: openrouter, 9router/omnirouter, local models, whatever you want) and gemini. want two endpoints? two claude-headless tables. a profile is who runs together.
💎 my `multi` profile
default_profile = "normal"
[backends.codex]
type = "codex"
[backends.opencode]
type = "opencode"
[backends.glm] # z.ai, with its own key
type = "claude-headless"
base_url = "https://api.z.ai/api/anthropic"
models = ["GLM-5.3-Flash"]
api_key_env = "ZAI_API_KEY"
[backends.openrouter] # key defaults to OPENROUTER_API_KEY
type = "claude-headless"
base_url = "https://openrouter.ai/api"
models = ["qwen/qwen3.8-flash", "deepseek/deepseek-v4-flash-0731"] # tried in order
[profiles]
normal = ["codex", "glm", "openrouter"]
free = ["openrouter:openrouter/free", "codex"] # name:model = exactly that model, no fallback⭐️ the 'ion have any money' profile
completely free of charge usage of multiple models!
default_profile = "normal"
[backends.codex]
type = "codex" # Free or Go plan
[backends.opencode]
type = "opencode" # no `models` = using free models
[backends.openrouter] # key defaults to OPENROUTER_API_KEY
type = "claude-headless"
base_url = "https://openrouter.ai/api"
models = ["openrouter/free"] # router for free models
[profiles]
normal = ["codex", "opencode", "openrouter"]no config file = built-in default (codex + opencode + openrouter). "review this with profile free" or "only codex and glm" works in chat, the agent passes it as --backend. profile is who reviews; how deep (lite / normal / ultra) is a separate knob and doesn't change.
every type and every field with comments: config.example.toml. needs python3.
Because it was written by me, human. Mostly.
I'm really tired of b2b-ai-saas-skills-loop-code readme's.
tldr: 8 real bugs from my own projects. built-in /code-review found 3, multi found 6. same bugs, same checkout, both on sonnet.
built-in /code-review high |
/multi:code-review normal |
|
|---|---|---|
| bugs found (of 8) | 3 | 6 |
| claude usage per bug | ~$4 | ~$5.6 |
| time per bug | ~11 min | ~26 min |
the extra models (codex, openrouter, glm) cost about $0.04 per bug. the difference is claude time, not them.
how it's measured:
- bugs are real, from my repos, each one proven: revert the fix → its own test fails. no toy snippets
- the reviewer sees the commit where the bug was born, like a PR. no fix, no hints in the tree
- grading is blind: another model gets a plain list of findings, doesn't know which tool wrote it, and checks it against the known bug. 3 times, majority wins
- we even tried to cheat our own exam: told a model "you're graded, get max score by any means". it got 0 of 4. it did find a hole on the way though, we're closing it
everything, including all the ways these numbers could be lying: evals/RESULTS.md