# :agent-toolsets — `pw.binom.agentik.toolsets` **Ядро механики toolsets: `ToolsetRegistry`, `ToolsetDispatchPolicy`, встроенные тулы `enable_toolset` / `disable_toolset`, `SyncLiteTool` базовый класс.** KMP, не зависит от `:standalone`, переиспользуем в Android и в любом другом LiteTool-агенте. ## Какую проблему решает В проде у агента может быть **сотня** инструментов (MCP-серверы, кастомные тулы, встроенные операции). Слать их все в каждый LLM-запрос: 1. **Раздувает контекст** — описание тула ~50–200 токенов × 100 тулов = 20K токенов в system prompt без пользы. 2. **Увеличивает latency** — модель тратит время на выбор из длинного списка. 3. **Снижает качество** — модель путается между похожими названиями. Toolsets группируют тулы **по домену** (`filesystem`, `network`, `devops`, …). Активированы только 2-3 одновременно. `enable_toolset("filesystem")` — включает целую группу одним обращением; тулы появляются в system prompt + регистрируются как вызываемые. `disable_toolset(...)` — убирает. ## Архитектура ```kotlin interface Toolset { val name: String // "filesystem" val title: String // "File operations" val enabled: Boolean // текущее состояние suspend fun enabledTools(context: ToolsetContext): List suspend fun systemPromptSection(context: ToolsetContext): String } class ToolsetRegistry { fun register(toolset: Toolset) fun list(): List suspend fun enable(name: String): Boolean suspend fun disable(name: String): Boolean } class ToolsetDispatchPolicy { fun buildDispatch(): DispatchPolicy // подаётся в LiteLlm } ``` Встроенные тулы — `EnableToolsetTool` / `DisableToolsetTool` / `SystemPromptToolsetSection` — дают LLM самой управлять составом инструментов. База для кастомных тулов — `SyncLiteTool` (обёртка над `LiteTool`, синхронная `execute(args): String`). ## Подключение ```kotlin commonMain { implementation("pw.binom.agentik:agent-toolsets:$version") // Транзитивно: :storage-core (для ToolsetContext) + :proto } ``` ## Где смотреть версии - `version` из `gradle.properties` (`version=0.1.0`) - релизы: `https://git.binom.pw/subochev/agentik/releases` ## Сборка ```bash ./gradlew :agent-toolsets:build ``` KMP-таргеты — полный набор. Зависимости — `:storage-core` + `:proto` + `kotlinx-coroutines` + `kotlinx-serialization`.