| name | skill-lifecycle-manager |
| description | Use when creating, testing, iterating, or managing Claude Code skills. Handles skill scaffolding, git versioning, symlink management, auto-discovery testing, and quality assurance. Triggered by requests to create new skills, improve existing skills, test skill loading, or manage skill infrastructure. |
| maturity | stable |
| version | 1.0.0 |
Skill Lifecycle Manager
Overview
Meta-skill for managing the complete lifecycle of Claude Code skills - from creation to deployment.
When to use:
- Creating a new skill from user workflow
- Iterating on existing skill based on usage
- Testing skill discovery and loading
- Managing git repo and symlinks
- Validating skill infrastructure
Announce: "I'm using the skill-lifecycle-manager to manage skill operations"
Process
Phase 1: Skill Creation
if [[ -d ~/Code/claude-skills ]]; then
cd ~/Code/claude-skills
elif [[ -d ~/.claude/skills ]]; then
cd ~/.claude/skills
else
echo "Creating skills repository"
mkdir -p ~/Code/claude-skills
cd ~/Code/claude-skills
git init
fi
Phase 2: Capture Current Workflow
When user completes a task that should become a skill:
-
Extract pattern from conversation
grep -E "(I'm using|Let me|I'll)" ~/.claude/session-env/*/messages.jsonl | tail -20
-
Generate skill from workflow
./skills-toolkit/generate-skill.sh "$SKILL_NAME" bundled
-
Populate with captured process
- Copy successful commands to scripts/
- Extract templates used to templates/
- Document decision points in SKILL.md
Phase 3: Test Skill Loading
Verify Discovery:
ls -la ~/.claude/skills/ | grep "$SKILL_NAME"
readlink ~/.claude/skills/"$SKILL_NAME"
head -10 "$SKILL_NAME/SKILL.md" | grep -E "^(name|description):"
Test Progressive Disclosure:
import yaml
import os
def test_skill_loading(skill_path):
with open(f"{skill_path}/SKILL.md", 'r') as f:
content = f.read()
frontmatter = content.split('---')[1]
metadata = yaml.safe_load(frontmatter)
print(f"Metadata tokens: ~{len(metadata['description'].split())}")
instructions = content.split('---')[2]
print(f"Instruction tokens: ~{len(instructions.split())}")
for subdir in ['scripts', 'templates', 'reference']:
path = f"{skill_path}/{subdir}"
if os.path.exists(path):
size = sum(os.path.getsize(f"{path}/{f}") for f in os.listdir(path))
print(f"{subdir}/ size: {size} bytes")
Phase 4: Iteration Workflow
Capture improvements during usage:
-
Monitor skill effectiveness
grep "using the $SKILL_NAME skill" ~/.claude/debug/latest | wc -l
-
Update based on failures
- Add error handling for edge cases
- Expand validation checklist
- Improve trigger descriptions
-
Version and commit
sed -i '' "s/version: .*/version: $NEW_VERSION/" SKILL.md
echo "## [$NEW_VERSION] - $(date +%Y-%m-%d)" >> CHANGELOG.md
echo "- $CHANGE_DESCRIPTION" >> CHANGELOG.md
git add -A
git commit -m "feat($SKILL_NAME): $IMPROVEMENT"
Phase 5: Infrastructure Validation
Complete health check:
#!/bin/bash
echo "=== Skill Infrastructure Health Check ==="
echo -n "Git repo exists: "
[[ -d ~/Code/claude-skills/.git ]] && echo "✓" || echo "✗"
echo -n "Symlinks valid: "
for link in ~/.claude/skills/*; do
[[ -L "$link" ]] && [[ -e "$link" ]] || echo "✗ $link broken"
done
echo "✓"
echo -n "Frontmatter valid: "
for skill in ~/Code/claude-skills/*/SKILL.md; do
grep -q "^name:" "$skill" || echo "✗ $skill missing name"
grep -q "^description:" "$skill" || echo "✗ $skill missing description"
done
echo "✓"
echo -n "Skills discoverable: "
~/.claude/skills/ | -l
-n
~/.claude/skills/ | | -d | -l | grep -q && ||
Validation Checklist
Meta Patterns
Pattern 1: Workflow to Skill
User completes task → Capture process → Generate skill → Test → Deploy
Pattern 2: Skill Evolution
Usage → Identify improvement → Update skill → Version → Test → Commit
Pattern 3: Infrastructure Maintenance
Health check → Fix issues → Validate → Document → Share
Integration Points
Works with:
skills-toolkit/generate-skill.sh - For scaffolding
- Git workflows - For versioning
- Claude's skill discovery - For validation
- Session history - For pattern extraction
Common Issues
Symlink broken after git pull:
for skill in ~/Code/claude-skills/*/; do
name=$(basename "$skill")
ln -sf "$skill" ~/.claude/skills/"$name"
done
Skill not discovered:
- Check frontmatter format
- Verify description has keywords
- Ensure SKILL.md exists
- Check file permissions
Progressive disclosure not working:
- Keep SKILL.md under 5k tokens
- Move large content to resources/
- Use references instead of inline code