Project-scoped declarative skill manager for agent skills
Project description
Skill Manager
Project-scoped declarative skill manager for coding agents that load skills from ./.agents/skills/ (and optionally ~/.agents/skills/).
One source, many projects, slim globals. Each skill lives once in a cached Source. Projects get symlinks (Links), not copies. Keep agent-global skills minimal; declare per project what you actually need.
Compatible with any agent that discovers skill directories containing SKILL.md under those paths (pi is one example).
Today skill-manager only writes project Links under ./.agents/skills/. Managing ~/.agents/skills/ is on the roadmap.
Features
- Declare and sync project skills — write
.skill-manager.json, runskill-manager sync - Inspect source and link status —
skill-manager list(linked/external/broken/unlinked) - Enable / disable — interactive menus, or non-interactive
enable <repo> <name>/disable <name> - Manage source cache —
skill-manager source list|add|remove|update|available-skills - Scripting / CI — root
--jsonon every command (skill-manager --json <cmd> ...)
Install
uv tool install cnife-skill-manager
# or: pipx install cnife-skill-manager
# from source (dev):
uv tool install .
# or run in-place:
uv run skill-manager
Configure
Create ./.skill-manager.json in your project:
{
"skills": [
{"name": "read", "repo": "tw93/Waza", "path": "skills/read"},
{"name": "kami", "repo": "tw93/Kami", "path": "."}
]
}
name: symlink name under./.agents/skills/(single path component; duplicates error)repo: GitHubowner/repo(both parts must be safe slug components)path: skill directory inside the repo (.for repo-root skills; must containSKILL.md; path traversal is rejected)
Usage
skill-manager sync # clone/fetch sources, link declared skills
skill-manager list # show sources and skill status
skill-manager enable # interactive: pick cached repo + skill, then sync
skill-manager enable <repo> <name> # non-interactive enable (path derived from cache)
skill-manager enable --all ... # include hidden/internal skills when resolving
skill-manager disable # interactive: pick an enabled skill
skill-manager disable <name> # non-interactive disable
skill-manager --json sync # single JSON object on stdout (all commands)
Source repository management
skill-manager source list # list registered sources and HEAD status
skill-manager source add <owner/repo> # add and clone a new source
skill-manager source remove <repo> # remove source (cache + config)
skill-manager source update [repo] # update one or all sources
skill-manager source available-skills [repo] # list skills in the cache (no project config)
skill-manager source available-skills --all # include hidden/internal skills
sync is idempotent and never overwrites an existing non-tool symlink (it skips with a notice). Sources are derived from the declared skills' repo fields.
Cold start (new source, no hand-edited JSON)
skill-manager source add <owner/repo> # clone + register globally
skill-manager source available-skills <owner/repo> # optional: discover skill names
skill-manager enable <owner/repo> <name> # declare in project + sync
enable does not clone; introduce sources with source add (or declare in .skill-manager.json and sync).
Source skill discovery
source available-skills and enable share one scanner over the cached Source checkout:
- Default: skip noise directories (
node_modules,dist,build,__pycache__), directories whose names start with.(e.g..git,.archive,.curated), and skills whose frontmatter hasmetadata.internal: true. --all: include those hidden/internal skills. Skill-root truncation still applies: a directory that containsSKILL.mdis one skill and is not walked further.- Declared skill
pathvalues (including under.archive/) are unaffected —sync/liststill honor project config as written.
Layouts like skills/.curated/... therefore need --all to appear in discovery (stricter default than some installers that whitelist curated paths).
With --json, success is {"ok": true, "data": ...} and failure is
{"ok": false, "error": {"code", "message"}} (exit 0 / 1 / 2 for success /
business error / usage error). Place --json before the subcommand:
skill-manager --json list, not skill-manager list --json.
Paths (XDG)
| What | Path |
|---|---|
| Global config | $XDG_CONFIG_HOME/skill-manager/config.json (default ~/.config/skill-manager/config.json) |
| Source cache | $XDG_CACHE_HOME/skill-manager/repos/ (default ~/.cache/skill-manager/repos/) |
| Project skills | ./.agents/skills/ |
Roadmap
The What — actionable tickets — lives in the issue tracker. This section is the Why: the shape skill-manager is growing toward.
Dual-user design
skill-manager has two users, and every surface must serve both:
- Humans — an interactive CLI, and a project config (
.skill-manager.json) simple enough to read and edit by hand. - Agents — batch-friendly flags and machine-readable output for scripts, CI, and AFK coding agents.
Any source
A Source shouldn't be locked to owner/repo on GitHub. Arbitrary Git URLs and local directories should qualify too. Pinning a Source to a specific commit or tag for reproducibility is a lower-priority future direction.
One model, project and global
Project Links and user-global Links (~/.agents/skills/) should share one declaration-and-sync model: keep globals slim, declare per project what you actually need.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cnife_skill_manager-0.3.0.tar.gz.
File metadata
- Download URL: cnife_skill_manager-0.3.0.tar.gz
- Upload date:
- Size: 50.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e71bd53cddc175fb63bce4405661cb183e8ace4b086c3c19cd74368a349a818
|
|
| MD5 |
aaf7aa97f6ac7df5377e7ce6aac21ed5
|
|
| BLAKE2b-256 |
e84922c88c4b14c7a58232db1290225ab3255cd1603941a9c7c26f3c06d64598
|
Provenance
The following attestation bundles were made for cnife_skill_manager-0.3.0.tar.gz:
Publisher:
publish.yml on CNife/skill-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnife_skill_manager-0.3.0.tar.gz -
Subject digest:
9e71bd53cddc175fb63bce4405661cb183e8ace4b086c3c19cd74368a349a818 - Sigstore transparency entry: 2226268119
- Sigstore integration time:
-
Permalink:
CNife/skill-manager@f42a3b835ae58e59967fe9d95c4f4de32683f7d5 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/CNife
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f42a3b835ae58e59967fe9d95c4f4de32683f7d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cnife_skill_manager-0.3.0-py3-none-any.whl.
File metadata
- Download URL: cnife_skill_manager-0.3.0-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0d783e47a552f34adfa25af8ac222ce54672c01f442a7e57e5546a6fa65312f
|
|
| MD5 |
7d6da8bfbb6b8f8e1f7940af23c85942
|
|
| BLAKE2b-256 |
2cb89a417d719d975ce9d814d6121efc2c619ccba21e87d520d970a338d4bd6f
|
Provenance
The following attestation bundles were made for cnife_skill_manager-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on CNife/skill-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnife_skill_manager-0.3.0-py3-none-any.whl -
Subject digest:
b0d783e47a552f34adfa25af8ac222ce54672c01f442a7e57e5546a6fa65312f - Sigstore transparency entry: 2226268370
- Sigstore integration time:
-
Permalink:
CNife/skill-manager@f42a3b835ae58e59967fe9d95c4f4de32683f7d5 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/CNife
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f42a3b835ae58e59967fe9d95c4f4de32683f7d5 -
Trigger Event:
push
-
Statement type: