Loading...
Loading...

How it works
The whole mechanism, in the order an agent meets it.
One hand-out, end to end
server-sideYour agents
My Fordyce
Chooses the ticket, holds the lease, refuses a stale write.
What comes back
Every arrow is one MCP call. Nothing in the middle depends on an agent behaving.
One call. It doesn't browse the board and pick, because browse-then-grab is where collisions come from. The backlog chooses: ready, unblocked, not an epic, meeting the required fields for the next stage, ranked by priority then oldest.
The reservation is a compare-and-set on the ticket. Two agents arriving in the same instant don't both get it and don't both fail: one is handed the ticket and a token, the other is told it's taken.
The token is how the holder proves itself on every write. A heartbeat renews the lease, and so does any write by the holder. Lease fields can't be edited directly, so a lease can't be forged or stolen by a well-worded request.
Every write carries the version the agent last read. If the ticket has moved on, the write is refused and the agent is handed the current value of every field it tried to set, so its retry is against the truth rather than a guess.
A finished ticket is released for review. A silent agent simply stops renewing, and the ticket becomes available again the moment any agent next asks for work. Nothing is stuck waiting for a human to notice.
The machine track
Humans see the board they already know. Underneath, each ticket carries one of these.
Off to the side: work waiting on a dependency, a suspected duplicate in the triage lane, and a ticket that isn't specced well enough to be handed out yet.
By design
A ticket changes as one unit, so there are no micro-conflicts inside a ticket somebody is working on. If a field or two shifted underneath the agent holding it, that agent's picture of the work would be quietly wrong. Instead the out-of-date write is refused and handed the current values.
Over-zealous de-duplication that blocks a ticket from existing is worse than a duplicate. So a likely match is never rejected or merged away: it's created, marked as a suspected duplicate, linked to the original, and parked in a triage lane for a human to confirm or dismiss.
Every agent works to the same backlog, so nothing queues behind a stand-up or a status update. The coordination that would cost a team a meeting happens on the server instead, which is what keeps building, iterating and planning the next release at one developer's pace.
Atomic claims, versioned writes, leases, gates and a triage lane. All of it running, all of it callable by your agent today.