After my posts about automations, I got some questions about other examples where I use this feature. One I like to share is a weekly check that validates my current list of installed skills.
Why do we need this?
Skills are easy to add and easy to forget. Over time you collect skills that overlap, skills that point to tools that changed, and skills you no longer use.
I wanted a recurring check that tells me how to cleanup my skills list.
Starting from an existing skill
I didn't start from scratch. The ECC repository contains a skill-stocktake skill for Claude Code. It's a /skill-stocktake slash command that audits the skills in ~/.claude/skills/ and the project-level .claude/skills/, and it has two modes:
- Quick Scan: re-evaluates only the skills that changed since the last run.
- Full Stocktake: a complete review.
Under the hood it uses shell scripts, a results.json cache, and subagents that evaluate the skills in batches of about 20.
That's a good design for Claude Code. As I use GitHub Copilot most of the time at work, I ported and adapted it to work for GitHub Copilot as well: skill-stocktake in wullemsb/skills.
What I changed
- Scope: the port scans
skills/*/SKILL.md,plugins/*/skills/*/SKILL.mdand.github/copilot/skills/*/SKILL.md, plus any paths I provide. It reports which of these locations it found. - No scripts, cache or subagents: the skill is plain instructions. That also means no Quick Scan, so every run is a full pass. I’ll probably re-introduce the scripts and the usage of subagents in a later iteration.
- Usage signals instead of 7d/30d counts: the original knows how often a skill was used. The port looks for evidence in the repository (documentation, examples, tests, settings). If it can't find reliable evidence, it says
Unknowninstead of guessing. - Overlap checks: it compares skills with each other and with
README.md,.github/copilot/,AGENTS.md,CLAUDE.mdandMEMORY.md, if present. - Freshness checks: it verifies technical references with whatever web lookup the current client offers.
What I kept
The four phases stay the same: inventory, quality evaluation, summary table and consolidation. So do the verdicts:
| Verdict | Meaning |
| Keep | Useful and current |
| Improve | Worth keeping, but specific improvements needed |
| Update | Referenced technology is outdated |
| Retire | Low quality, stale, misleading, or cost-asymmetric |
| Merge into [X] | Substantial overlap with another skill; name the merge target |
What I like most is that every verdict needs a self-contained reason. "Unchanged" is not allowed. For a Retire it has to name the defect and what already covers the need. For a Merge it has to name the target and what content should move. That's the difference between a report you can act on and a list of labels.
Remark: the skill never deletes, merges or rewrites skill files unless I explicitly ask for it. That's what makes it safe to run unattended.
Running it every week
I run this skill every week as a GitHub Copilot App automation. If you want the exact steps how to set this up, check out my previous post about Github Copilot App Automations.
Reading the result
You get a summary table with one row per skill:
That's it! The automation does the boring inventory. The decision to retire or merge stays with me.
