Night Market Skill — ported from claude-night-market/abstract. For the full experience with agents, hooks, and commands, install the Claude Code plugin.
Build a directed graph of Skill(plugin:name) invocations across the
marketplace and surface composition patterns: which skills are heavily
referenced (hubs), which orchestrate many others (orchestrators), which
have no incoming or outgoing references (isolates), and which point at
non-existent skills (dangling references).
The federation graph is now derivable from source rather than hand-curated.
Skill() referencesSkill(abstract:skills-eval) insteadSkill(abstract:plugin-review)Skill(abstract:hooks-eval)bash
python3 plugins/abstract/scripts/skill_graph.py \
--plugins-root plugins --top-n 10
For machine-readable output:
bash
python3 plugins/abstract/scripts/skill_graph.py \
--plugins-root plugins --format json --output reports/skill-graph.json
See modules/usage.md for full CLI reference and example workflows.
OutputMeaningAction when highHubsMost-referenced skillsTreat as core API; retire with extreme careOrchestratorsSkills that call many othersVerify each ref still resolvesIsolatesZero in / zero outCheck role: library? entrypoint? typo?Dangling -- bugsMissing internal targetFix immediately (typo or retired skill)Dangling -- externalReference to external pluginDocument plugin dependencyDangling -- placeholdersTemplate text like -NAMEVerify intentional
See modules/interpretation.md for false-positive guidance and
isolation taxonomy.
This skill itself was scaffolded TDD-first; on first run against
plugins/, it caught two genuine dangling refs that the manual
audit (2026-04-25) had missed:
attune:makefile-generation -> abstract:makefile-dogfooder
(script name confused with skill name)imbue:karpathy-principles -> spec-kit:speckit-clarify
(command referenced as skill)Both were converted to correct command-style references in the same session.
Two ways to validate the audit output is trustworthy:
pytest -o addopts= plugins/abstract/tests/scripts/test_skill_graph.py to confirm
extraction, graph construction, ranking, isolate detection, and
dangling-ref classification all pass on the current code. The
-o addopts= flag bypasses the package-wide coverage gate, which
would otherwise fail on a single-file run.Skill(abstract:skills-eval) -- per-skill quality scoringSkill(abstract:plugin-review) -- plugin manifest + structureSkill(abstract:hooks-eval) -- hook-specific validationSkill(abstract:rules-eval) -- rules directory validationplugins/abstract/scripts/skill_graph.pyplugins/abstract/tests/scripts/test_skill_graph.pydocs/quality-gates.md#skill-level-quality-gate-compositiondocs/skill-integration-guide.md#skill-role-taxonomy