Files
spark-mind/DESIGN.md
T
n1kt4r 97f03a9dd5 DESIGN v2: refocus to autonomous content producer with grounding
Смена целенаправленности: не реклама/аналитика метрик, а производство
контента (текст, изображение, подкаст, видео) + анализ его метрик + 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) с критериями приёмки
2026-09-23 14:42:15 +05:00

15 KiB
Raw Blame History

spark-mind — DESIGN: автономный контент-продюсер с заземлением

Обновление плана от 2026-09-23 (вторая редакция: фокус смещён с рекламы/метрик на производство контента + анализ его метрик + SEO).

1. Тезис

iLands строит общество на 80 000 агентов, чтобы получить «судью без автора». Нам толпа не нужна: у нас есть мир, который отвечает сам — поисковики и аудитория. Агент производит контент (текст, изображение, подкаст, видео), публикует, и через заданный горизонт замеряет, что сработало: показы, позиции, CTR, дочитывания, прослушивания, переходы, конверсии.

Два принципа, которых нет у iLands в рабочем виде:

  1. Заземление. Качество контента оценивается не рассуждением агента, а метриками, которые он не контролирует, с отложенным вердиктом.
  2. Автономия по заслугам. Права выдаются по подтверждённому трек-рекорду: доказал, что контент улучшает метрики — получил свободу публиковать без спроса и выбирать темы сам. Провал — права сужаются. Границы persona values непреодолимы на любом уровне.

Что это даёт на практике: агент не «генерирует текст вообще», а учится, какой заголовок, структура и формат работают — на своих же сайтах (orabota.ru, нейросети.рус, bzp02.ru и др.) и на заказах клиентов.

2. Три контура + конвейер

КОНВЕЙЕР ПРОИЗВОДСТВА   brief → generated → optimized → published → measured
   content_items — центральный объект, на нём замеряются метрики

A. КОНТУР ЗАКАЗОВ       «для кого и за что»      counterparties → deals
B. КОНТУР ЗАЗЕМЛЕНИЯ    «что сработало»          outcomes → capabilities → ledger
C. КОНТУР МЕТОДОВ       «как производить»        skills + reflection

Плюс сквозные: noAction (P5) и тонкий Channel (бывший P7).

3. Модель данных (SQLite, тот же файл БД)

2.1 Конвейер: content_items — центральный объект

CREATE TABLE content_items (
  id           TEXT PRIMARY KEY,
  kind         TEXT NOT NULL CHECK(kind IN ('text','image','podcast','video')),
  title        TEXT NOT NULL,
  topic        TEXT,
  status       TEXT NOT NULL DEFAULT 'brief'
                 CHECK(status IN ('brief','generated','optimized','published',
                                  'measured','archived')),
  target_url   TEXT,                      -- где опубликован
  site         TEXT,                      -- orabota.ru | нейросети.рус | ...
  deal_id      TEXT REFERENCES deals(id), -- nullable: для своих сайтов
  published_at INTEGER,
  created_at   INTEGER NOT NULL
);

Конвейер — это переходы status. Каждый переход пишется в deal_events-подобный журнал, если привязан к сделке.

A. Контур заказов

CREATE TABLE counterparties (
  id          TEXT PRIMARY KEY,
  kind        TEXT NOT NULL CHECK(kind IN ('client','platform','external')),
  name        TEXT NOT NULL,
  notes       TEXT,
  trust_score REAL NOT NULL DEFAULT 0,   -- derived из истории
  created_at  INTEGER NOT NULL
);

CREATE TABLE deals (
  id              TEXT PRIMARY KEY,
  counterparty_id TEXT NOT NULL REFERENCES counterparties(id),
  brief           TEXT NOT NULL,          -- что заказали (тема/формат/объём)
  price           REAL,
  currency        TEXT DEFAULT 'RUB',
  status          TEXT NOT NULL CHECK(status IN
                    ('offered','accepted','delivered','paid','refused','defaulted')),
  created_at      INTEGER NOT NULL,
  closed_at       INTEGER
);

CREATE TABLE deal_events (
  id           TEXT PRIMARY KEY,
  deal_id      TEXT NOT NULL REFERENCES deals(id),
  type         TEXT NOT NULL,
  payload_json TEXT,
  created_at   INTEGER NOT NULL
);

