#Set-up OpenClaw Local

1 messages Β· Page 1 of 1 (latest)

cedar linden
#

I want to set up OpenCLaw on my local machine. I need a step-by-step method and one step at a time. I'm using WSL2

blissful pondBOT
#

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

wild trenchBOT
ashen burrowBOT
#

Yep, WSL2 is the recommended Windows path for OpenClaw.

Step 1

Open your WSL Ubuntu terminal, not PowerShell, and run:

systemctl --user status

What I’m checking:

  • if systemd is working inside WSL
  • that matters because openclaw onboard --install-daemon uses a user service there

Paste the output here, and I’ll give you Step 2 only.

Docs I’m using:

cedar linden
#

Next step

ashen burrowBOT
#

Assuming systemctl --user status worked, here’s the next step.

Step 2

Still inside your WSL Ubuntu terminal, run:

curl -fsSL https://openclaw.ai/install.sh | bash

What this does:

  • installs the right Node version if needed
  • installs OpenClaw
  • usually starts onboarding

When it finishes, run:

#
openclaw --version

Paste that output here, and I’ll give you Step 3.

If the installer fails, paste the error instead and I’ll adjust. Docs: https://docs.openclaw.ai/install

cedar linden
#

$ systemctl --user status ● DESKTOPMRKJH State: running Units: 165 loaded (incl. loaded aliases) Jobs: 0 queued Failed: 0 units Since: Tue 2026-04-21 10:35:49 +06; 7min ago systemd: 255.4-1ubuntu8.12 CGroup: /user.slice/user-1000.slice/user@1000.service └─init.scope β”œβ”€323 /usr/lib/systemd/systemd --user └─324 "(sd-pam)"

ashen burrowBOT
#

Nice, systemd is working. That’s the key WSL piece βœ…

Step 2

In the same WSL Ubuntu terminal, run:

curl -fsSL https://openclaw.ai/install.sh | bash

When that finishes, run:

openclaw --version

Paste the version output here, and I’ll give you Step 3.

cedar linden
#

openclaw --version openclaw: command not found

ashen burrowBOT
#

Got it, that usually means the install didn’t finish or OpenClaw was installed but isn’t on your PATH yet.

Step 3

Please run this in WSL Ubuntu:

curl -fsSL https://openclaw.ai/install.sh | bash -s -- --no-onboard --verify

Then paste the last 20 to 30 lines of output here.

Why this step:

  • it retries the install cleanly
  • it does a post-install check
  • if this is just a PATH issue, it should say exactly what path is missing
cedar linden
#

Need fix here

PATH missing npm global bin dir: /home/wrakeeb/.npm-global/bin This can make openclaw show as "command not found" in new terminals. Fix (zsh: ~/.zshrc, bash: ~/.bashrc): export PATH="/home/wrakeeb/.npm-global/bin:$PATH"

#

Need fix here

PATH missing npm global bin dir: /home/wrakeeb/.npm-global/bin This can make openclaw show as "command not found" in new terminals. Fix (zsh: ~/.zshrc, bash: ~/.bashrc): export PATH="/home/wrakeeb/.npm-global/bin:$PATH"

cedar linden
#

openclaw --version OpenClaw 2026.4.15 (041266a)

ashen burrowBOT
#

Perfect, OpenClaw is installed now πŸŽ‰

Step 5

Start the onboarding wizard:

openclaw onboard --install-daemon

A couple quick notes:

  • run it inside WSL Ubuntu
  • have your AI provider API key ready
  • on WSL, it may ask for sudo so it can install the user service cleanly

When the wizard starts, paste the first prompt or screen you see, and I’ll walk you through the next choice.

cedar linden
#

Onboarding complete. Use the dashboard link above to control OpenClaw.

ashen burrowBOT
cedar linden
ashen burrowBOT
#

Perfect, the Gateway is up and healthy.

Step 7

Open the dashboard in your browser. Easiest options:

