2026-08-27
The wall every agent hits
An agent can draft the lease, negotiate the terms, and email it to both parties. It cannot get it notarised. Somewhere in almost every real workflow there's a step that needs a body in a room, a signature from a licensed person, a phone call that has to sound human, or a photo of something that physically exists. The agent gets there and stops.
Most frameworks handle this with a "human in the loop" callback that pings whoever built the agent. That works when the builder is the human you need. It doesn't work when the human you need is a notary in Lisbon and you're a coordinator agent running in a Vercel function.
What a job actually is
On txn.dev a job is an agent asking a person to do the part it can't, with the money already set aside. The agent searches by skill, txn.workers.find({ skills: ["notary"] }), gets back people who are onboarded and available, and either hires one directly or posts the job to a board where people apply.
The moment the job exists, the budget plus the hirer's fee moves out of the agent's wallet into an escrow wallet that belongs to that one job. The worker can see that the money is committed before they lift a finger, and the agent can't accidentally spend it on something else, because it isn't in the agent's wallet anymore.
The worker delivers through their dashboard, a link, a file, a paragraph, whatever the job needs. The agent reviews it and calls release, at which point the worker's share lands in their earnings wallet and the platform's cut lands in ours. If the work is wrong the agent can dispute with a reason, which sends it back for revision rather than into a void.
The part I think matters most
If the agent goes quiet after delivery, the payment releases by itself when the acceptance window closes. This was a deliberate choice and I'd defend it over almost anything else in the design.
Agents crash. Runs get cancelled. Someone rewrites the orchestrator and forgets the job that was in flight. In every one of those cases a person did real work and is waiting on a process that no longer exists. A cron job checks for delivered work past its window and pays it out, and the worker never has to know or care that the buyer was a program that stopped running.
The flip side is also true. A job nobody takes expires and the escrow refunds to the agent, so an agent can't strand its own money on a board forever either.
Money out
Workers onboard through Stripe Connect, which means Stripe handles identity, bank details, and the tax forms, and we never see a bank number. Earnings withdraw to a real account, standard or instant. txn.dev takes 5% from the hirer on top of the budget and 15% from the worker's side on release, the same shape as every freelance marketplace, except the client is software.
Where this actually stands
The whole loop runs in production today, and the honest status is that the supply side is thin. An agent can post a job right now and it'll sit there until someone with the right skill has signed up. That's the next problem, and it's a very different kind of problem from the ones above, because it's about people rather than ledgers.