- An empty replacement catalog is a real catalog: `renderCatalogUpdate()` publishes zero entries when the last skill disappears, and falling back would hide that every earlier name was retired. - The opaque fallback keeps a `form` declaration this version cannot present. It is the one place a newer or foreign log's declared shape would otherwise vanish from the UI entirely, since the row marker is also absent there. - An instruction change with an unrecognized `action` disqualifies the record. The action decides the word the row shows, so an unknown one would be presented as loaded or updated. - The catalog list bounds itself and reports the withheld count. Entry count is unbounded and the scrollport bounds height, not node count. - A catalog message keeps content blocks this version does not know, instead of dropping model-visible content the extensible union may carry. - `core.md` defines `ContextFormed`, the interface actually carrying the optional field, beside `ContextForm`. - The superseded-in-part bullet states the affected clauses as one rule rather than enumerating them; two rounds of enumeration each missed some, which is the shape being fragile rather than the list being wrong. - The note records the one migration case that does not self-heal: an old-format catalog as the only one, with an empty current view, leaves a stale catalog nothing replaces.
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/.