openclaw dashboard

Or open this URL directly:

http://127.0.0.1:18789/

Then tell me one of these:

  • β€œdashboard loads”
  • or the exact error / auth prompt you see
#

You’re very close now.

cedar linden
#

I logged in, but no reply.

Telegram shows: ⚠️ Agent couldn't generate a response. Please try again.

ashen burrowBOT
#

That’s helpful, it means Telegram is reaching OpenClaw, but the agent likely can’t use its model/auth cleanly.

Next step

Run this in WSL:

openclaw models status

Then paste the output here.

That will tell us whether your model provider is authenticated and usable. Docs: https://docs.openclaw.ai/help/faq

cedar linden
#

```openclaw models status 🦞 OpenClaw 2026.4.15 (041266a) β€” I've seen your commit messages. We'll work on that together. Config : ~/.openclaw/openclaw.json Agent dir : ~/.openclaw/agents/main/agent Default : openrouter/openai/gpt-5.4-mini Fallbacks (0) : - Image model : - Image fallbacks (0): - Aliases (1) : OpenRouter -> openrouter/auto Configured models (2): openrouter/auto, openrouter/openai/gpt-5.4-mini Auth overview Auth store : ~/.openclaw/agents/main/agent/auth-profiles.json Shell env : off Providers w/ OAuth/tokens (0): - - openrouter effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | openrouter:default=sk-or-v1...ec8af903 OAuth/token status - none ````

ashen burrowBOT
#

That actually looks pretty close. Your OpenRouter key is present, so now we need a live probe to see whether the model is truly usable.

Next step

Run:

openclaw models status --probe

Then paste the output here.

That should tell us if this is:

  • bad/expired auth
  • no credits / billing issue
  • model selection problem
  • or something else in the runtime path
cedar linden
#

The output is too big. I'll post in it 2 times


openclaw models status --probe                                                                                                                                                                                                                                                                                                                                                                      🦞 OpenClaw 2026.4.15 (041266a) β€” I don't judge, but your missing API keys are absolutely judging you.                                                                                                                                                                                                                                                                                                                      β”‚                                                                                                                                                                                                             β—‡                                                                                                                                                                                                             Config        : ~/.openclaw/openclaw.json                                                                                                                                                                     Agent dir     : ~/.openclaw/agents/main/agent                                                                                                                                                                 Default       : openrouter/openai/gpt-5.4-mini                                                                                                                                                                Fallbacks (0) : -                                                                                                                                                                                             Image model   : -                                                                                                                                                                                             Image fallbacks (0): -                                                                                                                                                                                        Aliases (1)   : OpenRouter -> openrouter/auto                                                                                                                                                                 Configured models (2): openrouter/auto, openrouter/openai/gpt-5.4-mini

#

Auth overview                                                                                                                                                                                                 Auth store    : ~/.openclaw/agents/main/agent/auth-profiles.json                                                                                                                                              Shell env     : off                                                                                                                                                                                           Providers w/ OAuth/tokens (0): -                                                                                                                                                                              - openrouter effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | openrouter:default=sk-or-v1...ec8af903                                                                                                                                                                                                                                                        OAuth/token status                                                                                                                                                                                            - none                                                                                                                                                                                                                                                                                                                                                                                                                      Auth probes                                                                                                                                                                                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                                                                                                β”‚ Model                          β”‚ Profile                      β”‚ Status     β”‚                                                                                                                                β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                                                                                                                                β”‚ openrouter/openai/gpt-5.4-mini β”‚ openrouter:default (api_key) β”‚ ok Β· 11.5s β”‚                                                                                                                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                                                                                                Probed 1 target in 21.6s 

ashen burrowBOT
#

Yep, send part 2. I’ll wait.

#

Great, that means your model auth is fine. So the next question is whether the problem is general agent runtime or Telegram-specific.

Next step

Run this in WSL:

openclaw agent --message "Reply with exactly TEST-OK"

Then paste the result here.

If that works, we’ll focus on Telegram.
If that fails, we’ll inspect the runtime error next.

cedar linden
#

openclaw agent --message "Reply with exactly TEST-OK"                                                                                                                                                                                                                                                                                                                                               🦞 OpenClaw 2026.4.15 (041266a) β€” It's not "failing," it's "discovering new ways to configure the same thing wrong."                                                                                                                                                                                                                                                                                                        Gateway agent failed; falling back to embedded: Error: Pass --to <E.164>, --session-id, or --agent to choose a session                                                                                        Error: Pass --to <E.164>, --session-id, or --agent to choose a session  ```
ashen burrowBOT
#

