Repository navigation
[Bug] Delegated agents can use models hidden in Provider settings #15992
Description
What happened
I hid nearly every OpenCode model in Settings → Providers, leaving opencode-go/deepseek-v4.1-flash visible. A Claude parent thread nevertheless started two T3-owned OpenCode subagents using opencode-go/deepseek-v4-pro. Both completed.
I expected my model preferences to apply to delegated agents too. This allows agents to select models I deliberately removed from the picker.
This is especially painful with OpenCode Go. I deliberately chose Flash to preserve my allowance. I do not want an agent to spawn more expensive Pro workers automatically and rapidly consume my entire OpenCode Go allowance. Model restrictions need to apply before any delegated work starts, rather than relying on the parent to follow a prompt. This is the reporter's cost-control concern; the exact allowance consumed by these two tasks was not measured during triage.
Diagnosis
VERIFIED by inspecting the installed app bundle for the version below: orchestrator_capabilities exposes every model returned by the provider registry. Delegation's resolveTarget validates a requested model against that full catalog, without applying hiddenModels. The installed server bundle contains hiddenModels only in settings schema definitions.
VERIFIED in the UI source: the switches control visibility in the model picker. This is therefore a mismatch between model preferences and delegation, rather than evidence of bypassing an existing execution denylist. If picker-only behavior is intentional, the UI should make that limitation clear and provide a separate restriction for delegated agents.
The reporter's hidden-model selection is user-reported; its state at the time of delegation was not independently recovered. No fresh paid delegation was started during triage.
Steps to reproduce
Suggested focused reproduction, not rerun during triage:
- Enable and authenticate OpenCode.
- In Provider settings, hide DeepSeek V4 Pro and leave DeepSeek V4.1 Flash visible.
- From an active Claude thread, inspect
orchestrator_capabilities. - Request
delegate_taskwith target provider instanceopencodeand modelopencode-go/deepseek-v4-pro. - Check whether the hidden model is advertised and accepted.
Expected: delegation respects the user's model restrictions, or clearly distinguishes picker visibility from execution permissions.
Observed in the original session: two Pro tasks were accepted and completed.
Version
0.0.46-nightly.20261005.2667
Environment
macOS darwin arm64 27.0.0; Node v26.8.2. T3 desktop backend on a local server. Parent provider: Claude Agent; delegated provider: OpenCode.
Evidence
Read-only SQLite query of orchestration_v2_projection_subagents for the reported parent thread found:
| Started at, UTC | Provider instance | Model | Status |
|---|---|---|---|
| 2026-10-05 08:30:18.331 | opencode | opencode-go/deepseek-v4-pro | completed |
| 2026-10-05 08:30:31.622 | opencode | opencode-go/deepseek-v4-pro | completed |
Installed app.asar package version matches the reported version. Its server bundle confirms the catalog and validation behavior described above.
Source reference: https://github.com/pingdotgg/t3code/blob/main/apps/server/src/mcp/OrchestratorMcpService.ts (capabilities and resolveTarget).
Related issues
#11031 concerns Android showing models hidden on Desktop. This report concerns T3-owned delegated execution, not the Android picker. No exact duplicate was found in public issue searches.
Fix applied or workaround
No changes made to app settings, the database, or T3 source. Explicitly requesting Flash in delegation prompts is a possible workaround, but is not an enforced restriction.
Filed by
Codex, GPT-6, via t3 triage.
Activity
[-]Delegated agents can use models hidden in Provider settings[/-][+][Bug] Delegated agents can use models hidden in Provider settings[/+]0pilatos0 commentedon Oct 12, 2026
Rechecked on upstream main (701fc83). #16816 removes hidden models from the list
orchestrator_capabilitiesgives agents, which helps. ButresolveTargetinOrchestratorMcpService.tsstill checks a requested model against the provider's full model list, so adelegate_taskthat names a hidden model (e.g.deepseek-v4-pro) still starts. Keeping this open until the server rejects hidden models there too.G-Cyrille commentedon Oct 14, 2026
Another case for this. I use CLIProxyAPI, so Claude models also show up in Codex's model catalog. Orchestrator V2 delegated a task to
codex / claude-fable-5-1, which runs a Claude model inside the Codex harness. That breaks Anthropic's subscription terms for me, so I'd need to hide Claude models undercodexwhile keeping them underclaudeAgent, and havedelegate_taskenforce it.So +1 for this issue.