Injected context reached the transcript as one anonymous shape whose expanded body was the whole message serialized as inline JSON, so the escaping collapsed the only readable part — the model-facing prose — into a single line. `MessageSource` gains an optional producer-declared `form`, a small semantic vocabulary of information shapes independent of `kind`: kind says who produced the context, form says what shape it is, so several producers may share one presentation. Two values ship. `instructions` (workspace-context) lists the reconciled files above their text and keeps the `<system-reminder>` framing verbatim, because the framing is part of what the model read. `catalog` moves dsh-tool-skill off the shared plugin kind onto a `skill-catalog` source carrying the published name/description entries, and the body lists those instead of re-parsing `<available_skills>` out of the prose. Catalog identity moves with it: the republish digest now covers the durable entries, deleting the text-slicing that recovered them from a logged message. Everything else renders the opaque body — the model-facing text with its real line breaks, then the remaining provenance as fields. That is the documented default, not a leftover: a resumed, forked, or foreign log must render whether or not its producer is mounted here, which is why the classification lives in the durable source rather than a client-side table keyed by producer.
skill/ - skill capability family
English | 中文
The canonical three-package capability seam for reusable agent instructions: a provider registry, a local implementation, and the model-facing catalog/loader consumer. All are product packages.
| Package | Role | ctx key |
|---|---|---|
skill/ |
Provider registry, precedence resolution, complete/incomplete catalog snapshots, and full-definition lookup | ctx.skills |
skill-local/ |
Project/custom/user filesystem provider with membership watching | (registers on ctx.skills) |
tool-skill/ |
Initial and replacement catalogs plus the model-facing skill loader |
(registers on ctx.tools) |
The interface lives at skill/skill/. Providers register synchronously and perform asynchronous discovery through ctx.skills; tool-skill consumes only that interface, so an embedded or remote provider can replace or complement skill-local without changing the model-facing contract. agent-core loads this family by default, but it remains a capability outside the core control spine, parallel to bash/, fs/, web/, and subagent/.