# ducklab

A self-hosted harness that walks a project from brief to release with several models in fixed seats. Whether work passes is decided by a test command's exit code, not by a model.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed · ★ 10
- Author: jrullan
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/jrullan/ducklab
- Updated: 2026-10-11
- HTML: https://affpapa.org/en/nevibecode/mcp/ducklab

## What it does

The engine is written in Go, with a CLI and a desktop app alongside it. Models take fixed roles: one drafts requirements, another reviews them, a third turns the plan into tasks. None of them rules on the outcome — your test gate does. Before anything is committed the run halts and waits for a person.

Local models sit in the same roster as hosted ones. llama.cpp and vLLM are supported, plus any endpoint speaking the OpenAI or Anthropic protocol. Every model call is logged, and decisions carry attribution, so a second agent can drive the loop over MCP and leave a trail. Accepted tasks come with a receipt naming the commit and the gate result.

Building it takes Go 1.25+, Node 22+ and git. The desktop is a Wails v3 app: on Linux it wants the GTK/WebKit packages, and Ubuntu 24.04+ also needs an AppArmor profile. Day-to-day work happens on Linux. The CLI and engine are compile-checked for `darwin/arm64`, yet nobody has built the desktop on a Mac.

## Requirements
- Needs: a prebuilt binary from the repository releases

## Install

### Claude Code (native platform)

**Install**
- The MCP registry has no launch command for it: see the repository README

## When to use it
- turn a brief into requirements, a spec and a plan
- run the project's real tests before a commit and stop for a human decision
- compare local and hosted models by in-seat pass rate
- let a second agent drive the dev loop over MCP
- brief a small model with a large set of reference documents

## Example prompts
- Run the development cycle from the brief in `brief.md` and stop before committing
- Show the receipt for the last accepted run and verify the gate reproduces
- Set up the roster with a local llama.cpp server next to a hosted endpoint

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
