From skill-kit
Audit skill/prompt files for structural issues and JSON schema format coherence issues. Requires --agent parameter to select LLM backend (codex, gemini, copilot, claude, cursor, kimi) for semantic analysis.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-kit:skill-lintThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit skill/prompt files for structural issues, step continuity, cross-reference integrity, and JSON schema format coherence. Uses a two-phase approach: automated deterministic checks followed by LLM semantic analysis dispatched to the agent specified by `--agent`.
Audit skill/prompt files for structural issues, step continuity, cross-reference integrity, and JSON schema format coherence. Uses a two-phase approach: automated deterministic checks followed by LLM semantic analysis dispatched to the agent specified by --agent.
This is a rigid skill. Follow it exactly.
Usage: /skill-lint --agent <agent> <path>
--agent is required. One of: codex, gemini, copilot, claude, cursor, kimi.
If --agent is omitted, announce: "Error: --agent is required. Usage: /skill-lint --agent <codex|gemini|copilot|claude|cursor|kimi> <path>" and stop.
Announce at start: "I'm using the skill-lint skill to audit [path] with [agent] as the LLM backend."
The skill accepts a directory or file path as its argument.
SKILL.md, *.md, and other prompt definition files. Identify the skill structure (frontmatter, steps, JSON blocks).You MUST read every file before linting it. Do NOT work from memory or assumptions.
Use Grep, Glob, and regex directly (no subagents) to verify mechanically checkable properties. These produce definitive pass/fail results.
name field exists and is non-emptydescription field exists and is non-emptyname matches the parent directory name (e.g., skill-lint/SKILL.md → name: skill-lint)name and descriptionRead, Write, Edit, Bash, Grep, Glob, Agent, AskUserQuestion, WebSearch, WebFetch, EnterPlanMode, ExitPlanMode, TaskCreate, TaskUpdate, NotebookEdit, Skill, SendMessage, ToolSearchamplify:write-plan") follow valid plugin:skill formatDispatch semantic analysis to the agent specified by --agent. The checks are split into 5 groups, each with its own prompt template in the prompts/ directory adjacent to this SKILL.md.
| Group | Prompt Template | Categories |
|---|---|---|
| 1 | prompts/agent1-must-consistency.md | D: MUST/MUST NOT Consistency |
| 2 | prompts/agent2-numeric-ungrounded.md | E1: Numeric as String + E2: Ungrounded Fields |
| 3 | prompts/agent3-format-constraints.md | E3: Non-Interpretation Fields Without Format Constraints |
| 4 | prompts/agent4-field-names.md | E4: Inconsistent Field Names Across Schemas |
| 5 | prompts/agent5-enums-freetext.md | E5: Open-Ended Enums + E6: Structured Data as Free-Text |
Each agent MUST return findings as a JSON array with fields: category, field_path, current_text, issue, suggested_fix, severity.
--agent claudeLaunch 5 internal Claude Code subagents in a single message for maximum parallelism. Each subagent receives the full file content and the check instructions from the corresponding prompt template.
| Subagent | Prompt Template | Model | Rationale |
|---|---|---|---|
| 1 | agent1-must-consistency.md | Sonnet | Needs full-file reasoning to detect contradictions and redundancy across distant sections |
| 2 | agent2-numeric-ungrounded.md | Haiku | Pattern-matching with clear heuristics; high-volume, low-complexity |
| 3 | agent3-format-constraints.md | Sonnet | Requires understanding of verbatim-transfer semantics and domain context |
| 4 | agent4-field-names.md | Sonnet | Cross-schema semantic similarity analysis; needs nuanced judgment |
| 5 | agent5-enums-freetext.md | Haiku | Pattern-based detection with clear signals |
--agent is an external agentFor each of the 5 check groups:
prompts/.{FILE_CONTENT} with the actual content of the file being linted.run_in_background: true, no timeout).Launch all 5 background Bash calls in a single message for maximum parallelism. Wait for all 5 to complete (you will be notified automatically).
CLI invocation patterns:
| Agent | Command |
|---|---|
codex | codex exec -q "$(cat <prompt_file>)" |
gemini | gemini -p "$(cat <prompt_file>)" --sandbox |
copilot | gh copilot explain "$(cat <prompt_file>)" |
cursor | cursor agent "$(cat <prompt_file>)" --print |
kimi | kimi "$(cat <prompt_file>)" |
After all 5 complete, parse each result's stdout as a JSON array. If an agent wraps the JSON in markdown fences or prose, extract the JSON array from the output.
The full category definitions are in the prompt template files. For quick reference:
Merge Phase 1 and Phase 2 results into a single report using this exact format:
## Skill Lint Report: [path]
**Files analyzed:** [count]
**Issues found:** [count] ([N] automated, [M] semantic)
**LLM backend:** [agent name]
### Phase 1: Automated Checks
| # | Category | File | Location | Status | Detail |
|---|----------|------|----------|--------|--------|
| 1 | Frontmatter | SKILL.md | line 1-3 | FAIL | Missing `name` field |
### Phase 2: Semantic Checks
| # | Category | File | Field/Location | Severity | Detail |
|---|----------|------|----------------|----------|--------|
| 1 | E1: Numeric as String | SKILL.md | .count | High | ... |
### Finding Details
**Finding [N]: [Category]**
- **File:** [path]
- **Location:** [line range or field path]
- **Current text:** [exact current value]
- **Issue:** [one-line explanation]
- **Suggested fix:** [concrete replacement]
If no issues are found for a category, omit that category from the report. If no issues are found at all, say so explicitly.
Use this default severity table:
| Category | Default Severity | Rationale |
|---|---|---|
| A: Frontmatter Validation | High | Plugin discovery fails without correct frontmatter |
| B: Step Continuity | Medium | Confuses the agent following the skill |
| C: Cross-Reference Integrity | High | Agent attempts to use non-existent tools/skills |
| D: MUST/MUST NOT Consistency | Medium | Contradictory rules cause unpredictable behavior |
| E1: Numeric Quoted as String | High | Causes type errors in downstream consumers |
| E2: Ungrounded Fields | Medium | Causes hallucinated values |
| E3: Missing Format Constraints | Medium | Causes format drift across runs |
| E4: Inconsistent Field Names | High | Causes integration failures |
| E5: Open-Ended Enums | Low | Causes unpredictable but non-breaking values |
| E6: Structured Data as Free-Text | High | Causes parsing failures downstream |
Creates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.
npx claudepluginhub wezzard/skills --plugin skill-kit