Models debate.
Tests decide.
A terminal-native coding agent that puts frontier models in a room, has them debate the approach, generates candidate implementations, runs them against your tests, and ships the one that actually passes — then records why.
One command.
curl -fsSL https://factor.ac/install.sh | sh
Then, inside any git repo with a provider key set (OPENROUTER_API_KEY covers every model):
factor "add input validation to the signup handler"
Fused by debate. Judged by reality.
task → PLAN one strong model drafts the approach → DEBATE models cross-examine the plan — no model "winner" → FAN-OUT N frontier models write candidate diffs in parallel → EXECUTE run each candidate: tests · typecheck · lint · build (sandboxed) → SELECT keep what passes; tie-break on coverage + smallest diff → REPAIR feed failures back to the closest candidate, until green → COMMIT apply the winning diff + write the decision record
Each candidate runs in its own throwaway git worktree — your working tree is never touched until you approve. Factor commits locally; pushing stays your call.
Debate, not a blind panel
Models cross-examine each other and refine — so the work gets better, not just selected by one biased arbiter.
Your tests are the judge
No model plays jury. Candidates run against tests, typecheck, lint and build; the one that passes wins.
Failures loop back
When nothing's green, Factor hands the closest candidate its own diff and the exact gate output, and tries again.
The why, committed
Every change lands with an ADR in DECISIONS.md — the reasoning, the candidates considered, the cost.
One model? Routing? Blind fusion?
A single frontier model is one shot — generating several candidates and selecting by tests beats pass@1. Routing only picks a model; Factor verifies the output. Blind "fusion" runs models alone and lets one judge — Factor makes them improve each other and lets execution decide. The promise isn't a leaderboard number; it's never merge a hallucinated diff.