#v2026.4.15 breaks OpenRouter routing - resolves to openai provider instead
1 messages ยท Page 1 of 1 (latest)
Let me verify the docs and source, thereโs a decent chance this is a real regression rather than config drift.
Yeah, this looks like a real routing-class bug, not just a bad key.
openrouter/openai/gpt-5.4 is an OpenRouter model ref whose model id itself contains /. If that wrapper provider gets dropped from session state, OpenClaw degrades it to:
- provider =
openai - model =
gpt-5.4
โฆand then it reaches for OPENAI_API_KEY, which matches your 401 exactly.
I found an older changelog entry for basically this exact failure mode: preserving the stored OpenRouter provider for vendor-prefixed model ids so follow-up turns do not route to the direct provider API.
Quickest things to try:
- paste
openclaw --version - start a fresh session (
/new) or explicitly reselect
/model openrouter/openai/gpt-5.4 - run:
openclaw models status --probe
openclaw sessions --json
What Iโd check in sessions --json is whether the active row has model: "openai/gpt-5.4" but modelProvider / providerOverride is missing or openai instead of openrouter.
Docs:
- https://docs.openclaw.ai/providers/openrouter
- https://docs.openclaw.ai/concepts/models
- https://docs.openclaw.ai/cli/sessions
- https://docs.openclaw.ai/help/faq
If you paste the relevant sessions --json row, I can tell pretty quickly whether this is stale session metadata or a fresh regression in v2026.4.15.
Here's my openclaw sessions --json output:
The main session (agent:main:main) now shows modelProvider: openrouter which looks correct. But the three Discord channel sessions all have model: openai/gpt-5.4 with no modelProvider field. I'm still getting empty responses in the webchat. Is the stale Discord session metadata causing the routing issue, or is there something else going on?
json{
"path": "/data/.openclaw/agents/main/sessions/sessions.json",
"count": 4,
"activeMinutes": null,
"sessions": [
{
"key": "agent:main:main",
"updatedAt": 1776633797272,
"ageMs": 1054,
"sessionId": "boot-2026-04-19_20-26-36-406-69276470",
"systemSent": true,
"abortedLastRun": false,
"inputTokens": 676,
"outputTokens": 80,
"totalTokens": null,
"totalTokensFresh": false,
"model": "gpt-5.4",
"modelProvider": "openrouter",
"contextTokens": 200000,
"agentId": "main",
"kind": "direct"
},
{
"key": "agent:main:discord:channel:1488195392251101399",
"updatedAt": 1776522207724,
"ageMs": 111590602,
"sessionId": "d5afc0d8-5436-43cb-be56-5e0a2c294b68",
"totalTokens": null,
"totalTokensFresh": false,
"model": "openai/gpt-5.4",
"contextTokens": 200000,
"agentId": "main",
"kind": "group"
},
{
"key": "agent:main:discord:channel:1490227314716311572",
"updatedAt": 1776454405972,
"ageMs": 179392354,
"sessionId": "183b6c07-e586-4f98-840a-1cbf2409798c",
"totalTokens": null,
"totalTokensFresh": false,
"model": "openai/gpt-5.4",
"contextTokens": 200000,
"agentId": "main",
"kind": "group"
},
{
"key": "agent:main:discord:channel:562802830654832720",
"updatedAt": 1776423135217,
"ageMs": 210663109,
"sessionId": "b84589cb-f36e-4afe-9a17-4b1bd8a302b4",
"totalTokens": null,
"totalTokensFresh": false,
"model": "openai/gpt-5.4",
"contextTokens": 200000,
"agentId": "main",
"kind": "group"
}
]
}
Yeah, the stale Discord session metadata is enough to explain the Discord-side misrouting.
Why:
agent:main:mainlooks healthy:modelProvider: "openrouter",model: "gpt-5.4"- the Discord sessions do not have
modelProvider - when OpenClaw only has
model: "openai/gpt-5.4", it parses that as directprovider=openai, notopenrouter
So those Discord channel sessions can absolutely still force the wrong route.
What it does not explain cleanly is webchat, because your main/direct session already looks like OpenRouter. So I think you may have two things:
- stale Discord session metadata, and
- a separate webchat issue, or webchat is using a different session than you think
What Iโd do next:
-
In each affected Discord thread/channel, run:
/new
or/model openrouter/openai/gpt-5.4
-
Send one message in webchat, then immediately run:
openclaw sessions --jsonand check which row got the new
updatedAt.
If webchat updates agent:main:main, then the OpenRouter routing there is probably fine, and the โempty responseโ is a separate webchat/rendering problem.
If you want, paste:
- exact
openclaw --version - the updated
sessions --jsonafter one webchat message - a short
openclaw logs --followsnippet for that webchat turn
That should narrow it down pretty fast.
After clearing the session overrides, I now see two distinct issues in the logs:
Older boot session runs still routing to provider=openai with 401 (stale metadata)
Newer runs at 17:01+ show payloads=0 stopReason=stop with no auth error โ these appear to be reaching OpenRouter but returning empty content
openclaw --version: 2026.4.15 (041266a)
The models status --probe shows openrouter/openai/gpt-5.4 probing ok ยท 7.3s so auth is fine. Why would a successful OpenRouter call return payloads=0?
I found the routing side already. Now Iโm tracing the empty-result side so I can say whether thatโs upstream empty text vs OpenClaw swallowing it.
I found a pretty likely lead: newer OpenClaw has a specific OpenRouter streaming fix for replies where the visible text comes inside reasoning_details.response.output_text / reasoning_details.response.text. If youโre on 2026.4.15, that could explain โsuccessful call, zero payloadsโ. Let me confirm it against the v2026.4.15 code.
Yeah, I think youโve got two separate issues, not one:
- Old sessions still have stale provider metadata, so they degrade to
provider=openaiand hit401. - New runs are probably hitting a real
2026.4.15OpenRouter stream parsing gap.
Why payloads=0 stopReason=stop can happen even when OpenRouter auth is fine:
models status --probeproves auth + reachability, not that OpenClaw turned the streamed response into visible text.- In
v2026.4.15, the OpenRouter completions parser only treatedreasoning_detailsof typereasoning.textas hidden thinking. - It did not yet surface OpenRouter-visible reply text carried as:
reasoning_details[].type = "response.output_text"reasoning_details[].type = "response.text"
So if OpenRouter returned the answer in one of those fields, OpenClaw could successfully finish the run with stopReason=stop but still end up with no user-visible payloads.
That lines up with later changelog fixes I found, especially:
OpenRouter/streaming: treat reasoning_details.response.output_text and reasoning_details.response.text as visible assistant output...OpenRouter/Qwen3: parse reasoning_details stream deltas as thinking content without skipping same-chunk tool calls...
One more important detail: the empty-response retry guard in this area is only auto-enabled for provider=openai / openai-codex, not openrouter, so on 2026.4.15 this lane can just quietly end as payloads=0.
What Iโd do
- For the old
provider=openairuns: use a fresh session (/new/ reset that thread session). - For the empty OpenRouter runs: update past
2026.4.15, ideally latest. - If you want a smoking gun before upgrading, capture a raw streamed chunk and check for
reasoning_detailscontainingresponse.output_textorresponse.text.
So short version: auth is probably fine, and payloads=0 is very likely OpenClaw not promoting the returned OpenRouter text into a visible payload in 2026.4.15.
you say to update past 2026.4.15 but there isnt an update past that yet is there?
Let me check the repo tags so I donโt make you chase a ghost version.
Yeah, good catch, I overstated that.
There is no newer stable tag than v2026.4.15 that I can confirm right now. What I do see in the repo is:
v2026.4.19-beta.2v2026.4.19-beta.1
So the more accurate advice is:
- if you want stable, your practical workaround is probably roll back to
v2026.4.12 - if youโre okay testing, try
v2026.4.19-beta.2 - if you stay on
2026.4.15, the stale-sessionprovider=openaiissue can be mitigated with fresh sessions, but thepayloads=0 stopReason=stoppath may just be an unfixed regression in that stable
So yes, I think this is basically:
- bug/regression in
2026.4.15stable - fix exists later in beta/main
- not fully fixed in a newer stable release yet
If you can reproduce it in a fresh session on 2026.4.15, Iโd file it here with the two symptoms split out:
https://github.com/openclaw/openclaw/issues
If you want, I can help you write the exact issue text so itโs easy for maintainers to verify.
how do I access the v2026.4.1-beta.2 from my openclaw running on a vps
oops meantv2026.4.19-beta.2
I think you mean v2026.4.19-beta.2, not v2026.4.1-beta.2, let me verify the install path so I donโt hand you a fake command.
Assuming you mean v2026.4.19-beta.2, the easiest path on a VPS is:
openclaw update --tag 2026.4.19-beta.2
Then verify:
openclaw --version
A couple gotchas:
- use the version without the leading
v openclaw updatenormally restarts the gateway for you- if you just want the beta lane instead of one exact beta, use:
openclaw update --channel beta
If youโre not sure how that VPS install was done, check first:
openclaw update status
Why that matters:
- package install (npm/pnpm) โ
--tag 2026.4.19-beta.2works - git/source install โ
--tagis ignored, so useopenclaw update --channel betainstead
Docs:
If you want, paste the output of openclaw update status and Iโll tell you the exact command for your VPS setup.
Yep, then this is the one:
openclaw update --tag 2026.4.19-beta.2
openclaw --version
No leading v in the command.
If openclaw update status shows itโs a git/source install instead of package install, use:
openclaw update --channel beta
and then check:
openclaw --version
If you hit anything weird on the VPS after that, paste openclaw update status and openclaw --version and Iโll help decode it.
i cant paste screenshots here?
No worries, you donโt need screenshots for this one.
Text is actually better. Please paste these as code blocks:
openclaw update status
openclaw --version
and if the beta install failed, also:
openclaw update --tag 2026.4.19-beta.2 --dry-run
Wrap the output like this:
```text
paste output here
```
Thatโll be much easier to debug than a screenshot.
ok I am seeing v2026.4.19-beta.2 in openclaw interface but its looks like it wipe all my bot files away like the soul.md and others?
That usually means it switched workspaces, not that it deleted your files.
Your SOUL.md, AGENTS.md, USER.md, etc. live in the agent workspace, and docs say the active one is controlled by agents.defaults.workspace. Current default is usually:
~/.openclaw/workspace
Older installs often used:
~/openclaw
So Iโd check these first on the VPS:
grep -n "workspace" ~/.openclaw/openclaw.json || true
ls -la ~/.openclaw/workspace
ls -la ~/openclaw
If your files are sitting in ~/openclaw but the beta is now using ~/.openclaw/workspace, that would explain the โwipedโ feeling.
A couple important bits:
- donโt run
openclaw setupyet, that can recreate defaults and muddy the picture openclaw doctoralso warns about extra workspace dirs- docs explicitly call out that keeping both
~/openclawand~/.openclaw/workspacearound can cause confusing drift
Docs:
If you paste the output of those 3 commands, I can tell you exactly which workspace itโs using and how to point it back.
ls -la ~/.openclaw/workspace
ls -la ~/openclaw
44: "workspace": "/data/.openclaw/workspace",
total 128
drwxr-xr-x 17 node node 4096 Apr 17 15:57 .
drwx------ 15 node node 4096 Apr 19 18:07 ..
drwxr-xr-x 8 node node 4096 Apr 16 03:57 .git
drwxr-xr-x 2 node node 4096 Apr 15 21:20 .openclaw
-rw-r--r-- 1 node node 4349 Apr 17 15:57 AGENTS.md
-rw-r--r-- 1 node node 525 Apr 16 02:44 BOOT.md
-rw-r--r-- 1 node node 1778 Apr 15 21:19 BOOTSTRAP.md
-rw-r--r-- 1 node node 1401 Apr 17 15:49 HEARTBEAT.md
-rw-r--r-- 1 node node 727 Apr 15 21:19 IDENTITY.md
-rw-r--r-- 1 node node 1496 Apr 17 15:14 MEMORY.md
-rw-r--r-- 1 node node 1004 Apr 15 21:36 README.md
-rw-r--r-- 1 node node 8291 Apr 17 15:52 SOUL.md
-rw-r--r-- 1 node node 961 Apr 15 21:19 TOOLS.md
-rw-r--r-- 1 node node 6218 Apr 17 15:48 USER.md
drwxr-xr-x 2 node node 4096 Apr 15 21:36 agents
drwxr-xr-x 2 node node 4096 Apr 15 22:08 config
drwxr-xr-x 2 node node 4096 Apr 15 21:36 credentials
drwxr-xr-x 2 node node 4096 Apr 15 21:36 cron
drwxr-xr-x 2 node node 4096 Apr 15 21:36 identity
drwxr-xr-x 2 node node 4096 Apr 19 17:39 memory
drwxr-xr-x 2 node node 4096 Apr 15 21:36 playbooks
drwxr-xr-x 2 node node 4096 Apr 15 21:36 sessions
drwxr-xr-x 8 node node 4096 Apr 15 21:36 skills
drwxr-xr-x 2 node node 4096 Apr 15 21:20 state
drwxr-xr-x 2 node node 4096 Apr 15 21:36 system
-rw-r--r-- 1 node node 330 Apr 17 06:52 temp_config.json
drwxr-xr-x 3 node node 4096 Apr 17 14:51 trading
drwxr-xr-x 3 node node 4096 Apr 17 15:11 workspace
ls: cannot access '/data/openclaw': No such file or directory
root@a9f72862f797:~#
Yeah, good news, they were not wiped.
Your active workspace is set to:
/data/.openclaw/workspace
and that directory clearly still has:
AGENTS.mdSOUL.mdUSER.mdIDENTITY.mdTOOLS.md
So this looks more like the UI/session got weird, not file loss.
One thing I do see thatโs suspicious:
BOOTSTRAP.mdis still present
Docs say BOOTSTRAP.md is a one-time first-run file and should be removed after bootstrap. Weโve seen leftover BOOTSTRAP.md keep agents acting like theyโre in first-run mode, which can feel like they โforgotโ their workspace.
Safest next step:
mv /data/.openclaw/workspace/BOOTSTRAP.md /data/.openclaw/workspace/BOOTSTRAP.md.bak
openclaw gateway restart
Then refresh the UI and check again.
So at this point Iโd treat it as two separate things:
- workspace files are still there
- agent/session state is weird, and that stale
BOOTSTRAP.mdis a likely culprit
Docs:
If you want, after restart paste what the agent does next, and Iโll help separate the workspace weirdness from the original OpenRouter routing bug.
openclaw gateway restart
Config warnings:\n- plugins: plugin: blocked plugin candidate: suspicious ownership (/data/.openclaw/extensions/oxylabs-ai-studio-openclaw, uid=1000, expected uid=0 or root)
๐ฆ OpenClaw 2026.4.19-beta.2 (dc3df91) โ I've survived more breaking changes than your last three relationships.
โ
โ Config warnings โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ - plugins: plugin: blocked plugin candidate: suspicious ownership โ
โ (/data/.openclaw/extensions/oxylabs-ai-studio-openclaw, uid=1000, expected uid=0 or โ
โ root) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
18:19:33 [restart] lsof failed during initial stale-pid scan for port 18789: ENOENT
Gateway service disabled.
Start with: openclaw gateway install
Start with: openclaw gateway
Start with: systemctl --user start openclaw-gateway.service
Start with: systemd user services are unavailable; install/enable systemd or run the gateway under your supervisor.
Start with: If you're in a container, run the gateway in the foreground instead of openclaw gateway.
root@a9f72862f797:~#
Yep, that output means openclaw gateway restart did not actually restart your running gateway.
What happened:
- youโre in a container / non-systemd environment
openclaw gateway restarttried to use the managed service path- there is no user service installed, so it bailed with
Gateway service disabled.
So this part is expected:
If you're in a container, run the gateway in the foreground instead of `openclaw gateway`.
A few important notes:
- the
oxylabs-ai-studio-openclawownership warning is separate
lsof failed ... ENOENTis also not the main problem- this means we havenโt actually tested the
BOOTSTRAP.mdfix yet
Best next step
If this OpenClaw instance normally runs inside that container, either:
- restart the container/supervisor that runs it, or
- for a quick test, start it directly in the foreground:
openclaw gateway
and keep that shell open.
I would not use openclaw gateway install here unless this is a normal systemd-managed VPS and not a containerized setup.
So the real question now is: how is this gateway normally launched?
- Docker / docker compose
- Coolify / Railway / Fly / etc
- manually with
openclaw gateway - pm2 / supervisor / something else
Tell me that piece and I can give you the exact restart command.
I restarted the docker VPS container...logged into openclaw interface and its still running the bootstrap and acting like I need to set it up: "Hey. I just came online. Who am I? Who are you?
Bootstrapโs still not complete because I need your input for the identity part first. Give me my name, creature, vibe, and emoji โ or just say โpick for meโ and Iโll set a solid default and keep going."
Iโm checking the bootstrap logic, because this sounds like either the file is still present or the session store still thinks the workspace is unbootstrapped.
That message means OpenClaw still thinks bootstrap is pending for the workspace that session is using.
Given the current code/docs, that usually means one of two things:
BOOTSTRAP.mdstill exists in the active workspace, or- the UI is attached to a different agent/workspace than the one we inspected
Can you run these two and paste them?
ls -l /data/.openclaw/workspace/BOOTSTRAP*
openclaw status
Why Iโm asking:
- if
/data/.openclaw/workspace/BOOTSTRAP.mdstill exists, it will keep triggering that first-run prompt
- if itโs already gone and only
BOOTSTRAP.md.bakexists, then the UI is probably landing on another workspace/agent
If BOOTSTRAP.md is still there, move it aside exactly:
mv /data/.openclaw/workspace/BOOTSTRAP.md /data/.openclaw/workspace/BOOTSTRAP.md.bak
then restart the container again.
So yeah, this is looking like a separate bootstrap/workspace issue, not the original OpenRouter routing bug.
Item โ Value โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ OS โ linux 6.8.0-107-generic (x64) ยท node 22.22.2 โ
โ Dashboard โ http://127.0.0.1:18789/ โ
โ Tailscale โ off โ
โ Channel โ stable (config) โ
โ Update โ pnpm ยท npm latest 2026.4.15 (local newer) โ
โ Gateway โ local ยท ws://127.0.0.1:18789 (local loopback) ยท reachable 35ms ยท auth token ยท a9f72862f797 (172.16.1.2) app 2026.4.19-beta.2 linux 6.8.0-107-generic โ
โ Gateway self โ a9f72862f797 (172.16.1.2) app 2026.4.19-beta.2 linux 6.8.0-107-generic โ
โ Gateway service โ systemd not installed โ
โ Node service โ systemd not installed โ
โ Agents โ 1 ยท no bootstrap files ยท sessions 4 ยท default main active 7m ago โ
โ Memory โ 6 files ยท 25 chunks ยท dirty ยท sources memory ยท plugin memory-core ยท vector ready ยท fts ready ยท cache on (0) โ
โ Plugin compatibility โ none โ
โ Probes โ skipped (use --deep) โ
โ Events โ none โ
โ Tasks โ none โ
โ Heartbeat โ 30m (main) โ
โ Sessions โ 4 active ยท default openai/gpt-5.4 (200k ctx) ยท ~/.openclaw/agents/main/sessions/sessions.json
Thatโs actually a really useful clue.
openclaw status says:
Agents: 1 ยท no bootstrap files
So the workspace is no longer bootstrapping. Good news.
That means the โwho am I?โ prompt is almost certainly coming from a stale session, not from your current workspace state. And youโve got:
Sessions: 4 active
So Iโd stop poking the workspace now and do this instead:
- Start a brand-new session in the UI, donโt continue the old one
(or type/newif youโre in the chat box) - See whether the fresh session still shows the bootstrap prompt
- Then test the OpenRouter routing again in that fresh session
At this point I think the picture is:
- bootstrap/workspace is fixed
- old session metadata is still stale
- that same stale session state may also be part of the original
provider=openaiproblem
So yeah, I think weโve been chasing session state drift, not wiped files.
If a fresh session still shows bootstrap or still routes to provider=openai, send me that result next. Thatโll tell us whether the remaining bug is in session persistence instead of workspace setup.
ok /new and my old agent came back
Nice, thatโs a really good sign.
So weโve confirmed:
- your files/workspace were not wiped
- the bootstrap weirdness was a stale session
/newgot you back onto the real agent state
Now we can finally test the original bug cleanly.
From this fresh session, try one normal prompt. Then tell me which of these happens:
- works normally
- still resolves to
provider=openaiand fails with401 - no auth error, but you get the empty-response case again (
payloads=0/stopReason=stop)
If it works now, Iโd call this stale session metadata more than a core routing regression.
If it still fails in the fresh session, then we dig into the live session model metadata next.
I asked him what model he is currently running on and he responded : Right now Iโm running openrouter/openai/gpt-5.4.
Thatโs encouraging, but I wouldnโt treat it as proof yet.
Agents can self-report the configured model ref, while the actual request path can still be different underneath. So this tells us:
- the fresh session sees
openrouter/openai/gpt-5.4 - but we still need to verify the actual provider used on a real run
So the real test now is:
- ask one normal question
- see whether it answers
- if it fails, check whether logs still show
provider=openaior something else
If it answers normally in the fresh session, I think the big culprit was stale session state.
If it still fails, paste the next error/log line from that fresh run and we can pin down whether:
- routing is still degrading to
provider=openai, or
- the beta fixed routing but thereโs still some separate response-parsing issue.
a normal question like what?
Yep, something boring and text-only. For example:
What is 17 * 23?Explain in one sentence why the sky looks blue.Write two sentences about penguins.
The goal is just to test:
- does the fresh session return a normal answer
- or does it still error / go empty
So Iโd use something simple like:
Explain in one sentence why the sky looks blue.
If it answers, great. If not, grab the next log/error from that run.
Penguins are flightless birds built for the water, with dense bones and strong flippers that make them excellent swimmers. They live mostly in the Southern Hemisphere, where they hunt fish, krill, and squid in cold ocean waters.
Nice, thatโs the answer I wanted to see.
So at this point the evidence says:
v2026.4.19-beta.2can answer normally in a fresh session- your workspace/persona files are fine
- the bootstrap weirdness was a stale session
- the original OpenRouter breakage was very likely stale persisted session metadata, not a universal โbeta is brokenโ problem
My practical takeaway:
- keep using the fresh session
- if an old thread/session acts weird, use
/new - I would not trust the old sessions as evidence anymore
So the clean diagnosis is basically:
- old session state drift caused the fake bootstrap behavior
- old persisted session model metadata likely caused the
provider=openai/401behavior - fresh session on
v2026.4.19-beta.2looks healthy
If you want, I can help you with one final cleanup pass for the stale sessions, but the important part is: your agent is back. ๐
Glad that helped! ๐
If this fixed it, please right-click the solution message โ Apps โ โ
Mark Solution.
This helps Answer Overflow index the solution for future users.
I seem to have lost access to my bot in discord though
Let me check the Discord docs before I send you in the wrong direction.
Ah, that sounds like a separate Discord-channel issue now.
When you say โlost accessโ, do you mean:
- the bot is offline / gone from the server
- itโs online but not replying
- slash commands / mentions stopped working
- DMs stopped working
Best first check from the VPS:
openclaw status --deep
openclaw gateway status
And if itโs online but silent, trigger one Discord message to it, then run:
openclaw logs --follow
What Iโm trying to separate:
- gateway/session/model issue, which looks mostly fixed now
- Discord channel auth/config issue, which is a different layer
If you paste openclaw status --deep, I can narrow it down pretty fast.
bot is showing online but not answering
Got it, thatโs actually a useful split.
If the bot is online but silent, the next step is to see whether the Gateway is even receiving the Discord message.
Please do this on the VPS:
openclaw status --deep
openclaw logs --follow
Then, while logs --follow is running, send the bot a simple message in Discord like:
ping
What we learn from that:
- nothing shows up in logs โ Discord inbound delivery / permissions / allowlist problem
- message shows up in logs but no reply โ OpenClaw got the event, so itโs a routing/session/reply problem instead
If you paste:
- the Discord section from
openclaw status --deep - and the few log lines right after you ping it
I can usually tell which side is broken pretty quickly.
Im having a hard time locating that
No worries. Easiest path: just run these exactly inside the VPS/container shell and paste the output here.
First:
openclaw status --deep
You donโt need to find a special section, just paste the whole output.
Then run this and leave it open:
openclaw logs --follow
While that is running, send your bot a Discord message like:
ping
Then copy the next few lines that appear.
If openclaw logs --follow doesnโt show anything or errors, use the fallback from the docs:
tail -f "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)"
So basically, I need:
- full
openclaw status --deep - a few log lines right after you send
ping
Thatโll tell us whether Discord is reaching the gateway at all.
when I look in openclaw config it doesnt show discord configured anymore
Iโm checking the exact Discord config keys so I donโt make this worse.
Ah, yeah, that would explain the silence.
Per the docs, Discord auth comes from:
channels.discord.token- or fallback env var
DISCORD_BOT_TOKENfor the default account
So on Docker/VPS, the likely problem is:
- the new container no longer has
DISCORD_BOT_TOKEN, or - the
channels.discordblock/reference disappeared from config
Please check without pasting the actual token:
printenv DISCORD_BOT_TOKEN | wc -c
grep -n '"discord"' ~/.openclaw/openclaw.json || true
What Iโm looking for:
- if
DISCORD_BOT_TOKENis basically empty, your new container lost the Discord secret - if the env var exists but config lost the reference, re-add it with the documented commands:
openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN
openclaw config set channels.discord.enabled true --strict-json
Then restart the container/gateway.
Important: donโt paste the token value here. Just paste:
it came back "0"
Yep, thereโs the problem.
0 means this container currently has no DISCORD_BOT_TOKEN in its environment.
So the new container came up without your Discord bot secret, which is why the bot is online/weird/silent.
What to do
Put DISCORD_BOT_TOKEN back into the Docker env/secrets for this container, then restart it.
If youโre using Docker Compose, itโs usually something like:
environment:
DISCORD_BOT_TOKEN: ${DISCORD_BOT_TOKEN}
or a secret/env-file equivalent.
Then restart the container.
After the env var is back
If your config also lost the env reference, re-add it with the documented command:
openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN
openclaw config set channels.discord.enabled true --strict-json
Then restart again.
So the Discord part is much clearer now:
- OpenRouter/session issue: mostly fixed by fresh session + beta
- Discord silence: new container lost
DISCORD_BOT_TOKEN
If you want, paste your Docker Compose environment: block with the secret value redacted, and Iโll tell you exactly what line is missing.
Ok DISCORD_BOT_TOKEN was missing from the .env file โ added it back and restarted and agent is working in discord again
Nice, glad we caught it. ๐
So the final picture looks like:
-
Old/stale sessions were causing the fake bootstrap/weird state
โ/newfixed that -
Discord stopped working because
DISCORD_BOT_TOKENwas missing from.env
โ adding it back + restart fixed Discord -
Fresh session on
v2026.4.19-beta.2was able to answer normally again
So this ended up being a mix of:
- stale session state
- missing Discord env var
not one single OpenRouter-only failure.
If an old thread acts haunted again, Iโd use /new first before trusting the behavior.
Glad that helped! ๐
If this fixed it, please right-click the solution message โ Apps โ โ
Mark Solution.
This helps Answer Overflow index the solution for future users.
can you give me a recap of each problem we discussed and what the solution was so I can refer to later?
Yep, hereโs the clean recap.
1) OpenRouter started failing after v2026.4.15
Symptom
- Runs were resolving to
provider=openaiand failing with401 - Config was set to
openrouter/openai/gpt-5.4
What we found
- Old session state looked stale/weird
- A fresh session on
v2026.4.19-beta.2was able to answer normally - That suggests the breakage was at least partly stale persisted session metadata, not just โOpenRouter is globally brokenโ
What fixed it
- Update to
v2026.4.19-beta.2 - Start a fresh session with
/new
2) It looked like your bot files were wiped (SOUL.md, etc.)
Symptom
- The agent acted like it had no identity and wanted to bootstrap again
What we found
- The workspace was still there at:
/data/.openclaw/workspace
- It still contained:
AGENTS.mdSOUL.mdUSER.mdIDENTITY.mdTOOLS.md
openclaw statuslater showed:Agents: 1 ยท no bootstrap files
Conclusion
- Your files were not deleted
- The bootstrap behavior was from a stale old session, not missing workspace files
What fixed it
- Start a fresh session with
/new
3) The agent worked in Control UI but stopped answering in Discord
Symptom
- Bot showed online in Discord but didnโt answer
What we found
- Discord no longer appeared configured
- Checking the env var showed:
DISCORD_BOT_TOKENwas missing
printenv DISCORD_BOT_TOKEN | wc -creturned0
What fixed it
- Add
DISCORD_BOT_TOKENback to the.envfile - Restart the container
4) How to get the beta on the VPS
What we used
openclaw update --tag 2026.4.19-beta.2
Important
- Use the version without the leading
v
Final practical takeaways
- If an old session starts acting haunted, try
/newfirst - If Discord goes silent after a deploy/update, check:
DISCORD_BOT_TOKEN
- Your workspace files were fine, this was mostly:
- stale session state
- plus a missing Discord env var
If you want, I can turn this into a shorter โcopy/paste note to future meโ version too.
yes please
Sure, hereโs the short version:
OpenClaw recap
1. OpenRouter / 401 issue
- Symptom: runs resolved to provider=openai and failed with 401
- Likely cause: stale session metadata after upgrade
- Fix: updated to v2026.4.19-beta.2 and started a fresh session with /new
2. Bot looked โresetโ / wanted bootstrap again
- Symptom: agent acted like SOUL.md / identity files were gone
- Reality: workspace files were still present in /data/.openclaw/workspace
- Cause: stale old session, not deleted files
- Fix: /new
3. Discord bot online but not answering
- Cause: DISCORD_BOT_TOKEN was missing from .env
- Fix: add DISCORD_BOT_TOKEN back to .env and restart container
4. Beta update command
- openclaw update --tag 2026.4.19-beta.2
- no leading โvโ
Main lesson
- If old sessions act weird after an update, try /new first
- If Discord goes silent, check DISCORD_BOT_TOKEN in the container env/.env
Glad we got it sorted.
how do we mark this closed now?