Autonomous coding pipeline: frontier models plan and review, a local model implements, gated by TDD.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Spend tokens on judgment, not typing.

A real story (STE-1, PR #986) crossing the board: implemented by an open-weight model, sent back once by review, merged. 14 minutes, time-lapsed.
Try it (macOS; Linux via Ollama or LM Studio), then see the Quickstart:
Frontier models cost money per token and are excellent at judgment. Local models run free and are adequate at typing. This pipeline splits software engineering along exactly that line: a frontier model decomposes the work, plans it, reviews the diff, and adjudicates anything risky β while a local model writes the implementation at no marginal cost.
What makes the cheap half trustworthy is inspection. In Michael Fagan's 1976 IBM study, formal inspection found 82% of the defects in the released product β 38 per KLOC, against 8 per KLOC for unit testing. Quality lives in the gate, not in the author. So this project spends its budget on gates: TDD enforced before implementation, an independent review pass, acceptance-oracle grading, a risk-tiered overlord that stops for a human on anything irreversible, and a merge gate that re-runs the suite against the rebased branch before anything lands.
The goal is narrow and specific: enterprise-grade engineering discipline β decomposition, TDD, code review, dependency-ordered delivery β on a $20/month budget.
For detailed reference material, see REFERENCE.md.
Before you start: read Reliability & limitations below. This is an autonomous coding pipeline with real, documented failure modes β it is not a hands-off "describe a feature, get a PR" tool yet.
Developed and run day-to-day on macOS. The core (MCP server, dashboard, Claude-backend dispatch/review, the full test suite) is plain Python and CI tests it on Ubuntu across Python 3.12β3.14 on every push. Two pieces are macOS-only:
launchd/*.plist β the scheduler/MLX-supervisor/usage-poller are
packaged as launchd jobs on macOS. On Linux, render the systemd equivalent
with scripts/generate_systemd_units.sh (see Scheduler below)
instead of hand-rolling init files, or run the entry points directly in a
foreground terminal/tmux session.PIPELINE_LOCAL_PROVIDER=mlx) β Apple Silicon only. Local dispatch
works fine on Linux via Ollama or LM Studio instead
(PIPELINE_LOCAL_PROVIDER=ollama / lmstudio).Windows is untested.
This clones the repo to ~/.fagan (override the location with
FAGAN_INSTALL_DIR, and the source URL with FAGAN_REPO_URL) and runs
scripts/install.sh inside it -- equivalent to the manual clone-and-run
steps below, minus the typing. Re-running it later updates the existing
checkout (git pull --ff-only) instead of re-cloning.
Piping a remote script into bash means trusting whatever that URL serves
at fetch time. If you'd rather read it first:
Either way, cd into the install directory it reports (~/.fagan by
default); it has already done steps 1β3 below, so restart Claude Code (step 5). Prefer a manual clone? Use the
steps below instead.
This gets the MCP server registered and a first plan running end-to-end.
A first run needs no local model at all: with nothing configured, dispatch
and review fall back to the claude backend, which shells out to the Claude
Code CLI. That fallback is the starting configuration, not the intended one
β the cost split described above only happens once you deliberately route
the implementation role to a local model, which is why the shipped registry
ships no roles block of its own: see Provider selection & authorization
below for how to make that choice when you're ready.
scripts/install.sh creates the .venv, installs requirements.txt and
requirements-dashboard.txt (the dashboard's fastapi/uvicorn deps, installed
on every run; a --dev install uses requirements-dev.txt, which already
includes the dashboard deps), and reports on the tools the pipeline shells out
to β required: git, gh, and the claude CLI; optional: ollama and
docker β with graceful-degradation messaging, and is safe to re-run. It does not register the MCP server, set environment
variables, or install the persona subagents β steps 2β3 above cover those. With
nothing but the claude backend configured, ollama/docker being absent is
expected, not an error.
From a Claude Code session in the project you want the pipeline to work on:
product-analyst subagent to turn a goal into epics/stories, or
hand-write a plan per the schema.mcp__pipeline__save_plan (or ingest_plan) with that plan and a
repo_root pointing at the target project β not this pipeline repo.mcp__pipeline__list_ready_stories to see what's unblocked, then
mcp__pipeline__dispatch_story to claim and start one.scripts/dashboard.sh start, then open
http://localhost:8000.advance_pipeline by hand:
.venv/bin/python3 -m pipeline.scheduler_daemon (foreground, or under
launchd/systemd/tmux β see Scheduler below).Start with PIPELINE_AUTONOMY=dry-run (plans and logs only, nothing is
dispatched or merged) until you've watched one plan run and trust the gates β
see Autonomy levels.
Only using the claude backend? The PIPELINE_LOCAL_* and
PIPELINE_BACKEND_*=ollama/lmstudio/mlx variables, and Ollama/MLX/LM Studio
setup, only matter if you opt a role into local-model dispatch β but provider
selection itself is still a required setup step (the shipped registry routes
nothing; see Provider selection & authorization below), and even the
claude path needs two credentials before the first dispatch: gh auth login
(the pipeline opens and merges PRs through the GitHub CLI) and the Claude Code
CLI's own login. See
Minimal configuration for the handful of
variables actually worth setting on day one, versus the ~100 that exist purely
for tuning.
Provider selection is a required setup step. The shipped
model_registry.json deliberately declares which models exist per provider
but ships no roles routing: this project decouples from any single
provider, so the operator chooses. There are two supported ways to select a
provider per role, checked in this order by resolve_role:
provider/model beats
everything below.roles block in a registry file β the single source of truth for
role routing; see below.PIPELINE_BACKEND_<ROLE> environment variables β consulted only when
the registry has no entry for the role (the empty-state path, so a fresh
clone still boots); e.g. PIPELINE_BACKEND_DISPATCH=ollama opts the
dispatch role into Ollama.claude
backend.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/fagan)<a href="https://allmcps.com/mcp/fagan"><img src="https://allmcps.com/api/badge/fagan?style=directory" alt="Fagan on AllMCPs" /></a>