Metadata-Version: 2.4
Name: ckills
Version: 0.1.0
Summary: A thin Typer wrapper over `npx skills` that installs skills into Claude Code plugin directories.
Project-URL: Homepage, https://github.com/jesshart/ckills
Project-URL: Source, https://github.com/jesshart/ckills
Project-URL: Issues, https://github.com/jesshart/ckills/issues
Project-URL: Changelog, https://github.com/jesshart/ckills/blob/main/CHANGELOG.md
Author: Jesse Hartman
License: MIT
License-File: LICENSE
Keywords: claude-code,cli,plugin,skills,typer
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Requires-Python: >=3.11
Requires-Dist: typer>=0.12
Description-Content-Type: text/markdown

# ckills

[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)

> *A thin Typer wrapper over `npx skills` that installs skills into Claude Code plugin directories.*

## The problem

[`npx skills`](https://skills.sh) 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`](https://docs.astral.sh/uv/), and `npx` (Node.js).

```bash
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.)
```

```bash
$ 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

```bash
make install   # uv sync + pre-commit install
make test      # pytest
make check     # lint + test
make format    # ruff --fix + ruff format
```

## License

MIT
