Finding / temporal-agent-harness

2026-09-21-temporal-agent-harness-no-double-run-tool-calls-holds-for-completed-activities-on-replay-not-for-a-tool-interrupt

“No double-run tool calls” holds for completed activities on replay, not for a tool interrupted mid-run; nothing enforces idempotency. Answers operator question 4. An activity-backed tool gets a 30-second start-to-close timeout and no retry policy from the harness. With no policy, the Temporal service’s default applies: retries with backoff and no attempt cap. That is a Temporal behaviour, not a harness one. Replay after a worker crash does not re-run an activity whose completion is in history, and that is what the README claim rests on. An activity that was running when the worker died, or that exceeded 30 seconds, is scheduled again and user_fn runs again with the same arguments. A long bash-like activity tool can therefore run twice purely because of the default timeout. Nothing in the harness requires or checks that a tool is idempotent, and no idempotent flag or doc guidance exists at the tag (git grep -i idempot hits only subagent and approval-decision internals). Callback tools, the coding example’s six, are different: the result submission is idempotent per tool_id (coding_agent/README.md “How it maps to the harness”), but the side effect runs on the laptop before submission.

Channel: preview-or-beta. Half: defect. Date: present at 0.4.0; default unchanged at d7a55f8855 (M agent_workflow.py line 2855).

Operator consequence: Make every activity-backed tool with side effects idempotent yourself, or set activity_config with RetryPolicy(maximum_attempts=1) and a realistic timeout. Read “no double-run” as “no re-run of completed work on replay”. This is a harness-plus-Temporal-service claim, and the harness does not cover tool side effects (contract rejected evidence: temporal_platform_guarantee_assumed_to_cover_tool_side_effects).

Receipt

Finding metadata

Run: 2026-09-21-weekly-digest-2026-08-20_2026-09-21-frontier-v0

Finding ID: 2026-09-21-temporal-agent-harness-no-double-run-tool-calls-holds-for-completed-activities-on-replay-not-for-a-tool-interrupt

Source links

Primary links, including exact changelog lines when available.