What happened, and what did you expect?
A custom background agent with an ordered model fallback chain correctly falls back after the primary model hits a 429, and the fallback model completes successfully. However, its terminal result is never delivered to the parent session.
The child session persists its final answer in opencode.db, but the parent receives:
A background job stopped without a terminal result.
task_status then reports:
state: stopped (unconfirmed)
status_uncertain: true
last_status_error: no live status entry for session
This makes the parent orchestrator treat completed work as unavailable and reroute or duplicate it.
Expected behaviour: after a 429 fallback, the fallback model’s completed result should be injected into the parent just like any other completed background task, and the job should become completed, not stopped (unconfirmed).
Steps to reproduce
Configure a custom agent with an ordered model chain.
Ensure its primary model returns a 429 / usage-limit error.
Start it as a background task with a trivial prompt:
Return exactly: RELAY_OK. Do not use tools, do not edit files, and do not delegate.
The primary openai/gpt-5.3-codex-spark hits its usage limit.
OMOS replays the task on opencode-go/mimo-v2.5.
MiMo returns RELAY_OK and ends with finish: stop.
Instead of receiving the result, the parent gets the “stopped without a terminal result” reminder.
The child session contains:
Foreground fallback replay.
RELAY_OK
oh-my-opencode.json
OpenCode version
1.18.13
oh-my-opencode-slim version
2.2.15
Operating system
No response
Logs, screenshots, or extra context
Controlled fast-spark test:
Task fas-1
state: stopped (unconfirmed)
agent: fast-spark
last_activity_at: 2026-08-20T13:56:00.139Z
possibly_stuck: false
status_uncertain: true
last_status_error: no live status entry for session
Child-session model sequence:
openai/gpt-5.3-codex-spark → usage-limit path
opencode-go/mimo-v2.5 → finish: stop
The fallback model’s final persisted output:
RELAY_OK
This occurred on Windows (win32). The same pattern was also observed in a real session: Fast-Spark / Reviewer-Spark completed on MiMo after Spark’s usage limit, but the parent did not receive the terminal result and rerouted the work.
What happened, and what did you expect?
A custom background agent with an ordered model fallback chain correctly falls back after the primary model hits a 429, and the fallback model completes successfully. However, its terminal result is never delivered to the parent session.
The child session persists its final answer in opencode.db, but the parent receives:
A background job stopped without a terminal result.
task_status then reports:
state: stopped (unconfirmed)
status_uncertain: true
last_status_error: no live status entry for session
This makes the parent orchestrator treat completed work as unavailable and reroute or duplicate it.
Expected behaviour: after a 429 fallback, the fallback model’s completed result should be injected into the parent just like any other completed background task, and the job should become completed, not stopped (unconfirmed).
Steps to reproduce
Configure a custom agent with an ordered model chain.
Ensure its primary model returns a 429 / usage-limit error.
Start it as a background task with a trivial prompt:
Return exactly: RELAY_OK. Do not use tools, do not edit files, and do not delegate.
The primary openai/gpt-5.3-codex-spark hits its usage limit.
OMOS replays the task on opencode-go/mimo-v2.5.
MiMo returns RELAY_OK and ends with finish: stop.
Instead of receiving the result, the parent gets the “stopped without a terminal result” reminder.
The child session contains:
Foreground fallback replay.
RELAY_OK
oh-my-opencode.json
{ "fallback": { "enabled": true, "maxRetries": 2 }, "agents": { "fast-spark": { "model": [ "openai/gpt-5.3-codex-spark", "opencode-go/mimo-v2.5", "omniroute/Fixer" ], "variant": "medium", "prompt": "Do small, self-contained work on named targets. Make minimal edits or run targeted checks. Do not expand scope. Return REASSIGN with one reason if broader context is needed. Report briefly.", "orchestratorPrompt": "@fast-spark — Use for small, quickly verifiable edits or checks on named targets. Avoid broad scope, research, architecture, or opaque debugging. Reroute REASSIGN to a core agent.", "skills": [], "mcps": [], "permission": { "task": "deny", "websearch": "deny", "webfetch": "deny" } }, "reviewer-spark": { "model": [ "openai/gpt-5.3-codex-spark", "opencode-go/mimo-v2.5", "omniroute/Explorer" ], "variant": "medium", "prompt": "Review a small diff or named files for bugs, regressions, and test gaps. Cite file and line. Do not edit or expand scope. Return REASSIGN with one reason if broader context is needed.", "orchestratorPrompt": "@reviewer-spark — Use to review small, quickly verifiable changes. Avoid broad, architectural, or security reviews. Reroute REASSIGN to a core agent.", "skills": [], "mcps": [], "permission": { "edit": "deny", "task": "deny", "websearch": "deny", "webfetch": "deny" } } } }OpenCode version
1.18.13
oh-my-opencode-slim version
2.2.15
Operating system
No response
Logs, screenshots, or extra context