Good catch, that one needed an explicit agent target. My mistake.

Next step

Run this instead:

openclaw agent --agent main --message "Reply with exactly TEST-OK"

Then paste the result here.

If that works, we know the core agent path is fine and we can narrow this down to Telegram/session delivery.

cedar linden
#

openclaw agent --agent main --message "Reply with exactly TEST-OK"                                                                                                                                                                                                                                                                                                                                  🦞 OpenClaw 2026.4.15 (041266a) β€” Your config is valid, your assumptions are not.                                                                                                                                                                                                                                                                                                                                           β”‚                                                                                                                                                                                                             gateway connect failed: GatewayClientRequestError: pairing required                                                                                                                                           β—‡                                                                                                                                                                                                             Gateway agent failed; falling back to embedded: Error: gateway closed (1008): pairing required                                                                                                                Gateway target: ws://127.0.0.1:18789                                                                                                                                                                          Source: local loopback                                                                                                                                                                                        Config: /home/wrakeeb/.openclaw/openclaw.json                                                                                                                                                                 Bind: loopback                                                                                                                                                                                                12:33:35 [agent/embedded] incomplete turn detected: runId=019e0406-0602-43a4-8287-fa9bbf1a337a sessionId=019e0406-0602-43a4-8287-fa9bbf1a337a stopReason=stop payloads=0 β€” surfacing error to user            ⚠️ Agent couldn't generate a response. Please try again.


ashen burrowBOT
#

Aha, we found it.

Your Gateway and model are fine, but the local client is hitting pairing required. That usually means there’s a pending device pairing or scope-upgrade request.

Next step

Run:

openclaw devices list

Then paste the output here.

I want to see the pending requestId, then I’ll give you the exact approve command.

cedar linden
#

openclaw devices list                                                                                                                                                                                                                                                                                                                                                                               🦞 OpenClaw 2026.4.15 (041266a) β€” I'll refactor your busywork like it owes me money.                                                                                                                                                                                                                                                                                                                                        β”‚                                                                                                                                                                                                             gateway connect failed: GatewayClientRequestError: pairing required                                                                                                                                           β—‡                                                                                                                                                                                                             Direct scope access failed; using local fallback.                                                                                                                                                             Pending (1)                                                                                                                                                                                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ Request                              β”‚ Device                                 β”‚ Role     β”‚ Scopes                                                                           β”‚ IP         β”‚ Age    β”‚ Flags  β”‚β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚ 11e1330f-3584-41ea-8b69-b53868a1ae81 β”‚ 9ffdc9c067196848e8b015b1b9c94e29c7074e β”‚ operator β”‚ operator.admin, operator.read, operator.write, operator.approvals, operator.     β”‚            β”‚ 1m ago β”‚ repair β”‚β”‚                                      β”‚ 9f1b18709c4d9d67c03516c82c             β”‚          β”‚ pairing, operator.talk.secrets                                                   β”‚            β”‚        β”‚        β”‚β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜Paired (2)                                                                                                                                                                                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ Device                                                               β”‚ Roles         β”‚ Scopes                                                                                 β”‚ Tokens        β”‚ IP         ──────────┼───────────────┼─────────────│ 1bc4275e5b7dc79edb7eee3dceb82139eaa0d0a6913268dbb52fb6ea058dfe01     β”‚ operator      β”‚ operator.admin, operator.read, operator.write, operator.approvals, operator.pairing    β”‚ operator      β”‚            β”‚β”‚ 9ffdc9c067196848e8b015b1b9c94e29c7074e9f1b18709c4d9d67c03516c82c     β”‚ operator      β”‚ operator.read                                                                          β”‚ operator      β”‚      ```
ashen burrowBOT
#

