So every new message you send restarts the cycle. That's why it feels like it "keeps happening."
The root cause is simple: the upstream primary provider is still rate‑limited. Hermes has no way of knowing when the limit will lift, so its design is to keep trying the primary first. If the error behind the scenes is an HTTP 429, OpenClaw documentation classifies this as a rate‑limit or upstream‑limit error that needs troubleshooting at the gateway level — not just a UI quirk.
In some cases, those 429 errors are specifically tied to long‑context requests. If you're deep into a long conversation and your prompt context has grown very large, the upstream provider may impose tighter quotas or outright refuse the request.
The fallback label sg-claude-opus-4.7 via custom tells you something important: your fallback is routing through a custom endpoint/provider that was pre‑configured in Hermes, not switching to a completely different native provider.
This matters because if your primary and fallback are both pointing to the same upstream gateway, API pool, or backend, you'll see the provider switch in the UI but experience no real relief — both paths hit the same exhausted quota. While we don't have enough evidence to confirm they share a pool in your specific case, it's a very high probability worth checking directly in your configuration.
Hermes stores custom endpoints in config.yaml, and the fallback chain lives there too under the fallback_providers key.
Before you start pulling your hair out, check these items in order:
~/.hermes/config.yaml and look at the fallback_providers list.sg-claude-opus-4.7 via custom share the same backend gateway, pool, or API key. If they do, they'll both hit the same rate limit wall.openclaw gateway probe to see whether the real error is a 429, an authentication failure, or a stale client‑gateway mismatch.This message loops because Hermes is faithfully executing its per‑turn fallback design while your primary model remains rate‑limited. To stop seeing it, you need to fix the underlying cause — whether that's adjusting your provider quotas, reconfiguring your fallback to point to a truly independent provider, or reducing your prompt context size.
If you want a precise diagnosis, you can read your active config.yaml file and trace exactly which primary is failing, where the sg-* fallback actually routes to, and why it insists on retrying the primary on every turn.