agent failed with timeout waiting for concur approval workflow state
Fixes agent timeouts polling Concur approval state with bounded polling and webhook-style checks. Use when an agent hangs waiting for a Concur approval workflow to advance. Not for broken approval chains.
TL;DR
The agent polls Concur waiting for an approval that may take days, and the poll loop hits the agent's timeout. Poll with a bounded number of attempts and long intervals, persist the watch state, and resume checking in a later run instead of blocking one run indefinitely.
Error
agent failed with timeout waiting for concur approval workflow stateSteps
- Replace tight polling with sparse checks: query the approval state every 15 to 30 minutes, not every few seconds. Expected: far fewer API calls and no rate-limit risk.
- Set a maximum watch duration per run (for example, 2 hours); when it expires, save the report ID and current state. Expected: the run ends cleanly instead of timing out.
- Persist the watch list to durable storage between runs. Expected: the next run picks up exactly the reports still pending.
- On each check, compare the workflow state to the saved state; act only on transitions. Expected: the agent reacts to approvals without busy-waiting.
- If Concur offers event notifications for your plan, subscribe to approval events instead of polling. Expected: near-instant reaction with zero polling.
When to use
- An agent blocks waiting for a Concur approval workflow.
- Approvals legitimately take hours or days.
When not to use
- The approval chain is broken (see the approval-chain skill).
- The agent needs the approval to proceed at all (redesign the flow to be resumable).
Tool compatibility
- SAP Concur approval APIs; custom agent watch loops.
Variant phrasings
Agent timed out polling approval status
Same failure, shorter wording.
Approval watch exceeded run budget
The scheduler phrasing of the same timeout.
Why it happens
Human approvals operate on human timescales. An agent that waits synchronously for a days-long process will always outrun its own time budget; the watch must be resumable across runs.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_2DucxQu9on72GyOH1QOpjQ