skillctl
github.com/zongwu233/skillctl- Category
- Developer Tools
- Rank
- No. 3727Tools index
Previous survey · No. 3455 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Agent Building
- Interfaces
- CLI
- GitHub
- 1 stars
- Date
About
A local CLI that manages SKILL.md-based agent skills across runtimes like Claude Code, Codex, OpenCode, and others, tracking token/context budgets, resolving conflicts, and gating installs before skills are copied onto a machine. It wraps NVIDIA SkillSpector for scanning and lets users apply named profiles to enable/disable skills per project without touching skill files directly.
What it does
A small command-line housekeeper for the instruction folders that coding agents read at startup. It walks every folder each agent looks in on your laptop, estimates how much prompt space their descriptions would occupy, points out pairs whose wording overlaps, and refuses to place a new folder unless an outside safety scanner approves it. Turning a folder on or off happens through each agent's own settings file, never by editing the folder.
Why it's ranked here
Few tools treat agent instructions as something to inventory and audit, and this one does it with almost nothing underneath: pure Python, a single runtime dependency on PyYAML, no network calls, MIT licensed. The behaviour is spelled out rather than implied. Exit codes separate a budget breach from a scanner failure, cleanup runs as a dry run unless asked, and the docs list which agents it can actually switch. The budget rules have unit tests. It is early software with a narrow scope, and it says so.
What's good
Cleanup is conservative by construction: it only ever removes dead links, duplicate links and empty folders, never a real directory, and skips the system scope entirely. Duplicate folders reached through links are collapsed by file identity, so the same folder installed twice is not counted twice. The overlap check strips boilerplate words like "use when" and folds word endings, so routine phrasing does not make unrelated entries look alike. The default budget is concrete: 20 entries and 2,000 description tokens, with per-entry warnings at 5,000 words or 500 lines.
Tradeoffs
Token counts are a rough estimate, characters divided by four, with no real tokenizer. Only Claude Code and Codex have a working on/off switch; the other agents are reported and left alone. The install gate depends on an external scanner being on your path, and without it installs stop with an error. Applying a profile to Codex rewrites every existing skill block in its config, so disables set by an earlier profile are replaced rather than merged. The documented install route is a git clone plus uv, not a package registry.
How to use it well
Fits a developer who runs several coding agents and has accumulated more instruction folders than they can track. Run the strict budget check in CI or a pre-commit hook, since it exits non-zero on a breach. Keep one profile per project rather than layering several, given how the Codex settings are rewritten. Install the scanner first if you want the gate to mean anything. It does not author, share or version instructions; it only accounts for and switches what is already on disk.
Technical notes+
Entry point is skillctl.cli:main per pyproject.toml, an argparse tree with ls, why, budget, use, scan, add and prune. src/skillctl/discover.py lists twelve roots across claude, codex (including ~/.agents and .system), opencode, pi (recursive to depth 3) and omp, and dedupes by (st_dev, st_ino). src/skillctl/measure.py estimates tokens as len(text) // 4. src/skillctl/conflict.py flags near-duplicates at NEAR_DUP_THRESHOLD = 0.45 using max(Jaccard, containment) plus CJK bigrams. src/skillctl/gate.py shells out to skillspector scan --no-llm --format json with a 600 second timeout. src/skillctl/profile.py set_codex_config drops all [[skills.config]] blocks before writing new ones. src/skillctl/prune.py only unlinks symlinks. tests/test_budget.py covers the budget rules.
Observed
- License
- MIT
- Language
- Python, requires 3.11 or newer
- Runtime dependencies
- One: PyYAML
- Interface
- Command-line tool with seven subcommands; JSON output on ls, why, budget and prune
- Install surface
- Git clone, then uv sync or uv tool install
- Network use
- None in normal operation; README states no network calls
- External dependency for install gate
- NVIDIA SkillSpector binary on PATH
- Native on/off switching
- Claude Code and Codex only
- Tests
- pytest suite in a tests directory, run against an isolated temporary home
Read from README.md, pyproject.toml, LICENSE, src/skillctl/cli.py, src/skillctl/budget.py, src/skillctl/conflict.py, src/skillctl/gate.py, src/skillctl/measure.py, src/skillctl/discover.py, src/skillctl/prune.py, src/skillctl/profile.py, tests/test_budget.py.
What it can do
List SKILL.md-based agent skills across multiple agent runtimes
Agent runtime skill directories → List of skills
Gate skill installs before files are copied onto a machine
SKILL.md skill package → Install approval/block decision
Track token/context budgets for skills
SKILL.md skill files → Budget report
Resolve conflicts between skills
Multiple SKILL.md skills → Conflict resolution
Apply named profiles to enable/disable skills per project
Profile name → Enabled/disabled skill set
Prune installed skills
Installed skill set → Reduced skill set
Scan skills using wrapped NVIDIA SkillSpector
SKILL.md skill files → Scan results
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.