Queued reads
A captured run: four URLs queued with fetch_async, acknowledged instantly, all resolved within 29 seconds — three read via direct route, one genuine failure reported verbatim with both attempted routes, then resubmitted to retry.
The research question
"Check the release notes across the projects we depend on." Several pages, none urgent — the agent shouldn't hold a conversation open per page, or hammer them all at once from one IP.
Queue the list — immediate acknowledgement
Release notes across the projects you depend on, checked while the agent gets on with something else — three real sources and one URL that no longer resolves. Captured 8 Aug 2026, 10:03 UTC, from Claude Code over MCP; payloads verbatim, long bodies excerpted. fetch_async acknowledged at once — no long-held connection.
// queue the reads, come back later fetch_async(urls: [ "https://deno.com/blog/v2.9", "https://github.com/denoland/deno/releases", "https://docs.deno.com/runtime/desktop/", "https://deno-was-retired.example.dev/changelog" ]) { "queued": [ …all four… ], "alreadyDone": [] }
Collect the outcomes — 29 s later, all four resolved
Each source is read politely, paced at a human rate. The first poll, 29 seconds after queueing, found all four settled — three done, one failed with both attempted routes in the error. A URL still being read reports PENDING in the same format; this run simply finished before the first poll.
// pull whatever is ready fetch_results(urls: [ …same four… ]) # https://deno.com/blog/v2.9 [via direct] ← 44 KB of markdown # Deno 2.9 June 25, 2026 … --- # https://github.com/denoland/deno/releases [via direct] ← 119 KB of markdown # Releases: denoland/deno … --- # https://docs.deno.com/runtime/desktop/ [via direct] ← 6 KB of markdown # Desktop apps `deno desktop` turns a Deno project … into a self-contained desktop application. … --- # https://deno-was-retired.example.dev/changelog FAILED: Error: fetch failed for …/changelog: direct (blocked/error content: {"error": 500, "correlation_id":"15a074e1ae81"}); stealth (stealth 502: Page.goto: net::ERR_CERT_AUTHORITY_INVALID …)
Retry is a resubmission — never a silent drop
The failure names both routes tried and carries a correlation id. Retrying is just queueing it again. The queue is for politeness and patience, not volume — the same per-source pacing applies whether the list is three pages or thirty.
fetch_async(urls: [ "https://deno-was-retired.example.dev/changelog" ])
{ "queued": [ "https://deno-was-retired.example.dev/changelog" ],
"alreadyDone": [] }
Measured outcome, and where this came from
The agent came back to three readable sources totalling 169 KB and one explicit failure — nothing pending, nothing silently dropped. Acknowledgement was immediate; every URL had settled by the first poll, 29 seconds after queueing, with per-source pacing the sites never notice.
client Claude Code over MCP 10:03:24 fetch_async → { queued: [4], alreadyDone: [] } — instant 10:03:53 fetch_results → 3 done (44 KB, 119 KB, 6 KB) · 1 FAILED, both routes named trace failure carries correlation id 15a074e1ae81 — see the quiet failure retention bodies cached server-side · 24 h