by pivoshenko
📼 A declarative AI agent environment manager, written in Rust
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
# Add to your Claude Code skills
git clone https://github.com/pivoshenko/kasettoNo comments yet. Be the first to share your thoughts!
About the name
Name comes from the Japanese word カセット (kasetto) - cassette. Think of Skills, MCPs, commands as cassettes you plug in, swap out, and share across machines.
There are good tools in this space already - Vercel Skills installs skills from a curated catalog, and Claude Plugins offer runtime integrations. Both work well for one-off installs, but neither gives you a declarative, version-controlled config.
Kasetto is a community-first project that solves a different problem: declarative, reproducible skill management across machines and agents.
extends, so org, team, and project stay in sync.kasetto, run as kst. CI-friendly with --json output and real exit codes.Inspired by cargo and uv — the same lock-first, declarative, CLI-only ergonomics, applied to AI agent skills.
macOS and Linux:
curl -fsSL kasetto.dev/install | sh
Windows:
powershell -ExecutionPolicy Bypass -c "irm kasetto.dev/install.ps1 | iex"
brew install pivoshenko/tap/kasetto
scoop bucket add kasetto https://github.com/pivoshenko/scoop-bucket
scoop install kasetto
cargo install kasetto
1. Scaffold a config:
kst init # creates ./kasetto.yaml in the current directory
kst init --global # or a global one at ~/.config/kasetto/kasetto.yaml
Edit the generated kasetto.yaml — pick an agent, add a skills: source, and you're ready to sync.
2. Sync skills into your agents:
# uses ./kasetto.yaml in the current directory
kst sync
# or point at a shared team config over HTTPS
kst sync --config https://example.com/team-skills.yaml
Want bare kst sync to always pull from a remote URL? Persist it in ~/.config/kasetto/config.yaml:
source: https://github.com/pivoshenko/pivoshenko.ai/blob/main/kasetto.yaml
After that, kst sync resolves the URL automatically — no --config flag needed.
That's it. Kasetto pulls the skills, installs them into the right agent directory, and records exactly what it installed in kasetto.lock. Commit kasetto.yaml and kasetto.lock together (like Cargo.lock or package-lock.json) and every teammate gets identical versions. A plain kst sync honors the lock without re-resolving moving refs; kst sync --update rolls versions forward; kst sync --locked enforces the lock in CI.
See pivoshenko/pivoshenko.ai for a community example pulling skills from multiple packs for Claude Code and OpenCode.
3. See what's installed:
kst list # table of installed skills, MCPs, commands
kst list --type skills # filter to one asset kind
kst doctor # version, paths, last sync status
One-line synopsis below. Full flags and examples in the commands reference.
kst init — generate a starter kasetto.yaml (local or --global).kst sync — read config, install skills + MCPs into agent dirs honoring kasetto.lock; --update rolls pins forward, --locked/--frozen enforce the lock without fetching.kst list — print a uv-style table of installed skills, MCPs, and commands from the lock file; --type skills|mcps|commands filters; --json for scripting.kst doctor — local diagnostics: version, paths, last sync status, broken skills.kst clean — remove tracked skills and MCP configs for the given scope.kst self update — fetch latest release, verify SHA256, replace binary in place.kst self uninstall — remove installed assets, data, and the binary.kst completions <shell> — emit shell completion script (bash/zsh/fish/powershell).Most commands accept --json, --color <auto|always|never>, -q/--quiet (repeat for stricter silence), and --project | --global. --plain is still accepted as a deprecated alias for --color never.
When --config is omitted, Kasetto looks for config in this order:
$KASETTO_CONFIG env var./kasetto.yamlsource: key in $XDG_CONFIG_HOME/kasetto/config.yaml$XDG_CONFIG_HOME/kasetto/kasetto.yaml (or ~/.config/kasetto/kasetto.yaml)Run kst init to scaffold a local config, or kst init --global for the global one.
# Option A: preset destination by agent (see README for supported agent values)
agent:
- codex
- claude-code
# Option B: manual destination (takes precedence if both are set)
# destination: ./.agents/skills
skills:
# "*" syncs every skill in the source — each is a directory with a SKILL.md,
# discovered in the source root or its skills/ subdirectory
- source: https://github.com/vercel-labs/next-skills
# ref: v1.0.0 # pin to a tag or commit; omit to track the default branch
skills: "*"
# or list skills by name
- source: https://github.com/anthropics/skills
skills:
- doc-coauthoring
- frontend-design
- pptx
# sub-dir: resolve the named skills under this path, e.g. skills/productivity/grill-me/
- source: https://github.com/mattpocock/skills
sub-dir: skills/productivity
skills:
- grill-me
- caveman
# path: a skill in a non-standard location → <path>/<name>/, here skills/engineering/improve-codebase-architecture/
- source: https://github.com/mattpocock/skills
skills:
- name: improve-codebase-architecture
path: skills/engineering
commands:
# names resolve to commands/<name>.md in the source (nested dirs namespace, e.g. git:commit)
- source: https://github.com/gsd-build/get-shit-done
commands:
- gsd:explore
- gsd:fast
mcps:
# names resolve to mcps/<name>.json in the source
- source: https://github.com/pivoshenko/pivoshenko.ai
branch: main # track a specific branch (use ref: to pin a tag or commit)
mcps:
- github
- vercel
- kaggle
Full key reference, merge rules, and extends: inheritance live in the configuration docs.
Set the agent field and Kasetto figures out where to put things.
| Agent | Config value | Install path |
| -------------- | ---------------- | ------------------------------- |
| Amp | amp | ~/.config/agents/skills/ |
| Antigravity | antigravity | ~/.gemini/antigravity/skills/ |
| Augment | augment | ~/.augment/skills/ |
| Claude Code | claude-code | ~/.claude/skills/ |
| Cline | cline | ~/.agents/skills/ |
| Codex | codex | ~/.codex/skills/ |
| Continue | continue | ~/.continue/skills/ |
| Cursor | cursor | ~/.cursor/skills/ |
| Gemini CLI | gemini-cli | ~/.gemini/skills/ |
| GitHub Copilot | github-copilot | `~/.