my-skills
Skill1 starsChanged 4 months agoMITView on GitHub
Visualize, query, and rank ALL of the user's Claude Code skills from a persistent on-disk registry — global (~/.claude/skills), per-project (.claude/skills), plugin-provided, and harness-native. For every skill it knows WHERE it came from — which Claude Code session created it (session id + title), WHICH MODEL wrote it (and effort when available), or that it was imported/installed — plus when it was added, its category, aliases, and user/LLM-assigned ratings. Renders sortable, filterable numbered tables; highlights newly created skills; answers questions about any skill; and ranks skills by ANY runtime criterion (powerfulness, usefulness, industry impact if published, …), persisting the scores. Use when the user types /my-skills or /msk, or asks "list/show my skills", "what skills do I have", "which skills did fable/opus create", "show me my newest skills", "where did skill X come from / which chat made it", "rank my skills by usefulness", "sort skills by category/model/date", or any question about their skill collection. Also ships a full CLI (`msk`), an interactive terminal UI (`msk tui`), and a local desktop app (`msk app`) — use those subcommands when the user asks to "open the skills app / TUI / dashboard" or wants to browse skills visually.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- BerkaySevinc/agent-toolkittheir own version, first seen Nov 1, 2026
- yyy805/my-skillstheir own version, first seen Jul 10, 2026
- kuntal-r-d/my-skillstheir own version, first seen Jun 30, 2026
- 2eeYuan/my-skillstheir own version, first seen Jun 23, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- kuntal-r-d/my-skills★ 3same name
- BerkaySevinc/agent-toolkit★ 1same name
- yyy805/my-skills★ 1same name
- 2eeYuan/my-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.
The file
Files
my-skills — your skill collection, visualized
A meta-skill: one persistent registry of every skill you have, where each came from, who (which model, which chat) made it, and how they rank.
Engine: scripts/myskills.py (stdlib-only, fast).
Persistent state: data/registry.json (atomic writes) + data/TABLE.md
(auto-rendered markdown table, humans can open it directly).
Alias: /msk.
Three surfaces, one engine
The registry has three doors — all views over the SAME engine and registry (one source of truth; every write goes through the same atomic save):
| surface | command | what it is |
| CLI | msk (global, via msk install) | every subcommand below, scriptable |
| TUI | msk tui | interactive curses table: j/k, / search, s sort, ⏎ detail overlay, y background sync, r rate, t category, e edit SKILL.md, mouse; ? = full keys |
| desktop app | msk app | local web app (127.0.0.1-only, stdlib server) in a chromeless Chrome window: dashboard tiles + charts, live-refreshing sortable table, detail drawer with rating/category/notes editors, sync button, JSON export, dark/light. msk web runs the server in the foreground; the daemonized server self-terminates when idle (open windows keep it alive via heartbeat) |
msk stats renders the aggregate dashboard (category/model/scope/origin bars,
rating averages) straight in the terminal.
Standard flow (every invocation)
- Always sync first — incremental and cheap after the first run:
It discovers new/changed/removed skills and attributes ONLY new ones (origin session, model). It prints what's new — surface that to the user.python3 ~/.claude/skills/my-skills/scripts/myskills.py sync - Then render what was asked (default = full table, most recent first):
✨-marked green rows are NEW (added <48h ago or discovered this sync). Show the table output verbatim in a code block so alignment survives.python3 ~/.claude/skills/my-skills/scripts/myskills.py list
Command cookbook
| ask | command | |||
| full table, newest first | list | |||
| only new skills | list --new | |||
| sort by name / scope / model / category | `list --sort name | scope | model | category` |
| skills fable created | list --model fable (matches id or display name; opus/sonnet/haiku/fable/mythos all work) | |||
| only skills I created in chats | list --origin created | |||
| only imported ones (no origin chat found) | list --origin imported | |||
| one project's skills | list --scope proj:Creations | |||
| search by keyword | list --grep voice | |||
| include plugin + native skills | list --all | |||
| machine-readable | list --json (add any filters) | |||
| everything about one skill | info <name> | |||
| every session that touched a skill | sessions <name> (★ = creator) | |||
| set category / tags / notes | set <name> category orchestration (user-set categories are locked) | |||
| persist a rating | rate <name> usefulness=9 --by <model-id> | |||
| delete a rating | rate <name> usefulness=- | |||
| sort by a rating | list --sort rating:usefulness | |||
| retry origin-attribution for "imported" | sync --deep | |||
| re-guess auto categories (keeps user-set) | sync --recat | |||
| raw registry dump | json | |||
| terminal dashboard (bars + rating averages) | stats | |||
| interactive terminal UI | tui | |||
| desktop app window (starts server if needed) | app (app --browser for a plain tab) | |||
| web server in the foreground | web (web --open also opens a tab) | |||
install/refresh the global msk command | install (→ ~/.local/bin/msk) |
Intelligent behaviors (you, the agent, do these)
- Natural-language filters/sorts — translate to flags above. If no flag
fits, pull
list --jsonand filter/sort/reason yourself, then present a numbered table matching the CLI table's columns. - Ranking by arbitrary criteria ("rank by powerfulness / usefulness /
impact on industry if published / creativity / …"): pull
list --json, judge each skill from its description (Read its SKILL.md when the description is thin), score 1–10 with a one-line justification per skill, then PERSIST every score viarate <name> <criterion>=<score> --by <your exact model id>and render with--sort rating:<criterion>. Ratings are durable — future sessions build on them instead of re-judging. - Questions about any skill ("what does X do", "is X safe", "which is
better for Y") —
info X, and Read its SKILL.md for depth. Never guess. - "Which chats/sessions made my skills?" — origin data is already in the
table; for one skill use
sessions <name>. The origin transcript path ininfolets you open the actual conversation for archaeology. - Native/built-in skills — the engine can't see harness-native skills
(code-review, loop, schedule, …). YOU can: they're listed in your system
prompt. When the user wants them included, record what you actually see:
add-native "code-review:Review the current diff…" "loop:Run a prompt on an interval" …thenlist --all. Ground truth from the harness, never a hardcoded list. - Categorize better — sync auto-guesses categories by keyword; when the
user asks for smarter grouping, re-bucket with
set <name> category <cat>so it sticks.
Reading the table
- scope:
global(~/.claude/skills) ·proj:<dir>(project-local) ·plugin:<name>·native(harness built-in, only with--all). - origin:
created@<session-title-or-id>— a Claude Code chat verifiably wrote it (earliest Write/Edit event in any transcript;evidence: shellmeans it was created via shell commands, slightly weaker).imported— it exists on disk but no transcript created it (copied in, git-cloned, or the origin chat was deleted; no session id to show, as expected). - model / effort: the model that made the creating write, read from that
very transcript event — never self-reported. Effort is best-effort from the
session's cship snapshot (
~/.cship/live/<sid>.json) and may be absent: Claude Code transcripts do not record effort. - aliases are folded into their canonical skill (
ep (+epp,epq)style), symlink-resolved — one source of truth, no duplicate rows.
Guarantees & safety
- Transcripts and skill dirs are read read-only; the engine writes ONLY
under
data/(atomic temp+rename, no torn state). syncis incremental: attribution (the expensive grep over all transcripts) runs once per skill, single pass per candidate file, cached forever in the registry. Re-runs cost ~a second.- Origins are evidence-backed: session id, timestamp, model, transcript path all come from the transcript itself and are kept for verification.
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.

