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
once you ran /multi:setup, two files will be created: ~/.claude/multi/config.toml - who reviews, which models, in what order, and what runs by default and ~/.claude/multi/providers.env - api keys for you providers if you have any
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.
TBA.