Summary
Subagent completion announcements consistently fail to deliver results back to the parent session. Sub-agents complete their work but the announce mechanism times out, causing the parent agent to never receive the result. User must manually prompt for the final answer.
This regression worsened after upgrading to v2026.3.11 code (previously less frequent on earlier versions).
Related: #38300, #24923, #24514
Environment
- OpenClaw version: 2026.3.7 (also reproduced on 2026.3.11)
- OS: macOS (Darwin 25.3.0 arm64, Mac Studio M1 Ultra)
- Channel: Telegram
- Model: anthropic/claude-opus-4-6
- Node: v25.8.0
Evidence from gateway.log
Announce failures (12 total in last week)
2026-03-06 — 1 failure
2026-03-09 — 5 failures (up to retry 4/4)
2026-03-11 — 2 failures
2026-03-12 — 4 failures
Sample log lines:
[warn] Subagent announce completion direct announce agent call transient failure, retrying 2/4 in 5s: gateway timeout after 60000ms
[warn] Subagent announce completion direct announce agent call transient failure, retrying 3/4 in 10s: gateway timeout after 60000ms
[warn] Subagent announce completion direct announce agent call transient failure, retrying 4/4 in 20s: gateway timeout after 60000ms
Lane wait times (gateway.err.log) — extreme values
lane=session:agent:main:main waitedMs=139151 (2.3 min)
lane=session:agent:main:main waitedMs=289957 (4.8 min)
lane=session:agent:main:main waitedMs=619720 (10.3 min)
lane=session:agent:main:main waitedMs=2419771 (40.3 min)
lane=session:agent:main:main waitedMs=3599865 (60.0 min)
When lane waits exceed the 60s announce timeout + retry budget, the announce silently falls back to channel-only delivery. Parent agent session never gets a continuation turn.
Expected Behavior
Sub-agent completes → result injected into parent session → parent agent processes result and responds to user.
Actual Behavior
Sub-agent completes → direct announce times out on lane contention → falls back to Telegram channel post only → parent agent never gets triggered → user must manually ask "what happened?" to get the result.
Impact
- Every sub-agent task (coding, research, analysis) requires manual follow-up
- Breaks the spawn → delegate → return workflow that
sessions_spawn is designed for
- Effectively makes sub-agents unusable for autonomous pipelines
Suggested Improvements
- Announce should bypass lane contention — inject result as a priority system event, not queue behind normal messages
- Fallback should still trigger parent turn — even if direct announce fails, queue a system event so the parent gets a continuation turn eventually
- Configurable timeout —
announceTimeoutMs in agent config, since Opus turns on large context can easily exceed 60s
- Better observability — log clearly when announce downgrades from session-inject to channel-only
Summary
Subagent completion announcements consistently fail to deliver results back to the parent session. Sub-agents complete their work but the announce mechanism times out, causing the parent agent to never receive the result. User must manually prompt for the final answer.
This regression worsened after upgrading to v2026.3.11 code (previously less frequent on earlier versions).
Related: #38300, #24923, #24514
Environment
Evidence from gateway.log
Announce failures (12 total in last week)
Sample log lines:
Lane wait times (gateway.err.log) — extreme values
When lane waits exceed the 60s announce timeout + retry budget, the announce silently falls back to channel-only delivery. Parent agent session never gets a continuation turn.
Expected Behavior
Sub-agent completes → result injected into parent session → parent agent processes result and responds to user.
Actual Behavior
Sub-agent completes → direct announce times out on lane contention → falls back to Telegram channel post only → parent agent never gets triggered → user must manually ask "what happened?" to get the result.
Impact
sessions_spawnis designed forSuggested Improvements
announceTimeoutMsin agent config, since Opus turns on large context can easily exceed 60s