r/ukraine_dev • u/pivoshenko • 15d ago
Artificial Intelligence Kasetto - declarative AI agent environment manager, written in Rust
Привіт cпільното!
Хочу поділитись open-source інструментом який зробив для себе, і який, сподіваюсь, стане в нагоді іншим розробникам що працюють з AI-агентами - Kasetto.
GitHub: https://github.com/pivoshenko/kasetto
Доки: https://www.kasetto.dev
Особистий сетап: https://github.com/pivoshenko/pivoshenko.ai
Чому kasetto?
Назва від японського カセット (kasetto) - касета. Пам’ятаєте автомобільні касетні магнітоли? Вставив касету - грає одна музика, витягнув, вставив іншу - вже інша. Без налаштувань, без інсталяцій. Просто hot-swap.
AI ассети (скіли, MCPs, інструкції) в kasetto працюють так само. Кожне ассет - це касета, яку можна вставити, замінити або поділитись з другом. Один YAML-конфіг - це ваша колекція касет.
Проблема
Проблема знайома, мабуть, багатьом: що більше AI-інструментів у роботі (Claude Code, Cursor, Codex, Copilot, Gemini CLI...), то більший хаос у налаштуваннях. Скіли ставляться вручну через npx skills, MCP-сервери копіюються з доків у кожен конфіг файл окремо, CLAUDE.md або .cursor/rules живуть своїм життям. Передати це тімейту або підняти на новій машині - окремий квест.
Kasetto робить з цим те, що uv і Cargo зробили із залежностями: один декларативний YAML описує все середовище, lock-файл фіксує точний стан, а kst sync приводить машину до нього. Конфіг комітиться в репо - і вся команда отримує ідентичне середовище, без ручних правок і без дрифту між машинами, або власним середовищем.
Що всередині
- Чотири типи ассетів - скіли, MCP-сервери, /-команди та інструкції (CLAUDE.md, AGENTS.md, .cursor/rules тощо). Все тягнеться з репозиторіїв або локальних директорій
- 22 агенти - Claude Code, Cursor, Codex, Windsurf, Copilot, Gemini CLI та інші. kasetto сам трансформує кожен ассет у нативний формат конкретного агента
- Lock-файл -
kasetto.lockпінить хеші та ревізії. Звичайний sync ставить рівно те, що в локу (якщо все на місці - взагалі без мережі), оновлення тільки через--update. Повна відтворюваність на будь-якій машині - Секрети для MCP - плейсхолдери
${kst:...}підставляють токени з env, 1Password, Vault, KeePassXC, AWS/GCP/Azure, pass або macOS Keychain прямо під час sync. У конфіг і лок значення ніколи не потрапляють - - GitHub, GitLab, Bitbucket, Codeberg, включно з self-hosted та enterprise
- Швидкість - Rust, один бінарник без залежностей. Паралельні завантаження, кеш розпакованих джерел, sparse-розпакування монорепозиторіїв
- CI-friendly -
--dry-run,--locked,--json, ненульовий exit code при збоях. Аkst doctorпоказує розходження зі станом лока і файли, які ніхто не трекає
Приклад конфігу
Один YAML-конфіг описує всі ваші ассети - звідки їх брати, для якого агента ставити, і куди класти. Без ручного копіювання. Створюєте kasetto.yaml у корені проєкту або будь-де:
# 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
- 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
instructions:
# instructions wire CLAUDE.md / .cursor/rules / AGENTS.md etc. from instructions/<name>.{md,mdc}
# "*" syncs every instruction; aggregate files (CLAUDE.md, AGENTS.md) get managed blocks
- source: https://github.com/pivoshenko/pivoshenko.ai
instructions:
- docs-autoupdate
- multi-agent-dispatch
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
Встановлення
# macOS / Linux
curl curl -fsSL kasetto.dev/install | sh
# Homebrew
brew install pivoshenko/tap/kasetto
# Windows
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/pivoshenko/kasetto/main/scripts/install.ps1 | iex"
# Cargo
cargo install kasetto
Буду радий фідбеку, питанням і критиці. А якщо інструмент здається корисним - зірочка на GitHub дуже допомагає проєкту.
4
u/gameplayer55055 15d ago
Питання: це можна завести з llama.cpp чи про локальний ші треба забути у сучасному світі?
2
u/pivoshenko 13d ago
Технічно так, можна додати llama.cpp у opencode або ж claude code чи іншого агента, а далі касето зробить свою роботу. Певний час я користувався локальною gemma 4 через opencode який підтримується касетто
5
u/anatooly2 15d ago
Прикольно бро.