#OpenClaw v5.7 — Discord `/model` picker fails for Anthropic, works for OpenAI

1 messages · Page 1 of 1 (latest)

low driftBOT
#

A) Root cause
v5.7’s Discord picker still reads the legacy whole-agent runtime key (agents.defaults.agentRuntime / session agentRuntimeOverride) when rendering/applying selections, even though v5 runtime selection ignores whole-agent runtime pins and expects provider/model runtime policy. With agents.defaults.agentRuntime.id = "claude-cli", the picker carries --runtime claude-cli only for anthropic/*, which puts the interaction path on the stale runtime-override branch instead of the normal provider/model policy path.

B) Fix
Move Claude CLI to provider/model runtime policy and remove the legacy whole-agent runtime pin:

cat >/tmp/openclaw-claude-cli-runtime.patch.json5 <<'EOF'
{
  agents: {
    defaults: {
      agentRuntime: null,
    },
  },
  models: {
    providers: {
#
      anthropic: {
        agentRuntime: { id: "claude-cli" },
      },
    },
  },
}
EOF

openclaw config patch --file /tmp/openclaw-claude-cli-runtime.patch.json5
openclaw gateway restart

If you only want specific Claude models via CLI instead of all anthropic/*, use model-scoped policy instead:

#
openclaw config set agents.defaults.models '{"anthropic/claude-opus-4-7":{"agentRuntime":{"id":"claude-cli"}}}' --strict-json --merge
openclaw config unset agents.defaults.agentRuntime
openclaw gateway restart

C) Verification
Journal grep:

journalctl --user -u openclaw-gateway -f | grep -Ei 'discord: model picker|model-runtime|cli-backend|provider=claude-cli|Model set to anthropic/'

Expected behavior: Discord /model → pick anthropic/claude-* → no “this interaction failed”; you should see the picker update to “Applying…” and then ✅ Model set to anthropic/claude-…. On the next agent turn, journal should still show CLI dispatch like:

#
[agent/cli-backend] cli exec: provider=claude-cli model=claude-… trigger=user

D) Confidence: confident
Source confirms the picker reads legacy agentRuntime while runtime docs/source say provider/model agentRuntime is the supported v5 path. I’d still file this as a v5.7 picker bug if the patch above fixes it, because the picker shouldn’t be consulting ignored whole-agent runtime state.

wanton carbonBOT
#

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

low driftBOT
#

You’re right — I was ahead of v5.7 there. Thanks for checking the actual schema; that proposed provider/model runtime-policy fix is not valid for 2026.5.7.

Short answer: I don’t see a v5.7 knob to suppress only the bundled anthropic catalog while keeping the Anthropic plugin/claude-cli backend enabled.

What I checked in the v5.7 installed package:

  • dist/extensions/anthropic/openclaw.plugin.json has configSchema: { properties: {}, additionalProperties: false } — no publishModels, catalog, modelPicker, etc.
  • the Anthropic provider registration exposes hookAliases: ["claude-cli"], resolveSyntheticAuth, and the CLI backend, but no config-gated catalog visibility toggle.
  • manifest/catalog suppressions exist as plugin-authored metadata, not as an operator config override you can set per provider.

So Config B is only “safe” if humans never select the visible anthropic/claude-* rows, which is not really safe UX.

My recommendation for v5.7: stay on Config A and use direct /model anthropic/claude-opus-4-7 for now. Then file this as a v5.7 Discord picker bug: the picker should not pass a legacy whole-agent --runtime claude-cli suffix that the component flow can’t complete, or it should ACK/fail visibly instead of timing out.

Verification grep I’d use:

#
journalctl --user -u openclaw-gateway -f | grep -Ei 'model picker|--runtime claude-cli|model-runtime|cli-backend|provider=claude-cli|interaction failed|Unknown interaction'

Expected current workaround behavior: direct /model anthropic/claude-opus-4-7 succeeds, next turn logs provider=claude-cli. Picker selection remains broken until patched/upgraded.

Confidence: confirmed for “no v5.7 publishModels-style knob found”; confident this is a picker bug worth filing: https://github.com/openclaw/openclaw/issues

low driftBOT
#

Yep — that’s the bug, cleanly stated.

In v5.7 the Discord picker carries the legacy whole-agent runtime into submit as:

/model anthropic/claude-… --runtime claude-cli

That path fails the Discord component interaction for Anthropic, while direct model setting / backend dispatch still works with agents.defaults.agentRuntime.id = "claude-cli".

Workaround for now: don’t use picker submit for Anthropic on that config; type the direct command instead:

/model anthropic/claude-opus-4-7

Then verify the next turn still routes through Claude CLI:

#
journalctl --user -u openclaw-gateway -f | grep -Ei 'cli-backend|provider=claude-cli|model-runtime|model picker'

This should be filed as a GitHub issue: https://github.com/openclaw/openclaw/issues

Suggested title:

Discord /model picker submit fails for anthropic models when agents.defaults.agentRuntime.id=claude-cli

Key repro line: OpenAI picker selections succeed; Anthropic picker submit returns Discord “interaction failed”; direct /model anthropic/claude-* works and subsequent agent turn logs provider=claude-cli.

low driftBOT
#

Yes — with the facts we have, I’d call this a definite v5.7 bug, not just misconfiguration.

There is no supported config-only way I can find in v5.7 to make this exact picker path safe while keeping canonical anthropic/claude-* + agents.defaults.agentRuntime.id = "claude-cli".

Why I’m confident:

  • Manual /model anthropic/claude-opus-4-7 works.
  • Backend dispatch works and logs provider=claude-cli.
  • Picker submit is the only failing path.
  • v5.7 picker source appends the current runtime, so it submits effectively:
/model anthropic/claude-opus-4-7 --runtime claude-cli
  • v5.7 does not have the newer provider/model runtime-policy config keys wired in, and the Anthropic plugin schema has no publishModels: false / catalog-hide knob.