skill-audit
Skill2 starsChanged 41 days agoMITView on GitHub
Maintenance loop for the skills you already own. Stage 1 (cheap, runs after a merge or on demand) records how skills actually behaved this session — but ONLY from observable evidence: a user override, a correction, a misfire, padding they rejected, an instruction the repo made impossible. Appends to ~/.claude/skill-audit/log.jsonl and never edits a skill. Stage 2 (rare) fires when the same complaint about the same skill reaches 2+ occurrences across DIFFERENT sessions, and proposes a minimal diff to that SKILL.md for approval. Invoke with /skill-audit after merging, or when the user says \"did the skills work / should I change a skill / review my skills\". This is skill-compare's sibling — that judges EXTERNAL skills for intake; this judges INCUMBENTS for maintenance. Restraint-gated: logging nothing is the normal outcome, and self-assessment (\"I could have applied it better\") is never evidence.
We split this skill into the rules it gives an agent
9 rules. 0 are common, 6 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 47 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Every entry must quote a concrete artifact — either the instruction line in the SKILL.md that caused the problem, or the user's actual …
- Distinctive: line 47
List the skills actually used this session: If none were, say so and stop.
- Very specific: line 58
Check for a pattern: After appending, count prior *unresolved* entries with the same skill and the same substantive complaint:
- Distinctive: line 82
State the pattern and cite the evidence: Every occurrence, with its artifact.
- Very specific: line 87
Misfires live in the
description:: Put the main trigger word first, and keep one trigger phrase per distinct case — synonyms for the same … - Distinctive: line 89
Show before → after and ask: Never edit unasked.
- Distinctive: line 137
Introspection is not evidence: No artifact, no entry. This single rule is what keeps the skill from becoming a rationalization engine.
- Distinctive: line 141
Never write to the memory system: Read it for evidence; write only to the log.
- Distinctive: line 142
Nothing logged is the normal result: If the log grows at every merge, the gate has failed and the skill is manufacturing telemetry.
“Common” is measured: kept by at least 6 in 10 of the 47 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
/skill-audit — are the skills I already own still right?
Skills are prompts, and prompts rot. The repo changes, the conventions move, a step that read well on day one turns out to produce noise on real work — and nothing ever tells you. skill-compare guards the front door (should I adopt this external skill?). Nothing guards the ones already inside. This is that loop.
The evidence for whether a skill works is generated every session and then thrown away when the session ends. This skill's entire job is to catch a little of it before it's gone, and — only once the same thing has happened twice — act on it.
What this is NOT — so you invoke the right thing:
- Not
skill-compare. That prices an external skill against your collection: adopt / graft / skip. This audits an incumbent against its own real-world performance. - Not a retro on the code. The merge is only the trigger. Nothing here judges the branch, the diff, or the work —
ship-checkalready did that. The subject is the tooling. - Not a memory writer. Observations go to
~/.claude/skill-audit/log.jsonl, not to~/.claude/projects/<project>/memory/. Memory is per-project and is loaded into context on every session; skills are global and their telemetry must not tax every future session. (Stage 2 reads the feedback memories — it never writes them.) - Not a self-review. See the gate.
The gate — evidence is observable, never introspective
The failure mode that kills this skill is me grading myself. "Did I apply ponytail well?" is unfalsifiable, and I will rationalize the answer every time. So introspection is banned outright:
If the only source for an observation is my own judgment about my own performance, it is not evidence. Do not log it.
Every entry must quote a concrete artifact — either the instruction line in the SKILL.md that caused the problem, or the user's actual words correcting it. If you cannot quote it, you do not have an entry.
What counts (all externally observable)
| Kind | What it looks like |
override | The user countermanded an explicit instruction in the skill. Strongest signal there is — the skill said do X, they said don't. |
correction | The user said the output was wrong, useless, or off-target, and it had to be redone. |
misfire | Fired when it shouldn't have, or didn't fire when it should — the user had to invoke by hand something whose trigger claims it auto-fires. |
padding | Produced findings the user rejected as noise. Especially telling for the restraint-gated skills, whose whole promise is not doing this. |
blocked | An instruction the environment makes impossible — a path that moved, a tool that isn't installed, a convention that changed, a command that no longer exists. |
What never counts
- "I could have applied it better." Introspection. Banned.
- The skill worked. Log nothing. This is the normal outcome.
- The user disagreed with a finding. A skill that surfaces candidates for a human to reject is working — rejection is the design, not a defect. Only log it if they rejected the finding as noise the skill should never have raised.
- Project-specific weirdness that says nothing about the skill.
- Anything without a quotable artifact.
Stage 1 — observe (after a merge, or on demand)
Cheap, non-destructive, runs often. It writes to a log and never touches a SKILL.md.
- List the skills actually used this session. If none were, say so and stop.
- Scan for the five kinds above — over what's in context, and if the session is long or compacted, over the transcript on disk (
~/.claude/projects/<project-slug>/*.jsonl, matched by session id). - Apply the gate to each candidate. Most die here. That's correct.
- Append survivors to
~/.claude/skill-audit/log.jsonl, one JSON object per line:
{"date":"2026-08-02","skill":"fix-review","kind":"override","what":"user blocked the Phase 3 auto-push","artifact":"SKILL line: 'do not stop between steps or ask for additional confirmation'","session":"<id>","branch":"<branch>","resolved":false}Get date from date -I, branch from git branch --show-current. Use the real session id.
- Check for a pattern. After appending, count prior unresolved entries with the same
skilland the same substantive complaint:
grep '"skill":"<name>"' ~/.claude/skill-audit/log.jsonl | grep '"resolved":false'Entries from the same session count once — one incident is one data point no matter how many times it recurred within it. If the count reaches 2 across different sessions, say so and offer stage 2. Do not run stage 2 unprompted.
- Report. Usually:
No skill issues logged — <skills used>, all behaved.
Stage 2 — propose (only on a real pattern, only with approval)
Rare, careful, and it is the only part that can change a file.
Entry conditions — one of these, or don't run:
- 2+ unresolved log entries, same skill, same complaint, different sessions; or
- 1 log entry plus a pre-existing
type: feedbackmemory saying the same thing. Search them all — this corpus predates the log and is where the strongest evidence currently lives:
The same correction written down in two different projects is the same n≥2 signal, already recorded.grep -rl "type: feedback" ~/.claude/projects/*/memory/*.md
Then:
- State the pattern and cite the evidence. Every occurrence, with its artifact. If the two occurrences aren't actually the same complaint, stop — that's one anecdote twice, not a pattern.
- Find the exact cause in the file. The specific line or step that produced the behavior. "The skill is too aggressive" is not a cause;
fix-review.md:93 "do not ask first"is. - Propose the minimal diff. Change the instruction that caused it. Do not rewrite the skill, restructure it, or "improve" adjacent prose while you're in there — that's the same scope creep
/spinoffexists to prevent, aimed at your tooling. Shape the diff by three rules (from mattpocock'swriting-for-agents):- Delete before adding. If the cause is a line the model would follow anyway (a no-op) or one that restates what config or
--helpalready says (a stale copy), removing it is the fix. Test "does this line change behavior?" by running the skill, not by arguing. - Say what to do, not what to avoid. The reflex fix for misbehavior is a new "don't X" line, and it backfires: naming X puts it in context and makes it more likely. Write the wanted behavior instead.
- Misfires live in the
description:. Put the main trigger word first, and keep one trigger phrase per distinct case — synonyms for the same case are one case written twice.
- Delete before adding. If the cause is a line the model would follow anyway (a no-op) or one that restates what config or
- Check the blast radius. Does the edit break another step that depends on the old behavior? A skill is a program; changing step 3 can strand step 5.
- Show before → after and ask. Never edit unasked.
- On approval: apply the edit, then mark those log entries
"resolved":trueso the pattern stops re-firing. Note the change in the skill's provenance comment if it has one. - On rejection: mark them
"resolved":truewith"outcome":"rejected". A rejected proposal must not come back every merge.
Expect rejections. The user knows why a skill says what it says; you're reading it cold. A proposal turned down is the loop working, not failing.
Output shape
Stage 1, the normal case:
## Skill-audit: <branch>
Skills used: <list>
**Nothing logged** — no overrides, corrections, misfires, padding, or blocks.Stage 1, with a finding:
## Skill-audit: <branch>
Skills used: <list>
**Logged 1**
- `<skill>` · `<kind>` — <what happened>
Artifact: "<the quoted instruction or correction>"
**Pattern:** `<skill>` now has 2 unresolved entries across 2 sessions (<dates>). Run stage 2?
(or: "No pattern — 1 entry, needs a second occurrence.")Stage 2:
## Skill-audit — proposed change: <skill>
**Pattern (n=<n>):** <the recurring complaint>
- <date> · <session/branch> — "<artifact>"
- <date> · <session/branch> — "<artifact>"
**Cause:** <file>:<line> — "<the offending instruction>"
**Proposed diff**
- <before>
+ <after>
**Blast radius:** <what else in the skill depends on this / "nothing — step is self-contained">
Apply?Guardrails
- Introspection is not evidence. No artifact, no entry. This single rule is what keeps the skill from becoming a rationalization engine.
- Stage 1 never edits a skill. It logs. That separation is why stage 1 is safe to run often.
- n≥2, across different sessions. One bad run is an anecdote. Editing a tuned prompt on n=1 overfits — and a bad prompt edit is silent: nothing fails, every future run just gets quietly worse.
- Minimal diffs only. Change the line that caused it. Never rewrite a skill because you were in the file.
- Never write to the memory system. Read it for evidence; write only to the log. Memory costs context on every session, forever.
- Nothing logged is the normal result. If the log grows at every merge, the gate has failed and the skill is manufacturing telemetry. A log that gains a handful of entries a month is healthy.
- Resolve what you act on. Applied or rejected, mark it. A loop that can't converge will re-propose the same edit forever.
- The user's skills are theirs. Propose, cite, ask. Never apply unasked.
Other versions54 projects use a version of this.
Word for word · 1
- AhmedMerza/claude-skills★ 2100% same
Edited · 0
None found.
Wrote their own version · 53
- nyldn/claude-octopus★ 4.3ksame name
- automagik-dev/genie★ 345same name
- namastexlabs/automagik-genie★ 345same name
- Rtur2003/Claude-Code-Promts-Skills★ 53same name
- fimoklei/pm-ai-playbook★ 42same name
- cth9191/skill-audit★ 23same name
- anysiteio/agent-skills★ 20same name
- okjpg/skill-audit★ 15same name
- macintog/codex-spine★ 12same name
- sharbelxyz/skill-audit★ 9same name
43 more not listed
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.
Used alongsideProjects with it also use write-a-skill, humanize and 3 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
simo97Skillwrite-a-skill
Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.
Also in 3 projects that use this
eherrerosjSkillhumanize
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive 'Signs of AI writing' guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases. Triggers on: 'humanize', 'make this sound human', 'remove AI writing', 'de-AI', 'sound more natural', 'less robotic', 'too AI-sounding', or when reviewing text that reads like AI output.
Also in 3 projects that use this
MicrosoftSkillreport
Turn an exploration (threads, findings, charts) into a single Markdown report — note, blog post, executive summary, KPI dashboard, slide brief, or multi-section analytical report, with embedded charts.
Also in 3 projects that use this
Microsoft AzureSkillverify
End-to-end app testing pipeline for browser-based web apps on cloud browsers via Azure Playwright Workspaces: verify the live app, author tests for working flows, heal failing tests, then re-run with video and produce one consolidated report. Three phases (app verification, test authoring, test healing) plus a scoped final sanity run; each phase emits a sub-report. Use when asked to "verify my app", "make sure my app works and has good test coverage", "do a full QA pass", "add tests where I'm missing coverage", "fix failing tests and add new ones", "smoke test before deploy", "QA my deployment", or any combined verify-and-test ask. Requires Azure CLI (`az login`) and a Playwright Workspace resource ID — bootstraps configs on first invocation. Browser-based web apps with Playwright only — not for unit/API tests, native mobile/desktop, load/perf, or full accessibility audits.
Also in 3 projects that use this
MicrosoftSkillhandoff
Compact the current conversation into a handoff document for another agent to pick up.
Also in 3 projects that use this
In this repository53 other files it gives its agents.
- animateSkill
- api-docs-completeSkill
- best-optionSkill
- browseSkill
- changelog-generateSkill
- checkpointSkill
- claimSkill
- commitSkill
- courtSkill
- design-driftSkill
- designSkill
- expandSkill
- explainSkill
- fix-reviewSkill
- grill-meSkill
- handover-listSkill
- handover-resumeSkill
- handover-saveSkill
- i18n-syncSkill
- issueSkill
- leadSkill
- mr-approveSkill
- mr-assignSkill
- mr-createSkill
- mr-guideSkill
- mr-listSkill
- mr-mergeSkill
- mr-review-requestSkill
- mr-reviewSkill
- mr-statusSkill
- persona-walkthroughSkill
- ponytailSkill
- prove-the-testSkill
- qa-crawlSkill
- qa-sweepSkill
- reflectSkill
- reviewSkill
- root-causeSkill
- scoutSkill
- second-opinionSkill
- ship-checkSkill
- skill-compareSkill
- spinoffSkill
- story-siteSkill
- tool-compareSkill
- ui-auditSkill
- ui-polishSkill
- usage-weekSkill
- ux-auditSkill
- validate-planSkill
- video-teardownSkill
- wait-whatSkill
- where-were-weSkill
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.

