The decisive boundarytool/code-dispatch is for durable inspection and UI replay. It does not derive a model message.

Three observers. Three contracts.

workerCanonical JSON

The binding resolves to name, provider, resource base, and content.

trajectoryRendered dispatch

SkillRow reads the durable nested result.

modelOuter result only

Logs, return value, and additional contexts enter the next step.

Follow the missing edge.

01run_codeopens root call
02tools.skillloads instructions
03no 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.content

This 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.

Leaf toolLoad onceAuthoritative Skill value
Identified contextdeferContextRendered instructions + provenance
Code bridgeForward after rootAlready supported for nested contexts
Next requestExactly onceNo universal nested-result injection

Regression gates.

  1. Native loads once.
  2. Code fire-and-forget injects once.
  3. Failures inject nothing.
  4. Multiple Skills keep order.
  5. Later code failure keeps context.
  6. UI still renders dispatch.
  7. Ordinary tools stay local.
  8. User invocation does not duplicate.

Primary evidence.

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