← All plugins

Review anything you build with a panel of models, not just one

Multi-model review and feedback on any code, plan, report or artifact. One command, several different high-capability models in parallel, one ranked list of what to fix.

Watch the ducks disagree

One command puts reviewers from different model families onto the same code in parallel - the bug one family always glosses over is the one another flags on sight. Their findings merge into a single ranked list, and the agent starts acting on it immediately. Every round breaks fresh ground: new bugs, plus any the previous round's own fixes introduced.

Why a panel beats a single review

One reviewer has one set of blind spots - and a single model, however strong, misses the same class of bug every time. Every model is confidently wrong in its own way, so if you ask the same model that wrote (or reviewed) a change to review it again, it tends to re-make the same oversight. The fix is not a bigger model - it is uncorrelated reviewers. Put an Anthropic model, an OpenAI model, a Google model, and more on the same change and the bug one family always glosses over is the one another family flags on sight.

multi-duck convenes a panel of independent rubber-duck reviewers over whatever you have in flight (a diff, a PR, a plan, tests, or a commentable-HTML plan with its open comments), and puts each duck on a different high-capability model so their blind spots do not overlap. The disagreement is the point.

multi-duck runs that panel from a one-word command. It runs end to end with no extra prompt: say "multi-duck" and it discovers what to review on its own, launches every duck in parallel, waits for them all, merges the results into one ranked list, and autonomously applies the fixes that are safe - leaving the judgment calls clearly flagged for you. The ducks are strictly review-only; every change is made by the main agent under explicit safe-fix rules.

Install

Works with both Claude Code and the GitHub Copilot CLI. Add the marketplace, install multi-duck, and say "multi-duck".

Install marketplace
$
copilot plugin marketplace add https://github.com/urikanonov/ai-marketplace
Install plugin
$
copilot plugin install multi-duck@urikan-ai-marketplace

Model diversity is the whole point, so the panel is strongest where several high-capability models are available to you. On the Copilot CLI each duck runs on a distinct model out of the box; on Claude Code, configure a few rubber-duck subagents pinned to different models to get the same cross-model coverage.

Auto-updater logo Keep it up to date automatically Install the auto-updater plugin to fetch new multi-duck releases on session start - always the latest fixes and features, no manual plugin update.

What it is good for

A second, third, and fourth opinion - on demand, before you ship.

A go/no-go before you merge

Point it at a branch, an open PR, or a design and get a cross-model read on whether it is safe to ship, with the top agreed risks called out.

Catches the bug one model misses

Model diversity is uncorrelated failure: correctness slips, edge cases, race conditions, security and data-safety issues, missing tests, and migration risks that a single reviewer waves through.

Reviews plans, not just code

It discovers active HTML and commentable-HTML plans and mines their open inline comments, so the panel reviews the proposal and the feedback already on it.

High-confidence verification

In consensus mode every duck answers the same question ("is this migration safe?"), so agreement across independent models becomes a real confidence signal.

Autonomous, safe cleanup

The safe, local, well-verified fixes get applied and verified with the narrowest test; the risky ones are surfaced with a recommended action and why they were held back.

Works where you work

The same panel runs on both Claude Code and the GitHub Copilot CLI, with a host mapping for launching reviewers, picking models, and collecting results.

Two modes, one command

Pick breadth or agreement - or let the default (prisms) choose breadth for you.

Prisms (default)

The panel is split by review aspect - correctness, edge cases, security, tests, performance, migration - with at least two differently-modeled ducks per aspect. Every aspect gets two independent opinions, so coverage spreads wide across a large change.

Consensus

Every duck chases the same goal, so cross-model agreement (k of N) is a strong confidence signal. Best for a focused question or a high-confidence go/no-go: a critical flagged by most of the panel is near-certain.

How it works

Discover, diversify, launch, consolidate, act - autonomously and safely.

Discover the work in flight

It gathers the diff, the PR and its open comments, any markdown plan, the tests, and active commentable-HTML plans with their open inline comments into one self-contained bundle every reviewer can read.

Pick a model-diverse roster

The most different models your host exposes - one per provider family first - so the ducks are as independent as possible. Each duck gets a review aspect (prisms) or the shared goal (consensus).

Two effort tiers decide which models those are. Medium is the default: mid-tier models, one per family, for a cheap, fast panel on a routine change. Say high effort for the flagship tier when a change is large, unfamiliar, security-sensitive, or about to ship. A run never mixes the two, so the tier changes the reviewers' depth and never their independence - a default run is four independent voices, and run 8 ducks is eight.