Yep, that’s the fix.

Next step

Approve that pending repair request:

openclaw devices approve 11e1330f-3584-41ea-8b69-b53868a1ae81

Then paste the output here, and we’ll do the test right after.

cedar linden
#

openclaw devices approve 11e1330f-3584-41ea-8b69-b53868a1ae81 🦞 OpenClaw 2026.4.15 (041266a) β€” If something's on fire, I can't extinguish itβ€”but I can write a beautiful postmortem. β”‚ gateway connect failed: GatewayClientRequestError: pairing required β—‡ Direct scope access failed; using local fallback. Approved 9ffdc9c067196848e8b015b1b9c94e29c7074e9f1b18709c4d9d67c03516c82c (11e1330f-3584-41ea-8b69-b53868a1ae81)

ashen burrowBOT
#

Nice, that repair approval went through.

Next step

Run the local test again:

openclaw agent --agent main --message "Reply with exactly TEST-OK"

Paste the output here. If this passes, Telegram should work too.

#

That approval actually did go through in the output above, it shows Approved ....

We’re just one step behind on the retest now. The next check is:

openclaw agent --agent main --message "Reply with exactly TEST-OK"

If that works, the Telegram reply path should be unblocked too.

cedar linden
#

openclaw agent --agent main --message "Reply with exactly TEST-OK" 🦞 OpenClaw 2026.4.15 (041266a) β€” I autocomplete your thoughtsβ€”just slower and with more API calls. β”‚ β—‡ ⚠️ Agent couldn't generate a response. Please try again.

ashen burrowBOT
#

Okay, the pairing problem is fixed. Now we need the real runtime error behind that generic message.

Next step

Use two WSL terminals:

Terminal 1

openclaw logs --follow

Terminal 2

openclaw agent --agent main --message "Reply with exactly TEST-OK"

Then copy the new error lines that appear in Terminal 1 right after you run the test.

#

That should finally show what’s actually breaking.

cedar linden
#

First some of the lines:

openclaw logs --follow 🦞 OpenClaw 2026.4.15 (041266a) β€” I autocomplete your thoughtsβ€”just slower and with more API calls. Log file: /tmp/openclaw/openclaw-2026-04-21.log 06:08:39+00:00 info gateway {"subsystem":"gateway"} loading configuration… 06:08:39+00:00 info gateway {"subsystem":"gateway"} resolving authentication… 06:08:39+00:00 info gateway {"subsystem":"gateway"} starting... 06:08:41+00:00 error (node:290) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (Use `node --trace-deprecation ...` to show where the warning was created)

ashen burrowBOT
#

Those lines are just startup noise. The punycode warning is not the real problem.

Next step

Right after the TEST-OK command fails, run this:

tail -n 80 /tmp/openclaw/openclaw-2026-04-21.log

Then paste the bottom part here, especially any lines containing:

  • error
  • warn agent/embedded
  • HTTP
  • FailoverError

That’ll be much easier to read than the live follow output.

cedar linden
#

I can't , too big

ashen burrowBOT
#

No problem. Let’s filter it down.

Next step

Run this exact command:

grep -E 'agent/embedded|FailoverError|HTTP [0-9]{3}|model-fallback|error diagnostic|assistant_error' /tmp/openclaw/openclaw-2026-04-21.log | tail -n 30

Then paste that output here.

That should shrink it to just the useful error lines.

cedar linden
#

7k words, can't paste

