Repository navigation
Replies: 2 comments
|
Additional field evidence from a second session, which confirms the gap from the caller's side. A model asked to delegate with a specific model did the obvious thing — it passed await tools.subagent_codex({
description: "model probe",
prompt: "...",
run_in_background: true,
model: "gpt-6-astra",
})and got a clear, immediate refusal naming the exact condition: So the surface is honest — it says disabled, not ignored — and the model then read Worth noting the rest of the delegation path is healthy in the same session: six It also means the fix is purely additive: no caller changes, no prompt changes — enabling (2) from the report would make the probe above succeed as written. |
|
A second, separate defect found while working around the first one. I am reporting the reproduction and the evidence; the cause is not established. Two delegation rows, one of them with an external providerA preset contains the usual - id: tool-subagent # registers fine
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: spawn
toolName: subagent
modelSelectionSettings: true
backgroundMode: continuable
- id: tool-subagent-codex # never registers a tool
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: codex-effort
toolName: subagent_codex
modelSelectionSettings: true
backgroundMode: one-shot
maxDepth: provider-managedObserved
What is ruled out
Why it is silentEnabling the flag takes WorkaroundThe plugin now registers its own delegation tool on |
Uh oh!
There was an error while loading. Please reload this page.
Summary
A session cannot ask for a specific reasoning effort when it delegates to Codex. Neither the tool schema nor the provider config can carry one, so an instruction like "use the Codex subagent with this model and thinking level" is not expressible through the harness — and the model, correctly, works around it.
Observed in a real session (DSH 0.2.0-rc.2): the user asked to delegate to Codex with
gpt-6.1-solat extra-high reasoning. The model readcodex exec --help, concluded "I don't control model params through the tool schema", then launched four backgroundcodex exec -m gpt-6.1-sol -c model_reasoning_effort=xhighjobs throughbash— bypassing the delegation path entirely (no subagent lifecycle, nolist_agentsvisibility, no structured result handling). The workaround was the only way to honour the request.Three gates, all verified on
master(5badb150, tagdsh-v0.2.1-alpha.1)1. The tool schema has no effort field.
packages/subagent/tool-subagent/src/index.ts:400spreads the model-selection parameters —provider,model,reasoning_effort— into the tool schema only whenmodelSelectionEnabled. Forsubagent_codexthat is never true, so the model seesdescriptionandpromptonly.2.
modelSelectionSettingscannot be enabled on the Codex row.packages/subagent/tool-subagent/src/index.ts:341asserts the chosen provider declaresagentOptions, andpackages/subagent/subagent-codex/src/index.ts:64declaresNO_START_CAPABILITIES. SettingmodelSelectionSettings: trueon the Codex row therefore throws while the preset's plugin list mounts:3. The provider has no config field for it.
packages/subagent/subagent-codex/src/index.ts:36-40—ConfigisproviderName,model,env,permissionMode,disposeGraceMs.modelpins the model; nothing pins the effort.But the capability is already there
The Codex app-server protocol this provider already speaks accepts both fields:
ThreadStartParams(27 fields) includesreasoningEffortTurnStartParams(25 fields) includeseffortpackages/subagent/subagent-codex/src/wire.ts:289sends{ cwd, ephemeral, model?, ...permission }tothread/start, and:321sends{ threadId, input }toturn/start. The field exists on the wire; the provider simply never populates it.DSH also already treats the concept as first class —
agentOptions.reasoningEffortis a typed field attool-subagent/src/index.ts:116.Suggested fix
Any of these closes it; the first is the smallest:
subagent-codex: addreasoningEfforttoConfigand forward it onthread/start(and/oreffortonturn/start).subagent-codex: declareagentOptions: trueand maprequest.agentOptions.reasoningEffortonto the protocol field. This also makesmodelSelectionSettingslegal on the Codex row, so a model can pass it per call.tool-subagent: allow a configuredreasoningEffortfor providers that do not supportagentOptions.Related: a failed preset mount is silent
When a row in a preset's
pluginslist throws during mount, the preset disappears from the picker and nothing surfaces the reason. In our case both self-defined presets vanished at once after a restart, and the only evidence was a plugin log. A surfaced error — in the picker, or in the session's runtime context — would have saved a long debugging session.Environment
master@5badb150/dsh-v0.2.1-alpha.1checked for the same code path@openai/codex)~/.codex/config.tomlcarriesmodel = "gpt-6.1-sol",model_reasoning_effort = "medium"I understand external PRs are not being accepted right now, so this is a report rather than a patch offer — happy to share the exact diff or test a fix if that would help.
All reactions