On this page
5-layer pipeline
A turn through Skill Wiki has exactly five layers. Three are protocol (frozen at v1); two are pluggable (domain-defined).
The pipeline

Layer-by-layer
L1 · Intent classification (plugin)
Free-text brief in. IntentObject out. The shape is
domain-defined — Skill Wiki only specifies that L1 must produce a
serialisable object that downstream layers can read.
// Example (security domain)
interface SecurityIntentObject {
task_type: "threat-model" | "compliance-check" | "code-review";
target_surface: "api-endpoint" | "auth-flow" | "data-pipeline";
severity_threshold: "low" | "medium" | "high" | "critical";
required_frameworks: string[];
ambiguity_flags: string[];
} L2 · Retrieval (protocol)
IntentObject + corpus index in. Ranked atom set out. The reference
implementation uses 6-axis ranking: kind match, tag match, edge
centrality, projection-fit cost, persona affinity, validator quality. The protocol
only specifies that L2 returns an ordered list of atom ids with explanations.
L3 · Composition (protocol)
Ranked atoms + their contracts in. A "contracted set" out — atoms whose contracts have been resolved (must-includes pulled in, must-avoids filtered, conditionals evaluated against the IntentObject). The projection level for each atom is also decided here based on the budget.
L4 · Generation (agent)
The agent itself is L4. Given the contracted atom set + their loaded projections, the agent generates the final artifact. Skill Wiki has nothing to say about how the agent generates — only about what's in its context when it does.
L5 · Validation (plugin)
Generated artifact + corpus rules in. Verdict out. The shape is domain-defined: HTML structure validation, JSON-schema check, regex over prose, LLM-judge over a rubric — all valid implementations of L5. Failures surface fix instructions; up to two retry cycles before hard-failing.
Why "L5" and not "L4"?
L1, L2, L3 are compile-time validators in name (parser → semantic → cross-atom). L4 is the agent. L5 is the runtime output validator. The naming is consistent — every L-prefix is "validation layer N." Generation has no L-number.
What's frozen vs what's free
| Layer | Frozen at v1? | Variability |
|---|---|---|
| L1 — Intent | No (plugin) | Object shape per domain. |
| L2 — Retrieval | Yes (interface) | Ranking algo can vary. |
| L3 — Composition | Yes | Contract evaluation is deterministic. |
| L4 — Generation | — | Agent's job; not part of protocol. |
| L5 — Validation | No (plugin) | Validator shape per domain. |
See Compile time and Runtime for how L2 + L3 + L5 are implemented in the reference v0.1.0.