ashen burrowBOT
#

Yep, let’s make it much smaller.

Next step

After reproducing the failure once, run this:

tail -n 200 /tmp/openclaw/openclaw-2026-04-21.log | grep -E 'assistant_error|FailoverError|invalid api key|pairing required|HTTP 4[0-9]{2}|HTTP 5[0-9]{2}' | tail -n 20

That should cut it down to the last few relevant error lines only. Paste that output here.

cedar linden
#

add

ashen burrowBOT
#

Yep, add broader error terms. Run this instead:

tail -n 200 /tmp/openclaw/openclaw-2026-04-21.log | grep -E 'error|warn|assistant_error|FailoverError|invalid api key|pairing required|HTTP 4[0-9]{2}|HTTP 5[0-9]{2}' | tail -n 30

Paste that output here. That should finally be small enough.

cedar linden
#

Still big

ashen burrowBOT
#

Got it. The lines themselves are huge. Let’s truncate them.

Next step

Run this exact command:

grep -E 'assistant_error|FailoverError|invalid api key|pairing required|HTTP 4[0-9]{2}|HTTP 5[0-9]{2}|model_fallback_decision' /tmp/openclaw/openclaw-2026-04-21.log | tail -n 8 | cut -c1-300

That should give you just 8 short lines. Paste that here.

cedar linden
#

Alright, I'm getting reply from Claude models, but not getting any reply from OpenRouter's GPT 5.4 Mini. Why?

ashen burrowBOT
#

Because openrouter/openai/gpt-5.4-mini is not the same path as native openai/gpt-5.4-mini.

OpenClaw’s docs call this out:

  • OpenRouter stays on a proxy-style OpenAI-compatible path
  • OpenAI-only GPT-5 request shaping is not forwarded over that proxy path
  • Native OpenAI routes get different handling than proxy/compatible routes

So the short version is: Claude works because that provider path is healthy, but GPT-5.4 Mini through OpenRouter can behave differently or fail even when the auth probe looks okay.

Docs:

Best next step
For a stable setup right now, make Claude your default model.

#

If you specifically want GPT-5.4 Mini, use a direct OpenAI API key and switch to:

openai/gpt-5.4-mini

If you want, I can walk you through that change one step at a time next.

cedar linden
#

I want to use gpt 5.4 mini as the derault and all time model. How to do it? It doesn't reply back when I select it

ashen burrowBOT
#

Then the honest answer is: don’t use the OpenRouter version as your always-on default.

If you want GPT-5.4 Mini all the time, use the direct OpenAI provider instead of:

openrouter/openai/gpt-5.4-mini

Use:

openai/gpt-5.4-mini

Step 1

If you already have an OpenAI Platform API key, run:

cedar linden
#

Why not? OpenRouter work good when I use I did that on VPS Hostinger

ashen burrowBOT
#

OpenRouter itself is not the problem.

The problem is more specific:

  • OpenRouter can work great
  • Claude through OpenRouter can work
  • other OpenRouter models can work
  • but openrouter/openai/gpt-5.4-mini on this local setup is the one failing

Why that can happen:

  • OpenRouter is a proxy/compatible route, not native OpenAI
  • OpenClaw’s docs say native OpenAI GPT-5 handling is different from proxy routes
  • so the same model family can behave differently on OpenRouter vs direct OpenAI
  • and it can also differ across installs if config/session/provider behavior isn’t identical

So I’m not saying β€œnever use OpenRouter.”
I’m saying: for this exact model on this exact WSL install, it’s the unstable path right now.

#

Best options

  1. Recommended: use direct openai/gpt-5.4-mini if you want GPT-5.4 Mini as your always-on default
  2. Keep OpenRouter, but use a different OpenRouter model that actually replies reliably in this install

If you want, I can help you do either one, one step at a time.

cedar linden
#

I found this:

