AI DevelopmentBuild lesson7 min readPublished September 21, 2026

N items in · N minus a few out · zero errors · the list was wrong before any agent ran

Why Parallel AI Agents Quietly Skip Part of the Work

Fan a batch out across subagents and items vanish with zero errors. The fault is the hand-written work list, not the agents. Three corruption points, one fix.

DA
Digital Applied Team
Research and practical guidance
Editorial dateSeptember 21, 2026
Vendor guidance readSeptember 22, 2026

You hand a batch of items to a fleet of parallel agents. They finish, every one of them reports success, and the batch is declared done. Later someone notices that a few items were never touched. No agent failed, because no agent was ever given them. The work list itself was short before the first agent started.

This is a failure mode we have hit in our own batch work, and it is the same mechanism every time. The orchestrating model writes the list of items by hand, or re-types it from a directory listing, a search result or its own earlier message, and entries are dropped or duplicated on the way. Nothing downstream can notice, because each worker succeeds on exactly what it was given. This post describes the mechanism, names the three places a list gets corrupted, and gives the reconciliation pattern that makes the gap visible. It states no failure rate, because the rate depends on the list, and the fix works at any rate.

Key takeaways
  1. 01
    The fault is in the work list, not the workers. Every worker succeeds on what it was given.A dropped item produces no error anywhere. The only signal is a count that does not match, and only if someone kept the count.
  2. 02
    Lists get corrupted in three places: hand-typing, truncated tool output, and a model summarising a list it should have copied.All three happen inside the orchestrator's own turn, before any delegation. All three are avoided by generating the list with code from the source of truth.
  3. 03
    The fix is a count and a reconciliation, not a smarter agent.Generate the assignment programmatically, record the count, pass identifiers not prose, and compare completed identifiers to the original set before saying done. Four invariants, all cheap.
  4. 04
    Retries make it worse when they are built from memory.A retry that re-types the remaining items reintroduces the corruption. Retry only the reconciled remainder, read from the same file the first pass used.

01The mechanismThe shape of the failure

The concrete shape is always the same. Forty items exist in a source of truth: a directory, a database query, a spreadsheet, a search result. The orchestrator reads them, writes a list of forty into its plan, and splits it across four workers. Each worker processes its ten, reports ten done, and returns. The orchestrator sums four reports of success and declares the batch complete.

Except the list it wrote had thirty-seven entries, or had forty with one item twice and three missing. A directory listing was long enough to be truncated in the tool output. A search returned a page of results and the model summarised it. The model re-typed the list from its own earlier message and skipped a line. In each case the list looked complete, the workers were given a complete looking slice, and the counts the orchestrator compared were counts of its own list, not of the source.

0
errors raised when three of forty items are never assigned
The invisible gap

Success is measured against the list, and the list is the thing that was wrong

Every layer below the orchestrator does its job. The workers succeed, the tool calls return, the logs are clean. The batch is short by exactly the number of entries the orchestrator lost while writing the list, and the only place that number exists is in the difference between the source and the list, which nobody computed.

02The causesThree places a list gets corrupted

All three happen inside the orchestrator's own turn, before any worker exists. That is what makes them hard to see: the multi-agent machinery is not involved yet, and the logs of that machinery are where people look.

1
Hand-typed from a source
The model transcribes

The orchestrator reads forty file names or forty identifiers and writes them into its plan as text. Transcription by a language model is lossy in the same way transcription by a person is: a skipped line, a repeated line, an identifier with two characters swapped. The list is then the plan, and the source is never consulted again.

Most common
2
Truncated tool output
The tool cuts, the model does not notice

A listing or a query result longer than the tool's output limit comes back cut, sometimes with a marker and sometimes without. The model treats what it received as the whole. Every item past the cut is absent from every downstream step, and no count was taken before the cut.

Silent
3
Summarised instead of copied
The model compresses

Asked to carry a list across a turn, a model may summarise it: "the twelve posts from the September batch" instead of the twelve slugs. The summary is then expanded from memory later, and the expansion is not the original. Context compaction does the same thing to a list held only in conversation.

Compaction

The third case is the one that gets past careful people, because the list was correct once. It was correct in the tool output, it was correct in the first plan, and it became a paraphrase somewhere between turns. Our compaction checks reference covers what else goes missing when a long session is compressed; a work list held only in conversation is on that list.

03The vendorsWhat the vendors say

None of this is a house theory. The three largest publishers of agent tooling describe the same division of responsibility in their own guidance, and each puts the list on the deterministic side of the line.

Anthropic's engineering account of its multi-agent research system, published June 13, 2025, says each subagent needs an objective, an output format, tool guidance and clear task boundaries, and that without detailed task descriptions agents "duplicate work, leave gaps, or fail to find necessary information". Its worked example is two subagents investigating the same supply-chain question while a third covered something else, with no effective division of labour. That is the duplication half of the failure described here; the gap half is the same defect seen from the other side.

OpenAI's Agents SDK documentation on orchestrating multiple agents draws the line explicitly: orchestration by an LLM is powerful, but orchestration via code "makes tasks more deterministic and predictable, in terms of speed, cost and performance", with running agents in parallel through ordinary language primitives as one of its listed patterns. The list of what to run in parallel is exactly the kind of thing that page puts in code.

Google's Agent Development Kit describes its parallel workflow agent as deterministic in how it executes its sub-agents and not controlled by a model, with each sub-agent in its own branch and no automatic sharing of state between branches. It also notes that the order of collected results may not be deterministic, which is a reminder that results have to be matched to assignments by identifier, not by position.

Without detailed task descriptions, agents duplicate work, leave gaps, or fail to find necessary information.Anthropic, How we built our multi-agent research system, June 13, 2025

