All writing
Engineering7 Oct 2026/1 min read

What actually breaks when you put AI agents on 15,000 ATMs

Dispatch reliability is not a model problem. After a year of running autonomous dispatch across 15k+ ATMs, almost every incident traced back to the boring layers underneath.

AV
Avishkar Engineering
Platform Team

When we started, we assumed the hard part would be the model. It was not. The hard part was everything around it: stale inventory data, flaky technician connectivity, and a ticketing system that silently deduplicated our writes.

Three failure classes

  1. Data freshness — the agent reasoned correctly over a world that no longer existed.
  2. Idempotency — retries created duplicate dispatches during network partitions.
  3. Escalation latency — humans were looped in correctly, just too late to matter.
90% autonomy is not 90% of the work. The last 10% is where the operational design lives.

The fix was mostly plumbing

We attached a monotonic version to every asset snapshot and made the agent refuse to act on anything older than its freshness budget. In code, the guard is trivial:

if (now - snapshot.observedAt > FRESHNESS_BUDGET_MS) {
  return escalate('stale_snapshot', snapshot);
}

Dispatch volume dropped 4% and false dispatches dropped 61%. You can read more about the architecture on our industries page.

/ Next step

Put agents like these in your operation.

Book a call