New Setup With OpenRouter - Agent Not Responding - FIX
βœ…
Solved
Hi, noob claw user here just starting to setup and learn it all. I spent all night trying to figure out why I was not getting any response through my telegram bot, kept getting the "⚠️ Agent couldn't generate a response. Please try again." I was using an Openrouter API and it had credits so that was not the issue.

After so much investigating and threw claude code at it and finally found the issue which is so simple I feel stupid, but not sure how I would have debugged this and this could help someone else so sharing it here.

Bug: Fresh OpenClaw setup (2026.4.15) writes "baseUrl": "https://openrouter.ai/v1" for the openrouter and arcee providers in ~/.openclaw/agents/<agent>/agent/models.json.
OpenRouter's real endpoint is https://openrouter.ai/api/v1 β€” missing /api. Result: TUI connects fine, but every chat turn silently fails (no reply to hello?), since requests hit
a 404.

Fix: Edit ~/.openclaw/agents/main/agent/models.json and change both baseUrl fields:

"baseUrl": "https://openrouter.ai/v1"
change to β†’
"baseUrl": "https://openrouter.ai/api/v1"

The onboarding/setup flow should be writing the /api/v1 URL by default. Not sure if this is a known bug but hopefully is fixed on an update cause it kinda ruined my first time experience with openclaw. Working now but still not super impressed by it yet.

ashen burrowBOT
#

Nice catch. That’s actually credible.

It lines up with the docs and source:

  • canonical OpenRouter base URL is https://openrouter.ai/api/v1
  • the repo also has tests for normalizing stale https://openrouter.ai/v1 entries

So yes, if your local models.json still has /v1, that could absolutely explain the silent OpenRouter failure.

Next step

Run this:

grep -n 'openrouter.ai' ~/.openclaw/agents/main/agent/models.json
#

Then tell me whether it shows:

  • https://openrouter.ai/v1
    or
  • https://openrouter.ai/api/v1

If it’s the first one, I’ll give you the exact next fix.

cedar linden
ashen burrowBOT
#

Yep, that’s the bug.

Your file has the legacy wrong URL. Let’s patch it.

Next step

Run this exact block in WSL:

cp ~/.openclaw/agents/main/agent/models.json ~/.openclaw/agents/main/agent/models.json.bak
sed -i 's#https://openrouter.ai/v1#https://openrouter.ai/api/v1#g' ~/.openclaw/agents/main/agent/models.json
grep -n 'openrouter.ai' ~/.openclaw/agents/main/agent/models.json

You should then see:

#
https://openrouter.ai/api/v1

Paste that output here, and I’ll give you the final restart/test step.

cedar linden
#

cp ~/.openclaw/agents/main/agent/models.json ~/.openclaw/agents/main/agent/models.json.bak sed -i 's#https://openrouter.ai/v1#https://openrouter.ai/api/v1#g' ~/.openclaw/agents/main/agent/models.json grep -n 'openrouter.ai' ~/.openclaw/agents/main/agent/models.json 78: "baseUrl": "https://openrouter.ai/api/v1", 135: "baseUrl": "https://openrouter.ai/api/v1",

ashen burrowBOT
#

Perfect. That part is fixed now.

Next step

Restart the Gateway, then run the quick test:

openclaw gateway restart
openclaw agent --agent main --message "Reply with exactly TEST-OK"

If that returns TEST-OK, send a message to your Telegram bot again.

Tell me what happens after that.

cedar linden
#

Got reply back !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ashen burrowBOT
#

Hell yes πŸŽ‰

So the issue was the wrong OpenRouter base URL in:

~/.openclaw/agents/main/agent/models.json

It had:

https://openrouter.ai/v1

and needed:

#
https://openrouter.ai/api/v1

That’s a real bug, not you.

If you can, please file it here so it gets fixed properly:
https://github.com/openclaw/openclaw/issues

And if this fixed it, please right-click the solution message β†’ Apps β†’ βœ… Mark Solution so Answer Overflow can index it for the next person.