B. Контур заземления

-- Один outcome = один content_item + одно измерение метрики.
CREATE TABLE outcomes (
  id           TEXT PRIMARY KEY,
  item_id      TEXT REFERENCES content_items(id),  -- что мерим
  deal_id      TEXT REFERENCES deals(id),
  area         TEXT NOT NULL,        -- text|image|podcast|video|seo_onpage|seo_semantics|publish
  metric_kind  TEXT NOT NULL CHECK(metric_kind IN
                 ('reach','engagement','position','traffic',
                  'conversion','revenue','speed','quality')),
  metric_name  TEXT NOT NULL,        -- 'impressions','ctr','avg_position','dwell_sec',
                                     -- 'listens','completion_rate','indexing_hours','clicks'
  unit         TEXT,                 -- 'шт','%','сек','место','руб','ч'
  direction    TEXT NOT NULL CHECK(direction IN ('up_good','down_good')),
  value_before REAL,                 -- null для нового контента
  value_after  REAL,
  source       TEXT NOT NULL CHECK(source IN
                 ('metrika','gsc','webmaster','wordstat','platform','manual','client')),
  horizon_days INTEGER NOT NULL,
  due_at       INTEGER NOT NULL,
  status       TEXT NOT NULL DEFAULT 'pending'
                 CHECK(status IN ('pending','measured','missed','unavailable')),
  measured_at  INTEGER,
  score        REAL                  -- нормализованный вердикт [-1..+1]
);

-- Автономия по заслугам: тир НА ОБЛАСТЬ, не общий.
CREATE TABLE capabilities (
  area              TEXT PRIMARY KEY,
  tier              INTEGER NOT NULL DEFAULT 0 CHECK(tier BETWEEN 0 AND 4),
  positive_outcomes INTEGER NOT NULL DEFAULT 0,
  negative_outcomes INTEGER NOT NULL DEFAULT 0,
  updated_at        INTEGER NOT NULL
);

CREATE TABLE ledger (
  id            TEXT PRIMARY KEY,
  ts            INTEGER NOT NULL,
  delta         REAL NOT NULL,
  reason        TEXT NOT NULL,
  balance_after REAL NOT NULL
);

C. Контур методов

CREATE TABLE skills (
  id           TEXT PRIMARY KEY,
  name         TEXT NOT NULL,        -- 'podcast-silero','image-comfyui','seo-onpage-editor'
  area         TEXT NOT NULL,        -- привязка к capabilities.area
  method_md    TEXT NOT NULL,        -- как делать (промпт/алгоритм/порядок шагов)
  tool         TEXT,                 -- реальный инструмент: ace-step|silero|comfyui|editor-pro|astro|wordstat
  source       TEXT NOT NULL CHECK(source IN ('builtin','learned')),
  validated    INTEGER NOT NULL DEFAULT 0,
  uses         INTEGER NOT NULL DEFAULT 0,
  success_rate REAL,
  embedding    BLOB                  -- bge-m3, dim=1024 — retrieval под задачу
);

4. Правила

4.1 Области (area) и типы метрик

area Что производит/делает Типовые метрики
text статьи, лонгриды, описания показы, CTR, дочитывания, позиции
image изображения, обложки, карточки показы, CTR, скачивания
podcast аудио, подкасты (Silero TTS) прослушивания, completion rate, дослушивания
video видео, шортсы просмотры, watch time, удержание
seo_onpage заголовки, структура, разметка позиции, CTR, индексация
seo_semantics семантика, кластеры, запросы охват запросов, релевантность
publish публикация, распространение скорость публикации, индексация

4.2 Нормализация метрики в score

raw   = (value_after - value_before) / max(|value_before|, eps)
score = clamp(raw * (direction == 'up_good' ? 1 : -1), -1, 1)
  • Нет value_before (новый контент) → сравнение с базлином области (медиана последних 10 measured в этой area).
  • quality — дискретно: +1 / 0 / −1 (эксперт/клиент/человек).
  • speed — direction = 'down_good' (быстрее индексация = лучше).
  • status != 'measured' → score не участвует в трек-рекорде.

