#perplexity
1 messages · Page 1 of 1 (latest)
@terse bridge
Hey Mikaziq â what can I help with? If this is an OpenClaw setup/troubleshooting thing, drop the details here (or in #help if thatâs where you prefer): your OS, openclaw --version, what youâre trying to do, and the exact error/log snippet.
i want to set my web search using perplexity instead of brave
You can â web_search supports Perplexity Sonar (direct) or OpenRouter.
1) Set the provider to Perplexity
In your config (~/.openclaw/openclaw.json, JSON5), set:
{
tools: {
web: {
search: {
enabled: true,
provider: "perplexity",
perplexity: {
apiKey: "pplx-...", // or use OPENROUTER_API_KEY
baseUrl: "https://api.perplexity.ai", // or https://openrouter.ai/api/v1
model: "perplexity/sonar-pro",
},
},
},
},
}
Or via CLI:
openclaw config set tools.web.search.provider perplexity
openclaw config set tools.web.search.perplexity.apiKey "pplx-..."
openclaw config set tools.web.search.perplexity.baseUrl "https://api.perplexity.ai"
openclaw config set tools.web.search.perplexity.model "perplexity/sonar-pro"
2) Restart the gateway
openclaw gateway restart
3) Notes
- Env-var alternative: set
PERPLEXITY_API_KEY(direct) orOPENROUTER_API_KEY(OpenRouter) in~/.openclaw/.env. - Docs: https://docs.openclaw.ai/tools/web and https://docs.openclaw.ai/perplexity
before i got cloud code assist api error 429, i can use the web search function like asking what is the weather today. then it exhausted so i add the fallback models. my questions is, is it cause the cloud code still have 429 error cooldown that it can use web search function so now it is using the fallback midel that need brave or perpelxity api key to do web search? my fallback is qwen-portal/coder-model and qwen-portal/vision-model
Yeah, two separate things are getting mixed together here:
- The 429 cooldown is for your chat/model provider (your âbrainâ model). If itâs still rate-limited, OpenClaw will keep failing over to your fallback models until the primary works again. You can confirm what itâs actually using with:
openclaw models status
web_searchis a tool with its own provider + API key requirement, independent of which chat model is active. Ifweb_searchruns and you donât have a key configured, it will fail:
- provider =
braveâ needsBRAVE_API_KEY(ortools.web.search.apiKey) - provider =
perplexityâ needsPERPLEXITY_API_KEY/OPENROUTER_API_KEY(ortools.web.search.perplexity.apiKey)
So switching to fallback Qwen models didnât create the requirement â it just changed behavior such that the agent is now actually trying to call web_search (where previously your âweather todayâ mightâve been answered from model knowledge, cache, or another tool/skill).
To switch web_search to Perplexity:
openclaw config set tools.web.search.provider perplexity
openclaw config set tools.web.search.perplexity.apiKey "pplx-..." # or sk-or-... for OpenRouter
openclaw config set tools.web.search.perplexity.baseUrl "https://api.perplexity.ai" # or https://openrouter.ai/api/v1
openclaw gateway restart
Docs: https://docs.openclaw.ai/tools/web and https://docs.openclaw.ai/perplexity
If you paste the exact current error you see when it tries to search (1â3 lines), I can tell you which side is failing (model 429 vs missing web_search key vs quota).
openclaw config set tools.web.search.perplexity.apiKey what i need to change in this command if im using openrouter instead
If youâre using OpenRouter, you still set the Perplexity config block â you just:
- put your OpenRouter key (
sk-or-...) intools.web.search.perplexity.apiKey - set
baseUrlto OpenRouter
Example:
openclaw config set tools.web.search.provider perplexity
openclaw config set tools.web.search.perplexity.apiKey "sk-or-v1-REPLACE_ME"
openclaw config set tools.web.search.perplexity.baseUrl "https://openrouter.ai/api/v1"
openclaw config set tools.web.search.perplexity.model "perplexity/sonar-pro"
openclaw gateway restart
Alternative: instead of setting apiKey in config, you can export it for the gateway via OPENROUTER_API_KEY (e.g. in ~/.openclaw/.env) and just set the provider/baseUrl. Docs: https://docs.openclaw.ai/perplexity
what does typing TTL reached (2m); stopping typing indicator mean
when you start a query they typing indicator starts on e.g. discord or telegram etc ..
when the query isn't done yet it times out saying its still typing at 2m
I set mine for 60m but maybe I'm crazy
Yep, thatâs a real knob â web_search has a query cache (default 15 minutes). If you want 60 minutes, set:
openclaw config set tools.web.search.cacheTtlMinutes 60
openclaw gateway restart
(Thatâs the âsame query returns cached resultsâ TTL, not a rate-limit cooldown.) Docs: https://docs.openclaw.ai/tools/web
oo got it thnksss
uhhhh yeah u can but need to pay lol
âFallback modelsâ = simple failover.
If your primary LLM gets rate-limited (429), times out, or is down, OpenClaw can automatically try a backup model so the agent still responds instead of just dying. You can see what it resolved to with openclaw models status, and what fallbacks are configured with openclaw models fallbacks list.
The âcontrol Claude remotely / run tasksâ stuff is still the same core idea â this is just reliability plumbing so one provider having a bad day doesnât brick your assistant.
Docs:
- Models + failover: https://docs.openclaw.ai/concepts/models
- Web search tool (separate from the chat model): https://docs.openclaw.ai/tools/web
You can run a lot of the âremote control + tasksâ stuff without paying OpenClaw itself, but yeah: something usually pays for the âbrainâ (LLM) and sometimes web search.
Practical breakdown:
- OpenClaw: free / self-hosted.
- LLM costs: Claude/OpenAI/Codex/etc are paid APIs, and 429s happen when you hit their limits.
- Cheaper options: set a cheaper default model + keep an expensive one as fallback (or the other way around). This is what âfallback modelsâ is for.
- Web search: needs a provider key (Brave or Perplexity/OpenRouter), unless you only use
web_fetch(which doesnât require a key).
So it hasnât âbecomeâ something else â people are just hitting the reality that agents = tool access + model usage, and model usage isnât free.
Not just Claude API key â Claude Max (subscription) works too, but itâs not âlogin with claude.aiâ.
Claude Max doesnât give you an Anthropic API key, so OpenClaw uses a setup-token (generated by the Claude Code CLI) as the subscription-auth path:
- Generate token:
claude setup-token - On the gateway host, set it in OpenClaw:
openclaw models auth setup-token --provider anthropic(runs the flow), oropenclaw models auth paste-token --provider anthropic(paste one you generated elsewhere)
Docs:
- https://docs.openclaw.ai/help/faq#can-i-use-claude-max-subscription-without-an-api-key
- https://docs.openclaw.ai/providers/anthropic
(Separate note since this channel is about search: Perplexity for web_search is a different API/key/billing than Claude.)
Yep â web_search can use Perplexity Sonar (instead of Brave), but itâs separate billing/keys from Claude (Claude Max / Anthropic API wonât cover it).
Config:
{
tools: {
web: {
search: {
enabled: true,
provider: "perplexity",
perplexity: {
apiKey: "pplx-...", // or an OpenRouter key (sk-or-v1-...)
baseUrl: "https://api.perplexity.ai",// or "https://openrouter.ai/api/v1"
model: "perplexity/sonar-pro",
},
},
},
},
}
Env var alternatives:
- Direct Perplexity:
PERPLEXITY_API_KEY - Via OpenRouter:
OPENROUTER_API_KEY
Docs:
(Also: if youâre using tool allowlists, make sure web_search is allowed â e.g. group:web.)
If Telegram onboarding (âtap tap tapâ) completed but it âdoesnât workâ only for specific Claude models, thatâs almost always one of these:
- No Anthropic creds are actually being used by the running Gateway (common when the service/daemon is running with different env/config than your CLI/wizard)
- The model name you picked isnât available to your account/key (API returns âmodel not found / not allowedâ)
- Rate limit (429) on the Anthropic side (esp. with subscription/setup-token)
Can you paste the exact failure signal? (Do you get âAll models failedâ? or just no reply?)
Fastest debug bundle (redact tokens):
openclaw --version
openclaw gateway status
openclaw models status --probe
openclaw logs --follow
Then, while logs --follow is running, send your bot a Telegram DM and paste the few log lines that show the Anthropic error (401/403/model_not_found/429/etc). That log snippet usually makes the fix obvious.
Two common fixes depending on what the logs say:
- Service env mismatch (API key path): if youâre using
ANTHROPIC_API_KEY, make sure itâs in~/.openclaw/.env(daemons donât inherit your shell env), thenopenclaw gateway restart. - Claude Max (subscription) path: you must use a setup-token (
claude setup-tokenâopenclaw models auth paste-token --provider anthropic), and if the API says the chosen model isnât allowed, switch to a model that shows up underopenclaw models list.
Drop the models status --probe + the log error and Iâll tell you exactly which branch youâre in.
What youâre describing is basically: Brave search worked, then the next step (Claude summarizing/using the results) blew up on cost + Anthropic 429.
A couple practical fixes:
- Donât use Opus as your default âchat brainâ
Opus is great but itâs absolutely the wrong default for âweb_search â summarizeâ flows (the tool output can be chunky, and you pay to stuff it into the prompt).
Set your default to Sonnet, keep Opus for rare âI really need itâ jobs:
openclaw models set anthropic/claude-sonnet-4-5
- Cut down how much web_search returns (saves tokens hard)
{
tools: {
web: {
search: {
maxResults: 3, // try 3 instead of 10
},
},
},
}
- Stop the â429 every X minutesâ spam
If youâre seeing it on a schedule (10m / 30m), thatâs usually heartbeats (or a cron) repeatedly firing while your Anthropic quota is rate-limited.
Immediate stop:
openclaw system heartbeat disable
Or disable permanently:
openclaw config set agents.defaults.heartbeat.every "0m"
- 429 is Anthropic quota/rate-limit, not Brave
If youâre on Claude Max via setup-token, the rate limits can be much tighter than ârealâ API usage. You either wait for the window to reset, or set a fallback model/provider so OpenClaw can keep replying when Anthropic is throttling.
Docs for the above:
- 429 explanation: https://docs.openclaw.ai/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic
- Web tool config: https://docs.openclaw.ai/tools/web
- Heartbeat: https://docs.openclaw.ai/help/faq#why-am-i-getting-heartbeat-messages-every-30-minutes
If you paste one of the 429 error blobs (from chat or openclaw logs --follow), I can tell you whether itâs âsubscription/setup-token limitsâ, âAPI key tier limitsâ, or âtoo much context being sent every runâ.
Yeah â thatâs very likely the issue.
In OpenClaw a bunch of those âeditable defaultsâ are not labels, theyâre identifiers that must match exactly:
- model refs must be real
provider/modelstrings (or a defined alias) - provider ids like
anthropic,openrouter,brave,perplexitymust be exact - tool names / groups (
web_search,web_fetch,group:web, etc.) must be exact
So if you changed a model value from something like anthropic/... to claudemodelname, OpenClaw will treat that as either:
- an alias (only works if you define it), or
- an unknown model â then you get weird âdoesnât workâ / failover / retry behavior.
What to do instead (best practice):
- Put the real model ref back, and add your âreminder textâ as a JSON5 comment (config supports comments), or
- Create a model alias properly:
openclaw models aliases add claudemodelname anthropic/<real-model-ref>
openclaw models status
Quick sanity check to confirm youâre in a good state:
openclaw models status --plain
openclaw models status
If you paste the snippet of your config where you edited the model/provider values (redact keys), I can point to the exact field(s) that must stay canonical.
Youâre not wrong to be annoyed â but the key detail is: OpenClaw canât treat arbitrary strings as âjust labelsâ in places where the value is actually an ID.
1) âPast tenseâ / subscription support confusion
That FAQ line isnât meant as âused toâ. Itâs literally describing the two auth modes that exist today:
- Claude subscription (Max/Pro) â works via setup-token (
claude setup-tokenâ paste into OpenClaw) - Anthropic API key â works via
ANTHROPIC_API_KEY/ auth profiles
Docs: https://docs.openclaw.ai/help/faq#can-i-use-claude-max-subscription-without-an-api-key
2) There is a list of âknown modelsâ â but itâs not supposed to be hidden
OpenClaw needs a âknown/allowedâ set for 3 reasons:
- avoid typos silently burning money (
claudetteshouldnât go to a random endpoint) - know which models are allowed per agent / failover
- power
/model listpicker + validation
That list is inspectable. You can see what OpenClaw thinks is valid on your install:
openclaw models status
openclaw models list
openclaw models aliases list
openclaw config get agents.defaults.models
openclaw config get agents.defaults.model
(And in-chat, /model status + /model list.)
So âknown modelâ doesnât mean âsome secret hardcoded thing you canât viewâ; it means âresolves to something in your configured catalog / aliasesâ.
3) Terminology map (the part thatâs biting you)
- Provider:
anthropic,openrouter,perplexity,brave, etc. - Model ref:
provider/model(example:anthropic/claude-sonnet-4-5) - Alias: your own shortcut name that maps to a model ref (example:
claudecheapâanthropic/claude-sonnet-4-5) - Primary model: what the agent actually tries first (
agents.defaults.model.primary)
So if you change the primary model value from a real ref to claudemodelname, OpenClaw will only accept that if claudemodelname is a defined alias.
4) How to keep your âreminder namesâ without breaking anything
Best options:
Option A (recommended): keep real model refs, add comments
JSON5 supports comments, so you can annotate without changing the ID.
Option B: create an alias on purpose
Example:
openclaw models aliases add claudemodelname anthropic/claude-sonnet-4-5
openclaw models set claudemodelname
Then you can rename your alias all you want, and the underlying ref stays correct.
If you paste the specific config snippet where you ârenamed defaultsâ (redact keys), I can tell you exactly which fields are safe to rename (labels) vs which must remain canonical IDs (model refs, provider ids, tool names).
Totally fair feedback. Right now the âmapâ you want is split across:
- Config (what you intend):
~/.openclaw/openclaw.json(models, defaults, web_search provider, etc.) - Auth store (what creds exist): auth profiles on disk
- Runtime (whatâs actually being used + whether it works): Gateway probes / errors / 429s
Closest âone pageâ today
Control UI already has most of this in one place (it can show status/health/models snapshots and config in the same UI):
- Open:
openclaw dashboard - Docs (lists exactly what panels exist): https://docs.openclaw.ai/web/control-ui
And in CLI, this is the closest single ârelationships + statusâ view:
openclaw models status --probe
openclaw models list
Docs: https://docs.openclaw.ai/cli/models
Whatâs missing (agree): a dedicated âModels & Authâ page
A single screen that shows, at once:
- primary model + fallbacks + aliases
- which auth profiles exist + which one is selected/ordered
- live probe status (ok/401/403/429) + last error
- web_search provider (Brave vs Perplexity) + key source
âŠwould be a huge usability win.
If youâre up for it, this is a perfect GitHub issue (UI/UX feature request). Include your âspatial learningâ framing + a quick sketch of the layout you want:
https://github.com/openclaw/openclaw/issues
Yeah, anthropic/claude-sonnet-4-20250514 is exactly the kind of âlooks plausibleâ model string that will screw you.
Anthropic has versioned/dated model IDs, but OpenClaw doesnât accept arbitrary provider model strings unless they exist in its model catalog/aliases. So you end up with âunknown modelâ â failover/retries â chaos (and in the worst case, repeated 429 spam if heartbeats keep trying).
What to do (and what to tell your AI next time):
- Ask OpenClaw what it thinks is valid, donât guess:
openclaw models list --provider anthropic
openclaw models status
- Set the model via the CLI (so you donât fight the config schema / typos):
openclaw models set anthropic/claude-sonnet-4-5
(Or pick whatever models list shows for Anthropic on your install.)
- If âI edited it but it wouldnât changeâ, 90% of the time itâs because you edited one config but the daemon is running with another. This command makes that obvious:
openclaw gateway status
(it shows config used by the service vs CLI)
If you want âI rename stuff so I remember what it isâ, the safe way is: keep the real model ref and add a comment, or create an alias intentionally (openclaw models aliases add âŠ). Renaming the ID value will break resolution by design.
anthropic/claude-sonnet-4-5 isnât âexplaining meaningâ to OpenClaw â itâs a routing key.
OpenClaw is basically a traffic cop across multiple backends, and it needs two concrete IDs to make a correct API call:
anthropic= which provider plugin / API client to use (auth, base URL, request format, headers, retry rules)claude-sonnet-4-5= which model on that provider (capabilities, context limits, tool support, pricing/rate limits)
If OpenClaw let you put arbitrary strings like claude or claudette there, youâd get exactly the mess you hit: âlooks plausibleâ â silent misrouting / failover / retries / 429 spam.
Why do you have to âtell itâ at all?
- You only have to do this when youâre overriding the default. The wizard sets a default for you.
- âClaudeâ is ambiguous: Sonnet vs Opus, and also âClaude via Anthropicâ vs âClaude via OpenRouterâ etc. There isnât a single unambiguous âclaudeâ.
Also: the âlist of known modelsâ is not supposed to be hidden. You can inspect the source of truth:
openclaw models list
openclaw models status
And if you want the short, human way: OpenClaw ships shorthands when the model exists in your catalog:
sonnetâanthropic/claude-sonnet-4-5opusâanthropic/claude-opus-4-6
(From the FAQ.) So you can often just do:
openclaw models set sonnet
If you want âmy own naming so I remember whatâs whatâ, do it as an alias, not by renaming the canonical ID.
There isnât a âset up Claude Max with OAuthâ doc because OpenClaw doesnât do Anthropic/Claude Max OAuth login.
For Claude subscriptions (Pro/Max), the supported path is setup-token (generated by the Claude Code CLI) â not OAuth. OAuth in OpenClaw is mainly for things like OpenAI Codex (ChatGPT OAuth).
Docs you want:
- Install + onboard: https://docs.openclaw.ai/start/getting-started
- Claude (Anthropic) auth options (API key vs setup-token): https://docs.openclaw.ai/providers/anthropic
- Why itâs setup-token (and where creds live): https://docs.openclaw.ai/concepts/oauth
Quick âClaude Maxâ setup (setup-token):
# install
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw onboard --install-daemon
# generate token (any machine with Claude Code CLI)
claude setup-token
# paste token on the gateway host
openclaw models auth paste-token --provider anthropic
# verify + pick model
openclaw models status --probe
openclaw models set sonnet
The 429 FAQ section is just explaining rate limits once youâre already authenticated â itâs not implying âsubscription auth used to existâ; itâs describing the current âsubscription via setup-tokenâ mode.
Nothing about that mapping lives on a server you canât see.
There are two different âmeaningsâ mixed together here:
1) What does anthropic/... mean?
anthropic is a provider id. OpenClaw âknowsâ it because the Anthropic provider client/plugin ships with OpenClaw (local code). That determines things like:
- which HTTP API to call (Anthropic vs OpenAI vs OpenRouter)
- what auth profile types are valid (api key vs setup-token)
- default baseUrl, headers, retry behavior, etc.
So yes: provider ids are not arbitrary strings; they map to real code.
2) What does claude-sonnet-4-5 mean?
That part is (mostly) Anthropicâs own model id. OpenClaw doesnât invent it; it passes it through to Anthropicâs API.
OpenClaw may also have local metadata for UX/safety (aliases, allowlists, maybe cost/context heuristics). That âcatalogâ is local and inspectable.
Where is that local âcatalogâ data?
You can view it three ways:
- What OpenClaw thinks is available/known (incl. built-ins):
openclaw models list --all
- What your config explicitly allows + aliases you defined:
openclaw config get agents.defaults.models
openclaw models aliases list
- Whatâs actually active + which creds are being used:
openclaw models status --probe
And the built-in shorthands like sonnet/opus are literally defined in code (locally) as default aliases (see DEFAULT_MODEL_ALIASES in src/config/defaults.ts).
Why arbitrary strings break
Because in places like agents.defaults.model.primary, the value is treated as an ID (either a provider/model ref or a defined alias). If you change it to a âlabelâ like claudemodelname without defining an alias, it canât resolve deterministically.
If you want your own naming scheme, the supported place to put it is aliases:
openclaw models aliases add claudemodelname anthropic/claude-sonnet-4-5
openclaw models set claudemodelname
If you run openclaw models list --all and you donât see the model you want, paste that output (or openclaw models status --json) and Iâll point out exactly whatâs missing (provider config vs allowlist vs auth).
That line is basically stale / sloppy wording.
- OpenClaw does not have a âlog in to Claude Max via OAuthâ flow.
- For Claude Pro/Max subscription auth, the supported path is setup-token (
claude setup-tokenâ paste into OpenClaw). Docs: https://docs.openclaw.ai/providers/anthropic
So what is âClaude Code OAuthâ doing in that 429 FAQ sentence?
Itâs referring to a legacy / compatibility path where people had Anthropic âOAuth-ishâ tokens lying around (e.g. env ANTHROPIC_OAUTH_TOKEN / old anthropic:claude-cli style profiles) and OpenClaw could try to use them â but itâs not a recommended or documented setup path, and itâs exactly why newer docs keep saying âuse setup-tokenâ.
The sentence in the FAQ should really read more like:
âIf you use a Claude subscription (setup-token), you can hit 429s; wait for reset/upgradeâŠâ
If you want, file an issue specifically: âRemove/clarify âClaude Code OAuthâ mention in 429 FAQ; Anthropic subscription auth is setup-token onlyâ
https://github.com/openclaw/openclaw/issues
Youâre 100% right on the UX point: provider/model IDs are identifiers, so in a UI they should be picked, not free-typed.
Today, the Control UI has two âmodesâ:
- Config editor = basically a JSON5 editor (power-user / escape hatch). It will happily let you type nonsense, because itâs editing the raw config.
- Model picker = use the command/UI flow that lists valid choices and selects one.
Workarounds that avoid typing anthropic/claude-sonnet-4-5 entirely:
- In chat (including Control UI chat), use the picker:
/model(shows a numbered picker)/model list/model sonnet(built-in shorthand when available)
- From CLI (same idea, but âsafeâ):
openclaw models list
openclaw models set sonnet
openclaw models status --probe
I agree the Control UI should also expose a proper dropdown sourced from models.list (and ideally show auth/profile status + probe results right there). Right now that âtyped IDâ sharp edge is real. If you file it as âControl UI: model/provider dropdown + auth/probe visibilityâ, thatâs a very actionable issue.
If you want to nuke all model config/aliases/provider registry and start from absolute zero, use the built-in reset command â thatâs the âdestroy it allâ button.
- See what will be wiped (safe):
openclaw reset --dry-run
- Full scorched-earth reset (config + sessions + auth profiles + models registry + workspace):
openclaw reset --scope full --yes --non-interactive
- Re-run onboarding:
openclaw onboard --install-daemon
Notes:
--scope fullremoves your whole state dir (default~/.openclaw), including the per-agentmodels.jsonregistry and any aliases/models you accumulated.- If you were âstill seeing old model names in logsâ: that can also just be you reading an old log file. After reset + restart, run
openclaw logs --followand you should only see fresh runs.
If you donât want to lose workspace/memory/auth and only want âmodels clean slateâ, say so â the scopes behave differently (config vs config+creds+sessions vs full).
Not default, but itâs a very common outcome if you run Opus as your primary and youâre on subscription/setupâtoken limits (or a low API tier): Opus is expensive + high-token, so you hit Anthropicâs rate/usage window fast, and then everything starts returning 429 until the window resets.
Two practical mitigations:
- Donât make Opus the default. Use Sonnet as primary, keep Opus for âonly when neededâ:
openclaw models set sonnet
(or anthropic/claude-sonnet-4-5)
- Set a fallback so OpenClaw can keep replying during Anthropic 429s:
openclaw models fallbacks add openai/gpt-5.2
# or another provider you have creds for
Also worth doing: disable/slow heartbeats while youâre rate-limited so you donât get periodic retry spam:
openclaw system heartbeat disable
If you want to confirm what kind of 429 it is (subscription vs API key tier vs too many concurrent requests), run:
openclaw models status --probe
and paste the Anthropic probe result line.
That âsetup-token or Claude Code OAuthâ line is referring to a specific thing: reusing credentials from the Claude Code CLI (either from macOS Keychain or ~/.claude/.credentials.json). Itâs not âOpenClaw has a nice OAuth login flow for Claude Maxâ.
So there are basically two âClaude Maxâ paths:
A) Recommended (documented): Claude Max via setup-token
This is the ânormalâ Claude Max setup now.
Docs:
Steps:
- Install OpenClaw
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw onboard --install-daemon
- Generate token (any machine with Claude Code CLI):
claude setup-token
- Paste on the gateway host:
openclaw models auth paste-token --provider anthropic
openclaw models set sonnet
openclaw models status --probe
B) Legacy / âreuse Claude Code OAuth credsâ
This is what that FAQ sentence is talking about.
The doc that actually describes it is here:
- https://docs.openclaw.ai/start/wizard-cli-reference (see âAnthropic OAuth (Claude Code CLI)â)
It works by importing:
- macOS: Keychain item âClaude Code-credentialsâ
- Linux/Windows:
~/.claude/.credentials.json
âŠbut itâs brittle (tokens can get invalidated / refresh fails), which is why the project keeps pushing people toward setup-token instead.
If you want, Iâd file a docs issue: the 429 FAQ should probably not mention âClaude Code OAuthâ without linking directly to the wizard reference section (or should clarify âcredential reuseâ).
https://docs.openclaw.ai/gateway/authentication
Itâs on the Authentication page, in the âAnthropic: setup-token (subscription auth)â section near the top. It literally has:
openclaw models auth paste-token --provider anthropic
Same command is also on:
- https://docs.openclaw.ai/providers/anthropic (Option B: Claude setup-token)
- https://docs.openclaw.ai/concepts/oauth (Anthropic setup-token section)
If you want âClaude Max quickstartâ as its own first-class page (install â setup-token â verify â pick Sonnet), I agree that should exist more prominently than being split across those pages.
Yep â that behavior is exactly âsession model override sticksâ, and your 404 is almost certainly because sonnet was treated as a literal model id, not an alias.
Why it stayed Opus
openclaw models set ⊠changes the default for new sessions. Existing Telegram DM sessions can keep an override like âopusâ until you explicitly change it or start a new session.
Why you got 404 not_found_error model: sonnet
When you do /model sonnet (or the agent tries to switch to âsonnetâ) OpenClaw resolves that string like this:
- if itâs a known alias â maps to
anthropic/claude-sonnet-4-5 - otherwise â it assumes you meant âmodel id
sonneton the current/default providerâ â i.e. tries Anthropic model"sonnet"â Anthropic says ânopeâ â 404
Fix it right now (Telegram DM)
- In that same Telegram chat, run:
/model status
/model list
- Then switch using the explicit ref (wonât rely on aliases):
/model anthropic/claude-sonnet-4-5
- If you want a clean slate (also clears the âstill opusâ pollution):
/new
(or /new anthropic/claude-sonnet-4-5)
If you want /model sonnet to work
Define the alias explicitly:
openclaw models aliases add sonnet anthropic/claude-sonnet-4-5
openclaw models aliases list
If you paste what /model status shows in that Telegram session, I can tell you exactly whether itâs (a) missing alias, (b) model allowlist blocking, or (c) provider mismatch.
Yes â sonnet is a shipped default alias.
Docs: https://docs.openclaw.ai/help/faq#are-opus-sonnet-gpt-builtin-shortcuts
By default OpenClaw maps:
opusâanthropic/claude-opus-4-6sonnetâanthropic/claude-sonnet-4-5
Two gotchas that explain your âmodel: sonnet 404â:
-
Those shorthands are only applied when the model is actually present/allowed in your model catalog (e.g. via
agents.defaults.modelsallowlist). If it doesnât resolve as an alias, it falls back to treating"sonnet"as a literal model id â Anthropic returns 404. -
If you wiped/edited model catalogs/aliases, you may have removed the alias mapping.
Quick check:
openclaw models aliases list
openclaw models list --provider anthropic
If sonnet isnât there, add it explicitly:
openclaw models aliases add sonnet anthropic/claude-sonnet-4-5
openclaw models set sonnet sets only the model (agents.defaults.model.primary). It does not pick an auth profile.
Auth profiles are a separate layer: theyâre per provider (Anthropic), not âper modelâ. So if you have 3 âSonnet profilesâ, what you actually have is 3 Anthropic credentials (keys/tokens/OAuth) that can all be used to call anthropic/claude-sonnet-4-5.
So which profile gets used?
By default OpenClaw picks an Anthropic profile in this order (then it âsticksâ per session):
- If you set an explicit order:
auth.order.anthropicâ it uses that list (and rotates within it on failures/429) - Otherwise it round-robins through stored profiles (OAuth/token first, then API keys), tracking cooldowns, lastUsed, etc.
Docs: https://docs.openclaw.ai/concepts/model-failover (auth profile rotation + session stickiness)
How to force âuse this one profileâ
- See what order is currently set:
openclaw models auth order get --provider anthropic
- Set the order to a single profile ID (example ids:
anthropic:default,anthropic:work, etc.):
openclaw models auth order set --provider anthropic anthropic:default
Then start a fresh session so the old âpinnedâ choice doesnât linger:
- in chat:
/new - then
/model statusto confirm which profile itâs using
You can also pin per-session explicitly:
/model sonnet@anthropic:default
How to remove two profiles
There isnât a nice CLI âdelete profileâ command yet. Practical options:
- Donât delete, just ignore them: set
auth.orderto only the one you want (above). This stops OpenClaw from ever choosing the other two. - Truly delete them: edit the auth store file and remove the profile entries.
File is typically:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json
(You can find the exact path via/model statusoropenclaw models statusoutput.)
If you paste the three profile IDs you see in /model status (just the IDs, not tokens), I can tell you the exact models auth order set ⊠line to lock it to the one you want.
No â anthropic/sonnet is exactly the bad form.
sonnet is an alias (a shorthand). Aliases only apply when the input is just the alias key:
- â
openclaw models set sonnetâ resolves toanthropic/claude-sonnet-4-5 - â
openclaw models set anthropic/claude-sonnet-4-5â explicit, always works - â
openclaw models set anthropic/sonnetâ provider=anthropic, model=sonnet(literal model id) â Anthropic returns 404
You only need openclaw models aliases add sonnet anthropic/claude-sonnet-4-5 if you somehow removed the shipped default alias mapping. Check with:
openclaw models aliases list
openclaw models status --plain
That output is the smoking gun:
- sonnet -> anthropic/sonnet
Thatâs not a shipped/default mapping â that means your config currently contains a model entry keyed as "anthropic/sonnet" and you (or some AI/wizard step) gave it the alias "sonnet".
Important detail: openclaw models aliases list is not showing some hidden internal list. Itâs literally just reading:
agents.defaults.models["<provider/model>"].alias
So to fix it:
1) Remove the bad alias
openclaw models aliases remove sonnet
2) Add the correct alias (points to a real Anthropic model id)
openclaw models aliases add sonnet anthropic/claude-sonnet-4-5
3) (Recommended) Also delete the bogus "anthropic/sonnet" model entry
Because even if you remove the alias, that model key can still sit in your allowlist and confuse things later.
To find it, run:
openclaw config get agents.defaults.models
Then remove the "anthropic/sonnet" key from that map in the Control UI config editor (search for anthropic/sonnet) or by editing ~/.openclaw/openclaw.json.
On the âdefault aliasesâ question: OpenClaw can ship a couple convenience shorthands (docs mention opus and sonnet), but your current sonnet -> anthropic/sonnet is definitely not the intended default. Itâs a misconfigured allowlist entry.
You can recover from this even if the current session is âstuckâ on a bogus model, because /model and /new are gateway directives (they donât require a working model call).
Unstick Telegram right now
Send one of these as a standalone message in the Telegram DM:
- Hard reset the session (clears the âstill Opus / still Sonnetâ session override):
/new
- Then set an explicit valid model ref (donât rely on the word âsonnetâ yet):
/model anthropic/claude-sonnet-4-5
(Or /model anthropic/claude-opus-4-6 if you really want Opus.)
Also: /models is just an alias for /model. Donât do /models/models â itâs the same command twice.
Docs for these directives (works on Telegram too):
https://docs.openclaw.ai/tools/slash-commands#model-selection-model
Why youâre seeing âalias vs provider halfâ / why âsonnetâ 404âd
Your aliases list showed:
opus -> anthropic/claude-opus-4-6âsonnet -> anthropic/sonnetâ
That anthropic/sonnet is not a real Anthropic model id, so when the session switches to it Anthropic returns 404 model not found.
This also explains the confusing picker: you effectively have two different âsonnet-ishâ things in your config now:
- the alias name
sonnet
- the (wrong) model key
anthropic/sonnet
Fix the config so âsonnetâ means the real thing again
On the gateway host:
openclaw models aliases remove sonnet
openclaw models aliases add sonnet anthropic/claude-sonnet-4-5
Then remove the bogus allowlist entry if it exists:
- delete the
"anthropic/sonnet"key fromagents.defaults.models(via Control UI config editor oropenclaw config get agents.defaults.modelsand edit).
If you paste your openclaw models aliases list + the agents.defaults.models snippet containing anthropic/sonnet, I can tell you exactly what line to delete.
In Telegram, when you run /model (alias: /models), youâre seeing strings you can pass back into /model âŠ. They come in two shapes:
Legend / taxonomy (how to read that list)
provider/modelId(contains a/) = a model refprovider= which backend/client to use (anthropic,openai,openrouter, âŠ)modelId= the exact model identifier that gets sent to that providerâs API
alias(no/) = a shortcut name that maps to a model ref via your config (agents.defaults.models[*].alias)
So your output:
anthropic/opus-4-6
sonnet
means:
anthropic/opus-4-6= provider anthropic, modelIdopus-4-6(literal)
sonnet= alias (whatever it points to in your config)
Why youâre getting 404
A 404 happens when OpenClaw ends up calling Anthropic with a modelId Anthropic doesnât recognize. In your case you already saw:
sonnet -> anthropic/sonnetâ (Anthropic doesnât have a model literally namedsonnet)- and similarly
anthropic/opus-4-6is almost certainly wrong; Anthropicâs IDs are likeclaude-âŠ(e.g.claude-opus-4-6), notopus-4-6.
So the picker is doing what itâs told: itâs showing you entries from your (now poisoned) allowlist/aliases, and selecting them yields a real API call â Anthropic returns âmodel not foundâ â 404.
Quick recovery in Telegram (works even when the current model is broken)
Send these as standalone messages:
- reset the session override:
/new
- pick an explicit valid ref (donât rely on âsonnetâ yet):
/model anthropic/claude-sonnet-4-5
Fix the root cause (on the gateway host)
openclaw models aliases remove sonnet
openclaw models aliases add sonnet anthropic/claude-sonnet-4-5
âŠand then remove the bogus model keys (anthropic/sonnet, anthropic/opus-4-6) from agents.defaults.models in your config.
Docs for /model//models (including Telegram behavior):
https://docs.openclaw.ai/tools/slash-commands#model-selection-model
Is it true that AutoTranscribe isn't available yet?