Problem
When a subagent completes and tries to announce back to the requester session, it uses a direct agent call. If the requester session has an active run, the announce hits a 90s gateway timeout, retries up to 4 times, and then gives up entirely — the announce is lost.
Logs
[warn] Subagent announce completion direct announce agent call transient failure,
retrying 2/4 in 5s: gateway timeout after 90000ms
[warn] Subagent announce give up (expiry)
run=8738b987 child=agent:product-manager:subagent:fe5424f1
requester=agent:main:telegram:direct:6740110650
retries=0 endedAgo=1871s
Expected Behavior
The announce should be queued (similar to how collect mode queues inbound messages) and delivered when the requester session's current run completes. The announce should never be lost.
Current Behavior
- Subagent completes
- Direct agent call to requester session
- Requester session is busy (active run) or announce retry window expires
- 90s timeout × retries
- Give up — announce is permanently lost
- Requester has no idea the subagent finished
Scenario
- Main agent spawns a product-manager subagent for a long coding task (~40 min)
- Subagent completes successfully (commits + pushes code)
- Announce attempts fail with gateway timeout
endedAgo=1871s (31 minutes after completion) → give up
- User never receives the completion notification
Other Reports
Same issue reported by another user in Docker environment (Answer Overflow, Feb 2026):
Subagent completion direct announce failed: gateway timeout after 15000ms
Suggested Fix
Route subagent announces through the existing message queue system (e.g., collect mode) rather than direct agent calls. This way:
- Announce lands in the queue
- Delivered on next turn (or immediately if session is idle)
- Never lost
Environment
- OpenClaw version: 2026.3.13
- Queue mode: collect
- maxConcurrent: 10
Problem
When a subagent completes and tries to announce back to the requester session, it uses a direct agent call. If the requester session has an active run, the announce hits a 90s gateway timeout, retries up to 4 times, and then gives up entirely — the announce is lost.
Logs
Expected Behavior
The announce should be queued (similar to how
collectmode queues inbound messages) and delivered when the requester session's current run completes. The announce should never be lost.Current Behavior
Scenario
endedAgo=1871s(31 minutes after completion) → give upOther Reports
Same issue reported by another user in Docker environment (Answer Overflow, Feb 2026):
Suggested Fix
Route subagent announces through the existing message queue system (e.g.,
collectmode) rather than direct agent calls. This way:Environment