04The fixThe reconciliation pattern

The pattern has four invariants. Each is a line of code or a single assertion, and together they make a dropped item impossible to miss. The orchestrating model still decides what to do with each item; it just stops being the thing that decides which items exist.

The list is generated, not writtenA script reads the source of truth and emits identifiers to a file. The model never types an identifier it did not read from that file. If the source is a tool call, the script handles pagination and truncation, and fails loudly if the output was cut.
list = f(source)
The count travels with the workThe script records the count beside the list. Every worker prompt carries the count of its own slice, and the orchestrator's completion check starts from the total, not from a sum of worker reports.
count(list) = N
Slices partition the setWorkers receive identifiers, not prose. The slices are computed so that their union is the list and their pairwise intersection is empty. A worker echoes the identifiers it received before starting, so a mismatch surfaces before any work is done.
∪ slices = list, ∩ = ∅
Done means reconciledEach worker writes the identifiers it completed. The orchestrator computes the set difference between the original list and the union of completed sets. The batch is done when that difference is empty, and not before. Anything left is the retry set.
list − done = ∅

The reconciliation step is the one people skip, because a sum of successes feels like the same check. It is not. Four workers reporting ten each is forty against the list; only the set difference is forty against the source. The same identifiers also make a run reproducible, which is the subject of our replay reference, and they keep fan-out inside the limits in our parallel-agent resource reference, because the slice size is now a number you chose rather than a guess the model made.

05In practiceThe checklist, and why retries hurt

Five lines, in the order they happen. The right column is why each line is there.

Digital Applied's checklist, September 21, 2026, from our own batch practice and the vendor guidance in section 03.
#Do thisBecause
1Generate the work list with code from the source of truth, never by typing or summarising it.Removes the hand-typed, truncated and summarised corruption points in one step.
2Count it, write the count and the list to a file, and pass the file path, not the list text, to the workers.The count is the contract. A file survives context compaction; a message does not.
3Give every worker an explicit slice by identifier, and have it echo the identifiers it received.Turns a silent gap into a visible one before any work starts.
4Reconcile completed identifiers against the original set before declaring the batch done.The only check that catches an item that was never assigned. Success counts cannot.
5Retry only the reconciled remainder, from the same file, never from a re-typed list.A retry built from memory reintroduces the fault it was meant to fix.
Why retries make it worse

A retry is usually triggered by a worker failure, and the orchestrator rebuilds the retry list from what it remembers of the batch. That is a fourth hand-typed list, built under more pressure than the first. Items that were never assigned are still not in it, because the orchestrator never knew about them, and items that succeeded can be re-run because the model misremembers which slice failed. Retry the reconciled remainder from the file, or do not retry at all.

This is how we run our own multi-item batches, and the file with the count is the artefact we check first when a batch looks short. If you are building a pipeline that fans work out across agents and want the orchestration layer designed so that this class of gap cannot occur, that is part of what we do under AI transformation.

06ConclusionThe agents did what they were told; the list is what lied

What to change

Generate the list with code, keep the count, and refuse to say done until the set difference is empty

Parallel agents are reliable at the thing they are given. The unreliable step is the one before delegation, where a model writes down what exists, and that step belongs in code. Move the list, the count and the reconciliation out of the model's hands, pass identifiers instead of prose, and retry only from the file. The failure stops being silent, and most of the time it stops happening.

Digital Applied

Batch pipelines that finish the whole batch.

We design the orchestration layer for teams running multi-agent work at scale, with generated work lists, reconciliation and replayable runs built in from the first batch.

Orchestration designReconciliation checksReplayable runs
Your next project

A fan-out you can trust

  • A work list generated from the source of truth
  • A count that travels with the work
  • A done check that means done
Questions and answers

Applying this post

No. It happens before the framework is involved, in the orchestrating model's own turn, whenever a list is typed, truncated or summarised rather than generated. Anthropic's, OpenAI's and Google's guidance all put list construction and parallel dispatch on the deterministic side of the line, and the fix is the same in any framework.
Digital Applied newsletter

Deep dives on AI, marketing and development.

Practical guides and fresh insights by email. No recycled takes.

Related dispatches

Continue reading

AI Development

Your AI Agent Didn't Get Worse. Your Metrics Broke.

A real capability regression and a broken measurement pipeline look identical on one dashboard. Two tests separate them, five common breaks, a first-hour plan.

September 21, 2026 · 7 minRead
AI Development

Eight Worlds of AI Agents Faced Three Attacks: None Passed

Emergence AI ran eight worlds of ten agents for up to 21 days, then staged three attacks. No world passed all three. The scores, and three fixes for builders.

September 16, 2026 · 8 minRead
AI Development

Why AI Adoption Numbers Disagree So Much, and Which to Use

20% of US businesses use AI; nearly nine in ten survey respondents say theirs does. Both are real. Four evidence classes explain the gap, with eight numbers.

September 21, 2026 · 5 minRead
AI Development

Give an Agent the Facts Before It Rewrites Your Archive

Before an AI agent rewrites hundreds of pages, index every claim, figure and source already in them. The schema, three rules, and what to do when a claim fails.

September 21, 2026 · 7 minRead
AI Development

State of AI Agents 2026: 200+ Data Points Compiled

The definitive State of AI Agents 2026 — 247 data points across adoption, ROI, autonomy, and governance, sourced from McKinsey, Stanford HAI, and Gartner.

May 22, 2026 · 16 minRead
AI Development

AI Video Generation 2026: Omni vs Sora vs Veo 3 Compared

Gemini Omni, OpenAI Sora 2, and Google Veo 3.1 compared for video — quality, per-second cost spread of 17x, and the September 24 Sora API sunset clock.

May 22, 2026 · 15 minRead