A thin Typer wrapper over `npx skills` that installs skills into Claude Code plugin directories.
Project description
ckills
A thin Typer wrapper over
npx skillsthat installs skills into Claude Code plugin directories.
The problem
npx skills installs Claude Code skills to ./.claude/skills/<name>/ at the current working directory. It has no flag to redirect the target.
A Claude Code marketplace repo holds many plugins, each with its own skills/ directory at <plugin>/skills/<name>/. Running npx skills at the repo root drops the skill in the wrong place; running it inside a plugin creates <plugin>/.claude/skills/… which the plugin manifest doesn't see.
The idea
ckills runs npx skills add in a temporary directory, then moves each produced skill into <plugin>/skills/. Plugin directories are auto-discovered (presence of .claude-plugin/plugin.json or an existing skills/ dir). skills-lock.json is discarded — plugin dirs track skills as plain files.
Quick start
Requires Python >=3.11, uv, and npx (Node.js).
uv sync
uv run ckills list-plugins
uv run ckills list-available vercel-labs/agent-skills
uv run ckills install marimo-plugin marimo-team/marimo-pair --skill marimo-pair
Commands
| Command | Purpose |
|---|---|
ckills list-plugins |
Print plugin dirs in the current marketplace repo. |
ckills list-available <source> |
Pass-through of npx skills add <source> -l. |
ckills install <plugin> <source> [--skill NAME ...] [--all] [--force] |
Install one or more skills into <plugin>/skills/. |
All commands accept --root PATH to point at a marketplace repo other than the enclosing git repo.
Example
my-marketplace/
├── marimo-plugin/
│ ├── .claude-plugin/plugin.json
│ └── skills/
├── notebook-plugin/
│ └── skills/
└── (etc.)
$ cd my-marketplace
$ ckills list-plugins
marimo-plugin
notebook-plugin
$ ckills install marimo-plugin marimo-team/marimo-pair --skill marimo-pair
✓ marimo-pair → marimo-plugin/skills/marimo-pair
Development
make install # uv sync + pre-commit install
make test # pytest
make check # lint + test
make format # ruff --fix + ruff format
License
MIT
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 ckills-0.1.0.tar.gz.
File metadata
- Download URL: ckills-0.1.0.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76157b11478991ba3e55f9e607553713d20d11a6f80487e72331ff118d218e17
|
|
| MD5 |
ceff4705564418fec21754bb85b14b0b
|
|
| BLAKE2b-256 |
d95adf6bc20651cec334ae95dac2060cb484ea02ccddf9c4a4e55b0636f8a94f
|
File details
Details for the file ckills-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ckills-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01ce4c1920527f99849af3e69d3593a92d26c19ba388e16ce1b6600ed8b5b6b1
|
|
| MD5 |
94efdd863c88efaebf1444c8998f3ace
|
|
| BLAKE2b-256 |
6fabfff9d6200a7af1101e79473eab6f00965b259e336ba290bf0fa25870c918
|