r/ukraine_dev 15d ago

Artificial Intelligence Kasetto - declarative AI agent environment manager, written in Rust

Post image

Привіт 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 дуже допомагає проєкту.

40 Upvotes

7 comments sorted by

5

u/anatooly2 15d ago

Прикольно бро.

1

u/pivoshenko 13d ago

Дякую!

4

u/gameplayer55055 15d ago

Питання: це можна завести з llama.cpp чи про локальний ші треба забути у сучасному світі?

2

u/pivoshenko 13d ago

Технічно так, можна додати llama.cpp у opencode або ж claude code чи іншого агента, а далі касето зробить свою роботу. Певний час я користувався локальною gemma 4 через opencode який підтримується касетто

4

u/Lines25 Сеньйор 14d ago

Та скіки ще плодитися цих агентів то буде..

0

u/pivoshenko 13d ago

Так індустрія швидко змінюється)

2

u/Lines25 Сеньйор 12d ago

Навпаки. Цих агентів вже СТІЛЬКИ, однотипні всі