Where Ablo fits in a multi-agent system
Ablo Team7 min read
An agent’s write is rarely instant — it reads, thinks, calls a model or a tool, then writes back. A claim is the short lease it takes first, so the row it’s working on can’t be overwritten out from under it.
The hardest part of letting AI agents write to your application data is not the write itself — it is the gap before it. An agent reads a row, reasons about it, calls an LLM or an external tool, and only then writes back. That gap can be seconds long, and in those seconds a teammate or another agent can change the same row. Whoever writes last wins, and the other change vanishes. A claim closes that gap.
Optimistic concurrency works when writes are quick: read a value, write it back, and if the version moved, retry. Agent work breaks that assumption because the “think” step is slow and expensive — you do not want to throw away a 10-second LLM call and redo it just because a label changed. The claim flips the model: instead of detecting a conflict after the fact, the actor announces its intent to work on a row before it starts.
A claim is a lease, not a permanent lock. It is FIFO: if someone already holds the row, your claim waits its turn, and when it is granted you are handed the current, fresh row — never a stale snapshot. Leases expire and release automatically, so an agent that crashes mid-record does not strand the row. The result is that slow, multi-step agent work and fast human edits can target the same data safely, in order, without a separate “agent mutation path.”
Crucially, a claim does not care whether the actor is a person dragging a slider in the UI or an agent calling the API. They compete for the same row under the same FIFO rule. That symmetry is what makes a shared human-and-agent workspace possible: the coordination primitive is identical for both.
Filed under Concept
By Ablo Team
A claim is an application-level FIFO lease scoped to a row and an actor, with automatic expiry and release. Unlike a long-held database transaction lock, it is designed to be held across slow work (an LLM or tool call) without pinning a database connection, and it queues fairly so waiting actors get the fresh row when their turn comes.
Claims release automatically — with `await using` the lease is dropped when the scope exits, and leases also expire — so a crashed or abandoned agent cannot hold a row hostage. The next actor in the FIFO queue is granted the row.
Let people, server actions, and AI agents work on the same data without overwriting each other — on top of the Postgres you already have.