kasetto — швидкий менеджер AI-скілів, написаний на Rust

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Привіт cпільното DOU!

Хочу поділитись open-source інструментом який зробив для себе, і який, сподіваюсь, стане в нагоді іншим розробникам що працюють з AI-агентами.

GitHub: github.com/pivoshenko/kasetto

Docs: www.kasetto.dev

Чому kasetto?

Назва від японського カセット (kasetto) — касета. Пам’ятаєте автомобільні касетні магнітоли? Вставив касету — грає одна музика, витягнув, вставив іншу — вже інша. Без налаштувань, без інсталяцій. Просто hot-swap.

Скіли в kasetto працюють так само. Кожне джерело скілів — це касета, яку можна вставити, замінити або поділитись з другом. Один YAML-конфіг — це ваша колекція касет.

Проблема

Ви налаштували Claude Code під себе — додали скіли, промпти, правила. Все працює ідеально. А потім сідаєте за інший комп і починаєте все заново. Або в команді кожен має свій набір скілів і ніхто не знає хто що використовує.

Скіли для AI-агентів — це по суті конфігураційні markdown-файли які живуть у локальних директоріях. Немає ні пакетного менеджера, ні lock-файлу, ні способу синхронізувати їх між машинами чи тім мейтами.

Це як pip install без requirements.txt — працює поки не перестає працювати.

Що робить kasetto

Один YAML-конфіг описує всі ваші скіли — звідки їх брати, для якого агента ставити, і куди класти.

kst sync

Без ручного копіювання. Без скриптів. Одна команда.

Конфігурація

Створюєте skills.config.yaml у корені проєкту або будь-де:

# Вказуєте агент - kasetto знає куди ставити скіли
agent: claude-code

skills:
  # Тягнемо конкретні скіли з GitHub-репозиторію
  - source: https://github.com/org/skill-pack
    branch: main
    skills:
      - code-reviewer
      - name: design-system

  # Синхронізуємо все з локальної папки
  - source: ~/Development/my-skills
    skills: "*"

  # Скіли з підпапки монорепи
  - source: https://github.com/acme/monorepo
    skills:
      - name: custom-skill
        path: tools/skills

Змінили агент з claude-code на cursor або codex? Один рядок — і скіли ставляться в правильну директорію автоматично. Підтримується 35+ агентів: Claude Code, Cursor, Copilot, Codex, Windsurf, Gemini CLI, Roo Code, Cline та інші.

Команди

# Синхронізація з дефолтного конфігу (skills.config.yaml)
kst sync

# Синхронізація з конкретного файлу
kst sync --config skills.config.yaml

# Тімовий конфіг по URL - кожен розробник запускає одну команду
kst sync --config https://raw.githubusercontent.com/org/configs/main/skills.yaml

# Подивитись що зміниться без запису на диск
kst sync --dry-run

# JSON-вивід для CI/CD пайплайнів
kst sync --json

# Інтерактивний браузер встановлених скілів (vim-style навігація)
kst list

# Діагностика: версія, шляхи, статус останньої синхронізації
kst doctor

Приклад для команди

Тімлід комітить skills.config.yaml в репозиторій:

agent: claude-code

skills:
  - source: https://github.com/our-company/engineering-skills
    skills:
      - code-review-guidelines
      - name: api-design-standards
      - name: testing-conventions

  - source: https://github.com/our-company/frontend-skills
    branch: v2
    skills:
      - name: react-patterns
      - name: accessibility-checker

Новий розробник в команді робить:

kst sync
# або якщо з ремоута
kst sync --config https://raw.githubusercontent.com/our-company/engineering-skills/refs/heads/main/skills.config.yaml

Готово. Всі скіли на місці, ідентичні до решти команди.

Приклад для CI

# GitHub Actions
- name: Sync AI skills
  run: |
    curl -fsSL https://raw.githubusercontent.com/pivoshenko/kasetto/main/scripts/install.sh | sh
    kst sync --config skills.config.yaml --json

