#incomplete turn detected: stopReason=stop payloads=0

1 messages · Page 1 of 1 (latest)

fleet loom
#

I'm always getting this error with openrouter models: 11:54:37+00:00 warn agent/embedded {"subsystem":"agent/embedded"} incomplete turn detected: runId=78f69b6f-4a28-4c5d-bb0d-f448c643b66a sessionId=4e32e3de-1b9b-4e30-90e9-843bc0def67e stopReason=stop payloads=0 — surfacing error to user

I tested /auto, /free, openai/gpt-oss-120b:free and meta-llama/llama-3.3-70b-instruct:free.

In the openrouter activity page I notice that there's no request sent to openrouter by openclaw.

I tested sending the same request ("content": "[Thread starter - for context]\nThread 1\n\nHello\n\n<<<EXTERNAL_UNTRUSTED_CONTENT id="3fbd612969ac0204">>>\nSource: External\n---\nUNTRUSTED Discord message body\nHello\n<<<END_EXTERNAL_UNTRUSTED_CONTENT id="3fbd612969ac0204">>>") with curl and openrouter replys to it.

patent cosmosBOT
prisma egretBOT
#

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

patent cosmosBOT
barren tuskBOT
#

This looks like a real OpenRouter integration bug in OpenClaw, not a bad prompt.

payloads=0 means OpenClaw ended the turn with stopReason=stop but built no visible assistant output. I checked the code/changelog, and there were several recent OpenRouter fixes for exactly this class of failure:

  • openrouter:auto / openrouter:free alias mis-resolution
  • stale OpenRouter base URL normalization (/v1 vs /api/v1)
  • streamed reasoning_details / response.output_text getting dropped, which also ends in payloads=0

First thing, can you paste these 4 outputs?

openclaw --version
openclaw models status --probe
openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json
openclaw logs --follow
#

What to look for:

  • model resolves to openrouter/openrouter/auto or openrouter/openrouter/free → alias bug
  • base URL is anything other than https://openrouter.ai/api/v1 → stale/bad config
  • OpenRouter gets the request but OpenClaw still says payloads=0 → likely the recent stream parsing bug
  • OpenRouter gets nothing at all → auth/profile/baseUrl resolution problem

Also, if you're on 2026.4.14 / 2026.4.15-ish, I would upgrade first. A bunch of OpenRouter fixes landed right after that.

Docs:

If you paste those outputs, I can narrow it down pretty quickly. If you're already on latest and still hitting it, this is probably GitHub-issue territory, not user error.

fleet loom
#

ubuntu@instance-20260413-1224:~$ openclaw --version
OpenClaw 2026.4.15 (041266a)
ubuntu@instance-20260413-1224:~$ openclaw infer model run --model openrouter/free --prompt "Reply with exactly: smoke-ok" --json
Error: Model override "openrouter/openrouter/free" is not allowed for agent "main".

barren tuskBOT
#

Yep, that’s the smoking gun.

On 2026.4.15, openrouter/free is being resolved as openrouter/openrouter/free, which is wrong. That was a real bug, fixed later.

So for that path:

  • OpenClaw rewrites the model ref incorrectly
  • the allowlist rejects it
  • no provider call happens
  • OpenRouter activity stays empty

That matches what you’re seeing.

Also, 2026.4.15 is right in the OpenRouter payloads=0 regression window, so you may be hitting two bugs at once:

  1. bad alias resolution for /free and /auto
  2. separate OpenRouter response-parsing bug on some concrete models
#

What I’d do

1) Upgrade first

I’d strongly upgrade off 2026.4.15 before debugging further.

Docs:
https://docs.openclaw.ai/install/updating

2) Until then, avoid /free and /auto

On that version, those aliases are suspect.

3) Check your exact allowlisted model refs

Run:

openclaw models status
#
openclaw config get agents.defaults.models

If agents.defaults.models is set, infer model run --model ... must match one of those exact refs.

Docs:
https://docs.openclaw.ai/concepts/models

Important detail

This error:

Error: Model override "openrouter/openrouter/free" is not allowed
#

is not your OpenRouter key failing. It’s OpenClaw mangling the alias before it even gets to OpenRouter.

If you paste:

openclaw models status
openclaw config get agents.defaults.models

I can tell you the exact concrete model ref to use as a temporary workaround on 2026.4.15.

fleet loom
#

ubuntu@instance-20260413-1224:~$ openclaw config get agents.defaults.models

{
"ollama/qwen3.5:2b": {},
"ollama/qwen3.5:4b": {},
"ollama/qwen3.5:9b": {},
"xai/grok-4": {
"alias": "Grok"
},
"google/gemini-3.1-pro-preview": {
"alias": "gemini"
},
"openrouter/auto": {
"alias": "OpenRouter"
}
}
ubuntu@instance-20260413-1224:~$ openclaw models status

Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : openrouter/meta-llama/llama-3.3-70b-instruct:free
Fallbacks (2) : groq/llama-3.3-70b-versatile, google/gemini-3.1-flash-preview
Image model : -
Image fallbacks (0): -
Aliases (3) : Grok -> xai/grok-4, gemini -> google/gemini-3.1-pro-preview, OpenRouter -> openrouter/auto
Configured models (6): ollama/qwen3.5:2b, ollama/qwen3.5:4b, ollama/qwen3.5:9b, xai/grok-4, google/gemini-3.1-pro-preview, openrouter/auto

