#timeoutseconds override

1 messages · Page 1 of 1 (latest)

gloomy river
#

Hello Krill, We are debugging an OpenClaw subagent route.

Context:

  • Ditto has a route block for route ingest-acr.
  • The route block says to spawn Shellder with:
    agentId: "Shellder"
    runtime: "subagent"
    mode: "run"
    cleanup: "delete"
    task: "/reset Read /home/node/.openclaw/workspace/agents/shellder/INSTRUCTIONS.md for your full instructions."
  • The route block does NOT specify timeoutSeconds.
  • However, the actual sessions_spawn tool call in the session log included:
    "timeoutSeconds": 10
  • The child Shellder task timed out after partial progress.
  • Shellder’s task needs enough time to read instructions, request/receive exec approval, run:
    node /home/node/.openclaw/workspace/tools/rag/community/run-approved-community-ingest.mjs
    and write ingest/list reports.

Question:
Why would the agent/LLM/tool call automatically choose such a low timeoutSeconds: 10 when the route instructions did not specify it? Is this likely model-invented, tool default, runtime default, or coming from another instruction/config?

Please answer:

  1. Most likely source of timeoutSeconds: 10
  2. How to confirm the source from logs/config/source
  3. Correct way to override it in the route
  4. Whether adding timeoutSeconds: 600 to the route spawn block is valid
  5. Whether there is a better pattern than relying on the model to infer timeout
  6. Minimal safe patch to the route text
  7. Verification steps after the patch

i am running 2026.5.6

empty orioleBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

ancient steppeBOT
#

I checked the subagent docs/source shape. Short version: 10 is almost certainly not an OpenClaw default.

  1. Most likely source of timeoutSeconds: 10
    If the session transcript shows the assistant’s sessions_spawn tool call arguments contained "timeoutSeconds": 10, that value was chosen by the parent agent/model while translating your route text into a tool call.

OpenClaw’s documented native subagent timeout field is runTimeoutSeconds, and when omitted the default is:

  • agents.defaults.subagents.runTimeoutSeconds, if configured
  • otherwise 0 = no run timeout

So a bare route block should not become 10 seconds from the runtime default.

There is one nuance: timeoutSeconds is still accepted as a legacy/back-compat alias for runTimeoutSeconds in 2026.x. So timeoutSeconds: 10 is valid input, but it’s not the canonical field.

Docs: https://docs.openclaw.ai/tools/subagents

  1. How to confirm
    Check two different places:
#
  • The parent session transcript JSONL. Look for the sessions_spawn tool call input. Usually under:
    ~/.openclaw/agents/<DittoAgentId>/sessions/<sessionId>.jsonl

    If the assistant/tool-call event itself has timeoutSeconds: 10, the model emitted it.

  • Config:
    openclaw config get agents.defaults.subagents

    If you see runTimeoutSeconds: 10, then an omitted tool timeout could resolve to 10 at runtime. But in that case I’d expect the raw assistant tool call not to contain timeoutSeconds: 10; the resolved run record/tool result would show the effective timeout.

Also useful:
openclaw logs --follow
then reproduce once and search for sessions_spawn, runTimeoutSeconds, timeoutSeconds, and the child runId.

  1. Correct override in the route
    Put the timeout directly in the spawn block as an explicit tool argument. Prefer the canonical field:
#
runTimeoutSeconds: 600
  1. Is timeoutSeconds: 600 valid?
    Yes, because OpenClaw still accepts timeoutSeconds as a legacy alias and maps it to runTimeoutSeconds. But I’d use runTimeoutSeconds: 600 so the route matches current docs/source and avoids ambiguity with other timeout concepts.

  2. Better pattern
    Don’t rely on the model to infer operational values like timeouts. Make the route block prescriptive: include exact spawn args and an instruction like “do not add or lower timeout fields.” Even better, if many routes need this, set a global default:

agents: {
  defaults: {
    subagents: {
      runTimeoutSeconds: 600,
    },
#
  },
}

Then use per-route overrides only for exceptional jobs.

  1. Minimal safe patch to the route text
    Something like:
Spawn Shellder with exactly these sessions_spawn args:
  agentId: "Shellder"
  runtime: "subagent"
  mode: "run"
  cleanup: "delete"
#
  runTimeoutSeconds: 600
  task: "/reset Read /home/node/.openclaw/workspace/agents/shellder/INSTRUCTIONS.md for your full instructions."
Do not set timeoutSeconds. Do not lower runTimeoutSeconds.
  1. Verification after patch
  • Trigger route ingest-acr once.
  • Inspect the parent transcript and confirm the raw sessions_spawn call contains runTimeoutSeconds: 600 and does not contain timeoutSeconds: 10.
  • Inspect logs/tool result for the child run and confirm effective runTimeoutSeconds is 600.
  • Confirm Shellder either completes the ingest/list reports or times out near 600s, not 10s.
  • If it still emits 10, search Ditto’s instructions/config for timeoutSeconds, 10, or “bounded/quick subagent” wording; that would mean another prompt/config instruction is biasing the parent model.

My read: this is most likely parent-model invention from an underspecified route, not a runtime default. Adding the explicit timeout to the route is the right fix. 🦞