github code-yeongyu/oh-my-openagent v3.17.12

5 hours ago

Fixes the "Sisyphus randomly drops to claude-opus-4.7" bug

If you're on 3.17.x and noticed Sisyphus silently jumping back to claude-opus-4-7 while you were running it on GPT-5.4, GLM, Kimi, or any non-Claude model: this release fixes that.

What was happening

Commit 034744cb (Apr 22, "retry forbidden provider errors") added bare "403" and "forbidden" substrings to the retryable-error pattern list. The intent was to retry the specific Forbidden: Selected provider is forbidden case from PR #3706, but bare-substring matching is greedy: it caught any error message containing those tokens, including:

  • Tool-level 403s (e.g. webfetch hitting a guarded URL)
  • File-permission "forbidden" messages
  • Unrelated upstream errors that happened to spell "forbidden" / "403"

When the classifier returned true on those false positives, event.ts armed setPendingModelFallback("sisyphus", ...), which immediately advanced to the first entry of Sisyphus' fallback chain, claude-opus-4-7. So a non-Claude run would silently jump to opus 4.7 with no visible model-level error.

Fix

Replaced the bare patterns with the specific phrases the original PR was actually targeting:

- "403",
- "forbidden",
+ "selected provider is forbidden",
+ "provider is forbidden",

The original "Selected provider is forbidden" case still retries correctly. Unrelated 403 / forbidden messages now stay non-retryable, so your configured model is no longer hijacked. Two regression tests lock the new behavior down.

Reported by ilove_borshch in #omo-help. Thanks for the precise repro.


  • f7270a0 fix(model-error-classifier): scope forbidden-provider retry to specific phrase

Don't miss a new oh-my-openagent release

NewReleases is sending notifications on new releases.