Skip to content

[Bug]: Sub-agent announce-back fails with 10-second gateway WS timeouts; parent agents never receive child output, causing chat sessions to appear non-responsive #79032

Description

@RealDavidArt

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

OpenClaw 2026.5.3-1 gateway emits chronic 10-second timeouts on local WebSocket handshakes, outbound HTTP fetches, and pi-trajectory-flush cleanup. The downstream effect is Subagent announce failed: GatewayTransportError: gateway timeout after 10000ms events that prevent parent agents from receiving sub-agent output, leaving Discord/Slack chat sessions visibly unanswered.

Steps to reproduce

  1. Run OpenClaw 2026.5.3-1 gateway on macOS, single host, gateway transport ws://127.0.0.1:18789.
  2. Configure at least one orchestrator agent that spawns a sub-agent via sessions_spawn. In the observed environment: kirk (openai-codex/gpt-5.4, has sessions_spawn allowed and tyler in subagents.allowAgents) → spawns tyler (openai-codex/gpt-5.3-codex, has exec).
  3. After ~30+ minutes of gateway uptime, send the orchestrator a chat message that requires sub-agent delegation (e.g., a question that requires a sf data query or local file rg search).
  4. Observe ~/.openclaw/logs/gateway.err.log. The sub-agent run completes (embedded run agent end ... result=success), then the announce-back path emits:
Subagent announce failed: GatewayTransportError: gateway timeout after 10000ms
Gateway target: ws://127.0.0.1:18789

repeated 3 times, followed by:

[warn] Subagent announce give up (retry-limit) run=<runId>
       child=agent:tyler:subagent:<sessionId>
       requester=agent:kirk
       retries=3 endedAgo=135s
  1. The parent agent (kirk) waits its full turn timeout (270 s by default), then falls back to embedded mode without sub-agent output. The chat client shows the typing indicator throughout; no reply lands.

Expected behavior

When a parent agent calls sessions_spawn and the child agent's run completes successfully, the child's output should be returned to the parent within the configured retry budget (default 3 × 10 s WS round-trips). The parent should then synthesize a reply that includes the child's results. This was the observed behavior in this same environment as recently as 2026-04-29 (last successful sub-agent-driven cron run for the fluidcloud-deal-intelligence skill). On 2026-05-04 the same skill begins emitting Subagent announce failed errors instead.

Actual behavior

Sub-agent run completes successfully (embedded run agent end ... result=success), but the announce-back to the parent fails 3× with GatewayTransportError: gateway timeout after 10000ms, after which Subagent announce give up (retry-limit) fires. The parent agent receives no payload from the child, waits the full turn timeout (270 s), then falls back to embedded execution with no sub-agent context. The end user sees a persistent typing indicator in Discord/Slack with no reply.

This is part of a broader pattern of 10-second timeouts across the gateway:

  • 694 [fetch-timeout] fetch timeout after 10000ms events in current gateway.err.log (Discord users/@me, Telegram getMe)
  • 470 [agent/embedded] agent cleanup timed out: step=pi-trajectory-flush timeoutMs=10000 events
  • 34 [ws] handshake timeout events on the local loopback 127.0.0.1:18789

All three timeout types fire at the same 10 000 ms budget, simultaneously, in clustered intervals.

OpenClaw version

2026.5.3-1 (2eae30e)

Operating system

macOS 26.3 (build 25D125), Apple Silicon

Install method

npm global install (Homebrew Node 22). Resolved binary at /opt/homebrew/lib/node_modules/openclaw/dist/run-main-CWn0ToOV.js

Model

Parent: openai-codex/gpt-5.4 (kirk) Child: openai-codex/gpt-5.3-codex (tyler) Pattern observed across multiple parent/child combinations; not model-specific.

Provider / routing chain

