Observed since 20 Oct, 23:23 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A sites-available/sites-enabled manager for agent skills
One shared skill library for all of your coding agents.
Manage local agent skills with an Nginx-inspired available / enabled workflow.
Quick start · How it works · Usage · Configuration · Development
skillctl keeps one canonical copy of every skill and uses symlinks to control
which skills your agents can see. Import once, enable or disable once, and every
linked agent follows the same active skill set.
Agent tools commonly keep skills in separate directories such as
~/.agents/skills and ~/.claude/skills. Copying the same skill into each
location creates duplicates that drift over time and makes it difficult to know
which version is active.
agent-skillctl gives you:
~/.agents/skills-available.uv for the recommended installation flowuv tool install agent-skillctl
Install from a local checkout instead:
uv tool install .
Both executable names launch the same CLI:
skillctl
# or
agent-skillctl
Run skillctl in an interactive terminal to open the manager. On first launch,
an empty library opens directly on Scan & Import so you can discover existing
skills.
The directory layout follows the same idea as Nginx's
sites-available / sites-enabled model:
~/.agents/
├── skills-available/ # Canonical skill directories
├── skills/ # Symlinks for the currently enabled skills
├── backups/ # Recoverable backups created before takeover
├── config.toml # Adapter configuration
├── registry.toml # Import sources, timestamps, and content hashes
└── .skill-lock.json # Existing npx skills metadata, preserved when present
Existing agent roots Canonical library Enabled view
~/.claude/skills ───┐ ~/.agents/skills-available/ ~/.agents/skills/
~/.other/skills ────┴─▶ ├── skill-a/ ───────▶ ├── skill-a -> ../skills-available/skill-a
import └── skill-b/ ───────▶ └── skill-b -> ../skills-available/skill-b
▲
Compatible agent roots ─────────────── optional takeover ────┘
The canonical directory is never removed when a skill is disabled. Applying a
new enabled set is transactional: skillctl builds a complete staged symlink
view before replacing the previous one.
[!NOTE]
skillctlcomplements rather than replaces download tools such asnpx skills. Version 1 organizes skills already present on your machine and records where they came from.
skillctl
The TUI has two main views:
Switch tabs with 1 and 2 or click them. Press q to exit.
| Command | Description |
|---|---|
skillctl | Open the interactive manager; print diagnostics when non-interactive |
skillctl import | Open the manager directly on Scan & Import |
skillctl import -y | Import valid skills from every adapter without prompts |
skillctl import <adapter> -y | Import valid skills from one adapter without prompts |
skillctl check | Show enabled skills, adapter status, and health diagnostics |
skillctl restore <adapter> | Restore the latest backup for a taken-over adapter |
Use skillctl --help or skillctl <command> --help for the full CLI reference.
| Mode | Behavior |
|---|---|
| Import only | Copy valid skills into the shared library and leave the source root untouched |
| Import + takeover | Import skills, back up the source root, and replace it with a link to the shared enabled view |
Takeover is offered only when the entire source root is safe. Protected content,
invalid directories, broken links, partial imports, or symlinks escaping the
skill directory prevent takeover. The central agents adapter can never take
itself over.
When a skill name already exists with different content, the interactive flow lets you skip it, rename the imported copy, or overwrite the canonical copy after creating a backup.
Built-in adapters are packaged in src/skillctl/config.toml. During first-time
initialization, skillctl copies that configuration to
~/.agents/config.toml; from then on, your local copy is authoritative.
Add an agent by defining its skill root:
[[adapters]]
name = "my-agent"
path = "~/.my-agent/skills"
Adapter configuration only describes where skills live. You choose between Import only and Import + takeover at import time.
~/.agents/ are left untouched..system and bundled content are ignored during import and block
takeover of that root.Clone the repository and install all dependency groups:
git clone https://github.com/onewesong/agent-skillctl.git
cd agent-skillctl
uv sync --all-groups
Run the quality checks:
uv run pytest
uv run ruff check .
uv run mypy
For isolated manual testing, provide a temporary home directory:
uv run skillctl --home /tmp/skillctl-home
See DEVELOPMENT.md for the architecture and verification workflow, and CONTRIBUTING.md before submitting changes.
Issues, documentation improvements, adapters, and tests are welcome. Please include coverage for both success and rollback paths when adding behavior.
Distributed under the MIT License.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.1 | 11 Aug 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 23:23 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:0240bb767ee8ec49febea49296d471cff9c44dca9af438991763d1de22801c7f