Amplifier  ·  New Bundle

amplifier-work-tracker

A shared work queue your coding-agent sessions pull from.
One item, one agent. Nothing done twice, nothing dropped.

● Active   github.com/microsoft/amplifier-work-tracker

August 2026  ·  Storage and issue graph by Beads

The moment you recognize

Two sessions.
One job. Twice.

Ever had two agent sessions quietly redo each other’s work?

Or closed your laptop and lost whatever one of them was halfway through?

Neither of those throws an error. That’s the whole problem — every failure mode here is silent. You find out later, in the diff, or not at all.

What it unlocks

Fire off five sessions. Let them sort it out.

🧵

Real parallelism

Three or five sessions on one project. Each grabs a different piece. Nothing gets done twice.

🌙

Park half-formed ideas

Drop “search feels slow lately” in at midnight. A session picks it up tomorrow, specs it properly, works it.

✂️

Scope creep stops eating your diff

An agent notices three other things wrong mid-fix — and files them, instead of quietly fixing them all or forgetting them.

🚶

Walk away

A session waiting six hours on your answer keeps its claim. One that actually died gives its work back.

The shape of it

Many sessions, one queue

session A session B session C session D SHARED QUEUE #014   fix pagination off-by-one A #021   add retry to upload path B #027   index missing on lookups C #033   “search feels slow lately” D … still ready, waiting for the next session

Every session asks the same question — “what should I work on?” — and each one gets a different answer. That property is the whole product.

Problem 1  ·  Silent double-claims

The obvious way is the broken way

TWO STEPS  —  LIST, THEN CLAIM BY ID agent 1 agent 2 agent 3 1. list ready work  →  [ #014, #021, … ] 2. claim #014  ×3 exit 0 ✓ not the holder exit 0 ✓ actual holder exit 0 ✓ not the holder Everybody got a green light. Two of them now do real work on an item they don’t own — and are never told. ONE STEP  —  ATOMIC CLAIM agent 1 agent 2 agent 3 work_claim(project) ← the only tool claimed: null normal, not error claimed: #014 holder claimed: null normal, not error Exactly one winner, always. The other two are told the truth immediately and go ask again for something else.

The fix isn’t documentation telling agents to be careful. Every claim is one atomic call — there is no check-then-act path. Name a specific item or let the queue pick; either way exactly one agent wins, and the losers are told so.

Problem 1  ·  Measured, not theorized

Measured under real contention

Agents racing for the same item, using the two-step shape. Runs that produced a double-claim, across three batches:

5/6
runs double-claimed
3/6
runs double-claimed
2/8
runs double-claimed
clean in
every trial
the single atomic claim

What “double-claimed” means

In those runs, 2–3 agents each got exit code 0 on the same item. Only one was really the holder. The losers get no error — they go do real work on something they don’t own.

Why it can’t happen now

One call decides the winner. Everyone else is told plainly there’s nothing for them. There is no second step to get wrong, and no id-shaped door to walk through.

Problem 2  ·  Long-running sessions

Custody is a heartbeat, not a countdown

Renewed every 120s  ·  released after 900s without a renewal The clock never asks how long you’ve held it. Only whether you’re still alive. A · HOLDING 12 HOURS, IDLE, STILL RENEWING renew · renew · renew · renew · renew · renew … every 120s claim never touched ✓ B · HELD 15 MINUTES, PROCESS DIED, NO RENEWALS last heartbeat silence … 900s released back to the queue ready Idle never costs you a claim. Being dead does.

A session that works autonomously for hours and then sits waiting on your answer looks exactly like a healthy session — because it is one. A session whose process is gone stops renewing, and its work goes back so somebody else can pick it up.

Problem 3  ·  The reply that never comes

Feedback that finds its way home

user report “export drops rows” triage linked, not copied engineering item claimed, worked ships reporter gets told months later · a different session The report and the fix are the same thread — so the loop can close itself.

A report and its engineering issue are linked objects, not two notes that happen to say similar things. Nobody has to remember who asked.

Standing on

Built on Beads

Steve Yegge’s Beads is a git-native issue tracker designed for AI agents. It does the storage and the issue-graph work — the hard, unglamorous parts that everything here rests on.

Beads brings

Git-native storage and the issue graph — the hard, unglamorous layer everything here sits on.

work-tracker adds

The agent-facing surface: atomic claiming, liveness-based custody, the feedback round trip — and a tool shape that makes the wrong move unreachable.

github.com/gastownhall/beads  ·  thank you, genuinely

How we know it holds up

Five cold starts, one generic prompt

Each run: a brand-new container with nothing installed — no bd, no dolt, no CLI, no state — composing only the bundle. Each run exposed defects. Each was fixed. Raw storage-layer calls, per run:

12 run 1 6 run 2 4 run 3 0 run 4 0 run 5 raw storage-layer calls — the last two runs needed zero
 Run 1Run 2Run 3Run 4Run 5
Raw storage calls126400
Cost per run$3.63$1.32$1.30$0.62$0.56
Turns5127281312
Try it

One line, then just ask

# compose the bundle into yours amplifier bundle add git+https://github.com/microsoft/amplifier-work-tracker@main --app

Then say to a session:

"use work-tracker to set up a project called demo and file a task for X, then claim it."

The session installs whatever it needs and sets itself up. That’s the whole onboarding — it’s what those five cold-start containers did, with nothing preinstalled.

Sources

Where these numbers came from

Data as of

August 2026. Feature status: Active. Repository: microsoft/amplifier-work-tracker (public, main green).

How it was measured

Contention figures come from deliberate races against the two-step claim shape. Cost, turn, and storage-call figures come from five cold-start container runs, each composing only the bundle from one generic prompt.

Stated precisely

Every figure in this deck is reported exactly as measured — nothing rounded for effect, nothing extrapolated:

Double-claims: 5-of-6, 3-of-6, 2-of-8 trial runs, with 2–3 agents each receiving exit code 0. Atomic claim: clean in every trial. Custody: renewal every 120s against a 900s TTL. Storage calls: 12 → 6 → 4 → 0 → 0. Cost: $3.63 → $1.32 → $1.30 → $0.62 → $0.56. Turns: 51 → 27 → 28 → 13 → 12.

Gaps, stated plainly

No commit counts, contributor breakdown, line counts, or adoption numbers are claimed here — those weren’t measured, so they aren’t shown. The five cold-start runs measure onboarding from zero; they are not a benchmark of sustained multi-week use.

← → to navigate
More Amplifier Stories