Audit a skill with Skill Crossroads
Grade the target skill and report every finding evidence-cited (file and line) — work from
the receipts, not vibes. Only when the user asks for fixes, apply the highest-impact ones
and re-grade until the score stops improving.
Overview
Most skills fail silently: they never trigger, over-grant tools, or leak secrets, and the
author only finds out after publishing. This skill closes that loop before you ship. It runs
the free skillcrossroads CLI (MIT) against a
skill directory, producing a letter grade, a file:line-cited scorecard across six rubric
categories, and a ranked fix list. Auditing is read-only; when the user also wants the skill
improved, it walks that list, applying the smallest change that resolves each finding, until
the grade stops improving.
Prerequisites
- Node.js 20+ with
npx available, and network access to the npm registry (the CLI is
fetched on demand; the version is pinned below for reproducibility).
- A skill directory containing a
SKILL.md file.
- No credential is required, and by default nothing about your skill leaves the machine.
Every command in this skill passes
--no-llm, so all six rubric categories are scored
deterministically and locally.
- The one exception is
--suggest in step 4, which is opt-in and requires your explicit
consent. Without --no-llm, the CLI sends content to Anthropic's Messages API
(api.anthropic.com) whenever ANTHROPIC_API_KEY is present in the environment — it does
not prompt. That path upgrades the Triggering category to an LLM judge and adds checks
VERIFY-04, CLARITY-02 and CLARITY-05, sending per-check excerpts of 1,500-2,500 characters;
--suggest sends up to 24,000 characters of the entry file. Requests are billed to your own
key. Treat the key as a credential: never echo or commit it.
- Model results are cached on disk between runs, keyed by content hash:
./.beacon-cache if that directory already exists, otherwise
%LOCALAPPDATA%\skillcrossroads\cache on Windows, $XDG_CACHE_HOME/skillcrossroads when
set, or ~/.cache/skillcrossroads.
Steps
Identify the skill directory (it contains a SKILL.md). Use Glob to find **/SKILL.md
candidates or Grep to search for the skill by name. If more than one candidate exists,
ask the user which skill to audit.
Run the audit and capture the report. Single-quote the directory argument — single
quotes prevent the shell from expanding $(...), backticks, and $variables hidden in a
path (double quotes do NOT stop command substitution). Before running, inspect the path:
if it contains a single quote, $, a backtick, or a newline, do not pass it to a shell at
all — such characters in a skill directory name are themselves a red flag; rename the
directory or ask the user for a safe path first.
npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --markdown
Report the scorecard and the Top fixes list (ranked by grade impact) to the user.
Auditing is read-only. If the user asked only to audit, grade, check, or lint, stop
here — do not edit anything. Proceed to step 4 only when the user explicitly asked to fix
or improve the skill, or confirms they want the fixes applied after seeing the report.
Apply fixes (only on explicit request or confirmation). The deterministic report from
step 2 is normally enough to work from.
Optionally, model-drafted rewrites are available — but --suggest is the only command
in this skill that sends anything off the machine, so ask the user before running it
and proceed only on an explicit yes:
--suggest sends up to 24,000 characters of this skill's entry file to Anthropic's API
(api.anthropic.com), billed to your own ANTHROPIC_API_KEY, and caches the result on
disk. Run it, or continue with the local findings?
On a yes, and only when ANTHROPIC_API_KEY is set:
npx skillcrossroads@0.11.4 '<skill-dir>' --suggest
If the user declines, or no key is set, continue with the step 2 findings — they already
cover all six rubric categories. Either way, treat suggestions as proposals to review and
never apply one unread. For each fix, Read the cited file:line, confirm the finding is
real, and apply the smallest Edit that resolves it.
Typical high-impact fixes: rewrite the frontmatter description to lead with the use case
and include the phrases a user would actually say; add a verification step; state
constraints and failure modes; remove hardcoded secrets or over-broad allowed-tools.
Re-run the audit. Repeat steps 4–5 until the grade stops improving or only intentional
trade-offs remain.
Offer the badge: npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --badge writes an SVG the user
can embed in their README, linking to https://skillcrossroads.com for the hosted version.
It lands in the current working directory as <name>.beacon.svg, not inside the skill
directory; pass --badge=<path> to choose where it goes.
Output
- A markdown scorecard: overall letter grade, per-category scores across the six rubric
categories, and every finding cited with file and line.
- A ranked Top fixes list ordered by grade impact.
- After the fix loop (when the user requested fixes): the before → after grades, reported to
the user.
- With
--badge: an SVG badge file, <name>.beacon.svg, written to the current working
directory — not into the skill directory; --badge=<path> chooses another location.
Error Handling
- If
npx fails (offline, registry blocked, unsupported Node version), report the error
verbatim and stop — do not hand-estimate a grade.
- If no
SKILL.md is found in the target directory, ask the user for the correct path
instead of guessing.
- If the grade plateaus with findings remaining, list each residual finding and ask the
user whether it is an intentional trade-off; never mask a finding to force a grade.
- Never suppress, delete, or work around a SAFETY- finding* — fix the underlying problem
(remove the secret, narrow the tool grant). Safety findings always count.
- Do not pad the skill with filler to game a check; if a finding is a deliberate trade-off,
say so to the user instead of masking it.
- Say which mode ran (keyless deterministic vs. LLM-upgraded) so the user knows what the
grade covers.
Examples
User: "Audit my skill in skills/deploy-checker — why doesn't it trigger?"
npx skillcrossroads@0.11.4 'skills/deploy-checker' --no-llm --markdown
The report grades Triggering low, citing SKILL.md:3 — the description lacks the phrases a
user would say. Report that finding and stop (the user asked why, not for edits). If they
then say "fix it", rewrite the description to lead with the use case, re-run the audit, and
report the before → after grade (for example C → A). Alternatively, run with --suggest
to review proposed rewrites before applying them.
Verify
Done means: for an audit-only request, the scorecard and Top fixes list were reported with no
files modified. For a fix request: the final npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --markdown
run shows the improved grade with no fail-status findings remaining (or each remaining one
acknowledged by the user as intentional), and the before → after grades are reported to the user.
Resources
- references/rubric-categories.md — the six rubric categories, their weights, and keyless vs. LLM-upgraded coverage.
- references/flags-quick-reference.md —
--markdown / --suggest / --badge / --min-grade at a glance.
- skillcrossroads on npm — the CLI this skill runs (pinned to 0.11.4).
- skillcrossroads.com — hosted scans, badges, and per-check fix documentation.
- Check reference — what every rubric check measures and how to fix it.
- Source repository —
plugin/ there is the
canonical copy; the marketplace entry is a mirror of it, so fixes land upstream first.
1---
2name: audit-skill
3description: 'Audit and improve a Claude Code skill using Skill Crossroads. Use when the user
4 says "audit my skill", "grade my skill", "check my skill quality", "why doesn''t my skill
5 trigger", or "lint my SKILL.md" — or before publishing any skill, to get an evidence-cited
6 quality score, ranked fix list, and badge. Trigger with "audit my skill".'
7allowed-tools: Read, Edit, Grep, Glob, Bash(npx:*)
8disable-model-invocation: true
9argument-hint: <skill-dir — path to the directory containing SKILL.md>
10version: 0.11.4
11author: Steve Harlow <sgharlow@users.noreply.github.com>
12license: MIT
13tags:
14- audit
15- quality
16- linter
17- skills
18compatibility: Designed for Claude Code; the underlying CLI grades skills, subagents, slash commands, MCP configs, and plugins
19---
20
21# Audit a skill with Skill Crossroads
22
23Grade the target skill and report every finding evidence-cited (file and line) — work from
24the receipts, not vibes. Only when the user asks for fixes, apply the highest-impact ones
25and re-grade until the score stops improving.
26
27## Overview
28
29Most skills fail silently: they never trigger, over-grant tools, or leak secrets, and the
30author only finds out after publishing. This skill closes that loop before you ship. It runs
31the free [skillcrossroads](https://www.npmjs.com/package/skillcrossroads) CLI (MIT) against a
32skill directory, producing a letter grade, a file:line-cited scorecard across six rubric
33categories, and a ranked fix list. Auditing is read-only; when the user also wants the skill
34improved, it walks that list, applying the smallest change that resolves each finding, until
35the grade stops improving.
36
37## Prerequisites
38
39- Node.js 20+ with `npx` available, and network access to the npm registry (the CLI is
40 fetched on demand; the version is pinned below for reproducibility).
41- A skill directory containing a `SKILL.md` file.
42- **No credential is required, and by default nothing about your skill leaves the machine.**
43 Every command in this skill passes `--no-llm`, so all six rubric categories are scored
44 deterministically and locally.
45- **The one exception is `--suggest` in step 4, which is opt-in and requires your explicit
46 consent.** Without `--no-llm`, the CLI sends content to Anthropic's Messages API
47 (`api.anthropic.com`) whenever `ANTHROPIC_API_KEY` is present in the environment — it does
48 not prompt. That path upgrades the Triggering category to an LLM judge and adds checks
49 VERIFY-04, CLARITY-02 and CLARITY-05, sending per-check excerpts of 1,500-2,500 characters;
50 `--suggest` sends up to 24,000 characters of the entry file. Requests are billed to your own
51 key. Treat the key as a credential: never echo or commit it.
52- **Model results are cached on disk** between runs, keyed by content hash:
53 `./.beacon-cache` if that directory already exists, otherwise
54 `%LOCALAPPDATA%\skillcrossroads\cache` on Windows, `$XDG_CACHE_HOME/skillcrossroads` when
55 set, or `~/.cache/skillcrossroads`.
56
57## Steps
58
591. Identify the skill directory (it contains a `SKILL.md`). Use Glob to find `**/SKILL.md`
60 candidates or Grep to search for the skill by name. If more than one candidate exists,
61 ask the user which skill to audit.
622. Run the audit and capture the report. **Single-quote** the directory argument — single
63 quotes prevent the shell from expanding `$(...)`, backticks, and `$variables` hidden in a
64 path (double quotes do NOT stop command substitution). Before running, inspect the path:
65 if it contains a single quote, `$`, a backtick, or a newline, do not pass it to a shell at
66 all — such characters in a skill directory name are themselves a red flag; rename the
67 directory or ask the user for a safe path first.
68
69 ```bash
70 npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --markdown
71 ```
72
733. Report the scorecard and the **Top fixes** list (ranked by grade impact) to the user.
74 **Auditing is read-only.** If the user asked only to audit, grade, check, or lint, stop
75 here — do not edit anything. Proceed to step 4 only when the user explicitly asked to fix
76 or improve the skill, or confirms they want the fixes applied after seeing the report.
774. Apply fixes (only on explicit request or confirmation). The deterministic report from
78 step 2 is normally enough to work from.
79
80 Optionally, model-drafted rewrites are available — but `--suggest` is the **only** command
81 in this skill that sends anything off the machine, so **ask the user before running it**
82 and proceed only on an explicit yes:
83
84 > `--suggest` sends up to 24,000 characters of this skill's entry file to Anthropic's API
85 > (`api.anthropic.com`), billed to your own `ANTHROPIC_API_KEY`, and caches the result on
86 > disk. Run it, or continue with the local findings?
87
88 On a yes, and only when `ANTHROPIC_API_KEY` is set:
89
90 ```bash
91 npx skillcrossroads@0.11.4 '<skill-dir>' --suggest
92 ```
93
94 If the user declines, or no key is set, continue with the step 2 findings — they already
95 cover all six rubric categories. Either way, treat suggestions as proposals to review and
96 never apply one unread. For each fix, Read the cited file:line, confirm the finding is
97 real, and apply the smallest Edit that resolves it.
98 Typical high-impact fixes: rewrite the frontmatter `description` to lead with the use case
99 and include the phrases a user would actually say; add a verification step; state
100 constraints and failure modes; remove hardcoded secrets or over-broad `allowed-tools`.
1015. Re-run the audit. Repeat steps 4–5 until the grade stops improving or only intentional
102 trade-offs remain.
1036. Offer the badge: `npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --badge` writes an SVG the user
104 can embed in their README, linking to https://skillcrossroads.com for the hosted version.
105 It lands in the **current working directory** as `<name>.beacon.svg`, not inside the skill
106 directory; pass `--badge=<path>` to choose where it goes.
107
108## Output
109
110- A markdown scorecard: overall letter grade, per-category scores across the six rubric
111 categories, and every finding cited with file and line.
112- A ranked **Top fixes** list ordered by grade impact.
113- After the fix loop (when the user requested fixes): the before → after grades, reported to
114 the user.
115- With `--badge`: an SVG badge file, `<name>.beacon.svg`, written to the **current working
116 directory** — not into the skill directory; `--badge=<path>` chooses another location.
117
118## Error Handling
119
120- If `npx` fails (offline, registry blocked, unsupported Node version), report the error
121 verbatim and stop — do not hand-estimate a grade.
122- If no `SKILL.md` is found in the target directory, ask the user for the correct path
123 instead of guessing.
124- If the grade plateaus with findings remaining, list each residual finding and ask the
125 user whether it is an intentional trade-off; never mask a finding to force a grade.
126- **Never suppress, delete, or work around a SAFETY-* finding** — fix the underlying problem
127 (remove the secret, narrow the tool grant). Safety findings always count.
128- Do not pad the skill with filler to game a check; if a finding is a deliberate trade-off,
129 say so to the user instead of masking it.
130- Say which mode ran (keyless deterministic vs. LLM-upgraded) so the user knows what the
131 grade covers.
132
133## Examples
134
135User: *"Audit my skill in `skills/deploy-checker` — why doesn't it trigger?"*
136
137```bash
138npx skillcrossroads@0.11.4 'skills/deploy-checker' --no-llm --markdown
139```
140
141The report grades Triggering low, citing `SKILL.md:3` — the description lacks the phrases a
142user would say. Report that finding and stop (the user asked why, not for edits). If they
143then say "fix it", rewrite the description to lead with the use case, re-run the audit, and
144report the before → after grade (for example C → A). Alternatively, run with `--suggest`
145to review proposed rewrites before applying them.
146
147## Verify
148
149Done means: for an audit-only request, the scorecard and Top fixes list were reported with no
150files modified. For a fix request: the final `npx skillcrossroads@0.11.4 '<skill-dir>' --no-llm --markdown`
151run shows the improved grade with **no fail-status findings remaining** (or each remaining one
152acknowledged by the user as intentional), and the before → after grades are reported to the user.
153
154## Resources
155
156- [references/rubric-categories.md](references/rubric-categories.md) — the six rubric categories, their weights, and keyless vs. LLM-upgraded coverage.
157- [references/flags-quick-reference.md](references/flags-quick-reference.md) — `--markdown` / `--suggest` / `--badge` / `--min-grade` at a glance.
158- [skillcrossroads on npm](https://www.npmjs.com/package/skillcrossroads) — the CLI this skill runs (pinned to 0.11.4).
159- [skillcrossroads.com](https://skillcrossroads.com) — hosted scans, badges, and per-check fix documentation.
160- [Check reference](https://skillcrossroads.com/docs/checks) — what every rubric check measures and how to fix it.
161- [Source repository](https://github.com/sgharlow/skillcrossroads) — `plugin/` there is the
162 canonical copy; the marketplace entry is a mirror of it, so fixes land upstream first.