The discipline that made software reliable, applied to code an AI wrote.
Merged — or the branch and the reason it couldn't be. A fleet of agents clones your repo, works your ticket, and runs it through your test suite. Whatever the suite says comes back to you, in full.
146 of the last 152 came back green first time. We tell you which, and why.
Pulley builds for
resolute.education
dsrupt.ai
paragonai.aiThe hand-off
A pass isn't a retreat. It's what you make when someone else is better placed to run with it.
The machine
A review bot has an opinion about your diff. CI has a verdict on it. Neither of them can do anything about it — they hand the problem back to you. Pulley wires the verdict into the work: the gate decides, the diagnosis reads the failure, the retry runs on the branch that already has the work on it, and green code lands on a trunk the next agent builds from. No human at any junction — right up until it runs out of ideas, and hands you the whole thing back where you started.
Only the dotted path waits for a person.
The verdict
Every coding agent will tell you it's done. Pulley doesn't take its word for it — and it can't be talked around. Three mechanisms make an agent's confidence irrelevant.
The suite is recorded before the agent touches anything, then compared after. Removing a failing test doesn't read as a fix — and you're never blamed for a test that was already red when the ticket started.
baseline: suite recorded green
after: green · delta not negative
An agent that writes a test and calls it a day gets rejected. The ticket must produce real changed lines in real source files, or it never reaches review — the single most common way autonomous coding quietly fakes success.
changed files: none
→ rejected: no implementation
When the suite passes and real work exists, Pulley ships it — even if the reviewing model got cold feet. And no amount of eloquence gets a red build through. The suite is the only vote that counts.
review: "I'm not certain…"
gate: green → shipped
The trap
It works. People use it. And you have no idea which parts you can safely touch — so every change is a coin flip, and eventually you stop making them. The thing you built starts closing in around you.
That isn't a skill problem. It's a missing gate. So Pulley builds you one before it touches anything. Card zero writes a characterisation suite that pins what your code does today — bugs and all. That's not a flaw in the method, it's the definition of it: you cannot safely change behaviour you haven't first pinned down.
And we don't trust that suite either. A generated test that can never fail is worse than no test at all — it launders bad work as verified. So card zero has to prove its own tests can fail: we mutate your source code, and if the suite doesn't catch the mutants, it isn't a gate and it doesn't ship.
Coming soon
How it works
Point Pulley at GitHub and pick a repo. It detects your test command, framework, and timeout — and refuses to run until that gate is confirmed. A project with no working test command can't start, by design.
detected: npm run test:run · vitest · gate confirmed
Describe the change in plain language on a kanban card. Pulley turns it into a scoped, testable ticket — or takes an epic and decomposes it into an ordered series where each card waits for the last one's PR to merge.
"rate-limit the auth endpoint" → one scoped ticket · Small
Approve the card and a disposable VM clones your repo, works the ticket through a ten-phase loop, and reports each phase live to the board. Up to twelve tickets run at once. You're not watching any of them.
planning → implementing → review · many workers, isolated per project
You get a PR on a branch you control, with the diff, the commit, the logs, the test delta, and what it cost — to the cent. If it fails, Pulley diagnoses and retries it on its own, and only escalates to you with a summary of everything it already tried.
PR opened · suite green · cost to the cent · ready for review
Throughput
An agent in a terminal isn't slow because the model is slow. It's slow because it needs you — one session, one thread of your attention, one ticket at a time, and you sitting there to say yes. The gate is what takes you out of that loop. And the moment you stop being the bottleneck, the ceiling lifts.
Wall clock is the sum of every ticket — plus every minute you spent reading a diff before it could move on.
Wall clock is the slowest single ticket. Twelve run at once, on twelve disposable machines, and none of them need a human to proceed.
That's the actual problem, and it's why parallel coding agents usually aren't worth it. So the lanes don't run in isolation. Every card forks from one shared trunk — the line actually under load — and green work comes back over a sheave and joins it, so the next worker builds on what landed instead of guessing. A worker whose branch has gone stale rebases and re-runs the gate before it's allowed anywhere near it.
One lane didn't land. It is still there, still yours, and flagged —
never silently resolved. And main is never
auto-merged: you promote the trunk, on your cadence.
Scale of work
You don't have to slice the work yourself. Describe the outcome and Pulley breaks it into an ordered series of tickets, works out what depends on what, and holds each card until the one before it has a merged pull request — not a hopeful one.
Independent cards run side by side. Dependent ones wait their turn.
Green work merges to an integration trunk so the next worker builds on
it instead of guessing — and main
is never touched until you promote it yourself.
Unattended
Nothing about Pulley needs you online. Approve the work before bed; the fleet runs the tickets, retries its own failures, and unblocks the dependent cards as each one lands. You review pull requests over coffee.
Where you drive it
The board is the front door. But if you live in a terminal, you never have to open it.
A kanban card per ticket, with live per-phase progress, the diff, the test delta, the logs, and what it cost. Non-engineers can file work here without ever seeing a prompt.
implementing ▸ review ▸ delivered
A skill and an MCP server, so your own agent talks to the fleet. Hand it a messy idea; it decomposes the epic, files the tickets in order, and reports back when the PRs land — from the terminal you already have open.
> break this RFC into tickets and queue it → epic created · tickets ordered
Scriptable, CI-friendly, and quiet. File a ticket from a git hook, block a release on a delivery, or fan a backlog into the fleet from a shell script.
$ pulley ticket "rate-limit /api/auth" $ pulley watch --epic billing
Proof
This isn't a demo repo. The product you're reading about wrote itself, ticket by ticket, through its own gate — and the agent's pull requests are sitting in the git log with everyone else's.
Every number on this page is a receipt, not an adjective. The test counts come straight out of this repo — re-run the command yourself. The delivery count comes out of the control plane's own database. None of it is rounded, dressed up, or invented; where a figure couldn't be sourced, the claim came off the page instead. An autonomous system that fakes its numbers isn't succeeding — it's just not checking. Every figure here is recorded, with its source, in marketing/STATS.md.
Connect a repo with a test suite and put one real ticket through it. If the gate doesn't go green, you don't get a PR — and you don't pay for it.
We invite in small batches, oldest first. The trial is fourteen days, the whole fleet, no card.