Move all eight nxs.* pipeline stages out of .claude/commands/ and into .claude/skills/, so a stage loads its instructions progressively rather than injecting its entire body into context at invocation. The estimate is recorded as M because a stub must be M or smaller, but the scope reads larger than one epic: re-size it and split it when it is promoted.
Meta
- feature: docs/features/pipeline-command-surface
- estimate: M
- candidate stories: A pipeline stage invoked as a Skill behaves as it did as a command; Stage Skills receive their argument the way the commands received theirs; The per-command tool and model restrictions survive the move;
nexus deploy installs and prunes the stage Skills; Every reference to a /nxs.* command names the surviving invocation surface
- source: direct backlog request: "convert all nxs.* slash commands to Skills" (2026-08-11)
Why this is worth planning
The eight stage commands run from 250 to 1092 lines. Invoking one injects the whole file into context before the model has read a single input, and the largest stages cost more context than the work they gate. A Skill states its purpose in a short SKILL.md and can hold the rest in reference files that load only when a phase needs them.
The stage Skills also become available to the model directly, not only to a user who types the slash name. That matters most for the stages another stage already hands off to, such as /nxs.close handing off to /nxs.distill.
Known unknowns to resolve at promotion
Slash commands and Skills are not the same shape, and three differences decide the design:
- Command frontmatter carries
tools: and model:. A SKILL.md does not, so the restriction that currently withholds Edit from /nxs.analyze has no direct equivalent.
- A command interpolates its argument into the prompt body. A Skill receives
args, and every stage that string-matches its input for --pr, --from, --discovery, or a bare issue number depends on how that argument arrives.
- The twelve existing
nxs-* Skills are helpers the stages call. Making the stages Skills too means one namespace holds both the stages and the helpers they invoke, and the naming has to keep them apart.
These may warrant /nxs.discover rather than a direct promotion.
Move all eight nxs.* pipeline stages out of
.claude/commands/and into.claude/skills/, so a stage loads its instructions progressively rather than injecting its entire body into context at invocation. The estimate is recorded as M because a stub must be M or smaller, but the scope reads larger than one epic: re-size it and split it when it is promoted.Meta
nexus deployinstalls and prunes the stage Skills; Every reference to a/nxs.*command names the surviving invocation surfaceWhy this is worth planning
The eight stage commands run from 250 to 1092 lines. Invoking one injects the whole file into context before the model has read a single input, and the largest stages cost more context than the work they gate. A Skill states its purpose in a short
SKILL.mdand can hold the rest in reference files that load only when a phase needs them.The stage Skills also become available to the model directly, not only to a user who types the slash name. That matters most for the stages another stage already hands off to, such as
/nxs.closehanding off to/nxs.distill.Known unknowns to resolve at promotion
Slash commands and Skills are not the same shape, and three differences decide the design:
tools:andmodel:. ASKILL.mddoes not, so the restriction that currently withholdsEditfrom/nxs.analyzehas no direct equivalent.args, and every stage that string-matches its input for--pr,--from,--discovery, or a bare issue number depends on how that argument arrives.nxs-*Skills are helpers the stages call. Making the stages Skills too means one namespace holds both the stages and the helpers they invoke, and the naming has to keep them apart.These may warrant
/nxs.discoverrather than a direct promotion.