skills-audit
Skill20 starsChanged 15 days agoMITView on GitHub
Review every skill in ~/dotfiles/skills and the private ~/.skills.local against the skill-authoring best practices and the house style, report findings per skill, then standardize frontmatter, structure and wording — audit, fix, and verify, not just a report. Use when the user wants to review, audit, lint, standardize, or clean up their skills, asks whether a SKILL.md follows best practices, or after adding or editing a skill.
- Deletes or force-pushes
4 other projects use a version of this.
Adopted by
Most recently taken up by
- lobehub/lobehubtheir own version, first seen Nov 5, 2026
- lobehub/lobe-chattheir own version, first seen Oct 8, 2026
- i-9-ai/skillstheir own version, first seen Sep 24, 2026
- minghinmatthewlam/skills-audittheir own version, first seen Apr 3, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- lobehub/lobe-chat★ 84ksame name
- lobehub/lobehub★ 84ksame name
- minghinmatthewlam/skills-audit★ 1same name
- i-9-ai/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- a11y-page-auditSkill
- branch-comment-cleanupSkill
- branch-test-planSkill
- context7-mcpSkill
- env-example-syncSkill
- feature-based-architectureSkill
- great-readmeSkill
- harvest-reviewsSkill
- light-dark-modeSkill
- localizationSkill
- minimal-code-changesSkill
- prod-page-auditSkill
- quantum-design-tokensSkill
- reviewable-commitsSkill
- shell-aliases-socialSkill
- skill-best-practices-syncSkill
- skills-socialSkill
- stacked-pr-splitterSkill
- team-reviewerSkill
The file
We split this skill into the rules it gives an agent
12 rules. 0 are common, 4 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 29
Never change what a skill *does*.
- Distinctive: line 32
Never weaken a description's trigger phrases.
- Distinctive: line 34
Never edit a skill without showing the proposed change first and getting a yes.
- Very specific: line 41
One skill: when the user names one skill (or just added one), scope Phases 1–5 to it with --skill <name>, but still run the …
- Very specific: line 59
Add --skill <name> (repeatable) to scope to one skill, --json for machine output.
- Very specific: line 68
Read each SKILL.md in full, from both folders (plus any references/ and scripts/ it bundles), and answer, per skill, citing line numbers:
- Very specific: line 115
Only after a yes. Record the repo's starting state, because files may already be modified before the audit (Phase 5 compares against it): …
- Very specific: line 124
Prefer the smallest diff that satisfies the rule: reflow a description into > form, rename Step N — to Phase N —, add a missing ## Phase N …
- Very specific: line 127
When a skill's body is near the line budget, move the largest self-contained block into references/<descriptive-name>.md, add a Contents …
- Very specific: line 130
Update references/house-style.md if the user chose a new collection-wide standard (naming form, description opener) so the next audit …
- Distinctive: line 150
After Phase 5, report what was applied, what was skipped and why, and what remains in "Needs your call":
- Very specific: line 179
Commits: do not commit; the user decides when the dotfiles repo gets a commit.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skills Audit
Bring every <skill>/SKILL.md in the collection up to the same standard: valid per the
spec, aligned with the distilled best practices, and written in the house style. Findings
are reported first; files are only edited after an explicit yes.
Two references drive the review — read both fully before judging anything:
<skill-directory>/../skill-best-practices-sync/references/best-practices.md— the upstream digest (MUST/SHOULD, source-tagged). Owned by theskill-best-practices-syncskill.references/house-style.md— the local conventions (layout, frontmatter shape, section order, tone).
Hard rules (never violate)
- Never change what a skill does. Standardize frontmatter, structure, wording and layout; leave behavior, tool choices and guardrails as they are. A behavioral suggestion goes in the report under "Needs your call", not into the file.
- Never weaken a description's trigger phrases. They drive discovery; rewording them is a judgment call for the user.
- Never edit a skill without showing the proposed change first and getting a yes.
Inputs
- Collection:
~/dotfiles/skills(tracked in git) plus~/.skills.localwhen it exists (private skills that are never committed, like~/.zshrc.local). The linter picks up both, and the lint output tags local skills with(local). - One skill: when the user names one skill (or just added one), scope Phases 1–5 to
it with
--skill <name>, but still run the collection-level checks so it matches its neighbors.
Phase 0 — Confirm the rubric is current
Run: python3 <skill-directory>/../skill-best-practices-sync/scripts/sync_sources.py check
- All
UNCHANGED→ continue. - Any
CHANGED/NEW→ tell the user the digest may be stale and offer to run theskill-best-practices-syncskill first. Continue with the current digest if they decline. FETCH-ERR(offline) → note it in the report and continue.
Phase 1 — Mechanical lint
Run: python3 <skill-directory>/scripts/lint_skills.py
Add --skill <name> (repeatable) to scope to one skill, --json for machine output.
Severities: error = spec violation, warn = checkable SHOULD from the digest,
style = house-style deviation, info = cross-skill observation (naming mix, description
style mix). Keep the output; it is the skeleton of the report.
The linter does not judge prose. Phase 2 does.
Phase 2 — Read and judge
Read each SKILL.md in full, from both folders (plus any references/ and scripts/
it bundles), and answer, per skill, citing line numbers:
- Conciseness: which sentences explain something the model already knows? Which paragraphs would the skill work without?
- What + when: does the description say both, front-loaded, in third person, with the phrases a user would actually type?
- Defaults, not menus: any place offering several tools or approaches as equals?
- Specificity vs fragility: are fragile steps prescriptive (exact command, "do not add flags") and open-ended steps left free? Any step over- or under-specified?
- Procedures over declarations: does it teach the approach, or hard-code one answer?
- Verification loop: is there a check-fix-recheck step before the report?
- Terminology: one term per concept throughout?
- Progressive disclosure: anything long enough to move to
references/with a clear "read this when…"? Any bundled file that SKILL.md never tells the model when to open? - House style: title, opening paragraph,
Phase N —sections,Reporttemplate,Notes & edge caseslast, ~90-column wrap — perreferences/house-style.md.
Then look across the collection: are names one pattern? Do descriptions share one shape? Do the same section names mean the same thing everywhere?
Phase 3 — Report
Print in the chat response. Do not write files yet.
## Skills audit — <N> skills
| skill | errors | warns | style | verdict |
|-------|--------|-------|-------|---------|
| … | | | | clean / needs fixes |
### <skill-name>
- **Fix** `<rule>` <what and where> → <proposed change, one line>
- **Needs your call** <behavioral or trigger-phrase suggestion, with the reason>
### Across the collection
- <naming / description-shape / section-name consistency findings + the proposed standard>
### Rubric status
<UNCHANGED for all sources | stale: … | offline>End with: "Apply the Fix items? (all / pick skills / none)".
Phase 4 — Apply
Only after a yes. Record the repo's starting state, because files may already be
modified before the audit (Phase 5 compares against it):
git -C ~/dotfiles status --short skills/ > "$TMPDIR/skills-before.txt".
Local skills have no git history, so if any approved skill is local, also run:
rm -rf "$TMPDIR/skills.local.bak" && cp -R ~/.skills.local "$TMPDIR/skills.local.bak".
Then, for each approved skill:
- Edit
SKILL.mdin place. Keep every trigger phrase; keep every hard rule; keep the content order unless the fix is the order. - Prefer the smallest diff that satisfies the rule: reflow a description into
>form, renameStep N —toPhase N —, add a missing## Phase N — Verify, wrap long prose lines. - When a skill's body is near the line budget, move the largest self-contained block
into
references/<descriptive-name>.md, add a Contents list if it exceeds 100 lines, and link it from SKILL.md with a "read this when…" sentence. - Update
references/house-style.mdif the user chose a new collection-wide standard (naming form, description opener) so the next audit enforces it.
Phase 5 — Verify
python3 <skill-directory>/scripts/lint_skills.py→ zero errors; every previously reported finding that was approved is gone; no new findings introduced.- Re-read each edited description once more as a discovery signal: would the skill still trigger on every phrase it triggered on before?
git -C ~/dotfiles status --short skills/ | grep -v -x -F -f "$TMPDIR/skills-before.txt"— only files of the approved repo skills appear (a file already modified before the audit and edited again won't show here; check those withgit diff). For local skills:diff -ru "$TMPDIR/skills.local.bak" ~/.skills.local— only the approved local skills changed.
Fix any failure and rerun these checks. Undo a fix that can't pass and list it under "Skipped".
Report
After Phase 5, report what was applied, what was skipped and why, and what remains in "Needs your call":
## Skills audit — applied
### Applied
- <skill>: <fix, one line each>
### Skipped
- <skill>: <fix — why>
### Needs your call
- <skill>: <open item>Notes & edge cases
- This skill and
skill-best-practices-syncare in scope too. Audit them like the rest; do not exempt them. - Local skills (
~/.skills.local): untracked and never committed. The same rules and fixes apply as for repo skills. A local skill that reuses a repo skill's name is anXS003error: report it and suggest renaming the local skill. disable-model-invocation: trueis deliberate on skills the user wants to trigger manually — never remove it as a "cleanup".- Descriptions shorter than the house shape (e.g.
context7-mcp): reshaping into "verb + what — Use when …" is a Fix; adding new trigger phrases is Needs-your-call. - Style findings are not failures. A skill may deviate deliberately; say so in the report and move on when the user confirms.
- Commits: do not commit; the user decides when the dotfiles repo gets a commit.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