The default medium-tier panel, in order (substitute the equivalents your host exposes):

  1. claude-sonnet-5 - Anthropic Sonnet
  2. gpt-5.4 - OpenAI (prior generation)
  3. gemini-3.6-flash - Google (flash)
  4. mai-code-1.1-flash - Microsoft MAI (flash)

Example high-tier roster on the GitHub Copilot CLI, in order (substitute the equivalents your host exposes):

  1. claude-opus-5 - Anthropic Opus
  2. gpt-5.6-sol - OpenAI
  3. gemini-3.1-pro-preview - Google
  4. mai-code-1-flash-picker - Microsoft MAI
  5. claude-sonnet-5 - Anthropic Sonnet
  6. gpt-5.6-terra - OpenAI (5.6 sibling variant)
  7. claude-opus-4.8 - Anthropic Opus (prior generation)
  8. gpt-5.5 - OpenAI (prior generation)

Launch the panel in parallel

Every duck runs at once as a strictly review-only reviewer. Running many in parallel is safe because no duck can change anything.

Consolidate the findings

Cluster duplicate findings, weigh agreement, rank by severity, and adjudicate conflicts by reading the work itself - because agreement across models that read the same bundle is corroboration to verify, never proof.

Act on the safe ones

Apply the local, non-destructive, independently-verified fixes and check them with the narrowest test. Defer anything risky - API, dependency, migration, security, infrastructure, history-rewriting - with a clear recommendation.

Run it more than once for complex work

Scale the number of rounds to the complexity of the change. Each round applies the safe fixes and reshapes the work, so a fresh panel over the updated work almost always finds something the previous round could not see yet. For anything non-trivial, run multi-duck across several rounds - the later passes are where the subtle issues surface, and the subsequent rounds almost always turn up something useful.

Autonomous, but safe by design

It fixes what is safe to fix and never guesses at the rest.

Reviewers cannot mutate

Ducks are review-only. Every change is made by the main agent under explicit safe-fix rules, and each fix is independently verified before it lands.

Risky changes are deferred

Public API, dependency, migration, security, infrastructure, and history-rewriting changes are never applied autonomously - they are surfaced with a recommended action for you to decide.

Reviewed content is untrusted

The diff, PR text, and plan comments are treated as data, never as instructions, so embedded prompt injection cannot manufacture panel agreement or drive an autonomous change.

Changelog

Changes to multi-duck. See the full changelog on GitHub.

[1.4.0] - 2026-09-02

Changed
  • The default panel is now 4 ducks, not 8 (MDUCK-COUNT-13). Every duck is a full model context reading the same bundle, so the old default spent twice the tokens a routine review needs. Four is the smallest panel that still keeps the prisms guarantee - 2 ducks per aspect, on different model families - and it covers the first two aspects (correctness, and edge cases and error handling). The 1..12 clamp is unchanged, so a large or high-stakes change still asks for a wider panel explicitly, and naming a concern in guidance still promotes it to aspect 1 so it is always double-covered.
  • Prisms assignment is now deterministic: the tier's first 2A roster rows are dealt round-robin across the A aspects, then any same-family pair is repaired by a swap. That spreads reviewer strength across the aspects instead of stacking the two strongest on aspect 1, and it gives an agent one executable rule for any count rather than an example to extrapolate from.
  • There is now a single rule for what happens when reviewers cannot be independent: a run whose roster cannot field two families for an aspect is marked diversity_degraded before launch and says so in the report. The Hosts section, the effort input, and the prisms assignment step all defer to it rather than each stating their own fallback.
Added
  • An effort input picks which TIER of models the panel is drawn from, and the per-duck reasoning-effort floor (MDUCK-EFFORT-14). Two levels: medium (a mid-tier roster at a medium floor) is now the DEFAULT, because most reviews are of a small or routine change, an early round, or a re-run after fixes, and paying flagship rates for all of them is what stopped the panel being run as often as it should be; high (the flagship-led roster at a high floor) is one word away ("multi-duck, high effort") for a large, unfamiliar, security-sensitive, or about-to-ship change. The skill now carries both example rosters, each front-loading one model per provider family. A tier is the TABLE DRAWN FROM, not a property of a model, and a run never mixes the two: the modes, the 2-ducks-per-aspect cross-family pairing, and the hard rules are identical in both, so what a cheaper run gives up is depth per duck and never independence. The tier and the effort actually applied are recorded per duck and disclosed in the final report, so a reader always knows how deep a read produced the verdict.

