Skip to main content

agent-skillctl

skillctl manages local agent skills from ~/.agents/ using the Nginx-inspired sites-available / sites-enabled model: keep one canonical copy of each skill and use symlinks to decide which skills agents can see.

~/.agents/
├── skills-available/  # Canonical skill copies
├── skills/            # Symlinks for the enabled skill set (the only enabled view)
├── backups/           # Recoverable backups made before taking over an agent root
├── config.toml        # skillctl adapter configuration
├── registry.toml      # Import sources and content hashes
└── .skill-lock.json   # Preserved npx skills metadata, when present

Why

Agents often use separate directories such as ~/.agents/skills, ~/.claude/skills, and others. Copy-based installation drifts over time, and disabling a skill for one agent does not update the rest. skillctl stores copies in ~/.agents/skills-available, builds an agent-visible symlink view in ~/.agents/skills, and can take over compatible external agent roots with a link to that view. Toggle once, and every linked agent follows the same enabled set.

skillctl does not replace the download workflow of npx skills: v1 only organizes skills already present on the local machine and records their source paths. Existing non-skill files in ~/.agents/, including .skill-lock.json, are left alone. Codex's .system and bundled content are ignored during import and prevent its root from being taken over.

Quick start

uv tool install agent-skillctl
agent-skillctl        # Same command as skillctl
skillctl              # Import, enable, or disable skills in one UI
skillctl check        # Status and diagnostics in one view

When installing from a local checkout, use uv tool install .. Both agent-skillctl and skillctl invoke the same CLI.

All commands initialize the shared layout automatically. On an interactive terminal, running skillctl opens a two-tab manager. An empty library starts on Scan & Import; once skills have been imported, later launches start on Choose. Use 1 and 2 or click the tabs to switch. In redirected or non-interactive environments, the same command prints the check view instead.

The Scan & Import tab lists every configured adapter, its source, available skills, and ignored content. Select Import only to copy valid skills while leaving the source untouched, or Import + takeover to replace a completely safe external root with a link to the shared enabled view. Conflicts open a dialog for skip, rename, or overwrite. The agents adapter can never take itself over.

skillctl import remains as a shortcut that starts on the Scan & Import tab. For automation, skillctl import -y performs the safe import-only mode and skips conflicts. Use skillctl restore claude to undo a takeover.

TUI

Run skillctl. In Choose, Space stages an enable/disable change and Enter or Apply commits it. In Scan & Import, Enter imports from the selected adapter. Press q to exit. The TUI never deletes a canonical skill copy.

Configure adapters

Built-in adapters are defined by the packaged src/skillctl/config.toml. On first initialization, skillctl copies that file to ~/.agents/config.toml; from then on, the user copy is authoritative. Add or edit an adapter there like this:

[[adapters]]
name = "my-agent"
path = "~/.my-agent/skills"

Adapter configuration only describes where skills live. Import-only versus directory takeover is selected interactively at import time. Protected or invalid entries such as .system are ignored for import-only mode and automatically disable takeover for that root.

Development

uv sync --all-groups
uv run pytest
uv run ruff check .
uv run mypy

See DEVELOPMENT.md and CONTRIBUTING.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agent_skillctl-0.1.0.tar.gz (45.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agent_skillctl-0.1.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file agent_skillctl-0.1.0.tar.gz.

File metadata

  • Download URL: agent_skillctl-0.1.0.tar.gz
  • Upload date:
  • Size: 45.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_skillctl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e32c1becd8fe0172ffe858155fb47785ab3bb2fef25936e845dd737dd9834024
MD5 d8980c55700ad6de3e0bb2c6c05962f1
BLAKE2b-256 4c22f5f10cb575d4b602e0a133d6d5d58ee0e8a2c45d576c93bc8aa97e2f5f83

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_skillctl-0.1.0.tar.gz:

Publisher: publish.yml on onewesong/agent-skillctl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_skillctl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: agent_skillctl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_skillctl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa7b38d46dc6d24a48ad27cfce22adab38dcf62c9182280466479f8ea6ea2ceb
MD5 02246ef6d32ae712c0687e08a338f580
BLAKE2b-256 12a85e5317f672bde1f010ef078479f26ec501e8d07f479cb1cdc70d1887d72a

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_skillctl-0.1.0-py3-none-any.whl:

Publisher: publish.yml on onewesong/agent-skillctl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page