4.3 Автономия по заслугам

tier Имя Что разрешено
0 observer только анализ и предложения, публикаций нет
1 suggest предлагает готовый контент человеку, сам не публикует
2 ask публикует после подтверждения
3 act+report публикует и отчитывается; человек может откатить
4 autonomous публикует и выбирает темы сам, в границах persona

Переходы:

  • +1 тир за 3 нетто-положительных outcome в области.
  • −1 тир за 1 нетто-отрицательный — асимметрия: падать легче.
  • Затухание: outcome старше 90 дней весит 0.5.
  • Новая область стартует с tier 0.
  • Границы persona values непреодолимы на любом тире.

4.4 Энергия

  • Расход: тик, генерация (текст/фото/аудио/видео — дороже всего), публикация, вызов саб-агента.
  • Приход: подтверждённые положительные outcomes (особенно revenue), плюс донат человека.
  • Низкий баланс → интервал тиков растёт → Deep Rest.
  • Отличие от iLands: энергия восполняется результатом, а не покупкой.

5. Триггеры heartbeat (добавляются)

Триггер Что делает
{type:'pipeline'} продвинуть content_items по конвейеру (draft→generated→optimized→published)
{type:'measure'} наступил due_at → тянет метрику из источника → value_after, score
{type:'reflection'} ночной цикл: обобщает items + outcomes + thoughts → long-term и self_observations
{type:'task'} cron-планировщик (нужен для measure/reflection)

Плюс decision.noAction: true (P5).

Источники метрик: Метрика API, Google Search Console, Yandex Webmaster API, Wordstat — у всех доступ уже настроен. Плюс platform (прослушивания/просмотры) и manual/client.

6. Тонкий Channel (бывший P7)

interface Channel { send(text: string): Promise<void>; }

Реализации: ConsoleChannel, TelegramChannel, FileChannel. LLMClient уже есть. Полный harness-реестр отложен — абстракция окупается с ≥2 реализациями.

7. Методы (skills) — привязка к реальному стеку

area tool Что уже есть
text editor-pro 7-layer markdown pipeline (типографика, SEO-слой)
image comfyui генерация изображений через diffusion-воркфлоу
podcast silero Silero TTS 24kHz, пайплайн через normalizar/tts
video video-pipeline загрузка/обработка видео
seo_onpage editor-pro, astro структура, заголовки, schema
seo_semantics wordstat Wordstat API: частотность, кластеры
publish astro + deploy сборка Astro → публикация

Это ключевое: скиллы агента = твой существующий производственный стек, а не абстрактные описания. Retrieval по bge-m3 подгружает нужный метод под задачу.

8. Порядок внедрения

Шаг Что Критерий приёмки
0 P5 noAction + тонкий Channel агент умеет не действовать; вывод через интерфейс
1 Планировщик (task/pipeline/measure) задача с датой выполняется в срок
2 content_items + конвейер item проходит brief→published, переходы в журнале
3 outcomes + measure (Метрика/GSC/Webmaster/Wordstat) метрика замеряется через horizon, score пишется
4 capabilities — автономия по областям тир растёт после 3 успехов, падает после провала
5 skills + retrieval + reflection нужный метод подгружается по задаче; self_observations оживают
6 deals + counterparties заказ клиента проходит offered→paid
7 ledger — энергия результат пополняет энергию, дефицит замедляет тики

Зависимости: 3 требует 1 и 2. 4 требует 3. 5 требует 2. 7 требует 3.

9. Что НЕ делаем

  • Рекламные метрики (Директ/CPA) как основу — ушло из фокуса.
  • Соцсеть/ленту/подписки внутри агента.
  • Токены как валюту.
  • Полный harness-реестр.
  • «Суперразум из общества».

10. Открытые вопросы

  1. Свои сайты или клиентские заказы в первую очередь? (влияет на приоритет шага 2 vs 6; предлагаю сначала свои сайты — полный контроль над метриками).
  2. Кто ставит horizon_days — агент предлагает, человек правит? (Мой дефолт.)
  3. Где предел «качества» текста — только метрики или ещё экспертная оценка Ника обязательна перед публикацией на tier<3.