The wskill schema

A complete reference of the wcl.wskill namespace, reflected from the live schema (namespace_decls / decl_info / type_fields) so it never drifts from base.wcl / extensions.wcl. Top-level blocks — the ones the root document gathers — come first in declaration order; any blocks nested inside a block are listed directly under it. The document roots and shared types follow.

Blocks

Topic

The overarching subject — wraps everything inside the wskill — together with the wskill's own document-level metadata (creation/maintenance dates). Exactly one per wskill.

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
summaryutf8yes
descriptionutf8no
versionutf8no
tagslist<utf8>no
createdutf8yes
updatedutf8no
maintainerutf8no
maintainer_entityidentifierno
noteutf8no

Skill

Controls written into the generated SKILL.md frontmatter, plus the bundled artifacts (script / asset children). A skill block kind is only possible because the schema is namespaced (wcl.wskill::skill) — bare it would collide with wdoc's own skill block. Defaults are absent-equivalent (empty list = no pre-approval / no restriction; false = model may invoke), so they are safe to always emit. Exactly one per wskill; the templates bind let skill = head(skills).

PropertyTypeRequiredDescription
allowed_toolslist<utf8>no
disallowed_toolslist<utf8>no
disable_model_invocationboolno

Child blocks

SlotAcceptsMultipleDescription
skill_scriptsscriptyes
skill_assetsassetyes
summarysummaryyes
parametersskill_paramyes
boundaryskill_boundaryyes

Script

A runnable script shipped into the skill's scripts/ folder.

PropertyTypeRequiredDescription
ididentifieryes
sourceutf8yes
nameutf8yes
descriptionutf8yes
usageutf8yes
tagslist<utf8>no

Asset

A static data file (fixture, dataset, sample config) shipped into assets/.

PropertyTypeRequiredDescription
ididentifieryes
sourceutf8yes
nameutf8yes
descriptionutf8yes
tagslist<utf8>no

Summary

Optional custom SKILL.md summary content — a sub-block of skill whose plain fields are pulled onto the skill's start page (no wdoc body projection, which the skill/wdoc block-kind collision prevents). Author one inside skill.

PropertyTypeRequiredDescription
overviewlist<utf8>no

SkillParam

An invocation parameter the skill accepts — rendered into the SKILL.md "Parameters" section. name is the Claude Code placeholder or label (e.g. "1", "$2"); value says how to determine what to pass. The kind is skill_param (not parameter, which the language module already declares).

PropertyTypeRequiredDescription
nameutf8yes
descriptionutf8no
valueutf8no

SkillBoundary

Behavioural guardrails for the skill — rendered into SKILL.md inside <Boundary> … </Boundary> tags so an agent treats them as hard rules. The kind is skill_boundary (bare boundary collides with a wdoc diagram block).

PropertyTypeRequiredDescription
alwayslist<utf8>no
asklist<utf8>no
neverlist<utf8>no

Source

Where current/authoritative information about the topic lives. Drives the update workflow only; it carries no content. See references/workflow-update.md.

PropertyTypeRequiredDescription
ididentifieryes
kindutf8yes
locatorutf8yes
coversutf8yes
last_checkedutf8no
reflects_versionutf8no

WskillRef

A relationship to another wskill. Resolved by name against repo peers / the collection manifest first, by url otherwise. status = "planned" is the stub form: it renders but the validator reports it as a warning so the planned-skill backlog stays visible without blocking renders.

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
urlutf8no
relationutf8no
statusutf8no

Concept

An idea the reader must understand.

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
summaryutf8yes
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
bodybodyno

Entity

A concrete thing in the topic's world (type, command, screen, card, …).

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
kindutf8yes
summaryutf8no
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
bodybodyno

Fact

A factual unit — a container for values, constants, value tables. The title names it; the body holds the data (a table, code, prose).

PropertyTypeRequiredDescription
ididentifieryes
titleutf8yes
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
bodybodyno

Term

A glossary entry.

PropertyTypeRequiredDescription
ididentifieryes
termutf8yes
definitionutf8yes
aliaseslist<utf8>no
audienceAudienceno
tagslist<utf8>no

Example

A worked example or code sample. It is NOT a section of its own — it projects onto a unit: unit names the id of the concept/entity/fact it illustrates, and the templates render it on that unit's page (after the body).

PropertyTypeRequiredDescription
ididentifieryes
titleutf8yes
unitidentifierno
narrativeutf8no
code_langutf8no
codeutf8no
expectedutf8no
audienceAudienceno
tagslist<utf8>no

Index

An index — a curated landing page that gathers links to other parts of the wskill in a topic-meaningful arrangement. Unlike concept/entity/fact/procedure it is NOT filed under Reference: each index gets its own top-level entry in the book menu (between Overview and Reference). The body (an addressable body { … }) holds the curated links/prose; related auto-resolves to a link list. An index may nest child indexes one level deep (@children("index")): write a child index { … } block inside the parent and both projections render it nested — under the parent chapter in the book TOC, indented under the parent bullet in the skill. Document-level @children("index") gathers only direct children, so a nested index is not also listed at the top level.

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
summaryutf8no
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
bodybodyno
childrenindexyes

Index

An index — a curated landing page that gathers links to other parts of the wskill in a topic-meaningful arrangement. Unlike concept/entity/fact/procedure it is NOT filed under Reference: each index gets its own top-level entry in the book menu (between Overview and Reference). The body (an addressable body { … }) holds the curated links/prose; related auto-resolves to a link list. An index may nest child indexes one level deep (@children("index")): write a child index { … } block inside the parent and both projections render it nested — under the parent chapter in the book TOC, indented under the parent bullet in the skill. Document-level @children("index") gathers only direct children, so a nested index is not also listed at the top level.

PropertyTypeRequiredDescription
ididentifieryes
nameutf8yes
summaryutf8no
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
bodybodyno
childrenindexyes

Procedure

A runbook for *doing* a specific task. Written for someone who already knows the topic and needs the reliable sequence. A procedure is a fourth interlinking unit (alongside concept/entity/fact) — it keeps its structured, step-based shape, but carries related and renders to its own page, so units can link to and from it. (process is the user-facing name; the block is procedure.)

PropertyTypeRequiredDescription
ididentifieryes
titleutf8yes
purposeutf8yes
preconditionslist<utf8>no
verificationutf8no
relatedlist<identifier>no
audienceAudienceno
tagslist<utf8>no

Child blocks

SlotAcceptsMultipleDescription
stepsstepyes

Step

One ordered step in a process (procedure). The label is its number.

PropertyTypeRequiredDescription
nu32yes
titleutf8no

Child blocks

SlotAcceptsMultipleDescription
bodiesbodyyes

Document roots & shared types

Attr

Key/value attribute row — used by entity.attributes and custom.attrs. Authorable with WCL pipe-table syntax: attributes: | "flag" | "-l" | | "name" | "long format" |

PropertyTypeRequiredDescription
keyutf8yes
valueutf8yes

WSkillDoc

Merges with wdoc's library @document (so site / page template blocks are legal alongside content) and with any @document declared in extensions.wcl.

PropertyTypeRequiredDescription
schema_versionutf8yes

Child blocks

SlotAcceptsMultipleDescription
topicstopicyes
skillsskillyes
sourcessourceyes
refswskill_refyes
conceptsconceptyes
entitiesentityyes
factsfactyes
termstermyes
examplesexampleyes
indexesindexyes
proceduresprocedureyes

Audience

A symbol_set — one of: book, ai, both.

Related

- Separation of Data and Presentation

- Content is self-contained