Your agent called a microservice. The microservice used an event queue. Your agent is still waiting

Synchronous tool call patterns fail when the underlying service is event-driven. The integration pattern has to match the architecture of what it is calling.

B

Balagei G Nagarajan

4 MIN READ


Synchronous agent tool call failing against async microservice
Failure mode: if the callback is not received (network failure, misconfiguration), the tool hangs indefinitely.
— from “Your agent called a microservice. The microservice used an event queue. Your agent is still waiting”

Key facts.

  • METR's time-horizon evaluations (arXiv:2503.14499) found that agents on tasks requiring long-horizon or asynchronous process management show substantially larger performance gaps versus human baseline than on synchronous, single-session tasks (METR, arXiv:2503.14499).
  • Event-driven architectures where services communicate via message queues (Kafka, RabbitMQ, SQS) process requests asynchronously; a synchronous tool call to an event-driven system typically receives an "accepted" response with a job ID, not a result.
  • Internal microservices at scale enterprises commonly use async patterns for operations that exceed 200ms processing time, meaning a significant portion of enterprise tool integrations are inherently async without the agent scaffolding team necessarily knowing.
  • tau2-bench (arXiv:2506.07982) includes scenarios where agents must manage tool state across multiple turns, exposing the failure mode where agents lose track of async jobs started in earlier turns because they have no persistence mechanism for job IDs.
  • Polling-based async wrappers, where the tool wrapper starts the async job and then polls a status endpoint until completion before returning to the agent, convert async systems to synchronous interfaces but introduce their own failure modes: polling timeouts, missed completion signals, and resource consumption during wait periods.

The three async integration patterns and their failure modes

METR shows reliability drops on async work; a more capable model times out on an event queue when the wrapper assumes sync REST. (arXiv:2503.14499)

Three patterns exist for bridging synchronous agent tool calls to async microservices, each with distinct failure modes. The first is polling: the tool wrapper submits the job, stores the job ID, and polls the status endpoint at intervals until completion or timeout. Failure mode: if the polling timeout is shorter than the job's processing time, the tool returns an incomplete result. If the polling interval is too short, the tool consumes excessive resources. The second is callback: the tool wrapper registers a callback URL and waits for the async system to notify on completion. Failure mode: if the callback is not received (network failure, misconfiguration), the tool hangs indefinitely. The third is fire-and-forget with deferred collection: the tool wrapper submits the job and returns immediately; a separate tool call collects the result when needed. Failure mode: the agent must track the job ID across turns, which most agent frameworks do not natively support.

What async-aware tool wrappers require

An async-aware tool wrapper needs four components that a synchronous wrapper does not. First, a job registry that persists job IDs across agent turns, not just within a single tool call. Second, a status polling or notification mechanism that checks job state without blocking the agent's context window. Third, a timeout and escalation path for jobs that exceed their expected completion window. Fourth, a result collection mechanism that the agent can invoke separately from the job submission, allowing the agent to continue other work while the async job processes.

Flow diagram comparing sync vs async tool wrapper patterns

Async wrapper pattern comparison

PatternAgent experiencePrimary failure modeBest for
Polling wrapperBlocking until resultTimeout shorter than job processingJobs under 30 seconds
Callback wrapperNon-blocking, agent continuesCallback not receivedJobs with reliable delivery guarantees
Fire-and-collectNon-blocking, manual collectionAgent loses job ID across turnsLong-running jobs, multi-session workflows
Webhook receiverNon-blocking, event-driven responseWebhook delivery failureSystems with native webhook support

VibeModel's Pattern Intelligence Layer identifies which tool integrations in your deployment show the failure signatures of sync-wrapper-on-async-service: recurring timeout patterns, missing result collection steps, and job ID loss across turns. By surfacing these patterns, it makes the architectural gap visible before it produces a production incident. The fix is a wrapper architecture decision, not a model improvement, and the pattern layer tells you which integrations need it.

Frequently asked questions

How do we know whether a given internal microservice is async without reading its implementation?
Request the service's API documentation and look for two signals: responses that return a job ID or correlation ID rather than an immediate result, and documentation that mentions webhooks, callbacks, or event notifications for result delivery. Either signal indicates an async system that needs an async wrapper.

Can we make all our async tool integrations look synchronous to the agent by wrapping them?
Yes, and this is the recommended approach for most agent frameworks: abstract the async pattern at the wrapper level so the agent always sees a synchronous interface. The wrapper handles polling, timeouts, and retries. The tradeoff is that long-running jobs block the tool call, consuming the agent's attention for the duration.

What happens when a job starts during one agent session and needs to be checked in a future session?
This requires persistent state outside the agent's context window: a database or cache that stores job IDs with their session associations. Most agent frameworks do not provide this natively. It has to be built in the scaffolding layer and exposed to the agent as a "check job status" tool rather than a state that the agent remembers.


Share this post

Join the discussion

Have a take, a war story, or a question? Sign in with GitHub to comment and react. Comments are powered by GitHub Discussions, ad-free and yours to moderate.

Continue Reading

Find where your agent breaks, before you build it

Faultmap maps where your agent will fail from the goal and your data, then hands you the first test suite it has to pass.