- 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 как бинарные ассеты.
:standalone — agentik single-jar server
Self-contained HTTP-сервер на Ktor: AG-UI / A2A / :proto транспорты на одном порту, встроенный SQLite для истории диалогов, долговременная память (Hermes-style §-файлы или vector+JVector), загрузка MCP-инструментов, навыков (SKILL.md) и персоны (SOUL.md).
Сборка
# Полная сборка всего проекта + fatjar
./gradlew assemble
# Только fatjar :standalone (≈ 250 MB)
./gradlew :standalone:shadowJar
# Результат:
# standalone/build/libs/standalone-all.jar
Также публикуется в Nexus (caffeine репо) при создании релиза:
pw.binom.agentik:standalone:VERSION с classifier all (см.
https://git.binom.pw/subochev/agentik/releases).
Запуск
java -jar standalone/build/libs/standalone-all.jar
По умолчанию слушает на http://localhost:8080. Healthcheck: GET /health.
Транспорты на одном порту:
GET /health— livenessPOST /agentik/conversations— создать беседуGET /agentik/conversations/{id}/events— SSE-стрим ответовPOST /a2a/— A2A JSON-RPC (message/send,tasks/get,tasks/cancel)GET /a2a/.well-known/agent-card.json— AgentCardPOST /agui— AG-UI (compatibility transport, legacy)
Подкоманды
# Скачать модель Google LiteRT-LM в AGENTIK_GOOGLE_MODEL_PATH.
# Требует AGENTIK_LLM_BACKEND=google. Если файл уже есть — no-op.
java -jar standalone-all.jar pull-model
# Сервер (по умолчанию)
java -jar standalone-all.jar
Переменные окружения
Все переменные читаются AgentikConfig.fromEnv(). Пусто или отсутствие → дефолт.
| Переменная | Дефолт | Назначение |
|---|---|---|
AGENTIK_PORT |
8080 |
Порт HTTP-сервера |
AGENTIK_DB_PATH |
./agentik.db |
Путь к SQLite (история бесед + метаданные памяти) |
AGENTIK_SKILLS_DIR |
выкл. | Каталог со скилами (SKILL.md / *.yaml) |
AGENTIK_MEMORY_DIR |
~/.agentik/memory (md) или AGENTIK_DB_PATH (vector) |
Каталог памяти (md); "off" отключает |
AGENTIK_MEMORY_BACKEND |
md |
md (Hermes-style §-файлы) / vector (SQLite + JVector + LLM-эмбеддинги) / off |
AGENTIK_EMBEDDING_MODEL |
text-embedding-3-small |
Модель эмбеддингов для vector-бэкенда (только HTTP) |
AGENTIK_EMBEDDING_DIMENSION |
1536 |
Размерность вектора (только HTTP; SIGLIP определяет автоматически) |
AGENTIK_EMBEDDING_BACKEND |
HTTP |
HTTP (POST /v1/embeddings) или SIGLIP (on-device, без сети) |
AGENTIK_EMBEDDING_MODEL_PATH |
только SIGLIP | Путь к text_model_int8.onnx (SigLIP2) |
AGENTIK_EMBEDDING_TOKENIZER_PATH |
только SIGLIP | Путь к tokenizer.model (sentencepiece) |
AGENTIK_SOUL |
выкл. | Путь к SOUL.md — файл персоны (markdown), вставляется в начало system prompt |
AGENTIK_LLM_BACKEND |
— | openai или google (см. ниже) |
AGENTIK_MCP_CONFIG |
выкл. | Путь к JSON со списком MCP-серверов |
AGENTIK_SYSTEM_PROMPT |
be brief |
Базовый system prompt |
OPENAI_CONTEXT_WINDOW |
выкл. | Лимит контекстного окна в токенах (для compaction'а) |
AGENTIK_GOOGLE_CONTEXT_WINDOW |
выкл. | То же для Google backend |
AGENTIK_COMPRESSION_THRESHOLD |
0.8 |
Доля лимита, при которой запускается compaction |
AGENTIK_REFLECTION_INTERVAL |
10 |
Self-reflection: каждый N-й пользовательский ход агент оценивает себя (LiteLlm) и сохраняет рефлексию. 0 = выключено. |
AGENTIK_REFLECTION_TOP_K |
3 |
Сколько последних рефлексий подмешивать в system prompt как «слабые места». 0 = не подмешивать. |
AGENTIK_SKILL_MINING_INTERVAL |
15 |
Skill mining: через сколько user-ходов запускать фоновый прогон SkillMiner. 0 = выключено. |
AGENTIK_SKILL_MINING_MAX_TURNS |
30 |
Сколько последних ходов передавать SkillMiner'у за один прогон. |
AGENTIK_DEBUG_ENDPOINTS |
0 |
1 включает debug-эндпоинты (/debug/reflect, /debug/skill-mine, /debug/curate, /debug/compact, /debug/tokens) |
AGENTIK_AUTO_DOWNLOAD_MODEL |
0 |
1 — при старте скачать LiteRT-LM модель в AGENTIK_GOOGLE_MODEL_PATH если её там нет (через pull-model логику). |
OpenAI backend
| Переменная | Обязательна | Назначение |
|---|---|---|
OPENAI_BASE_URL |
да | Например, https://api.openai.com/v1 |
OPENAI_API_KEY |
да | API key |
OPENAI_MODEL |
да | Имя модели (gpt-4o-mini и т.п.) |
Google backend
| Переменная | Обязательна | Назначение |
|---|---|---|
AGENTIK_GOOGLE_MODEL_PATH |
да | Путь к .litertlm файлу |
AGENTIK_GOOGLE_MODEL_URL |
нет | URL для скачивания (default: https://static.binom.pw/models/gemma-4-E2B-it.litertlm) |
AGENTIK_GOOGLE_MODEL_SHA256_URL |
нет | URL с эталонным SHA-256 (если задано — файл проверяется) |
Полный пример запуска
export AGENTIK_PORT=8080
export AGENTIK_DB_PATH=/var/lib/agentik/state.db
export AGENTIK_MEMORY_DIR=/var/lib/agentik/memory
export AGENTIK_SOUL=/etc/agentik/SOUL.md
export AGENTIK_SKILLS_DIR=/etc/agentik/skills
export AGENTIK_MCP_CONFIG=/etc/agentik/mcp.json
export AGENTIK_LLM_BACKEND=openai
export OPENAI_BASE_URL=https://api.openai.com/v1
export OPENAI_API_KEY=sk-…
export OPENAI_MODEL=gpt-4o-mini
mkdir -p "$(dirname "$AGENTIK_DB_PATH")" \
"$AGENTIK_MEMORY_DIR" \
"$(dirname "$AGENTIK_SOUL")" \
"$(dirname "$AGENTIK_MCP_CONFIG")"
java -jar standalone/build/libs/standalone-all.jar
На старте выведет что-то вроде:
agentik standalone listening on http://localhost:8080
GET /health
POST /agentik/conversations -> 201
GET /agentik/conversations/{id}/events -> SSE
storage: /var/lib/agentik/state.db
llm: OPENAI gpt-4o-mini @ https://api.openai.com/v1
mcp: 4 tools from 2 servers
skills: 3 loaded from /etc/agentik/skills
soul: /etc/agentik/SOUL.md (842 chars)
memory: /var/lib/agentik/memory (md-backend)
compaction: enabled, threshold=0.8, window=128000 tokens
curator: enabled (interval=1d, maxAge=90d)
reflection: enabled (interval=10, topK=3)
Остановка
Ctrl-C → срабатывает shutdown hook: агент, MCP-серверы, SQLite-стора и
LLM-клиент закрываются корректно (SQLite фиксирует WAL, MCP-процессы
получают SIGTERM).
Клиенты к :standalone
:agentik-cli— REPL со slash-командами (/new,/list,/interrupt…).:agentik-tui— Compose-style TUI, чисто клавиатурная навигация.
Тесты
./gradlew :standalone:jvmTest