Auth overview
Auth store : ~/.openclaw/agents/main/agent/auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (0): -

  • google effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | google:default=AIzaSyB-...vhfp88sQ
  • groq effective=env:gsk_rTh2...oH9vGn2L | env=gsk_rTh2...oH9vGn2L | source=env: GROQ_API_KEY | models.json=gsk_rTh2...oH9vGn2L | source=models.json: ~/.openclaw/agents/main/agent/models.json
  • ollama effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | ollama:default=marker(ollama-local) | models.json=OL...EY | source=models.json: ~/.openclaw/agents/main/agent/models.json
  • openrouter effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | openrouter:default=sk-or-v1...6d8ff116
  • xai effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | xai:default=gsk_rTh2...oH9vGn2L
barren tuskBOT
#

Okay, this explains it.

Your config is internally inconsistent right now:

  • Default model: openrouter/meta-llama/llama-3.3-70b-instruct:free
  • Configured-model allowlist: only openrouter/auto for OpenRouter

So OpenClaw is trying to use a concrete OpenRouter model, but your allowed/configured model catalog only knows about the alias. On 2026.4.15, that combines badly with the OpenRouter alias bugs.

What’s wrong here

agents.defaults.models is acting as an allowlist/catalog. Yours currently has:

"openrouter/auto": { "alias": "OpenRouter" }
#

but not the concrete model you’re actually using:

"openrouter/meta-llama/llama-3.3-70b-instruct:free"

That’s why manual overrides are weird, and it also makes OpenRouter debugging much messier.

I’d fix it like this

Best fix

Upgrade off 2026.4.15 first.

Docs:
https://docs.openclaw.ai/install/updating

Then fix the allowlist

#

Either:

  1. remove agents.defaults.models entirely, if you do not want an allowlist

or

  1. add the exact concrete OpenRouter refs you want to use

Example shape:

{
  agents: {
    defaults: {
      model: {
        primary: "openrouter/meta-llama/llama-3.3-70b-instruct:free"
#
      },
      models: {
        "openrouter/meta-llama/llama-3.3-70b-instruct:free": {},
        "openrouter/openai/gpt-oss-120b:free": {},
        "openrouter/auto": { alias: "OpenRouter" }
      }
    }
  }
}

Then restart the gateway.

Important detail

For OpenRouter, use the full ref when testing:

#
  • openrouter/meta-llama/llama-3.3-70b-instruct:free
  • openrouter/openai/gpt-oss-120b:free

Not the bare unprefixed forms on this version.

After that, test again

openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json

If that still gives payloads=0 after upgrade + allowlist cleanup, then you’re into the separate OpenRouter response-parsing bug, and that’s GitHub-issue territory.

Docs for the allowlist behavior:
https://docs.openclaw.ai/concepts/models

If you want, paste your agents.defaults.model block and I can turn it into a clean working snippet.

fleet loom
#

ubuntu@instance-20260413-1224:~$ openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json
13:52:36 [agent/embedded] incomplete turn detected: runId=4ef34e21-3b68-4147-ba8e-bf26a2fcec9c sessionId=4ef34e21-3b68-4147-ba8e-bf26a2fcec9c stopReason=stop payloads=0 — surfacing error to user
{
"ok": true,
"capability": "model.run",
"transport": "local",
"provider": "openrouter",
"model": "meta-llama/llama-3.3-70b-instruct:free",
"attempts": [],
"outputs": [
{
"text": "⚠️ Agent couldn't generate a response. Please try again.",
"mediaUrl": null
}
]
}

barren tuskBOT
#

Perfect, that isolates it.

Because the fully qualified concrete model still fails:

openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json

this is not just the /free alias bug anymore.

Conclusion

You’re hitting the separate OpenRouter payloads=0 bug in 2026.4.15.

So at this point I would stop changing config. Your repro is already clean enough.

Next step

#

1) Upgrade OpenClaw

https://docs.openclaw.ai/install/updating

2) Re-run this exact command

openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json

If it still fails on latest

Then it’s definitely GitHub issue territory. This matches the recent OpenRouter regressions people have already reported:

Your repro is actually really good, I’d paste exactly this into one of those issues if latest still breaks:

#
  • openclaw --version
  • openclaw models status
  • the exact infer model run command
  • the payloads=0 output

If you want, after you upgrade, paste the new openclaw --version plus the result of that same infer command and I’ll sanity check it.

fleet loom
#

I am on the latest version OpenClaw 2026.4.15 (041266a) but the output is the same:

ubuntu@instance-20260413-1224:~$ openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json
14:19:20 [agent/embedded] incomplete turn detected: runId=4ef34e21-3b68-4147-ba8e-bf26a2fcec9c sessionId=4ef34e21-3b68-4147-ba8e-bf26a2fcec9c stopReason=stop payloads=0 — surfacing error to user
{
"ok": true,
"capability": "model.run",
"transport": "local",
"provider": "openrouter",
"model": "meta-llama/llama-3.3-70b-instruct:free",
"attempts": [],
"outputs": [
{
"text": "⚠️ Agent couldn't generate a response. Please try again.",
"mediaUrl": null
}
]
}

barren tuskBOT
#

Yep, thanks, that confirms it.

And I should correct myself a bit: 2026.4.15 is still in the affected window. I was too loose when I said “upgrade first”. The OpenRouter fixes I found landed after 2026.4.15, so this is still a real bug, not your config.

Your repro is clean:

openclaw infer model run --model openrouter/meta-llama/llama-3.3-70b-instruct:free --prompt "Reply with exactly: smoke-ok" --json

and it still ends with:

  • stopReason=stop
  • payloads=0
  • no usable output

So at this point, I’d treat it as confirmed OpenClaw/OpenRouter breakage.

#

Best next move

Please file or comment on a GitHub issue with exactly this repro:

Include these points:

  • version: OpenClaw 2026.4.15 (041266a)
  • exact infer command
  • full output showing payloads=0
  • that curl to OpenRouter works
  • that OpenRouter activity shows no request from OpenClaw

That last point matters, because it may mean there are actually two OpenRouter bugs in this version range, not just one.