Files
agentik/skills
subochev 0fdc12695e
ci / JVM build + tests (push) Failing after 1m57s
docs: per-module README + root navigation hub + CI/release workflows
- README.md в каждом подмодуле: для библиотек — описание проблемы,
  подключение через maven-central/caffeine, версии в gradle/libs.versions.toml.
  Для запускаемых модулей — команды запуска + переменные среды с дефолтами.
- Корневой README.md переписан как навигационный хаб: что это, где клиенты,
  где серверы, как собрать, как опубликовать.
- build.gradle.kts: per-module POM-description через единую карту в rootProject.extra
  (порядок важен — нужно ДО apply плагина KMP, поэтому beforeEvaluate в subprojects).
- .gitea/workflows/ci.yml (новый): build + jvmTest + shadowJar на PR/push main.
- .gitea/workflows/release.yml (обновлён): публикует библиотеки в caffeine
  Nexus + собирает 3 fatjar'а и крепит их к release как бинарные ассеты.
2026-09-16 16:24:03 +03:00
..

:skills — pw.binom.agentik.skills

Парсер opencode-style скилов: SKILL.md или *.yaml с YAML-frontmatter + markdown body. Загружается в system prompt как отдельная секция; модели доступны тулы read_skill / skill_save / skill_delete (если они подключены через :agent-toolsets).

Какую проблему решает

Агенту нужно знать, какие процедуры/инструкции у него есть, не таская их в коде. Скил — это:

---
name: backend:spring:db-base
description: Правила JPA/Flyway миграций и репозиториев в agentik.
---
Правила, которые применяются ко всем изменениям схемы:
- миграции только в Flyway;
- новые колонки nullable by default;
- ...

Парсер читает такие файлы из каталога (рекурсивно), валидирует обязательные поля (name, description), собирает каталог для system prompt и поддерживает горячее обновление: добавил файл — доступен в следующем read_skill без рестарта.

Формат

Поддерживаются оба варианта:

  • SKILL.md — единый файл в каталоге (с frontmatter + body).
  • *.yaml + опциональный *.md-компаньон с тем же basename.

Frontmatter — YAML, минимум name (с : для вложенности) и description. Остальные поля — пользовательские, доступны через SkillFile.frontmatter.

Подключение

commonMain {
    implementation("pw.binom.agentik:skills:$version")
    implementation("com.charleskorn.kaml:kaml:0.55.0")
}

Использование

import pw.binom.agentik.skills.SkillCatalog

val catalog = SkillCatalog.fromDirectory(Path("/etc/agentik/skills"))
catalog.listAll().forEach { skill ->
    println("- ${skill.name}: ${skill.description}")
}

val skill = catalog.findByName("backend:spring:db-base")
val body = skill?.body

SkillPrompt умеет отрендерить каталог в markdown-секцию для system prompt (с truncate по длине, чтобы не раздувать контекст).

Где смотреть версии

  • version из gradle.properties (version=0.1.0)
  • релизы: https://git.binom.pw/subochev/agentik/releases

Сборка

./gradlew :skills:build
./gradlew :skills:jvmTest

KMP-таргеты — полный набор как у :proto. Зависимости — только kotlinx-serialization + kaml.