docs: per-module READMEs (run vs library) + root navigation hub
ci / JVM build + tests (pull_request) Failing after 54s
ci / JVM build + tests (pull_request) Failing after 54s
Every subproject now has README.md:
- 3 runnable modules (:standalone, :agentik-cli, :agentik-tui):
quickstart, env table, parameters, known limits
- 11 library modules: what it is, which problem solves, how to
wire it in, where versions live
Root README.md is the navigation hub (Quickstart, Modules table,
publish + CI/CD notes).
Also: ci.yml prunes the :memory-vector -x excludes now that
text-embedding-kmp artifacts are published to caffeine.
518 tests green.
Verified publish pipeline: :proto:publish to caffeine produces
pom.module + per-target klibs + sources for all 9 KMP targets.
🤖 Generated with [opencode]
This commit is contained in:
+65
-63
@@ -1,77 +1,79 @@
|
||||
# :skills — `pw.binom.agentik.skills`
|
||||
# `:skills` — парсер SKILL.md (KMP, JVM-only)
|
||||
|
||||
**Парсер opencode-style скилов: `SKILL.md` или `*.yaml` с YAML-frontmatter + markdown body.**
|
||||
Загружается в system prompt как отдельная секция; модели доступны тулы
|
||||
`read_skill` / `skill_save` / `skill_delete` (если они подключены через
|
||||
`:agent-toolsets`).
|
||||
## Что это
|
||||
|
||||
## Какую проблему решает
|
||||
Парсер и runtime для навыков агента в формате [opencode Skills](https://docs.opencode.dev):
|
||||
|
||||
Агенту нужно **знать**, какие процедуры/инструкции у него есть, не таская их
|
||||
в коде. Скил — это:
|
||||
- **SKILL.md / \*.yaml** с YAML-frontmatter (`name`, `description`,
|
||||
`allowed-tools`, etc.) и markdown-телом.
|
||||
- Реестр `SkillCatalog`, лоадер `SkillLoader` (поиск по
|
||||
`~/.agentik/skills/`).
|
||||
- `Skill` имеет стабильный id, описание, может требовать определённые
|
||||
tools (`allowed-tools: [run_command, write_file]`) — это контролируется
|
||||
на уровне вызова.
|
||||
- Загруженные скиллы аггрегируются в system-prompt через
|
||||
`Skill.toSystemPromptSection()` или подгружаются по требованию через
|
||||
tool `read_skill`.
|
||||
|
||||
Решает задачу: агенту нужно объяснить "что я умею" на разных языках
|
||||
(нативный skill-вызов vs. описание), нужно уметь включать/выключать
|
||||
навыки по требованию, и нужно хранить текстовые навыки прямо в
|
||||
git-репозитории (а не в БД).
|
||||
|
||||
## Где используется
|
||||
|
||||
- `:standalone` подгружает все SKILL.md из `~/.agentik/skills/`
|
||||
и инструментового скилл-майнера (skill-mining: создание новых
|
||||
SKILL.md по LLM-рефлексии).
|
||||
- Активно юзается для: `code-review`, `arch-summary`, `telegram-reply`,
|
||||
любых "habits" агента.
|
||||
|
||||
## Как подключить
|
||||
|
||||
```kotlin
|
||||
kotlin {
|
||||
sourceSets.commonMain.dependencies {
|
||||
api("pw.binom.agentik:skills:0.1.0")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Версии
|
||||
|
||||
`gradle/libs.versions.toml` → `[versions] agentik-skills`.
|
||||
|
||||
## Пример SKILL.md
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: backend:spring:db-base
|
||||
description: Правила JPA/Flyway миграций и репозиториев в agentik.
|
||||
name: code-review
|
||||
description: Review uncommitted diff and produce line-anchored comments.
|
||||
allowed-tools: [run_command, read_file]
|
||||
---
|
||||
Правила, которые применяются ко всем изменениям схемы:
|
||||
- миграции только в Flyway;
|
||||
- новые колонки nullable by default;
|
||||
- ...
|
||||
|
||||
You are a strict reviewer. For every change in the diff, output:
|
||||
- File: <path>
|
||||
- Severity: <nit|warning|blocker>
|
||||
- Comment: <one sentence>
|
||||
|
||||
Only mention issues that are objectively wrong. Do not refactor.
|
||||
```
|
||||
|
||||
Парсер читает такие файлы из каталога (рекурсивно), валидирует обязательные
|
||||
поля (`name`, `description`), собирает каталог для system prompt и **поддерживает
|
||||
горячее обновление**: добавил файл — доступен в следующем `read_skill` без
|
||||
рестарта.
|
||||
## Тесты
|
||||
|
||||
## Формат
|
||||
|
||||
Поддерживаются оба варианта:
|
||||
|
||||
- **`SKILL.md`** — единый файл в каталоге (с frontmatter + body).
|
||||
- **`*.yaml`** + опциональный `*.md`-компаньон с тем же basename.
|
||||
|
||||
Frontmatter — YAML, минимум `name` (с `:` для вложенности) и `description`.
|
||||
Остальные поля — пользовательские, доступны через `SkillFile.frontmatter`.
|
||||
|
||||
## Подключение
|
||||
|
||||
```kotlin
|
||||
commonMain {
|
||||
implementation("pw.binom.agentik:skills:$version")
|
||||
implementation("com.charleskorn.kaml:kaml:0.55.0")
|
||||
}
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
```kotlin
|
||||
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`
|
||||
|
||||
## Сборка
|
||||
|
||||
```bash
|
||||
./gradlew :skills:build
|
||||
./gradlew :skills:jvmTest
|
||||
```
|
||||
|
||||
KMP-таргеты — полный набор как у `:proto`. Зависимости — только `kotlinx-serialization` + `kaml`.
|
||||
Покрывают: парсинг yaml-frontmatter, обработку отсутствующих полей,
|
||||
unicode-имена, дубликаты id, очень большое тело.
|
||||
|
||||
## Чего здесь НЕТ
|
||||
|
||||
- Никакого HTTP / tool-вызова. Парсер и реестр — не более.
|
||||
- Никакой БД. SKILL.md живут в файлах под управлением пользователя.
|
||||
|
||||
## Текущий статус
|
||||
|
||||
Используется продакшеном. Парсер простой и предсказуемый; расширять
|
||||
формат frontmatter можно без поломок (новые поля игнорируются).
|
||||
|
||||
Reference in New Issue
Block a user