multi
Run one task through several AI models at once and see where they agree and disagree, so you decide.
- Source repo
- szarkans/multi
- Stars
- ★ 23
- Last updated
- 11d ago
- License
- MIT
- Primary language
- Shell
- FA score
- 41/100 · Major gaps
At a glance
- Works with
- Universal · cross-platformCodex · Claude Code · Claude APIChatGPT · OpenAI API (Partial support)
- You'll need
- Typical use
- A developer wants a broader bug sweep on a branch or diff before opening a PR and is willing to trade time for more found defects.
- Main limitation
- Requires several external CLIs and API keys; any missing backend surfaces as
FAILEDand the configuration surface is wider than a single-model tool. - Source review
- 41/100 · Major gaps 1 safety controls not found
What does this agent do, and when should you use it?
multi is a plugin for coding agents (installable in Claude Code and the Codex CLI) that fans a single code review, done-check or question out to multiple models in parallel. Backends are declared in config.toml and grouped into profiles; supported backend types are codex, opencode, kilo, gemini and claude-headless, the last of which can point at any Anthropic-compatible endpoint such as OpenRouter, z.ai or 9router/OmniRouter. Every backend and Claude sub-agent reads the same code snapshot rather than the live tree, and the merged report sorts findings into corroborated (two model families saw it), single-source (one saw it, checked against the code first), disagreed and dropped (with a reason). Optional knobs include depth (lite/normal/ultra) and model (haiku/sonnet/opus/fable); loop is the only mode that edits your working tree. Companion commands include /multi:check-if-done, /multi:ask, /multi:skill and /multi:adhd, and each run labels whether a model may train on the prompt.
On invocation the plugin resolves the active profile, launches each configured backend through its own CLI or API (codex, opencode, kilo, gemini, or claude-headless against a custom base_url), and has them read an identical prepared snapshot of the code. During review a ponytail lens separately hunts overengineering. Findings are reported as corroborated, single-source (verified against the code before reaching the user), disagreed, or dropped with a reason; a backend that cannot start appears as FAILED: <why> rather than silence. The depth knob controls how many Claude angles run (correctness only, + security and design, + did-the-task-really-get-done with an adversarial second codex pass and a verify agent per single-source finding). Training policy is recorded by appending yes|no|unknown <model> to <answer>.trains from each runner, and the report counts the worst line; no_train = true, --no-train, or per-backend trains = false/true override the rules. Other commands are /multi:check-if-done (refuses to call anything done without a proving command), /multi:ask (one answer per model, side by side, no merging), /multi:skill (run a skill on every model) and /multi:adhd (a different cognitive frame per model for planning).
- A developer wants a broader bug sweep on a branch or diff before opening a PR and is willing to trade time for more found defects.
- A team wants an independent judgment on whether a task is really finished, from models that did not write the code, backed by an executed proof command.
- A budget-constrained solo developer builds a zero-cost reviewer from free Codex, free OpenCode models and OpenRouter
:freemodels. - Someone already has z.ai, Qwen, DeepSeek or a 9router/OmniRouter endpoint and wants those models folded into the same review.
- A compliance-sensitive user needs per-model training labels and wants to exclude any model that may train on prompts.
- A user wants side-by-side answers from several models to one question or one skill, with no merging into a single verdict.
How do you install or deploy this agent?
Install into Claude Code:
claude plugin marketplace add szarkans/multi
claude plugin install multi@szkillsInstall into the Codex CLI:
codex plugin marketplace add szarkans/multi
codex plugin add multi@szkillsFor other hosts, have your agent fetch and follow the install instructions:
Fetch and follow instructions from https://raw.githubusercontent.com/szarkans/multi/main/INSTALL.mdThe runtime requires python3 plus the CLI for each backend you configure (codex, opencode, kilo, gemini).
How do you use this agent?
Run /multi:setup (or $multi:setup, depending on how your harness registers commands) once; it creates ~/.config/multi/config.toml and ~/.config/multi/providers.env. A minimal configuration looks like this:
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 = ["qwen/qwen3.8-27b:free", "nvidia/nemotron-3-ultra-550b-a55b:free"]
[profiles]
normal = ["codex", "opencode", "openrouter"]Then just ask in chat, e.g. "review this branch, ultra, profile free" or "only codex and glm"; the agent passes it through as --backend. You can also call /multi:check-if-done, /multi:ask, /multi:skill and /multi:adhd. To skip models that may train on prompts for every run, put no_train = true at the top of config.toml; for a single run pass --no-train. Every type and field is documented in config.example.toml.
What are this agent's strengths and limitations?
- Pluggable backends: codex, opencode, kilo, gemini and any Anthropic-compatible endpoint (OpenRouter, z.ai, 9router) can be mixed in one profile.
- Findings are explicitly categorized as corroborated, single-source, disagreed or dropped, and dropped items keep their reason.
- Benchmarked against Claude Code's built-in
/code-review high: 29 real bugs found versus 14, 16 unique versus 1, at roughly comparable Claude cost (~$3.5 vs ~$3.4). - Refuses to run when no non-Claude reviewer is configured, avoiding a one-model review wearing a multi-model label.
- Training policy is probed and labelled per model, with
--no-trainand per-backendtrainsoverrides.
- Requires several external CLIs and API keys; any missing backend surfaces as
FAILEDand the configuration surface is wider than a single-model tool. - Slower: about 19 minutes per eval case versus about 10 minutes for the built-in
/code-review high. - The quoted cost figures cover only Claude usage; third-party model spend is small but not free and is counted separately.
- Training verdicts rely on provider public rules and Kilo's cached catalogue, and the author states
nodoes not promise zero retention. loopmode rewrites your working tree while other modes are read-only, so the difference must be understood before use.
How does this agent compare with similar options?
The repository benchmarks itself directly against Claude Code's built-in /code-review high: 14 versus 29 real bugs found, 1 versus 16 found only by that tool, about $3.4 versus $3.5 Claude usage per case, and about 10 versus 19 minutes per case.
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| multi This agent | 41 · Major gaps | — | ★ 23 | 11d ago | Shell | Codex · Claude Code · Claude API |
| Plannotator | 78 · Good | CLIFreemium | ★ 9.5k | today | TypeScript | Codex · Claude Code |
| Claudexor | 76 · Good | CLIFree + model costs | ★ 515 | today | TypeScript | Codex · Claude Code |
| MCO | 73 · Some gaps | CLIFree + model costs | ★ 538 | 12d ago | Python | Codex · Claude Code |
How does FollowAgents rate this agent?
Why each dimension lost points
README claims code review reads a snapshot rather than the live tree and that loop is the only mode that edits the tree, showing least-privilege intent, but this is prose only with no code or permission manifest to confirm it, so least_privilege scores 1. User confirmation: loop edits the tree yet no per-step confirmation or diff preview is described, score 1. Data-flow transparency is comparatively strong: the README lists per-backend training verdicts, .trains marker files, and a no-train switch, score 2. Sensitive data handling only mentions providers.env holding API keys with no permissions, encryption, or leak protection, score 1. Dependency security has no evidence (no lockfile, no audit), score 0. External effects: claimed read-only except loop, unverified by code, score 1. Rollback: only loop's 3-round cap is mentioned, no failure rollback or backup, score 1. Source attribution: only the LICENSE author line, publisher unverified, score 1.
Self-consistency: model names (qwen3.8, GLM-5.3, gemini-3.8) and dates (30.09.2026) look anomalous or futuristic, weakening credibility, score 1. Dependency availability: only python3 is declared, no pinned versions or dependency list, score 1. Failure messages: explicitly states failed backends surface as FAILED: <why> rather than silence, and refuses to run without a second model family, score 2.
Audience and scenarios: clearly targets code review, check-if-done, ask, planning, score 2. Capability boundaries: describes depth/profile knobs but does not systematically list unsupported cases, score 1. Trigger precision: relies on natural-language triggers (e.g. 'review this branch, ultra') with no strict grammar, score 1. Environment fit: supports claude/codex plugin marketplaces and 'other hosts install yourself', but installation depends on an external INSTALL.md not provided, score 1.
Information architecture: long but loosely structured and colloquial README, score 1. Install notes: concrete claude and codex commands given, score 2. Naming stability: no versioned naming convention, score 1. Examples and FAQ: rich config examples including a full clown profile, score 2. Known limitations: only scattered mentions of longer runtime and cost, not systematic, score 1. License: full MIT, score 2. Versioning/changelog: entirely absent, score 0. Maintenance responsibility: personal attribution only, no issue process or maintenance commitment, score 1.
Output usability: report splits into corroborated/single-source/disagreed/dropped with reasons, clear structure, score 2. Marginal value: multi-model cross-checking has real value, but eval data is self-reported and model names are suspect, so the value claim is under-supported, score 1. Cost-benefit: self-reported similar cost but roughly double the time, and evals are not independently verifiable, score 1.
Claim traceability: cites evals/RESULTS.md but that file is not in the evidence, score 1. Cross-source corroboration: only README and LICENSE are present, no code or tests to corroborate, score 1. Fact/inference separation: README distinguishes 'measured' from subjective recommendations, but anomalous model names and dates cast doubt on factual claims, score 1.
- Not found in source: dependency securityPin versions and run a dependency audit (npm audit, pip-audit) before installing; prefer running it in a container.
- Model names (qwen3.8, GLM-5.3, gemini-3.8) and dates (30.09.2026) in the README look anomalous or futuristic, possibly fabricated; eval data should not be trusted at face value.
- Eval results cite evals/RESULTS.md, which is not included in the evidence, so claims like 'found 29 bugs' cannot be independently verified.
- Loop mode edits the working tree directly; the README describes no per-step confirmation, diff preview, or failure rollback, posing a risk of unintended changes.
- API keys live in providers.env with no stated file permissions or leak protection.
- No dependency lockfile, no versioning or changelog, and installation depends on an external INSTALL.md, leaving supply-chain and reproducibility evidence thin.
- Publisher identity is unverified by the FollowAgents registry and should be treated as unknown, not as a safety signal.
FAQ
Can I use it without paying anything?
:free models; the README's no-money example does exactly that. With no_train = true the pool shrinks, since only models verdicted no survive.Will a review modify my code?
loop edits your tree, fixing and re-reviewing for up to three rounds.What happens if a backend fails to start?
FAILED: <why>, never as silence. If no non-Claude reviewer remains at all, the plugin refuses to run rather than pretend to be multi-model.How do I know whether a model trains on my code?
yes|no|unknown <model> to <answer>.trains and the report counts the worst line. Use no_train = true or --no-train to keep only no verdicts, and set trains = false under a backend if your account does not train. The author notes no does not promise zero retention.