The decisive boundary
tool/code-dispatch is for durable inspection and UI replay. It does not derive a model message.Three observers. Three contracts.
workerCanonical JSONThe binding resolves to name, provider, resource base, and content.
trajectoryRendered dispatchSkillRow reads the durable nested result.
modelOuter result onlyLogs, return value, and additional contexts enter the next step.
Follow the missing edge.
01
→run_codeopens root call02
→tools.skillloads instructions03no returnvalue stays local
→04empty resultmodel receives no body
Nearby cases are different.
unknown toolexposureUse the generated SDK in code-only mode.nested errorlookupInspect name, visibility, provider, and policy.UI full · model emptycontext gapCompare nested dispatch with the outer result./name workspre-step injectionThis is a separate deterministic path.rc.7 workaround.
const loaded = await tools.skill({ name: "domain-modeling" })
return loaded.contentThis makes the body model-visible, but spends the outer output budget and relies on the model remembering a Skill-specific exception.
Repair the instruction channel.
deferContextRendered instructions + provenanceRegression gates.
- Native loads once.
- Code fire-and-forget injects once.
- Failures inject nothing.
- Multiple Skills keep order.
- Later code failure keeps context.
- UI still renders dispatch.
- Ordinary tools stay local.
- User invocation does not duplicate.
Primary evidence.
- Official Code Mode contract
- Nested context forwarding tests
- Skill tool implementation
- Upstream report #3425
Inspect what reached the model.
The full guide includes the three-observer model, safe workaround, repair contract, evidence bundle, and ten regression gates.
Read the full runbook