Смена целенаправленности: не реклама/аналитика метрик, а производство контента (текст, изображение, подкаст, видео) + анализ его метрик + SEO. - Новый центральный объект content_items (kind, status-конвейер brief→generated→optimized→published→measured, site, deal_id) - areas: text, image, podcast, video, seo_onpage, seo_semantics, publish - metric_kind: reach, engagement, position, traffic, conversion, revenue, speed, quality - источники метрик: Метрика API, GSC, Yandex Webmaster, Wordstat (+platform/manual/client) - skills привязаны к реальному стеку: editor-pro, ComfyUI, Silero TTS, video-pipeline, Wordstat, Astro (retrieval по bge-m3) - автономия по заслугам: тир на область, +1 за 3 успеха, -1 за провал - конвейер производства добавлен как сквозной процесс - TODO переписан: 8 шагов (0-7) с критериями приёмки
spark-mind
Self-hosted автономный агент (MVP). Концепт позаимствован из Animus (Craigtut): heartbeat, 4 слоя памяти, persona в 8 слоёв. Движок — Ornith-1.5-9B (локально, self-hosted, Ollama).
Почему Ornith-1.5-9B
- Локальный inference (Ollama), никаких облачных ключей
- Нативная поддержка tool-calling (саб-агенты) + thinking
- 262K контекст (для heartbeat держим 4K-16K + внешняя память)
- ~40-60 t/s на Q6_K
⚠️ Spark X2.5-4B не грузится в Ollama (unknown architecture 'spark2_5'). Ornith-9B — рабочая замена: thinking + tools, дефицитный ресурс.
Архитектура
heartbeat.ts — ядро: 5 триггеров тика, состояния Cold/Warm
memory.ts — 4 слоя памяти (short/working/core self/long-term) + SQLite
persona.ts — 8 слоёв → системный промпт
mind.ts — оркестратор: heartbeat + memory + persona + LLM
subagent.ts — SubAgent SDK: researcher, coder, analyst, content-writer
embedding.ts — bge-m3 embeddings (dim=1024), cosine similarity
database.ts — SQLite репозиторий: 5 таблиц, WAL-режим
telegram.ts — Telegram Channel Layer: MAX Messenger API
Heartbeat (5 триггеров)
- Interval — idle-мысли по таймеру (default 5 мин)
- Message — сообщение от known-контакта
- Task — scheduled-задача (cron)
- SubAgent-Complete — завершение саб-агента
- Plugin — внешний триггер (HomeKit, сенсор и т.д.)
Таймер сбрасывается после любого тика. Warmth-окно 15 мин — сессия переиспользуется, иначе cold-start.
Memory (4 слоя)
| Слой | Хранение | Что держит |
|---|---|---|
| short-term | SQLite (thoughts) | последние ~10 мыслей/опыт/сообщений |
| working | SQLite (notepads) | notepad по контактам |
| core self | SQLite (self_observations) | самосознательность |
| long-term | SQLite (long_term + embeddings) | факты/опыт/процедуры + bge-m3 векторы |
Sub-Agents
Поддерживаемые агенты:
- researcher — сбор и анализ информации (web_search, file_read, web_extract)
- coder — написание и ревью кода (file_write, terminal, code_review)
- analyst — анализ данных и ситуаций (data_query, spreadsheet, chart_generator)
- content-writer — создание веб-контента (template_search, seo_check, grammar_check)
Запуск
npm install
npm run build # tsc -p tsconfig.json (проверка типов)
npm start # node dist/index.js
Ornith-1.5-9B должен быть доступен по OpenAI-совместимому API (Ollama):
- Ollama:
http://localhost:11434(модельornith-1.5-9b:latest)
Настройка Telegram
Для отправки ответов в Telegram добавьте в index.ts:
import { TelegramMessenger } from './src/telegram.js';
const telegram = new TelegramMessenger({
botUrl: 'https://bot.qw4.ru/bot/nik_bot',
userId: '140245519',
});
⚠️ Примечание: если bot.qw4.ru недоступен (SSL-ошибка 'unrecognized name'), агент работает в console-only режиме.
Статус P0–P5
| Priority | Компонент | Статус |
|---|---|---|
| P0 | heartbeat → mind wiring | ✅ |
| P1 | structured JSON output (parseSparkOutput) | ✅ |
| P2 | bge-m3 embeddings + cosine search | ✅ |
| P3 | SubAgent SDK (researcher, coder, analyst, content-writer) | ✅ |
| P4 | SQLite persistence (5 таблиц, WAL) | ✅ |
| P5 | Telegram Channel Layer (MAX API + fallback) | ✅ |
Roadmap
Суть: агент производит контент (текст, изображение, подкаст, видео), публикует и через заданный горизонт замеряет, что сработало — показы, позиции, CTR, дочитывания, прослушивания, переходы (метрики Метрики/GSC/Webmaster/Wordstat). Качество оценивается не рассуждением агента, а этими метриками. Права (автономия) выдаются по подтверждённому трек-рекорду: доказал рост метрик — получил свободу публиковать без спроса. Скиллы агента = существующий производственный стек (editor-pro, ComfyUI, Silero TTS, video-pipeline, Wordstat, Astro).
License
MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).