#Set-up OpenClaw Local
1 messages Β· Page 1 of 1 (latest)
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-daemonuses a user service there
Paste the output here, and Iβll give you Step 2 only.
Docs Iβm using:
Next step
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
$ 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)"
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.
openclaw --version openclaw: command not found
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
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"
openclaw --version OpenClaw 2026.4.15 (041266a)
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.
Onboarding complete. Use the dashboard link above to control OpenClaw.
Nice, thatβs the hard part done.
Step 6
Verify the Gateway is actually running:
openclaw gateway status
Paste the output here, and Iβll give you the next step.
Perfect, the Gateway is up and healthy.
Step 7
Open the dashboard in your browser. Easiest options:
openclaw dashboard
Or open this URL directly:
Then tell me one of these:
- βdashboard loadsβ
- or the exact error / auth prompt you see
Youβre very close now.
I logged in, but no reply.
Telegram shows: β οΈ Agent couldn't generate a response. Please try again.
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
```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 ````
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
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
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.
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 ```
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.
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.
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.
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 β ```
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.
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)
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.
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.
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.
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)
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:
errorwarn agent/embeddedHTTPFailoverError
Thatβll be much easier to read than the live follow output.
I can't , too big
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.
7k words, can't paste
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.
add
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.
Still big
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.
Alright, I'm getting reply from Claude models, but not getting any reply from OpenRouter's GPT 5.4 Mini. Why?
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.
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
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:
openclaw models auth add
Then choose the OpenAI API key option.
If you donβt have an OpenAI Platform key yet, create one here first:
https://platform.openai.com/api-keys
When that part is done, tell me, and Iβll give you Step 2 to set it as the default model.
Docs:
https://docs.openclaw.ai/providers/openai
https://docs.openclaw.ai/providers/openrouter
https://docs.openclaw.ai/help/faq#how-do-i-switch-models-without-wiping-my-config
Why not? OpenRouter work good when I use I did that on VPS Hostinger
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-minion 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
- Recommended: use direct
openai/gpt-5.4-miniif you want GPT-5.4 Mini as your always-on default - 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.
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.
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/v1entries
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
orhttps://openrouter.ai/api/v1
If itβs the first one, Iβll give you the exact next fix.
grep -n 'openrouter.ai' ~/.openclaw/agents/main/agent/models.json 78: "baseUrl": "https://openrouter.ai/v1", 135: "baseUrl": "https://openrouter.ai/v1",
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.
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",
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.
Got reply back !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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.