Чому Rust

Написаний на Rust з mimalloc та fat LTO. Синхронізація навіть великого набору скілів займає мілісекунди. Для CLI-тули яку запускаєш часто — швидкість має значення.

Для кого це корисно

  • Розробники які використовують AI-агентів щодня
  • Тімліди які хочуть стандартизувати набір скілів у команді
  • Всі хто працює на кількох машинах і втомився від ручної синхронізації
  • DevOps/CI — автоматичне розгортання скілів через пайплайни

Спробувати

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/pivoshenko/kasetto/main/scripts/install.sh | 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

У планах підтримка MCP конфігів, хуків та інших MD файлів.

Натхненний підходом uv для Python-пакетів — kasetto робить те саме для AI-скілів.

Буду радий фідбеку! А як ви синхронізуєте налаштування своїх AI-агентів між машинами?

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному5
LinkedIn
Ctrl + Enter
Ctrl + Enter

А можете оформити окремою бібліотекою ?

Привіт! Додав у TODO нотатки 😄

А чим це краще ніж якщо просто тримати репозиторій на Github зі скілами?

Головна ідея в тому, що kasetto дозволяє не просто тримати скіли в одному репозиторії, а підключати їх з інших репозиторіїв як залежності і потім автоматично підтягувати оновлення, якщо автор скіла щось змінив.

Якщо ж просто тримати все в одному GitHub-репозиторії, то далі зазвичай є три варіанти:
— копіювати скіли вручну
— возитися з git submodules
— писати свої скрипти (типу батчом ранити npx skills install)

Тобто GitHub сам по собі вирішує лише зберігання, але не дуже зручно вирішує перевикористання, оновлення і синхронізацію скілів між різними джерелами.

Наприклад, у моєму сетапі частина скілів локальні, а частина підтягнута з інших репозиторіїв:
github.com/...​b/main/skills.config.yaml

Найбільше це відчувається в команді: можна гарантувати, що всі тіммейти мають однаковий набір скілів, без ручного копіювання.

У новому оновленні буде додано також інсталяція скілів по проєкту замість глобалу, а також підтримка AGENTS.md i т.д.

Чудово! Кілька питань — планується можливість додавати per project (а не тримати усі скіли глобально)? І ще — чому не alias (one source of truth) та можливість вказати кілька агентів одразу?

Дякую за підтримку! Так обидві фічі у планах! 😉

Було добре оформити бібліотекою, я би будував би тоді у свій github.com/pomazanbohdan/vida-stack

Оо гарна пропозиція, додав у нотатки. Також підтримав ваш проєкт, виглядає дуже цікаво!

Просто зізнайтесь, що захотіли зробити проєкт на Rust — я зрозумію 😉

Проєкт підтримав зірочкою на GitHub.

Будете писати про проєкт далі? На Reddit, LinkedIn, Hacker News?

Ахах так! 😄👀 Так думаю трохи пробустити проєкт, в першу чергу зробив для себе та друзів, але виглядає так, що ніша вільна (напр. vercel skills не мають декларативності), то можливо залитить!

Дякую за підтримку проєкту!

Чому Rust
Написаний на Rust з mimalloc та fat LTO. Синхронізація навіть великого набору скілів займає мілісекунди. Для CLI-тули яку запускаєш часто — швидкість має значення.

1. У тебе буде максимум кілька десятків скілів
2. Синхронізувати будеш раз в день в перші тижні, раз в тиждень потім
3. rust ніяк не прискорить завантаження скілів з гіта, а це буде основним тормозом
4. Воркфлоу де будь-який запит в агента займає хвилини, якось пофіг засинранізуєш ти скіли раз в тиждень за секунди чи мілісекунди

Пан президент має рацію по суті. Але, як то кажуть, коли проєкт на Rust — одразу з’являються карти на руках

Підписатись на коментарі