Failure boundaries
Temporal guidance places nondeterministic and failure-prone work, including API and LLM requests, in Activities rather than deterministic Workflow code.
Activity retry behavior
Temporal automatically retries a failed Activity under its default policy. The policy is declarative: application code selects settings instead of implementing the retry loop.
Activity idempotency
Temporal advises Activity authors to make repeated invocation safe, because an attempt can run again when it does not successfully report its result back to the service.
In this context, idempotence means repeated Activity Task Executions do not alter system state beyond the first execution.
Continue reading: Recovering a Workflow After an Ambiguous External Result.
Retry policy scope and defaults
Temporal’s documented Activity defaults begin with a one-second delay, double later waits, limit an individual wait to one hundred times that starting delay, leave attempts unbounded, and define no excluded error classes.
Temporal documentation distinguishes this from workflow behavior: Activities have retry settings by default, whereas a Workflow Execution does not receive that same default policy.
Temporal also allows a custom Retry Policy to be supplied in the options used to start an Activity Execution or Workflow Execution.
For ordinary workflow failures, prefer a local recovery path around the affected work instead of restarting the entire business process. Whole-workflow retry can be appropriate for selected stateless or file-processing cases, but it should be an intentional design choice.
Runner and durable retry boundaries
The OpenAI Agents SDK Runner is an in-process agent-loop abstraction. Its documented entry points support asynchronous execution, synchronous execution, and event streaming.
During a run, the Runner can call a model, process handoffs, invoke requested tools, feed tool results back into the loop, and stop when a suitable final result is reached. Its turn cap can end the run when the configured number of turns is exceeded.
Runner max_turns is an iteration guard, not a durable retry policy for an Activity. Likewise, a model or tool failure policy should not be assumed from a Temporal Activity policy unless the integration code deliberately maps one to the other.
The current supplied SDK material references a Temporal integration in navigation, but it does not describe that integration’s persistence model, retry mapping, checkpointing, or guarantees.
Continue reading: Choosing Between Laravel Queues and Agent Approval Workflows.
Payment example
Temporal uses payment processing to illustrate idempotency: repeating a request for one purchase should not create an extra customer charge.
For an Activity, the supported design objective is safe re-execution. These excerpts do not establish a particular idempotency-key format, provider-status query, checkpoint schema, or compensation rule.
Source-pack limits
The supplied excerpts do not identify deployed package versions or provide release-specific change details, so APIs and documented defaults should be checked against the versions in use.
The excerpts also do not specify how the intended Agents SDK and Temporal integration is wired. Confirm which calls occur inside a single Runner invocation, which calls receive their own Activities, how cancellation propagates, and where resumed state is stored.
The supplied excerpts likewise do not establish a mandatory pre-production scenario review or prescribe checkpoint, key, retry-class, timeout-owner, and reconciliation-authority fields.
The claim identifies the ambiguity but stops short of a recoverable boundary. Consider a payment Activity: attempt A submits the charge, the provider commits it, and the worker loses connectivity before Temporal records completion. Temporal can place a new Activity Task after the failure; that is the expected retry mechanism, not evidence that attempt A had no effect. Temporal explicitly recommends idempotent Activities because they may execute more than once, and defines the goal as repeated execution having the same result as one execution. Temporal Activity Definition
Before relying on retry, require an observable recovery path: assign one stable operation identity for the business effect, have the external boundary return the prior committed result for that identity rather than perform the effect again, and record enough outcome information to distinguish not attempted, outcome unknown, and confirmed committed. Then test the cut point: commit externally, suppress the Activity completion report, allow the retry, and verify exactly one external effect plus a workflow-visible recovered result. Without that detection and reconciliation test, a successful retry only proves that a later attempt returned successfully.
The default Activity policy can retry indefinitely with exponential backoff, so it increases the chance that this ambiguous interval will be revisited; it does not resolve the external system’s prior state. Temporal Retry Policies