Objective
For one skill SKILL.md (catalog, .skill-proposals draft, or lifecycle fixture), extract invoke/forbid/require edges to catalog skill names and judge consistency. Return exactly one primary verdict: composition_ok, composition_fail with closed findings, or blocked. Ignore manner-only constraints. Do not edit files or build a full-repo graph.
Input
Exactly one of:
target— name listed inskills/INDEX.mdwithskills/<name>/SKILL.mdproposal_path—.skill-proposals/<name>/SKILL.mdfixture_path—skills/lifecycle-build/fixtures/**/SKILL.md
Empty, missing, or path outside those roots → blocked.
If skills/INDEX.md is missing or unreadable → blocked.
Subject may be non-INDEX for proposal/fixture. Every edge target must resolve as INDEX ∩ skills/<name>/SKILL.md.
Extraction
Read only the subject SKILL.md. Extract only lowercase hyphenated catalog-shaped skill name tokens used as skill references. Ignore non-skill phrases.
| Edge | Include when text… | Exclude |
|---|---|---|
invokes |
tells the agent to call / run / invoke / use skill S as a step |
mere mentions in “do not use when” without a call instruction; parenthetical capability of another skill (“it may use S”); handoff stops (“stop for S”, “pending S”) without instructing this agent to run S |
forbids |
must not call, run, invoke, absorb, or replace skill S |
manner-only constraints (e.g. “do not call bare grill-me”) — do not treat as forbids: grill-me |
requires |
names skill S as a hard prerequisite skill this agent must have already completed or must run before proceeding |
soft “may” / “optional”; requiring an artifact/output shaped by another skill (“require skill-path-selector path”) without requiring that skill to be run here |
Do not invent edges from WORKFLOW.md alone.
Consistency rules
Any break → composition_fail with closed findings (id, rule, quote, remedy hint):
- Every
invokes/forbids/requirestarget exists in INDEX ∩skills/<name>/SKILL.md - No name appears in both
invokesandforbids - Subject must not
invokesitself (same package name) - Checker edits nothing
If all extracted edges pass → composition_ok (include the extracted edge lists as evidence).
Required deliverable
YAML with:
subject— the resolvedSKILL.mdpath (fortarget:skills/<name>/SKILL.md; otherwise the suppliedproposal_pathorfixture_path)verdict- extracted
invokes/forbids/requires findingson failmissingon blocked (omitsubjectwhen no path was resolved)
When to use
- Use when: a single skill package (catalog, draft proposal, or lifecycle fixture) needs an invoke/forbid/require consistency check against the INDEX catalog
- Do not use when: Purpose review (
skill-review); which-skill routing (skill-router); designing a new skill path; building a full-repo composition encyclopedia; editing skills to add dependency frontmatter
Invocation
- skill-composition
- composition check
- check skill deps
Workflow
- Resolve input to a single subject
SKILL.mdpath orblocked. - Load catalog = INDEX-listed names that have
skills/<name>/SKILL.md. - Extract edges per the table (manner-only excluded from forbids).
- Apply consistency rules; emit
composition_okorcomposition_failwithsubjectset to the resolved path and F1.. findings on fail. - Stop. Do not edit, ship, install, or claim purpose_pass.
Validation
- Checks: Primary verdict is exactly one of composition_ok, composition_fail, blocked; no repository files edited by this skill
- Evidence: Returned YAML including
subjectwhen a path was resolved; for fail, each finding cites a quote and rule number - Rules engine self-test:
node skills/skill-composition/scripts/self-test.mjscovers consistency rules 1–3 on pre-extracted edge fixtures; rule 4 (checker edits nothing) is agent-enforced, not machine-checked; extraction from SKILL.md prose remains agent-judged
Boundaries
- Do not edit SKILL.md, INDEX, README, WORKFLOW, or run
npx skillsinstall. - Do not invent edges from WORKFLOW alone.
- Do not treat manner-only constraints as forbids.
- Do not absorb
skill-revieworskill-routerjobs. - Do not recommend or execute a skill chain.
- Stop after one verdict.
Human review and stop
Human approval is required before: ship skill to skills/.
Stop after one primary verdict, or when blocked on missing input/catalog.