Local skill manager for AI agent skills with reproducible per-project installs
Project description
CocoaSkill
csk is a local skill manager for AI agent skills. It installs reusable skill
packages from local git repositories into your project repositories with
reproducible, content-hashed installs and multi-agent adapter support
(Claude Code, Codex CLI, Cursor, Gemini).
The MVP design contract is frozen in docs/mvp-design.md.
Why
Agent skills are useful, but managing them across many projects by hand falls apart fast: drift between machines, no version pinning, README files and tests leaking into the agent context, no cleanup when a skill is removed.
CocoaSkill makes per-project skill installation declarative and reproducible:
- One
Skillfile.jsonper project, committed to version control. - Pinned git refs (tag / branch / revision) and content-hashed installs.
- A whitelist-based stripped layout — README, tests, build files, and other non-skill content stay out of the agent's context.
- One canonical location (
.agents/skills/) with per-agent adapter symlinks or copies into.claude/skills/,.codex/skills/,.cursor/rules/,.gemini/skills/. - Skill-provided command shims exposed via a project-local
.agents/bin/directory onPATH.
Install
Pick whichever fits your machine. pipx is the recommended path on every
platform.
pipx (recommended)
pipx install cocoaskills
uv tool
uv tool install cocoaskills
Homebrew (macOS, Linux)
brew tap ivanopcode/csk
brew install cocoaskills
mise
mise use -g pipx:cocoaskills@latest
Convenience install script
curl -fsSL https://cocoaskills.org/install.sh | sh
The script detects Python, prefers pipx or uv tool, and falls back to
pip install --user. Read it before piping if you do not trust the network.
Plain pip
python -m pip install --user cocoaskills
Quick start
-
Pick or create a directory of cloned skill git repositories. Example:
~/agents/skills/. -
Bootstrap the global config:
csk bootstrapThis writes
~/.cocoaskills/config.jsonwith yourskills_root, preferred locale, and default agents. -
Initialize CocoaSkill in each project:
cd /path/to/project csk init
This creates
Skillfile.jsonand adds the CocoaSkill generated paths to.gitignore. -
Declare which skills you want:
{ "schema_version": 1, "project": { "alias": "partners-ios" }, "agents": ["claude_code", "codex_cli", "cursor"], "locale": "en", "skills": [ { "name": "skill-youtrack", "tag": "v1.0.0" }, { "name": "skill-grafana", "branch": "main" } ] }
-
Run
csk installinside the checkout.
For multi-project sync, explicitly register projects with csk project add and
run csk install --all or csk upgrade --all.
CLI
| Command | Behavior |
|---|---|
csk bootstrap |
Interactively create machine-level global config. |
csk init [path] |
Create project Skillfile.json and the managed .gitignore block. |
csk install [target] |
Apply Skillfile.json using current local git refs. Does not fetch. No target means current project; target may be an alias, ., or a project path. |
csk install --all |
Install every project explicitly registered in global config. |
csk update |
Fetch all git repositories under skills_root. Does not modify projects. |
csk upgrade [target] |
Run update, then install. |
csk upgrade --all |
Run update, then install every registered project. |
csk status [target] |
Show manifest vs installed state. No target means current project. |
csk status --all |
Show status for every registered project. |
csk list [--paths] |
List configured projects and declared skills. |
csk project add <alias> <path> |
Register a project for --all and create a manifest if missing. |
csk project resolve [target] |
Show resolved project alias, checkout alias, Skillfile, and install paths. |
csk config show |
Print resolved config path and contents. |
csk shell-init [zsh|bash|powershell] |
Print shell hook code for auto-PATH activation. |
csk --version |
Print version and exit. |
Flags shared by install and upgrade:
--dry-run— plan work without modifying files.--verbose— print detailed progress.--fix-gitignore— deprecated escape hatch; prefercsk init.--strict-tags— fail if a tag was locally moved to another commit.
Exit codes: 0 success, 1 one or more projects or skills failed, 2
configuration error, 3 lock contention.
Development
Requires Python 3.11+.
git clone https://github.com/ivanopcode/cocoaskills.git
cd cocoaskills
python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
pytest
Build artifacts locally:
python -m build
twine check dist/*
The runtime package is stdlib-only. Versioning is driven by setuptools-scm
from git tags; the generated src/csk/_version.py is not committed.
Documentation
- MVP design specification — frozen contract for v0.1 covering manifests, refs, install pipeline, locking, adapters, security boundary, and test surface.
- CHANGELOG — release history in Keep a Changelog format.
License
Apache-2.0. See LICENSE.
Project details
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 cocoaskills-0.3.0.tar.gz.
File metadata
- Download URL: cocoaskills-0.3.0.tar.gz
- Upload date:
- Size: 66.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd5e62627b00af2c904cf2eace72200e1e3645cce23695c1bf20f672eae5fd85
|
|
| MD5 |
1ac3a67af5e8adfc004f6ca61e2efeae
|
|
| BLAKE2b-256 |
1bc8d74685f3446e0d0e90390647eb440c30a14bf3051c02d2a478b532dd0d00
|
Provenance
The following attestation bundles were made for cocoaskills-0.3.0.tar.gz:
Publisher:
release.yml on ivanopcode/cocoaskills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cocoaskills-0.3.0.tar.gz -
Subject digest:
fd5e62627b00af2c904cf2eace72200e1e3645cce23695c1bf20f672eae5fd85 - Sigstore transparency entry: 1567356292
- Sigstore integration time:
-
Permalink:
ivanopcode/cocoaskills@0d6b63eaf2e0349a2a18e8539bf65f8994ec870c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/ivanopcode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d6b63eaf2e0349a2a18e8539bf65f8994ec870c -
Trigger Event:
push
-
Statement type:
File details
Details for the file cocoaskills-0.3.0-py3-none-any.whl.
File metadata
- Download URL: cocoaskills-0.3.0-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63eba2d8d69a19646abb362dd3ead44217c595733ddc0c9227650d1eb46055b9
|
|
| MD5 |
5ead314ab393aad3efc2867ad83d5499
|
|
| BLAKE2b-256 |
c94110320e93730a0dd78a5aa2e205640912a5e039b4613d1f2ad80e88d1c482
|
Provenance
The following attestation bundles were made for cocoaskills-0.3.0-py3-none-any.whl:
Publisher:
release.yml on ivanopcode/cocoaskills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cocoaskills-0.3.0-py3-none-any.whl -
Subject digest:
63eba2d8d69a19646abb362dd3ead44217c595733ddc0c9227650d1eb46055b9 - Sigstore transparency entry: 1567356346
- Sigstore integration time:
-
Permalink:
ivanopcode/cocoaskills@0d6b63eaf2e0349a2a18e8539bf65f8994ec870c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/ivanopcode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d6b63eaf2e0349a2a18e8539bf65f8994ec870c -
Trigger Event:
push
-
Statement type: