# Skill Inventory Management

> Use when auditing, pruning, or consolidating skills.

- Skill: `loopyluci/skill-inventory-management` (Agent Skill)
- Install (CLI): `npx skillmds@latest add loopyluci/skill-inventory-management`
- Raw SKILL.md: https://api.skillmd.com/api/skills/loopyluci/skill-inventory-management/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: LoopyLuci (https://skillmd.com/u/loopyluci)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/loopyluci/skill-inventory-management

---


# Skill Inventory Management

Systematic process for auditing, pruning, consolidating, and maintaining the skill inventory over time. Skills accumulate sediment; this skill keeps the catalog clean, discoverable, and performant.

## When to Use

- Before creating a new skill — check if consolidation or pruning could free a slot
- On a quarterly audit cycle — inventory every skill, purge the stale
- When `skills_list()` returns more than ~80 skills — loading overhead grows linearly
- When a user says "I have too many skills" or "clean up my skills"
- After merging two skills — delete the originals with `absorbed_into`
- When you discover a skill is never loaded in practice

## Audit Process

### Phase 1: Full Inventory

```bash
skills_list()    # list all skills with categories
```

Group by category and assess each skill against:

| Criterion | Keep? | Action |
|-----------|-------|--------|
| Loaded in the last 30 days | ✅ Keep | — |
| Referenced by another skill's `related_skills` | ✅ Keep | — |
| Used by a cron job | ✅ Keep | — |
| Never loaded, no references | ❌ Prune candidate | Check with user first |
| Overlaps >70% with another skill | 🔀 Merge candidate | Consolidate, then delete originals |
| Description truncated poorly | 🔧 Patch | Rewrite first 57 chars |
| Stale commands/APIs | 🔧 Patch | Update content |

### Phase 2: Usage Analysis

Check `.usage.json` for load frequency:

```bash
cat $LOCALAPPDATA/hermes/skills/.usage.json | python -m json.tool
```

Look for skills with `"loads": 0` or very low counts. Cross-reference with `related_skills` chains: a skill that's referenced but never directly loaded still provides value as a cross-reference target.

### Phase 3: Duplicate Detection

Search for overlapping descriptions. Signal words for overlap:
- Same category + similar noun ("docker", "wsl2", "windows")
- Description starts with same trigger phrase
- Body overlaps >50% on inspection

### Phase 4: Pruning Workflow

For each stale skill:

1. **Check references**: Do any other skills list it in `related_skills`?
   - If yes, patch those skills first to remove the reference
   - Use: `skill_manage(action='patch', name='other-skill', old_string='- stale-skill', new_string='')`

2. **Check cron jobs**: Does any cron job reference it?
   - `cronjob(action='list')` — check attached skills
   - If yes, update the cron job to remove the reference

3. **Delete**:
   - If merging into another: `absorbed_into='umbrella-skill'`
   - If truly stale: `absorbed_into=''` (prune with no forwarding)

### Phase 5: Consolidation (Merge)

When two skills overlap heavily:

1. Identify the stronger/broader skill as the umbrella
2. Create or patch the umbrella to absorb the other's unique content
3. Delete the narrower skill with `absorbed_into='umbrella-skill'`
4. Update any cron jobs or related_skills that reference the deleted name

## Consolidation Patterns

### Absorption (1→1)

```bash
# Skill A absorbs Skill B's unique content, then B is deleted
skill_manage(action='patch', name='umbrella-skill',
    old_string='## Common Pitfalls',
    new_string='## Common Pitfalls\n\n### From merged skill (old-skill-name)\n- pitfall content here...')
skill_manage(action='delete', name='old-skill-name',
    absorbed_into='umbrella-skill')
```

### Umbrella Creation (N→1)

```bash
# Create a new broader skill, delete N narrow ones
skill_manage(action='create', name='broad-skill', content='...', category='...')
skill_manage(action='delete', name='narrow-skill-a', absorbed_into='broad-skill')
skill_manage(action='delete', name='narrow-skill-b', absorbed_into='broad-skill')
```

## Maintenance Schedule

| Frequency | Action |
|-----------|--------|
| Weekly | Check for skills created but never loaded |
| Monthly | Review skills_list() for naming inconsistencies |
| Quarterly | Full audit: prune, merge, patch stale content |
| Per-version | After major Hermes updates, verify all skills still work |

## Common Pitfalls

1. **Deleting a referenced skill** — always check `related_skills` and cron jobs first
2. **Accidental hard-delete** — use `absorbed_into=''` to signal intent; the curator may archive rather than delete
3. **Over-pruning** — a skill loaded once every 3 months for a critical task is still valuable
4. **Patching descriptions for truncation** — the system prompt index truncates at 57 chars; the full description is visible via `skill_view()` and `skills_list()`
5. **Merging without removing old references** — after merging, patch all skills that referenced the old name

## Verification Checklist

- [ ] Full inventory taken via `skills_list()`
- [ ] Usage data reviewed from `.usage.json`
- [ ] Duplicates identified and resolved
- [ ] Stale/pruned skills deleted with correct `absorbed_into`
- [ ] All `related_skills` references updated after deletions
- [ ] Cron jobs updated after deletions
- [ ] Final inventory count documented

## See Also

- skill-development-workflow — building and testing skills
- skill-discovery — discovering existing skills
- skill-testing-automation — automated skill validation
- meta-skill-patterns — design patterns for meta-skills

