#perplexity

1 messages · Page 1 of 1 (latest)

last crypt
#

hey @terse bridge how can i set web_search function to perplexity if i dont want to use brave key?

near edgeBOT
#

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

last crypt
#

@terse bridge

terse bridgeBOT
# last crypt <@1457407575476801641>

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.

last crypt
#

i want to set my web search using perplexity instead of brave

terse bridgeBOT
# last crypt 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"
last crypt
#

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

terse bridgeBOT
# last crypt before i got cloud code assist api error 429, i can use the web search function ...

Yeah, two separate things are getting mixed together here:

  1. 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
  1. web_search is a tool with its own provider + API key requirement, independent of which chat model is active. If web_search runs and you don’t have a key configured, it will fail:
  • provider = brave → needs BRAVE_API_KEY (or tools.web.search.apiKey)
  • provider = perplexity → needs PERPLEXITY_API_KEY / OPENROUTER_API_KEY (or tools.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).

last crypt
#

openclaw config set tools.web.search.perplexity.apiKey what i need to change in this command if im using openrouter instead

terse bridgeBOT
# last crypt openclaw config set tools.web.search.perplexity.apiKey what i need to change in ...

If you’re using OpenRouter, you still set the Perplexity config block — you just:

  • put your OpenRouter key (sk-or-...) in tools.web.search.perplexity.apiKey
  • set baseUrl to 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

last crypt
#

what does typing TTL reached (2m); stopping typing indicator mean

dire kraken
#

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

terse bridgeBOT
last crypt
#

uhhhh yeah u can but need to pay lol

terse bridgeBOT
#

“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:

terse bridgeBOT
# last crypt uhhhh yeah u can but need to pay lol

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.

terse bridgeBOT
#

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), or
    • openclaw models auth paste-token --provider anthropic (paste one you generated elsewhere)

Docs:

(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",
        },
#

If Telegram onboarding (“tap tap tap”) completed but it “doesn’t work” only for specific Claude models, that’s almost always one of these:

  1. 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)
  2. The model name you picked isn’t available to your account/key (API returns “model not found / not allowed”)
  3. 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), then openclaw 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 under openclaw 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:

  1. 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
  1. Cut down how much web_search returns (saves tokens hard)
{
  tools: {
#
    web: {
      search: {
        maxResults: 3, // try 3 instead of 10
      },
    },
  },
}
  1. 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"
  1. 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:

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/model strings (or a defined alias)
  • provider ids like anthropic, openrouter, brave, perplexity must 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):

  1. Put the real model ref back, and add your “reminder text” as a JSON5 comment (config supports comments), or
  2. 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 (claudette shouldn’t go to a random endpoint)
  • know which models are allowed per agent / failover
  • power /model list picker + 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):

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):

  1. Ask OpenClaw what it thinks is valid, don’t guess:
openclaw models list --provider anthropic
openclaw models status
  1. 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.)

#
  1. 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-5
  • opus → 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:

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:

  1. What OpenClaw thinks is available/known (incl. built-ins):
openclaw models list --all
  1. What your config explicitly allows + aliases you defined:
openclaw config get agents.defaults.models
openclaw models aliases list
  1. 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:

  1. In chat (including Control UI chat), use the picker:
  • /model (shows a numbered picker)
  • /model list
  • /model sonnet (built-in shorthand when available)
  1. 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.

  1. See what will be wiped (safe):
openclaw reset --dry-run
  1. Full scorched-earth reset (config + sessions + auth profiles + models registry + workspace):
openclaw reset --scope full --yes --non-interactive
  1. Re-run onboarding:
openclaw onboard --install-daemon
#

Notes:

  • --scope full removes your whole state dir (default ~/.openclaw), including the per-agent models.json registry 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 --follow and 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:

  1. 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)

  1. 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:

  1. Install OpenClaw
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw onboard --install-daemon
#
  1. Generate token (any machine with Claude Code CLI):
claude setup-token
  1. 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:

#

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”).

terse bridgeBOT
#

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:

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 sonnet on the current/default provider” → i.e. tries Anthropic model "sonnet" → Anthropic says “nope” → 404

Fix it right now (Telegram DM)

  1. In that same Telegram chat, run:
/model status
/model list
#
  1. Then switch using the explicit ref (won’t rely on aliases):
/model anthropic/claude-sonnet-4-5
  1. 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-6
  • sonnet → anthropic/claude-sonnet-4-5

Two gotchas that explain your “model: sonnet 404”:

  1. Those shorthands are only applied when the model is actually present/allowed in your model catalog (e.g. via agents.defaults.models allowlist). If it doesn’t resolve as an alias, it falls back to treating "sonnet" as a literal model id → Anthropic returns 404.

  2. 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
terse bridgeBOT
#

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”

  1. See what order is currently set:
openclaw models auth order get --provider anthropic
#
  1. 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 status to 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.order to 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 status or openclaw models status output.)

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 to anthropic/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:

  1. Hard reset the session (clears the “still Opus / still Sonnet” session override):
/new
  1. 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 from agents.defaults.models (via Control UI config editor or openclaw config get agents.defaults.models and 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 ref
    • provider = 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, modelId opus-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 named sonnet)
  • and similarly anthropic/opus-4-6 is almost certainly wrong; Anthropic’s IDs are like claude-
 (e.g. claude-opus-4-6), not opus-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:

  1. reset the session override:
/new
#
  1. 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

mental sparrow
#

Is it true that AutoTranscribe isn't available yet?