#Updating to 2026.4.25 removed claude-cli oauth capabilities
1 messages Ā· Page 1 of 1 (latest)
Mike ā I think this is the new provider/runtime split, plus possibly a 2026.4.25 regression.
claude-cli is no longer meant to show as a normal model provider. New shape is:
anthropic/claude-opus-4-7
# plus runtime:
agents.defaults.agentRuntime.id = "claude-cli"
If youāre getting the Anthropic billing error, OpenClaw is probably hitting the Anthropic API path, not Claude CLI. Docs describe Claude CLI reuse as separate from API-key billing, and current model docs say CLI runtimes should use canonical anthropic/claude-* refs plus agentRuntime.id: "claude-cli". (docs.openclaw.ai)
Can you paste:
openclaw --version
openclaw models status
openclaw config get agents.defaults.model
openclaw config get agents.defaults.agentRuntime
Likely fix/workaround:
claude auth status --text
openclaw models auth login --provider anthropic --method cli --set-default
openclaw doctor --fix
openclaw gateway restart
Then start a new/reset session, because runtime choice can be pinned per existing session.
Thereās also a follow-up fix already on main/beta for āinclude cli backend owners in provider metadata filters,ā which looks very related if the CLI option is missing from discovery entirely. (github.com)
cat@cats-Mac-mini ~ % openclaw --version
OpenClaw 2026.4.25 (aa36ee6)
cat@cats-Mac-mini ~ % openclaw models status
openclaw config get agents.defaults.model
openclaw config get agents.defaults.agentRuntime
š¦ OpenClaw 2026.4.25 (aa36ee6) ā I speak fluent bash, mild sarcasm, and aggressive tab-completion energy.
Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : anthropic/claude-opus-4-7
Fallbacks (2) : anthropic/claude-sonnet-4-6, anthropic/claude-opus-4-6
Image model : -
Image fallbacks (0): -
Aliases (2) : opus -> anthropic/claude-opus-4-7, sonnet -> anthropic/claude-sonnet-4-6
Configured models (7): lmstudio/google/gemma-4-e4b, anthropic/claude-opus-4-5, anthropic/claude-opus-4-6, anthropic/claude-sonnet-4-5, anthropic/claude-sonnet-4-6, anthropic/claude-opus-4-7, anthropic/claude-haiku-4-5
Auth overview
Auth store : ~/.openclaw/agents/main/agent/auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (4): anthropic (3), claude-cli (3), google (1), openai-codex (1)
- anthropic effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=3 (oauth=1, token=2, api_key=0) | anthropic:cat=token:sk-ant-o...TnY16QAA, anthropic:default=token:sk-ant-o...K_5EcQAA [disabled:billing 47m], anthropic:claude-cli=OAuth [disabled:billing 47m]
- claude-cli effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=3 (oauth=1, token=2, api_key=0) | anthropic:cat=token:sk-ant-o...TnY16QAA, anthropic:default=token:sk-ant-o...K_5EcQAA [disabled:billing 47m], anthropic:claude-cli=OAuth [disabled:billing 47m] | synthetic=plugin-owned | source=Claude CLI native auth
- google effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=1, api_key=0) | google:default=token:AIzaSyA9...ysWEEVBo
- lmstudio effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | lmstudio:default=sk-lm-7N...wNazma96 | models.json=LM...EN | source=models.json: ~/.openclaw/agents/main/agent/models.json
- openai-codex effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) | openai-codex:xxxxxxxxx=OAuth (xxxxxxxxx)
- xai effective=env:xai-v5wB...OiNBoGKR | env=xai-v5wB...OiNBoGKR | source=env: XAI_API_KEY | synthetic=plugin-owned | source=xAI plugin config
OAuth/token status
- anthropic usage: 5h 98% left ā±4h 30m Ā· Week 84% left ā±3d 16h
- anthropic:cat static
- anthropic:default static
- claude-cli
- anthropic:claude-cli expiring expires in 6h
- google
- google:default static
- openai-codex usage: 5h 100% left ā±5h Ā· Week 97% left ā±2d 22h
- openai-codex:xxxxxxxxx (xxxxxxxxx) expiring expires in 13h
š¦ OpenClaw 2026.4.25 (aa36ee6) ā I don't just autocompleteāI auto-commit (emotionally), then ask you to review (logically).
{
"primary": "anthropic/claude-opus-4-7",
"fallbacks": [
"anthropic/claude-sonnet-4-6",
"anthropic/claude-opus-4-6"
]
}
š¦ OpenClaw 2026.4.25 (aa36ee6) ā I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.
{
"id": "claude-cli"
}
Yep ā your config is already in the correct Claude CLI shape:
model: anthropic/claude-opus-4-7
agentRuntime.id: claude-cli
The suspicious bit is this:
anthropic:claude-cli=OAuth [disabled:billing 47m]
So OpenClaw has temporarily marked the Claude CLI auth profile as ābilling-disabledā because a previous Anthropic API-path failure poisoned that profile. Re-running CLI auth should clear stale lockouts:
claude auth status --text
openclaw models auth login --provider anthropic --method cli --set-default
openclaw doctor --fix
openclaw gateway restart
Then start a new OpenClaw session / /reset the current one. Runtime selection is pinned per session, so an old thread may still be using Pi/API even though config now says claude-cli.
Also: the onboarding picker missing claude-cli on 2026.4.25 looks like the discovery bug thatās fixed in 2026.4.26-beta.1. If the commands above donāt fix the picker/runtime behavior:
openclaw update --channel beta
Docs: https://docs.openclaw.ai/providers/anthropic and https://docs.openclaw.ai/gateway/cli-backends
general chatting works again. but cron jobs still think they're using extra usage, when they should be oauth
Nice, that narrows it down.
Cron has its own session state, so chat being fixed doesnāt necessarily clear old cron auth/model pins. Check the cron session pins:
openclaw cron list
openclaw cron show <jobId>
openclaw cron runs --id <jobId> --limit 5
Then force Anthropic rotation to the Claude CLI OAuth profile:
openclaw models auth order set --provider anthropic anthropic:claude-cli
openclaw cron edit <jobId> --model anthropic/claude-opus-4-7
openclaw gateway restart
If that job still routes wrong, it probably has a stale per-cron-session authProfileOverride from before the fix. In that case, paste the cron show + latest cron runs output ā especially anything mentioning model/profile ā and we can confirm before touching session metadata.
Also still worth updating to beta if you havenāt:
openclaw update --channel beta
2026.4.25 has a related CLI-backend discovery regression; 2026.4.26-beta.1 has the fix.
I had the same issue after upgrading from 2026.4.23 but my problem with the new setup is that agentRuntime.id: claude-cli does not work well when using multi provider as I use OpenAI, Claude and Github accounts.
agentRuntime.id: auto does not change the behaviour either, I use the same agent using all 3 providers, the gateway keeps restarting every time I change the provider and start in /new conversation. Downgrading to 2026.4.23 worked. but a shame this was not highlighted as a breaking change.
Yeah, that pain is real. For a mixed-provider single agent, I would not set this globally:
agentRuntime: { id: "claude-cli" }
That forced runtime applies to the agent/session, so itās bad when the same agent switches between Anthropic, OpenAI, and GitHub/Copilot-style providers.
Safer setup:
openclaw config set agents.defaults.agentRuntime.id auto
# or unset the default runtime entirely if you want plain PI/default behavior
Then select Claude CLI only when choosing Claude:
/model anthropic/claude-opus-4-7 --runtime claude-cli
And when switching back:
/model openai/<model> --runtime default
/model github-copilot/<model> --runtime default
If you use Claude CLI a lot, the cleaner long-term setup is a dedicated Claude agent with agentRuntime.id: "claude-cli", and keep your main mixed-provider agent on auto/default.
The gateway restarting on provider switch + /new does not sound expected though. If it still happens on 2026.4.26-beta.1, thatās issue-worthy. Please grab:
openclaw --version
openclaw logs --limit 300 --plain | grep -Ei 'restart|config reload|agentRuntime|claude-cli|fatal|error'
Docs: https://docs.openclaw.ai/concepts/agent-runtimes and https://docs.openclaw.ai/gateway/config-agents#agentsdefaultsagentruntime
`openclaw logs --limit 300 --plain | grep -Ei 'restart|config reload|agentRuntime|claude-cli|fatal|error'
2026-04-28T02:41:26.408Z warn gateway/reload {"subsystem":"gateway/reload"} config change requires gateway restart (auth.order)
2026-04-28T02:41:26.412Z info gateway {"subsystem":"gateway"} received SIGUSR1; restarting
2026-04-28T02:41:27.190Z info gateway {"subsystem":"gateway"} restart mode: full process restart (supervisor restart)
2026-04-28T02:43:41.034Z info gateway {"subsystem":"gateway"} received SIGTERM; restarting
2026-04-28T02:43:41.177Z info gateway {"subsystem":"gateway"} restart mode: full process restart (supervisor restart)
2026-04-28T02:44:52.389Z warn plugins {"subsystem":"plugins"} bonjour: restarting advertiser (service stuck in announcing for 46466ms (gateway fqdn=ubuntu (OpenClaw)._openclaw-gw._tcp.local. host=ubuntu.local. port=18789 state=announcing))
2026-04-28T02:51:40.111Z info agent/cli-backend {"subsystem":"agent/cli-backend"} cli session reset: provider=claude-cli reason=mcp
2026-04-28T02:51:40.205Z info agent/cli-backend {"subsystem":"agent/cli-backend"} cli exec: provider=claude-cli model=claude-haiku-4-5 promptChars=995
2026-04-28T02:51:40.222Z info agent/cli-backend {"subsystem":"agent/cli-backend"} claude live session start: provider=claude-cli model=claude-haiku-4-5 activeSessions=1
2026-04-28T02:51:57.202Z info agent/cli-backend {"subsystem":"agent/cli-backend"} claude live session turn: provider=claude-cli model=claude-haiku-4-5 durationMs=16972 rawLines=51
2026-04-28T02:56:41.955Z info gateway {"subsystem":"gateway"} received SIGTERM; restarting
2026-04-28T02:56:42.154Z info gateway {"subsystem":"gateway"} restart mode: full process restart (supervisor restart)
2026-04-28T02:57:55.095Z warn plugins {"subsystem":"plugins"} bonjour: restarting advertiser (service stuck in announcing for 47665ms (gateway fqdn=ubuntu (OpenClaw)._openclaw-gw._tcp.local. host=ubuntu.local. port=18789 state=announcing))
This log actually helps: it doesnāt show a crash/fatal provider-switch failure.
What it shows:
config change requires gateway restart (auth.order)ā expected after changing auth order. Thatās a config write, so Gateway restarts to apply it.received SIGTERM; restartingā external stop/restart signal, not obviously/newor model switching by itself.bonjour: restarting advertiser...ā noisy/unrelated mDNS/Bonjour advertiser issue.claude live session ... provider=claude-cli ... turnā Claude CLI runtime itself did run successfully.
So Iād separate two things:
- Auth/order config changes restart Gateway ā annoying, but expected.
- Provider switch +
/newshould not SIGTERM Gateway ā if that happens without any config command, thatās bug-worthy.
For mixed-provider setup, Iād avoid changing auth.order repeatedly and avoid global claude-cli runtime:
openclaw config get agents.defaults.agentRuntime
openclaw models auth order get --provider anthropic
Then in chat, use per-session runtime selection:
/model anthropic/claude-haiku-4-5 --runtime claude-cli
/model openai/<model> --runtime default
/model github-copilot/<model> --runtime default
If you can reproduce a SIGTERM from only /model ... + /new ā no config set, no auth order change, no gateway restart command ā please grab unfiltered context around it:
openclaw logs --limit 800 --plain | tail -250
and file that as a GitHub issue: https://github.com/openclaw/openclaw/issues
Docs for the runtime split: https://docs.openclaw.ai/concepts/agent-runtimes
is this resolved in the latest release? https://github.com/openclaw/openclaw/releases/tag/v2026.4.26
Yes ā 2026.4.26 should resolve the missing claude-cli discovery/model-listing side of this. I checked the tag locally too: it includes the fix we were pointing at, fix: include cli backend owners in provider metadata filters.
The release is now marked Latest, and the notes include model-listing/provider discovery work plus a specific Claude CLI fix for new live sessions failing when OpenClaw starts Claude with stream-json input. (github.com)
Update path:
openclaw update
openclaw --version
openclaw models auth login --provider anthropic --method cli --set-default
openclaw doctor --fix
openclaw gateway restart
Then /reset or start a new session.
Caveat: if cron jobs still use the old billing/API profile, that may be stale cron session/auth pinning rather than the release bug itself. Check with:
openclaw cron show <jobId>
openclaw cron runs --id <jobId> --limit 5
so we can still use Claude CLI then? I had troubles with billing errors last night and justmoved back to API tokens...
Yes ā you can still use Claude CLI.
The current/new shape is just different:
model: "anthropic/claude-opus-4-7"
agentRuntime: { id: "claude-cli" }
Not claude-cli/... as the main model provider.
If you moved back to API tokens, Iād update to 2026.4.26 first, then re-enable Claude CLI like this:
openclaw update
claude auth status --text
openclaw models auth login --provider anthropic --method cli --set-default
openclaw doctor --fix
openclaw gateway restart
Then start a fresh session or /reset.
If you use one agent with several providers ā OpenAI + Claude + GitHub/Copilot ā donāt force agentRuntime.id: "claude-cli" globally unless that agent is Claude-only. For mixed-provider use, keep runtime default/auto and select Claude CLI per session:
/model anthropic/claude-opus-4-7 --runtime claude-cli
Nah I just updated it and /model command does not show claude-cli as a provider
Ah ā then I should phrase this more carefully: claude-cli may not show as a /model provider anymore, and that can be expected.
In the new split, claude-cli is the runtime, not the model provider. The model provider stays anthropic.
Try:
/model anthropic/claude-opus-4-7 --runtime claude-cli
/model status
Youāre looking for /model status to show an Anthropic model plus a Claude CLI runtime, not necessarily a claude-cli/* provider row.
For mixed-provider use, donāt set Claude CLI globally. Keep default/auto runtime, then only use Claude CLI on Claude sessions:
/model anthropic/claude-opus-4-7 --runtime claude-cli
/model openai/<model> --runtime default
/model github-copilot/<model> --runtime default
If that first command fails or /model status still routes Anthropic through API billing, paste:
openclaw --version
openclaw models status
openclaw config get agents.defaults.agentRuntime
this is unsettling š
Yeah, fair reaction š ā this was a confusing migration, and the UI not showing claude-cli where people used to expect it makes it feel like support disappeared.
The important bit: Claude CLI support is still there, but it moved from āprovider-looking thingā to āruntime behind Anthropic models.ā
So the mental model is now:
Provider/model: anthropic/claude-opus-4-7
Runtime: claude-cli
instead of:
Provider/model: claude-cli/claude-opus-...
To verify itās actually using Claude CLI, donāt rely on the provider picker ā check /model status or logs. You should see provider=claude-cli in cli-backend logs when it runs, like OutlawWizardās log did:
agent/cli-backend ... provider=claude-cli ... claude live session turn
I do think the docs/UI need to make this louder. For now, safest setup:
- Claude-only agent: set
agentRuntime.id: "claude-cli" - Mixed-provider agent: keep runtime default/auto, then use:
/model anthropic/claude-opus-4-7 --runtime claude-cli
If this still hits billing after 2026.4.26 + re-login, thatās not āexpected migration weirdnessā anymore ā thatās a bug we should capture with models status + logs.
How do I remove my cdeox from both the accounts? I wanna just delete that thereās only one model that Iām using.
Exec approval is required, but no interactive approval client is currently available.
Approve it from the Web UI or terminal UI, or enable a native chat approval client such as Discord. If those accounts already know your owner ID via allowFrom or owner config, OpenClaw can often infer approvers automatically. Then retry the command. You can usually leave execApprovals.approvers unset when owner config already identifies the approvers.
Let me restate. Iām just looking to remove Kodex from my model selection so thereās only one model which is Anthropic
Codex
Automatic session resume failed, so sending the status directly.
Exec denied (gateway id=65e45d87-5d2d-492a-b6c8-e7f117d6b36e, approval-timeout (allowlist-miss)): rg -n "codex|openai-codex|claude-cli|auth|profile|account|remove|delete" /home/krill/openclaw-ref/docs /home/krill/openclaw-ref/src /home/krill/openclaw-ref/packages 2>/dev/null | head -200
If by cdeox you mean Codex / openai-codex: there isnāt really a clean ālogout/remove auth profileā button/command yet. Easiest safe path:
openclaw --version
openclaw models status
openclaw models auth order get --provider openai-codex --json
Then for each agent/account you use, remove Codex from the auth order:
openclaw models auth order clear --provider openai-codex --agent main
If you want only one model to show/use, rerun the model wizard and select just that model:
openclaw configure --section model
The Codex tokens live per-agent in:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json
You can manually delete the openai-codex:* entries there, but make a backup first and donāt paste that file here because it contains secrets. Docs: models status shows auth profiles, auth ordering controls which profile is tried, and auth profiles are stored per-agent. (docs.openclaw.ai)
Quick correction: my local source search got blocked by approval timeout, so Iām sticking to the docs-confirmed path.
If you mean Codex / openai-codex, and you only want OpenClaw to use one model:
- First check whatās selected:
openclaw --version
openclaw models status
- Set the one model you actually want:
openclaw models set anthropic/claude-opus-4-6
Replace with your desired provider/model.
- Clear model fallbacks if Codex is there:
openclaw models fallbacks list
openclaw models fallbacks remove openai-codex/gpt-5.5
If you truly want to delete the stored Codex OAuth accounts, the docs say auth profiles live here:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json
There isnāt a documented models auth remove command yet. Make a backup, then remove the openai-codex:* profiles from that JSON for each agent/account. Donāt paste that file here ā it contains secrets.
Is there a known issue if I donāt use IPV6 for routing?
No known OpenClaw requires IPv6 issue that Iām aware of. IPv4-only should be fine.
Two caveats:
- If you connect via
localhost, try127.0.0.1instead ā avoids clients trying::1first:openclaw gateway probe --url ws://127.0.0.1:18789 - If you expose the gateway through DNS/reverse proxy/Tailscale and your hostname has a broken
AAAArecord, clients may try IPv6 and hang. In that case remove/fix theAAAA, or use an IPv4/tailnet MagicDNS route.
That billing error is almost certainly provider auth/billing, not IPv6 routing. IPv6 problems usually show up as timeout/connection errors, not āinsufficient balanceā.
Can you paste:
openclaw --version
openclaw gateway status
openclaw models status
Docs refs: https://docs.openclaw.ai/gateway/discovery and https://docs.openclaw.ai/gateway/network-model
Yep ā sorry, I overcomplicated that.
To make the model picker show only Anthropic and remove Codex:
openclaw models status --plain
Copy the Anthropic model ref you want, then:
openclaw models set "anthropic/<your-model-id>"
openclaw models fallbacks clear
openclaw config set agents.defaults.models '{"anthropic/<your-model-id>":{}}' --strict-json --replace
openclaw config validate
openclaw gateway restart
Important nuance for claude-cli: in newer config, Claude CLI is not a model option. Itās a runtime/backend. So if you want Anthropic via Claude CLI, keep the model as anthropic/... and set:
openclaw config set agents.defaults.agentRuntime '{"id":"claude-cli"}' --strict-json
openclaw gateway restart
Docs: https://docs.openclaw.ai/concepts/agent-runtimes and https://docs.openclaw.ai/gateway/config-agents
Are you really sure Claude Saul is fixed because Iām getting all kinds of bullshit API error and LLM request rejected out of extra storage error
Iām not going to say ādefinitely fixedā from that error ā this sounds like you may still be hitting the Anthropic API/OAuth provider path, not the local claude-cli runtime.
Two likely cases:
-
Extra usage is required for long context requests
That meanscontext1m: trueis enabled, but your Anthropic credential isnāt eligible for the 1M context beta. Disable/removecontext1m. OpenClaw docs call this out directly. (docs.openclaw.ai) -
Claude CLI not showing in model picker
That part is expected now:claude-cliis a runtime/backend, not a model. The model should stayanthropic/..., and runtime should beagentRuntime.id: "claude-cli". Config changes only affect new/reset sessions, so use/resetor/newafter changing it. (docs.openclaw.ai)
Try this clean Anthropic-only reset:
openclaw models set anthropic/claude-opus-4-6
openclaw models fallbacks clear
openclaw config set agents.defaults.models '{"anthropic/claude-opus-4-6":{}}' --strict-json --replace
openclaw config set agents.defaults.agentRuntime '{"id":"claude-cli"}' --strict-json
openclaw config validate
openclaw gateway restart
Then in Discord/chat:
/reset
If it still errors, paste the exact redacted error line from:
openclaw logs --follow
The wording matters a lot here ā ābilling errorā, āthird-party apps draw from extra usageā, and ālong context extra usageā are different fixes.
API provider returned the billing error. Your key has run out of credit or has insufficient balance.
That specific error means itās still trying an API-key/provider billing path somewhere. If Claude CLI were actually the active runtime, I would not expect āyour key has run out of creditā to be the main failure.
Please check these two things:
openclaw --version
openclaw models status
openclaw config get agents.defaults.model
openclaw config get agents.defaults.agentRuntime
For Claude CLI, the shape should be roughly:
agents: {
defaults: {
model: "anthropic/<your-claude-model>",
agentRuntime: { id: "claude-cli" }
}
}
Then restart + reset the chat session:
openclaw gateway restart
In Discord/chat:
/reset
Also make sure Codex is not still a fallback:
openclaw models fallbacks list
openclaw models fallbacks clear
If models status shows Anthropic API key auth with billing/credit failure, thatās the issue: itās not using the Claude CLI path for that run. Docs: https://docs.openclaw.ai/concepts/agent-runtimes
can you elaborate on how to fix the cron jobs please? Thank you for explaining all you have explained so far. I have claude cli working for everything it seems except for the cron jobs that still point to the API billing and extra usage when I don't want it to.
Yep ā cron has its own stored job config, so fixing chat/session model routing doesnāt always fix existing cron jobs.
If you run from source, prefix these with pnpm openclaw; otherwise use openclaw.
1. First confirm version/config:
openclaw --version
openclaw models status
openclaw config get agents.defaults.agentRuntime
openclaw config get agents.defaults.model
For Claude CLI, the desired default shape is roughly:
openclaw config set agents.defaults.model.primary anthropic/claude-opus-4-7
openclaw config set agents.defaults.agentRuntime.id claude-cli
2. Remove API fallback usage if you donāt want surprise billing:
openclaw models fallbacks clear
Cron --model is only the jobās primary model; configured fallbacks can still run after that. So if fallbacks point at API-backed models, cron may still hit billing.
3. Inspect existing cron jobs:
openclaw cron list
openclaw cron show <job-id>
If a job has an old/stale model override, edit it:
openclaw cron edit <job-id> --model anthropic/claude-opus-4-7
4. If 2026.4.25 cron still hits direct Anthropic API anyway, use the compatibility workaround for that cron job:
openclaw config set agents.defaults.models '{"claude-cli/claude-opus-4-7":{},"claude-cli/claude-sonnet-4-6":{}}' --strict-json --merge
openclaw cron edit <job-id> --model claude-cli/claude-opus-4-7
openclaw gateway restart
Then test:
openclaw cron run <job-id>
openclaw cron runs --id <job-id> --limit 5
In the run output, if you still see provider anthropic, itās likely still going through API. If you see claude-cli, itās using Claude CLI.
Docs: https://docs.openclaw.ai/automation/cron-jobs and https://docs.openclaw.ai/providers/anthropic
thank you. the compatibility workaround is what seemed to get it to work. Not sure if this is related because heartbeats work just fine sending to my telegram channel which I've had one done today and chatting works just fine but now that the cron job is fixed it's failing to send to the telegram channel I'm not sure if that's related to this update but I think that's strange as well.
Error: Telegram send failed: chat not found (chat_id=-12345). Likely: bot not started in DM, bot removed from group/channel, group migrated (new -100⦠id), or wrong bot token. Input was: "-12345".
telegram message failed: Call to 'sendMessage' failed! (400: Bad Request: chat not found)
the id is correct, bot was not removed from group channel ..nothing was migrated as far as I know. Not sure what that could mean.
That sounds separate from the Claude CLI workaround ā cron is now getting far enough to hit delivery.
The key clue is:
Input was: "-12345"
For Telegram channels/supergroups, the delivery target usually needs the full -100... chat id, e.g.:
pnpm openclaw cron edit <job-id> \
--announce \
--channel telegram \
--to "-1001234567890"
If itās a forum topic:
pnpm openclaw cron edit <job-id> \
--announce \
--channel telegram \
--to "-1001234567890" \
--thread-id 42
Iād compare what heartbeat is using vs what cron stored:
pnpm openclaw cron show <job-id>
pnpm openclaw cron runs --id <job-id> --limit 5
Then test the exact cron target directly:
pnpm openclaw message send --channel telegram --target "-12345" --message "cron delivery test"
If that fails too, itās definitely the target/account/token, not cron. If you have multiple Telegram accounts/bots configured, also check whether cron has the wrong account:
pnpm openclaw channels status --probe
pnpm openclaw cron edit <job-id> --account <telegram-account-id>
Fastest way to rediscover the real chat id: tail logs, send a message in that Telegram group/channel/topic, and copy the chat.id OpenClaw sees:
pnpm openclaw logs --follow
Docs: https://docs.openclaw.ai/automation/cron-jobs and https://docs.openclaw.ai/channels/telegram
the delivery test works when I run:
pnpm openclaw message send --channel telegram --target "-12345" --message "cron delivery test"
so why wouldn't the cron job work when it delivers to that target? Also I omitted my actual telegram id and using -12345 for this chat
Yep, if message send works, then the Telegram chat id itself is probably fine.
Cron isnāt necessarily using the exact same route as that test. It may also have stored:
- a different Telegram account/bot (
delivery.accountId) - a stale
threadId/ topic id channel: lastresolving from an old session- an agent
messagetool send path vs the cron fallback announce path
Most likely: wrong Telegram account/bot for cron. Same chat id + different bot token = Telegram says chat not found.
Check this:
pnpm openclaw cron show <job-id>
pnpm openclaw cron runs --id <job-id> --limit 1
Look for delivery, resolvedDelivery, accountId, threadId, and whether fallbackUsed vs messageToolSentTo appears.
Then force the cron job to the exact route:
pnpm openclaw cron edit <job-id> \
--announce \
--channel telegram \
--to "<actual telegram id>" \
--account default
If cron show has a non-empty threadId and this is not a Telegram forum topic, recreate the job or remove that stale thread id from the cron job config ā that can make cron delivery differ from your simple message send test.
Also please include: