fix(skills-perso): exclude framework/gstack skills from listing

Use git history heuristic: skills added in bulk commits (5+ SKILL.md
files at once) are framework installs, not user-created. Only show
skills added in small commits (1-3 files).

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
bastien 2026-04-15 20:32:35 +02:00
parent d9eebd27c0
commit 2d53b8f70c

View File

@ -1,9 +1,9 @@
---
name: skills-perso
description: |
List all personal skills installed in ~/.claude/skills/.
Shows only local skills (excludes symlinked/external skills like gstack or emil-design-eng).
For each skill, displays its name and description from SKILL.md frontmatter.
List personal (user-created) skills from ~/.claude/skills/.
Excludes framework/gstack skills and symlinked/external skills.
Shows only skills the user wrote themselves.
Trigger: "skills-perso", "mes skills", "list my skills", "quels skills", "skills perso".
argument-hint: ""
disable-model-invocation: false
@ -15,15 +15,38 @@ allowed-tools:
# skills-perso
List all personal skills from `~/.claude/skills/`, excluding symlinked/external directories.
List only **user-created** skills from `~/.claude/skills/`, excluding framework
(gstack) skills, symlinked directories, and external skills.
## How to detect user-created skills
Use git history to identify skills added in bulk commits (framework installs).
A skill is considered **framework** if its SKILL.md was first added in a commit
that also added 5+ other SKILL.md files. User-created skills are added in small
commits (1-3 SKILL.md files at a time).
Run this command to get the list of personal skills:
```bash
for dir in ~/.claude/skills/*/; do
[ -L "${dir%/}" ] && continue
skill=$(basename "${dir%/}")
skill_file="${dir}SKILL.md"
[ -f "$skill_file" ] || continue
commit=$(git -C ~/Documents/claude log --diff-filter=A --format='%H' -1 -- "skills/${skill}/SKILL.md" 2>/dev/null)
[ -z "$commit" ] && continue
count=$(git -C ~/Documents/claude diff-tree --no-commit-id --name-only -r "$commit" -- 'skills/*/SKILL.md' 2>/dev/null | wc -l)
[ "$count" -le 3 ] && echo "$skill"
done
```
## Steps
1. List all directories in `~/.claude/skills/` that are NOT symlinks (use `find ~/.claude/skills -maxdepth 1 -mindepth 1 -type d -not -type l | sort`).
2. For each directory found, read the first 15 lines of `SKILL.md` if it exists.
1. Run the detection command above to get the list of personal skill names.
2. For each personal skill, read the first 15 lines of its `SKILL.md`.
3. Extract `name` and `description` from the YAML frontmatter.
4. Display a clean table with two columns: **Skill** and **Description** (first line of description only, trimmed).
5. At the end, show the total count.
5. At the end, show the total count of personal skills (and mention how many framework skills were excluded).
## Output format
@ -35,8 +58,7 @@ List all personal skills from `~/.claude/skills/`, excluding symlinked/external
| feat | Small feature implementation (1-5 files)... |
| ... | ... |
**Total: N skills**
**Total: N personal skills** (M framework skills excluded)
```
Keep descriptions to one line (~80 chars max, truncate with "..." if needed).
Do NOT include symlinked directories (they point to external/shared skills).