Multi-LLM dev harness, MCP-operable: bugs, cycles, gates. Verdicts are exit codes, never opinions.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
A self-hosted harness that runs a project's full development cycle with several LLMs in fixed roles, under test gates that only you sign.
In one block: self-hosted development harness (Go engine + CLI + desktop,
Linux first) Β· brief β requirements β spec β plan β build β review β release Β·
verdicts are exit codes, never model opinions Β· local models first (llama.cpp,
vLLM) beside any OpenAI-compatible or Anthropic endpoint Β· operable by humans
or by other agents over MCP with recorded, attributed decisions Β·
Apache-2.0 Β· develops itself (the run records in .ducklab/ are the
receipts). Agents: start at AGENTS.md and llms.txt.
You give it a brief. It writes requirements, a spec and a plan; builds tasks with one model or several arguing; runs your project's real test gate; and stops for you before anything is committed. Every model call is logged. No model ever decides a verdict.
A real council intake, recorded live and sped up: the architect streams the draft, a different model reviews it, the budget ticks in cents β and the run stops at your gate. Total cost of what you just watched: $0.07.
It was built for local models first. Two of the seats that built most of it are a vLLM box on the LAN and a llama.cpp server on localhost, both priced at zero; hosted models sit beside them in the same roster, measured by the same evidence.
Most agentic coding tools assume one strong model and trust it. Ducklab assumes several cheap models and trusts none of them:
none, a note that sends the implementer
straight back to work, or stop.ref_read call away, and the gate
names any document nobody opened. A 32k local model can be briefed by a
quarter-million characters of reference material β the harness carries the
working memory.
The record does not round up: every run with its verdict, its cost, and whether its accept reproduced green from a clean checkout.
Ducklab is developed inside ducklab. The plan, the bugs, the releases and the accepted tasks went through its own loop, driven by the same local and hosted models it measures; recent features (per-run worktrees, the merge-proof accept, the acceptance receipts, the governance write guard) were built by the duck and gated by a person. To check the claim yourself:
Receipts ship with every accept since v0.7.0: the committed sha, the gate command, its exit code, and the clean-checkout reproduction verdict β facts a third party re-derives, never assessments.
v0.7.0 plus the phase-3 work now on main: every build and test run
executes in its own git worktree (your checkout is never touched),
acceptance rebases the run branch, re-runs the gate on the rebased commit
and merges fast-forward only, and an operator can re-close a finished run
as landed when its work reached main outside the engine. Before that:
seven stages, five modes, the roster board with measured scorecards,
reference documents with automatic digestion, skills managed from the
desktop, a seated consultant chat (vision verified before images are
sent), bug reports with screenshot evidence, adopt surveys with a
deterministic coverage check, provider-aware queueing that states why a
run waits, escalation suggestions when a seat measurably hits its
ceiling, acceptance receipts (ducklab proof verify), releases,
autopilot, a CLI, a desktop app, and an MCP server β in the
official MCP registry as
io.github.jrullan/ducklab β so another model can operate the loop with
recorded, attributed decisions.
docs/status.md tracks all acceptance criteria and does
not round up. Where code and spec differ, the difference is recorded in
docs/decisions/.
Needs Go 1.25+, Node 22+ for the desktop, and git.
The CLI and engine are pure Go. The desktop is a Wails v3 app and needs the GTK/WebKit development packages:
On Ubuntu 24.04+ the desktop also needs an AppArmor profile β see
decision 0003 and
packaging/apparmor/.
Honesty note: ducklab is developed and exercised daily on Linux. The CLI and
engine compile-check for darwin/arm64 on every make cross, but no desktop
build has been verified on a Mac yet β the first person to try it is the
test, and make install gives you the CLI and engine either way. Please
report whatever breaks.
make install installs to ~/.local/bin β make sure it is on your PATH.
It warns when the desktop binary predates frontend/src, because it will
happily install a stale one.
To exercise the frontend in a browser, run the engine and Vite in separate terminals, then open the browser with its connection details. The fake engine is the quickest option; the same flow can use a real engine with its opt-in CORS flag:
The real engine remains same-origin restricted by default. --allow-origin
enables exactly one browser origin and is intended for local frontend development
and visual audits; it does not change authentication or the loopback bind. Without
this flag, a browser's cross-origin failure can look like a dead session.
The engine and token query parameters are available only in Vite dev
builds. They can also be supplied as VITE_DUCKLAB_ENGINE and
VITE_DUCKLAB_TOKEN environment variables. The desktop shell continues to use
its injected window.ducklab connection.
| What it is | |
|---|---|
ducklab-engine | The daemon. Owns every run. Binds 127.0.0.1 only, bearer token rotated each start. |
ducklab | The CLI client. Holds no state; it asks the engine. |
ducklab-desktop | The desktop app. Also a client, also holds no state. Starts (or adopts) the engine itself. |
Provider keys come from the engine's environment at call time β export them before it starts, or launch the desktop through a wrapper that loads them from your keyring. The app tells you when the engine it adopted is missing a key this app has, with the restart button beside the words.
From the desktop: Projects β New project, then Cycle β Draft it. From a terminal:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/ducklab)<a href="https://allmcps.com/mcp/ducklab"><img src="https://allmcps.com/api/badge/ducklab?style=directory" alt="Ducklab on AllMCPs" /></a>