[1.3.0] - 2026-08-06

Changed
  • Raised the bar for turning a panel finding into a tracked issue (MDUCK-SCOPE-12). A duck's scope is the CHANGE under review, so a PRE-EXISTING defect noticed incidentally - one equally present on the base revision - now goes to SCOPED-OUT: rather than FINDINGS:, unless it is user-observable breakage, data loss, or a security issue reachable under the declared threat model. Incidental pre-existing findings were 47 percent of the issues filed in one two-day window and were what held the issue branching factor at 1.52 - above the 1.0 at which a backlog stops growing - so a panel was manufacturing work faster than it could be done. The boundary is drawn carefully: a defect the change newly makes REACHABLE, triggers, or relocates stays in scope even when the defective line itself is untouched, so a latent fault that only a newly added caller can reach is still reported.
Show 5 older releases

[1.2.0] - 2026-08-04

Added
  • The panel now respects a project's DECLARED threat model instead of rediscovering its non-goals on every run (MDUCK-SCOPE-12). Bundle assembly collects the repo's written threat model, trust boundaries, and accepted residual risks into context.md, together with the list that stays in scope regardless (a weakened enforcement layer, a false positive that breaks benign input, and drift that makes a tool emit output its own validator rejects). Every duck's hard rules forbid reporting a finding whose attacker the project declares trusted, whose effect a named enforcement layer already blocks unconditionally, or which is one more instance of an already-accepted residual; a duck that disagrees with a non-goal raises it under QUESTIONS: rather than as a finding. Consolidation records such a finding as Dismissed-as-out-of-scope and does not open a follow-up issue for it. This closes the loop where each reviewed fix spawned its own successors.

[1.1.0] - 2026-07-25

Changed
  • Refreshed the example duck roster to lead with the current strongest Anthropic flagship. The panel now leads with claude-opus-5 as roster row 1 and duck 1 of the prisms example. The rows that changed are row 1 (claude-opus-4.8 -> claude-opus-5), row 6 (gpt-5.3-codex -> gpt-5.6-terra), and the prior-generation tail rows 7 and 8 (claude-opus-4.7 -> claude-opus-4.8, gpt-5.4 -> gpt-5.5); the other rows (gpt-5.6-sol, gemini-3.1-pro-preview, mai-code-1-flash-picker, claude-sonnet-5) were already current and are unchanged. The roster stays an illustrative example of the diversity-first selection strategy - substitute the equivalents your host exposes (for example xAI's Grok or Moonshot's Kimi flagships on hosts that offer them, or Google's gemini-3.6-flash as a lighter distinct-family voice).
Added
  • Built-in guidance for repeated panel runs on the same work: rotate/refresh the non-anchor roster each run (and, in prisms mode, which model reviews which aspect) while keeping the top flagships pinned, and increase the duck count when weaker or lighter models are added so extra diversity is additive rather than displacing the flagships.

[1.0.2] - 2026-07-19

Changed
  • Targetless runs no longer auto-select the newest matching HTML from the user's Downloads folder. The panel now reviews only a target that is explicit in the invocation or clearly identified by the current session; an explicit or session-identified target takes priority and is never overridden by a scratch or working-tree file, and scratch/cwd discovery runs only for a targetless invocation and only for a candidate unambiguously tied to this session. If none is clear, it stops and asks the user which document to review instead of reaching into Downloads.
  • The commentable-HTML open-comments extractor is now a shipped script (tools/extract_open_comments.py) that the skill runs by resolving the plugin root, rather than a full parser listing rehydrated from SKILL.md on every activation. Behavior is unchanged.

[1.0.1] - 2026-07-19

Added
  • The shipped plugin package now includes the MIT license text.

[1.0.0]

  • Initial release of multi-duck: convene a panel of independent rubber-duck reviewers over the work in flight (a diff, PR, plan, tests, or commentable-HTML plans with their open inline comments), each on a different model, all in parallel, then consolidate the findings and autonomously apply the safe fixes.
  • Two panel modes: prisms (split the panel by review aspect, at least two differently-modeled ducks per aspect, for wide coverage) and consensus (every duck chases the same goal so cross-model agreement is a confidence signal).
  • Auto-discovers what to review (diff, PR, markdown plan, and active commentable-HTML plans plus their open inline comments) and runs end to end with no extra prompt.
  • Dual-host: runs on both Claude Code and the GitHub Copilot CLI, with a host mapping for the reviewer subagent, per-duck model selection, parallel launch, result collection, and tracking.