Your AI environment, under control
Declarative AI agent environment manager, written in Rust.
curl -fsSL kasetto.dev/install | sh- Claude Code
- Cursor
- Codex
- Antigravity
- Amp
- Augment
- Cline
- Continue
- Gemini CLI
- GitHub Copilot
- Goose
- Junie
- Kiro CLI
- OpenClaw
- OpenCode
- OpenHands
- Pi
- Replit
- Roo Code
- Trae
- Warp
- Windsurf
- ZCode
See everything in one file
kasetto.yaml lists every skill, command, MCP, and instruction you use, and the repository each one comes from. kst sync fetches those repositories and writes each asset where your agent looks for it. Run it again on another machine and you get the same setup; run it after a change and only that change is touched.
From any source to your agent
- SkillsA directory with a SKILL.md, copied as is
- CommandsMarkdown files, rewritten into each agent's format
- MCPsServer definitions merged into the agent's settings
- InstructionsRules written as files, or as managed blocks in shared ones
- GitHubGITHUB_TOKEN # private repository
- GitLabGITLAB_TOKEN # private repository
- BitbucketBITBUCKET_TOKEN # private repository
- CodebergCODEBERG_TOKEN # private repository
- GiteaGITEA_TOKEN # private repository
- ForgejoFORGEJO_TOKEN # private repository
- Self-hostedGitHub Enterprise, GitLab, Gitea
- Local pathno network needed
Tokens never touch git
Put a ${kst_...} placeholder where the token would go. When you sync, Kasetto reads the real value from your environment, a credentials file, or the vault CLI you are already signed in to, and writes it into the agent's config. The lock file only ever sees the placeholder.
"env": { "VERCEL_TOKEN": "${kst:op:Private/Vercel/token}" }
op"VERCEL_TOKEN": "vcp_7Qx••••••••••"
hash: 9b2e41e0...# of the placeholder
- 1Password
- Environment
- credentials.yaml
- HashiCorp Vault
- KeePass
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- pass / gopass
- macOS Keychain
A security and audit layer for your agent
kst audit checks every installed skill and MCP. Skills get the verdicts skills.sh partners publish. MCPs get an offline look at how they launch, then OSV advisories and deps.dev health for the package they run. Turn it on as a sync gate and anything at or above your threshold fails the run, so the problem stops in CI rather than in your agent.
- pdfskill3 partnerssafepass
- frontend-designskill3 partnerslowpass
- vercelmcpfloating npx versionmediumpass
- team-playbookskillnot on skills.shunverifiedwarn
- db-adminmcp2 OSV advisoriescriticalblock
Every install, pinned in a lock file
Each sync writes the source, resolved revision, destination, and content hash of what it installed to kasetto.lock. Commit the file and changes to your setup show up in code review like any other diff. --locked installs from the lock alone, without the network, and fails if the config has drifted from it.
Works with the agent you use
- Claude Code
- Cursor
- Codex
- Antigravity
- Amp
- Augment
- Cline
- Continue
- Gemini CLI
- GitHub Copilot
- Goose
- Junie
- Kiro CLI
- OpenClaw
- OpenCode
- OpenHands
- Pi
- Replit
- Roo Code
- Trae
- Warp
- Windsurf
- ZCode
- Add yours
One binary, any machine
One static binary for macOS, Linux, and Windows, with JSON output and exit codes you can build CI on. It installs as kasetto and as the short alias kst.
- macOS / Linux
curl -fsSL kasetto.dev/install | sh - Windows (PowerShell)
powershell -ExecutionPolicy Bypass -c "irm kasetto.dev/install.ps1 | iex" - Homebrew
brew tap pivoshenko/tap brew trust pivoshenko/tap brew install kasetto - Cargo
cargo install kasetto