| name | janitor-swipe |
| description | Tinder for your Claude Code skills. Reviews a sorted deck of every installed skill and lets you swipe keep / delete / skip on each one. Use when the user wants to bulk-clean their skill collection, triage unused skills, or do interactive skill cleanup. Trigger with '/janitor-swipe'. |
| allowed-tools | Read, Bash(bash:*) |
| argument-hint | [--deck <file>] [--apply <decisions.json>] |
| version | 1.5.1 |
| author | Krzysztof Hendzel <krzysztoff.hendzel@gmail.com> |
| license | MIT |
| compatibility | Designed for Claude Code. The TUI itself requires an interactive terminal (the user runs it with the '!' prefix); requires bash 3.2+ and a terminal of at least 50x22. |
| tags | ["skills","triage","tui","cleanup","context-window"] |
Janitor Swipe — interactive skill triage
A bash TUI that puts every installed skill into a sorted deck and lets the user swipe keep / delete / skip on each card.
Overview
The deck is sorted "most likely waste first" — heavy, never-used skills appear at the top, so most users hit ← delete a few times and quit before reviewing the whole list. The swipe is scope-aware and honest about what it can delete: user-scope skills are actually removed (after confirmation), plugin skills are flagged for review instead.
Prerequisites
- Claude Code with the skills-janitor plugin installed (provides
scripts/swipe.sh and swipe-build-deck.sh)
- bash 3.2+ (the stock macOS bash works; no external dependencies)
- An interactive terminal at least 50 columns x 22 rows — the TUI reads single keypresses
Instructions
Step 1: Tell the user to run it via !
Inside Claude Code, the Bash tool's stdin is non-interactive, so the keypress reader can't work. The user must invoke it via the ! prefix so the command runs in their actual shell:
!bash ~/.claude/skills/skills-janitor/scripts/swipe.sh
When the user asks for /janitor-swipe, tell them to run that command in their terminal. Do NOT try to run it yourself via the Bash tool — it will error with "needs an interactive terminal".
Step 2: Explain the card and controls
Each card shows:
- Skill name + position in deck (e.g.
[3 / 47])
- Context cost split:
X always · Y on trigger (description tokens are permanent; body loads only when the skill fires)
- Usage count and last invoked date
- Scope (
user, project, plugin · <plugin-name>, etc.)
- 3-line truncated description
- Verdict label (e.g. "Unused + heavy on trigger — prime delete candidate")
Controls:
← / h / d — stage for delete
→ / l / k — keep
↓ / j / s / space — skip
u — undo (back up one card, clear its decision)
i — inspect (show full SKILL.md description)