chat client (Discord plugin or local CLI) → openclaw gateway (ws://127.0.0.1:18789) → embedded agent runner → openai-codex provider via OAuth (ChatGPT-account tier, profile [email protected]) → api.openai.com Codex Responses No proxy, no router, single-host loopback gateway, single OAuth profile per provider.

Additional provider/model setup details

  • 31 agents across 6 pod-head workspaces. Pod heads: openai-codex/gpt-5.4. Sub-agents: openai-codex/gpt-5.5. Executors: openai-codex/gpt-5.3-codex.
  • Per-agent fallback chain (pod heads): gpt-5.4 → gpt-5.4-mini → gemini-2.5-pro → mistral-large-2512 → claude-sonnet-4-6.
  • Per-agent fallback chain (sub-agents and executors): primary → gpt-5.4-mini → mistral-medium/small → claude-haiku.
  • agents.defaults.thinking is unset; per-agent thinking inherits openclaw default (medium for reasoning models).
  • Memory plugin: memory-lancedb-pro v1.1.0-beta.10 (community, jiti-loaded from index.ts), autoCapture + autoRecall enabled, Jina v5 embeddings, hybrid BM25+vector retrieval.
  • All provider auth verified working via direct API probe at the time of observation: openai-codex OAuth valid (10d remaining), Mistral 200, Gemini 200 on direct calls (different shape than gateway emits — see ruled-out cause below), Anthropic env-key present.

Logs, screenshots, and evidence

Sample sub-agent announce-back failure (parent: kirk, child: tyler):


2026-05-06T15:57:08 [agent/embedded] embedded run agent end:
  runId=5b488235 model=gpt-5.3-codex provider=openai-codex result=success
2026-05-06T15:58:10 Subagent announce failed: GatewayTransportError: gateway timeout after 10000ms
  Gateway target: ws://127.0.0.1:18789  Source: local loopback  Bind: loopback
2026-05-06T15:58:20 Subagent announce failed: GatewayTransportError: gateway timeout after 10000ms
2026-05-06T15:58:30 Subagent announce failed: GatewayTransportError: gateway timeout after 10000ms
2026-05-06T16:00:00 [warn] Subagent announce give up (retry-limit)
  run=5b488235 child=agent:tyler:subagent:b44e0fde
  requester=agent:kirk:explicit:gateway-fallback-eb230810-dd4a-49f7-83f8-ab8750b71b88
  retries=3 endedAgo=135s


Sample local WS handshake timeout:

2026-05-07T06:25:06.316-07:00 [ws] handshake timeout
  conn=3afb56c1-f33e-4f85-bae5-480131cdb3ef
  peer=127.0.0.1:49914->127.0.0.1:18789
  remote=127.0.0.1


Sample outbound fetch timeout:

2026-05-07T09:40:33.736-07:00 [fetch-timeout] fetch timeout after 10000ms (elapsed 11224ms)
  operation=fetchWithTimeout url=https://discord.com/api/v10/users/@me


Frequency in current `gateway.err.log` (single 24-hour window):
- fetch-timeout events: 694
- agent cleanup timed out (pi-trajectory-flush): 470
- ws handshake timeout (loopback :18789): 34
- Subagent announce failed: present across multiple distinct runIds; rotated logs show pattern recurring daily since 2026-05-04

Impact and severity

Affected users/systems/channels:

  • All chat surfaces that depend on sub-agent delegation (Discord ask-* channels, Slack ask-* channels via slack-openclaw-bridge, direct CLI invocation when the agent's logic spawns a sub-agent).
  • Specifically affects orchestrator agents (pod heads in this setup: kirk, jessica, ralph, tammy, harrel, dr-attia, main) when they delegate to executor sub-agents (tyler, work, luther, gus, alan).

Severity: Blocks workflow.

  • Direct CLI calls fall back to embedded mode (degraded but functional — no sub-agent output).
  • Discord/Slack chat sessions show typing indicator with no reply, requiring user to manually retry or wait for gateway restart.

Frequency: Intermittent, increasing.

  • First clearly observed 2026-05-04. Recurs ~daily, sometimes multiple times per day.
  • A detached gateway restart (openclaw gateway stop; openclaw gateway start via nohup) clears the cumulative state for ~30–60 minutes; cascade returns afterward.
  • The 10-second timeout pattern is constant in the log; it just takes time to accumulate to user-visible levels.

Consequence:

  • Sub-agent-driven cron jobs (e.g., daily Salesforce hygiene reports, daily Grain ingestion) intermittently produce incomplete output because parent agents synthesize without child input.
  • Conversational queries to orchestrator agents that should delegate (e.g., "look up X in Salesforce") return either no reply or a guess-based reply rather than the queried data.
  • Operator must manually recover via gateway restart on observation; no auto-recovery.

Additional information

Workaround in use:
A detached gateway restart restores normal operation for ~30–60 minutes. Implemented as a script that backgrounds the stop+start so the agent triggering the restart can finish replying first. This is a band-aid; the cascade returns.

Ruled-out causes (verified via direct probes at the time of observation):

  • Network: Direct curl to https://discord.com/api/v10/users/@me and https://api.telegram.org/bot.../getMe from the same host returns HTTP 200 in <500 ms.
  • Auth: All provider tokens validated. openai-codex OAuth has 10 days remaining. Other providers respond 200 on direct probe.
  • CPU/memory: Gateway process consistently at 0.4% CPU, 382 MB RSS, 69 fds open (limit 1,048,576) at the time WS/fetch timeouts fire. No OS-level resource pressure.
  • Specific LLM provider failure mode: Removed google/gemini-2.5-flash-lite from agent fallback chains (was returning HTTP 400 with no body for openclaw's request shape, despite working on direct curl probes). Cascade persists post-removal.
  • Specific noisy plugin: Disabled telegram polling and locally patched memory-lancedb-pro to disable its broken runBackup loop (separate chronic TypeError [ERR_INVALID_ARG_TYPE]: path argument undefined). Cascade persists post-disable.

Observation that may help diagnosis:
The fact that loopback 127.0.0.1 WS handshakes time out at the same 10-second budget as outbound HTTP fetches suggests the timeouts share a common cause inside the gateway process rather than at the network or remote-service layer. Whether this is event-loop blocking, a shared timeout constant, or something else is not directly observable from my position — happy to capture additional traces if you can point me at debug flags.

Last known good: Sub-agent-driven workflows ran reliably as recently as 2026-04-29. The fluidcloud-deal-intelligence cron skill (which spawns Tyler then Josh from Kirk) executed cleanly on 2026-04-29 with full sub-agent output reaching the parent.

First known bad: 2026-05-04 — first observed agent cleanup timed out events and Subagent announce failed errors in this environment.

I am not aware of an OpenClaw version change between 2026-04-29 and 2026-05-04 in this install (openclaw was 2026.5.3-1 throughout the window), but I cannot rule out a plugin update or an upstream provider response-shape change as the trigger.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions