
no-mistakes puts a local git proxy in front of your real remote. You push to no-mistakes instead of origin, and it spins up a disposable worktree, runs an AI validation pipeline, and forwards your commits upstream only after every check passes. Then it opens a clean PR for you.
Repo: github.com/kunchenguid/no-mistakes (1,126 stars, written in Go).
The problem nobody talks about
AI generates code faster than you can review it. Kun Chen, who built no-mistakes, tracked his own merges and found 68% of his changes had problems that would have merged clean if nothing was catching them. Not because the model was weak. Because the gap between "looks right" and "is right" is exactly where agents fail, and nobody is paid to stare at every diff an agent produces.
The usual answer is a pre-commit hook or CI. Pre-commit hooks block your terminal, so people disable them. CI runs after the code is already on the remote, which means the slop is in the branch before anything flags it.
What no-mistakes actually does
It registers itself as a git remote. You keep your normal flow, you just push to a different name:
git push no-mistakes my-branchOn push, it spins up a disposable worktree so your working directory is never touched, runs an AI pipeline against the diff, and only forwards to origin if every stage passes. Fail the gate and nothing leaves your machine. Pass it and no-mistakes pushes upstream, then opens the PR.
The pipeline runs nine stages in order:
- Intent detection, working out what the change is trying to do
- Rebase onto the latest upstream
- AI code review of the diff
- Tests, with evidence checks that they actually ran
- Documentation updates
- Linting
- Push to origin
- PR creation or update
- CI polling, with auto-fix on failures
Any stage that hits a problem pauses for your approval instead of pushing through. You decide whether to auto-fix or handle it yourself.
Why it's agent-agnostic
You are not locked to one model. no-mistakes drives claude, codex, rovodev, opencode, pi, or any ACP target. Swap the agent without touching the gate.
Setup
Install with one command:
curl -fsSL https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/docs/install.sh | shThe binary lands in ~/.no-mistakes/bin and links into your PATH. Check your dependencies (git, an agent binary, and gh or glab for PRs):
no-mistakes doctorFrom inside your repo, initialize the gate:
no-mistakes initThat creates a local bare repo at ~/.no-mistakes/repos/<id>.git, installs a post-receive hook, wires up the no-mistakes remote, and installs the /no-mistakes skill for your agent. Push a branch through it and watch the run in the TUI:
git push no-mistakes my-branch
no-mistakesno-mistakes -y does the branch, commit, push, and attach in one shot.
Three ways to trigger the gate
git push no-mistakesis the explicit git path on a committed branch.no-mistakes(the TUI) is for when you have uncommitted changes and want a wizard to walk you through branch, commit, and push./no-mistakes <task>runs inside your agent. It does the task, runs the gate, applies the safe fixes itself, and stops to ask you about anything that needs a human call.
Honest limitations
You are running an AI to review AI, so every push costs tokens and a few seconds of pipeline time. That is the right trade on a branch other people pull from. On a solo scratch repo where you do not care about clean history, it is overkill.
It also sits in front of your remote, which is another moving part in your push flow. If the gate is down or misconfigured, you fall back to git push origin directly, so it is not a hard dependency, but it is one more thing to keep working.
And the auto-fix loop is only as good as the agent behind it. The nine-stage pipeline catches a lot, but "AI reviewed it" is not "a senior engineer reviewed it." Treat the gate as a strong first filter on shared branches, not a replacement for human review on anything that matters.