Skill management
Use when importing, removing, listing, or validating agent skills. Covers the full skill lifecycle — install from skills.sh or GitHub, resolve symlinks, track provenance in manifest, remove cleanly with archival, and validate against agentskills.io spec.From its SKILL.md
npx -y skills add rooftop-Owl/skill-factory --skill skill-managementAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
4 things to look at
- skips confirmationTells the agent to proceed without asking first, 1 time: "npx --yes skills add <owner/repo> --yes".
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 7 commands, including `mkdir -p .claude/skill-factory` and 6 more.
- fetches URLsInstructs the agent to fetch 1 URL, including https://github.com/<owner/repo>.
SKILL.md
4.5 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Skill Management
Core procedures for managing imported skills across any agent platform.
Manifest
All imported skills are tracked in .claude/skill-factory/manifest.json:
{
"imports": [
{
"name": "brainstorming",
"source_repo": "obra/superpowers",
"imported_at": "2026-03-24T12:00:00Z",
"path": ".claude/skills/brainstorming/"
}
]
}
Create the manifest if it doesn't exist:
mkdir -p .claude/skill-factory
echo '{"imports":[]}' > .claude/skill-factory/manifest.json
Import Procedure
Prerequisites
Check before importing: command -v npx or command -v git. At least one is required.
Primary Path (npx)
npx --yes skills add <owner/repo> --yes
After npx completes, resolve any symlinks it created:
for link in $(find .claude/skills/ -maxdepth 1 -type l 2>/dev/null); do
target=$(readlink -f "$link")
rm "$link"
cp -r "$target" "$link"
done
Fallback Path (git clone — when npx is unavailable)
git clone --depth=1 https://github.com/<owner/repo> /tmp/skill-import
for skill_dir in /tmp/skill-import/skills/*/; do
name=$(basename "$skill_dir")
if [ -f "$skill_dir/SKILL.md" ]; then
cp -r "$skill_dir" ".claude/skills/$name/"
fi
done
rm -rf /tmp/skill-import
Post-Import
After installing, register each new skill in the manifest:
python3 -c "
import json, sys
from datetime import datetime, timezone
manifest_path = '.claude/skill-factory/manifest.json'
try:
manifest = json.load(open(manifest_path))
except (FileNotFoundError, json.JSONDecodeError):
manifest = {'imports': []}
manifest['imports'].append({
'name': sys.argv[1],
'source_repo': sys.argv[2],
'imported_at': datetime.now(timezone.utc).isoformat(),
'path': f'.claude/skills/{sys.argv[1]}/'
})
json.dump(manifest, open(manifest_path, 'w'), indent=2)
" "<skill-name>" "<owner/repo>"
Same-Session Use
Newly installed skills won't appear in load_skills until the next session. To use immediately, read the skill content and inject it into your prompt:
skill_content = read(".claude/skills/<name>/SKILL.md")
# Include skill_content at the top of your task prompt
Remove Procedure
- Validate the skill name: must match
^[a-z0-9]+(-[a-z0-9]+)*$ - Check manifest: only remove skills tracked in
.claude/skill-factory/manifest.json - Delete the skill directory:
# Symlink-aware removal if [ -L ".claude/skills/<name>" ]; then rm ".claude/skills/<name>" else rm -rf ".claude/skills/<name>/" fi - Archive the manifest entry (add
removed_at, do NOT delete the entry):python3 -c " import json from datetime import datetime, timezone m = json.load(open('.claude/skill-factory/manifest.json')) for e in m['imports']: if e.get('name') == '$NAME' and 'removed_at' not in e: e['removed_at'] = datetime.now(timezone.utc).isoformat() json.dump(m, open('.claude/skill-factory/manifest.json', 'w'), indent=2) "
Validate Procedure
Check a skill against the agentskills.io spec:
- Frontmatter exists: file starts with
---and has a closing--- namefield: required, matches^[a-z0-9]+(-[a-z0-9]+)*$, max 64 charsdescriptionfield: required, max 1024 chars- Name matches directory:
namefield value == parent directory name - No disallowed top-level keys: only
name,description,license,metadataallowed
List Procedure
Read .claude/skill-factory/manifest.json and display:
- Name, source repo, import date, status (active if no
removed_at, removed otherwise) - If manifest doesn't exist: "No imported skills. Use /skills-install to add some."
When to Load This Skill
Load skill-management when:
- User asks to install, import, or add skills from external sources
- User asks to remove, uninstall, or delete an imported skill
- User asks to list, show, or check imported skills
- User asks to validate a skill file
- Any command references the import manifest
Not needed when:
- Creating a new skill from scratch (use
skill-development) - Searching for skills to install (use
/skills-searchcommand) - Understanding 3-tier acquisition decision flow (use
external-skill-acquisition)
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.