# :standalone — agentik single-jar server Self-contained HTTP-сервер на Ktor: AG-UI / A2A / :proto транспорты на одном порту, встроенный SQLite для истории диалогов, долговременная память (Hermes-style §-файлы или vector+JVector), загрузка MCP-инструментов, навыков (SKILL.md) и персоны (SOUL.md). ## Сборка ```bash # Полная сборка всего проекта + 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`). ## Запуск ```bash java -jar standalone/build/libs/standalone-all.jar ``` По умолчанию слушает на `http://localhost:8080`. Healthcheck: `GET /health`. Транспорты на одном порту: - `GET /health` — liveness - `POST /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` — AgentCard - `POST /agui` — AG-UI (compatibility transport, legacy) ### Подкоманды ```bash # Скачать модель 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 (если задано — файл проверяется) | ## Полный пример запуска ```bash 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, чисто клавиатурная навигация. ## Тесты ```bash ./gradlew :standalone:jvmTest ```