# spark-mind Self-hosted автономный агент (MVP). Концепт позаимствован из [Animus](https://github.com/Craigtut/animus) (Craigtut): heartbeat, 4 слоя памяти, persona в 8 слоёв. Движок — **Spark X2.5-4B** (локально, self-hosted). ## Почему Spark X2.5-4B - Локальный inference (llama.cpp / Ollama), никаких облачных ключей - Нативная поддержка agent-инструментов (tool-calling) — саб-агенты - 1M контекст (для heartbeat держим 4K-16K + внешняя память) - ~59 t/s на Q4_K_M (RTX A2000 12GB) > ⚠️ 4B — это слабость для сложного reasoning. Стратегия: > heartbeat-мысли на Spark (быстро/дёшево), саб-агенты на Ornith-9B (качественнее). ## Архитектура ``` heartbeat.ts — ядро: 5 триггеров тика, состояния Cold/Warm memory.ts — 4 слоя памяти (short/working/core self/long-term) persona.ts — 8 слоёв → системный промпт mind.ts — оркестратор: heartbeat + memory + persona + Spark LLM ``` ### Heartbeat (5 триггеров) 1. **Interval** — idle-мысли по таймеру (default 5 мин) 2. **Message** — сообщение от known-контакта 3. **Task** — scheduled-задача (cron) 4. **SubAgent-Complete** — завершение саб-агента 5. **Plugin** — внешний триггер (HomeKit, сенсор и т.д.) Таймер сбрасывается после любого тика. Warmth-окно 15 мин — сессия переиспользуется, иначе cold-start. ### Memory (4 слоя) | Слой | Хранение | Что держит | |------|----------|-----------| | short-term | SQLite | последние ~10 мыслей/опыт/сообщений | | working | SQLite | notepad по контактам | | core self | SQLite | самосознательность | | long-term | LanceDB/Qdrant | факты/опыт/процедуры (векторный поиск) | ### Persona (8 слоёв) Existence Paradigm → Identity → Archetype → Dimensions → Traits → Values → Background → Review Компилируется в системный промпт. `values` — safety-layer (границы для EXECUTE). ## Запуск ```bash npm install npm run build # tsc -p tsconfig.json (проверка типов) npm start # node dist/index.js ``` Spark X2.5-4B должен быть доступен по OpenAI-совместимому API: - Ollama: `http://localhost:11434` - llama.cpp: `http://localhost:8080/v1` ## Roadmap - [x] SQLite-репозиторий вместо in-memory (персистентность) — отложено (P4) - [x] LanceDB/Qdrant integration для long-term — bge-m3 embeddings локально (Ollama) - [x] Channel layer (вывод) — console-заглушка, подключение Telegram/SMS (P5) - [ ] Sub-agent SDK (делегирование Ornith-9B) - [ ] Sleep & energy (циркадный ритм) - [ ] Web UI (persona setup) ## License MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).