Архитектура памяти AI-агента OpenClaw
Версия: 1.1 (blueprint + post-deploy)
Дата: 2026-06-24
Автор: Alexey + Нолик
Статус: MemOS развёрнут на assistai. Плагин @mem0/openclaw-mem0 найден, готов к установке.
0. Назначение документа
Этот документ — blueprint архитектуры памяти персональной AI-ассистент-системы Alexey. Описывает:
- слоистую модель памяти (L0–L5);
- протокол записи/чтения по типам информации; -映射у между существующими слоями (Vault, MEMORY.md, session search) и новыми слоями MemOS;
- правила гигиены (expiration, fusion, dedup, archiving, conflict resolution);
- план миграции существующих 15
memory/*.mdфайлов в MemOS; - конфигурацию MemOS.env и плагина
memos-cloud-openclaw-plugin.
Документ — единый источник правды для реализации. После деплоя — обновлять по факту, версионировать.
1. Обновлённая слоистая архитектура
1.1 Принципиальная модель
Система переходит с 4-слойной модели (L1–L4 из wiki) на 6-слойную (L0–L5), где:
- L0–L2 остаются «горячими» (in-every-prompt или on-session-start) — быстрые, компактные, всегда доступны.
- L3–L4 становятся «тёплыми» (retrieval-based) — ищутся по запросу через MemOS.
- L5 — «холодный» архив (session logs, raw traces).
1.2 Таблица слоёв
| Слой | Имя | Назначение | Объём | Когда загружается | Технология | Статус |
|---|---|---|---|---|---|---|
| L0 | Inline | Правила работы, инфраструктура, личность | ~2.7 KB | В каждый prompt | MEMORY.md | ✅ существует |
| L1 | Instructions | Идентичность агента, пользовательские prefs | ~5–10 KB | В каждый prompt | SOUL.md, AGENTS.md, USER.md | ✅ существует |
| L2 | Vault | Структурированные долгоживущие факты: project-state, user-profile, decisions-log, daily journals | ~50–200 KB | На старте сессии | Obsidian Vault (markdown) | ✅ существует, расширить |
| L3 | MemOS Memory | Семантически индексированные факты, извлекаемые по запросу | Без ограничений | Поиск per-task (vector + FTS5 + keyword) | MemOS API + Neo4j + Polza embeddings | 🆕 внедряется |
| L4 | MemOS Graph | Связи между сущностями (проекты, серверы, люди, решения) | Без ограничений | Cypher-запросы, traversal | Neo4j Community | 🆕 внедряется |
| L5 | Session Archive | Сырые транскрипты прошлых сессий | Растёт | Поиск по session search | OpenClaw session logs | ✅ существует |
1.3 Что осталось, что новое, что перемещается
| Компонент | Было (wiki 2026-05-04) | Стало (post-MemOS) | Действие |
|---|---|---|---|
MEMORY.md | L1 Inline, ~2.2 KB | L0 Inline, ~2.7 KB | Остаётся, переименован в L0 для ясности |
SOUL/AGENTS/USER.md | L2 Instructions | L1 Instructions | Остаётся, перенумерован |
| Obsidian Vault | L3, read on session start | L2 Vault | Остаётся, но часть контента мигрирует в L3 |
| Session search | L4 | L5 Archive | Остаётся, перенумерован |
| Daily journals | В Vault (L3) | Дублируются: краткий checkpoint → L2 Vault, полный trace → L3 MemOS (L1 Trace) | 🆕 Раздвоение |
| Decisions-log | В Vault (L3) | Дублируются: запись в L2 + индексация в L3/L4 (MemOS L2 Policy) | 🆕 Раздвоение |
| Project-state | В Vault (L3) | Дублируется: canonical в L2, семантический индекс в L3 (MemOS L3 World Model) | 🆕 Раздвоение |
| Процедуры (deploy, config) | В AGENTS.md и skills | Дублируются: человекочитаемая версия в L1/L2, исполняемая — в Skills Workshop + MemOS L4 | 🆕 Раздвоение |
| Граф связей | ❌ отсутствовал | L4 MemOS Graph (Neo4j) | 🆕 Внедряется |
| Auto checkpoint | ❌ не реализовано | L3/L5 автоматически через плагин | 🆕 Внедряется |
| Cleanup/archive/dedup/decay | ❌ не реализовано | L3 hygiene через MemOS | 🆕 Внедряется |
| Vector search over vault | ❌ не реализовано | L3 retrieval | 🆕 Внедряется |
| Conflict resolution | ❌ не реализовано | L3 hygiene + L2 canonical | 🆕 Внедряется |
1.4 Концептуальная карта
┌─────────────────────────────────────────────────────────────────┐
│ Каждый prompt (in-context) │
│ ┌──────────┐ ┌──────────┐ │
│ │ L0 │ │ L1 │ │
│ │ MEMORY │ │ SOUL/AG │ │
│ │ .md │ │ ENTS/USER│ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────┘
▲
│ session start
┌─────────────────────────────────────────────────────────────────┐
│ On session start (read once) │
│ ┌──────────────────────────────────────┐ │
│ │ L2 Vault (Obsidian) │ │
│ │ Agent-Shared/ Agent-OpenClaw/ │ │
│ │ user-profile project-state │ │
│ │ decisions-log daily/ weekly/ │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
▲
│ per-task retrieval
┌─────────────────────────────────────────────────────────────────┐
│ Per-task retrieval (semantic search) │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ L3 MemOS Memory │ │ L4 MemOS Graph │ │
│ │ vector + FTS5 + │───▶│ Neo4j Cypher │ │
│ │ keyword + error- │ │ entities + edges │ │
│ │ signature │ │ │ │
│ └─────────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
▲
│ on demand (deep search)
┌─────────────────────────────────────────────────────────────────┐
│ On-demand (deep search) │
│ ┌──────────────────────────────────────┐ │
│ │ L5 Session Archive │ │
│ │ raw transcripts, jq-based search │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
2. Протокол распределения — что куда пишется
2.1 Матрица «тип информации → слой»
| Тип информации | L0 MEMORY | L1 Instr | L2 Vault | L3 MemOS | L4 Graph | L5 Archive |
|---|---|---|---|---|---|---|
| Quick facts о пользователе (имя, возраст, prefs) | ⚡ критичные | ✅ в USER.md | ✅ canonical в user-profile | ✅ индекс | ✅ узел | — |
| Статус проекта (project-state) | — | — | ✅ canonical | ✅ индекс | ✅ узел + связи | — |
| Daily activity logs (checkpoints) | — | — | ✅ краткий | ✅ полный trace | — | ✅ сырой |
| Решения и rationale | — | — | ✅ append-only в decisions-log | ✅ индекс как Policy | ✅ узел Decision | — |
| Инфраструктурные факты (IP, порты, пути, configs) | ⚡ топ-3 критичных | — | ✅ canonical | ✅ индекс | ✅ узлы Server/Service + связи | — |
| Error logs и lessons learned | — | — | ✅ в mistakes.md | ✅ с error-signature | ✅ узел Error + связь caused_by | ✅ сырой лог |
| Повторяемые процедуры (deploy, config) | — | ✅ краткая ссылка | ✅ человекочитаемая | — | — | — (исполняемая — в Skills Workshop) |
| Session-specific context | — | — | ✅ working-context.md | ✅ trace | — | ✅ |
| Большие knowledge-документы (specs, contracts, tech docs) | — | — | ❌ нет, слишком большие | ❌ нет, это для Wiki | — | — (хранятся в Wiki + файлах) |
| Личность агента (SOUL.md, USER.md) | — | ✅ canonical | — | — | — | — |
| Temporary task context (рабочий буфер) | — | — | ⚡ working-context.md | — | — | — |
| Долгосрочные связи между сущностями (graph) | — | — | — | — | ✅ canonical | — |
2.2 Условные обозначения
- ✅ = хранится здесь canonical или полная версия
- ⚡ = хранится здесь краткая/критичная выжимка
- Индекс = семантически индексируется, но canonical живёт в другом слое
- — = не хранится
2.3 Правила для пограничных случаев
Большие документы (specs, contracts): НЕ в MemOS, НЕ в Vault. Хранятся в:
/root/Documents/или workspace как файлы;- публикуются в Wiki (wiki.unf86.org) для долгоживущих;
- в MemOS хранится только метка-указатель (
{type: "doc-ref", path, summary, tags}), не сам документ.
Skills/процедуры: человекочитаемая инструкция в L1/L2 (AGENTS.md или отдельный md), исполняемая версия — в Skills Workshop (не в MemOS). В MemOS L4 хранится метка о существовании skill и когда его применять.
Лог переписки: в L5 (session archive) автоматически. В L3 — только извлечённые факты и решения, не сырые сообщения.
3. Маппинг слоёв MemOS на нашу систему
3.1 Таблица соответствий
| MemOS layer | Наш слой | Где живёт | Примеры содержимого |
|---|---|---|---|
| L1 Trace — raw interaction history | L3 MemOS Memory (trace partition) + L5 Archive | MemOS API → Neo4j; сырые транскрипты — в session logs | «2026-06-24 00:58 — пользователь спросил X, агент ответил Y, использовал tool Z» |
| L2 Policy — induced cross-task strategies | L2 Vault decisions-log.md (canonical) + L3 MemOS (индекс) | Vault + MemOS | «При деплое всегда проверяем Caddy config перед restart», «Для vision-задач используем polza/qwen3.6-plus вместо Opus» |
| L3 World Model — compressed knowledge about environment | L2 Vault project-state.md + user-profile.md (canonical) + L3 MemOS (индекс) + L4 Graph | Vault + MemOS + Neo4j | «assist.unf86.org — Contabo, OpenClaw+Hermes», «Polza — фолбэк-провайдер LLM», «LightRAG удалён 2026-06-23» |
| L4 Skills — crystallized repeatable procedures | L1 AGENTS.md (краткие) + Skills Workshop (исполняемые) + L3 MemOS (метки) | Instructions + Workshop + MemOS | «Как настроить Caddy reverse proxy», «Как подключить новый MCP-сервер», «Deploy OpenClaw на новый сервер» |
3.2 Детализация каждого MemOS-слоя в нашем контексте
L1 Trace — «Журнал взаимодействий»
Что содержит:
- Каждую значимую транзакцию: user→agent запрос, agent→tool вызов, tool→agent результат, agent→user ответ.
- Timestamp, session ID, channel (telegram/web), используемые tools, модели.
- Ошибки и их контекст.
Что НЕ содержит:
- Сырые байты, дампы памяти, полные содержимого файлов (только path + hash).
- Приватные данные пользователя (токены, пароли) — фильтруются на этапе записи.
Объём: растёт, но архивируется (см. §4).
Пример записи:
{
"ts": "2026-06-24T00:58:00+02:00",
"session": "agent:main:telegram:direct:364731175:thread:148243",
"channel": "telegram",
"user_id": "364731175",
"model": "unf86/claude-opus-4-6",
"event": "tool_call",
"tool": "memory_search",
"query": "MemOS architecture",
"result_summary": "3 hits, top score 0.48",
"tags": ["memory", "architecture", "research"]
}L2 Policy — «Индуцированные стратегии»
Что содержит:
- Решения, принятые на основе опыта (cross-task patterns).
- Исправления от пользователя (corrections).
- Выбранные подходы из альтернатив + rationale.
- Запрещённые паттерны («не делай так больше»).
Примеры (из истории):
- «Для vision-задач —
polza/qwen3.6-plus, не Opus» (2026-04-17) - «При важных инфра-действиях — самая мощная кодерская модель, потом revert к default»
- «Paperclip API integration — drop, Alexey не хочет» (2026-04-17)
- «LightRAG на assist — удалить, не используется» (2026-06-23)
Запись: canonical в Agent-Shared/decisions-log.md (append-only), индекс в MemOS L2.
L3 World Model — «Знания о среде»
Что содержит:
- Инфраструктурные факты: серверы, сервисы, порты, DNS, провайдеры.
- Состояния проектов: что запущено, что в работе, что на паузе.
- Профиль пользователя: preferences, habits, timezone, рабочий график.
- Окружение: модели, провайдеры, их статус и стоимость.
Примеры:
- «orchestr.unf86.org (AdminVPS) — Paperclip (CEO/CTO)»
- «assist.unf86.org (Contabo) — Hermes + OpenClaw, шлюз»
- «mon.unf86.org (HostKEY) — мониторинг + бэкапы»
- «assistai.unf86.org (HostKEY) — тестовый, локальный LightRAG, Uptime-Kuma»
- «Провайдеры LLM: Wormsoft (основной), Polza (фолбэк), SEMAXAI, AIHubMix»
Запись: canonical в Agent-Shared/project-state.md (перезаписывается с timestamp) и Agent-Shared/user-profile.md (по коррекции). Семантический индекс в MemOS L3. Граф связей в Neo4j L4.
L4 Skills — «Кристаллизованные процедуры»
Что содержит:
- Повторяемые процедуры: deploy, config, миграции, backup, диагностика.
- Pattern-match: «когда задача похожа на X — применять процедуру Y».
- Ссылки на исполняемые skills в Skills Workshop.
Примеры:
- «Настройка Caddy reverse proxy для нового субдомена»
- «Подключение нового MCP-сервера к OpenClaw»
- «Деплой OpenClaw на новый сервер»
- «Восстановление из бэкапа mon.unf86.org»
Запись: человекочитаемая инструкция в AGENTS.md или отдельном md в Vault. Исполняемая версия — в Skills Workshop (skill_workshop tool). В MemOS L4 — метка-указатель: {skill_name, version, triggers, location}.
4. Правила гигиены памяти
4.1 Expiration — что истекает, что живёт вечно
| Категория | TTL | Действие по истечении |
|---|---|---|
| L1 Trace (сырые взаимодействия) | 90 дней | Архивировать в L5 (сжатый), удалить из L3 |
| L2 Policy (решения) | ❌ бессрочно | Никогда не истекает, но может быть superseded новым решением |
| L3 World Model — инфраструктура | Проверка каждые 30 дней | Если факт не подтверждён — помечать stale, через 60 дней — архивировать |
| L3 World Model — проект-стейт | Проверка каждые 7 дней | Если проект завершён — перемещать в Agent-OpenClaw/archive/projects/ |
| L3 World Model — user-profile | ❌ бессрочно | Обновляется по коррекции |
| L4 Skills (процедуры) | Проверка каждые 90 дней | Если не использовался 90 дней — помечать deprecated, через 180 — архивировать |
| L5 Session Archive | 365 дней | После — удалять (сжатый лог остаётся в backup) |
| Daily journals | 30 дней в L2, бессрочно в L3 (индекс) | Через 30 дней — из L2 перемещать в Agent-OpenClaw/archive/daily/ |
| Working-context.md | Перезаписывается каждую сессию | Не истекает, но invalidate на старте новой сессии |
Исключения (никогда не истекает):
MEMORY.md(L0) — обновляется, не удаляется.SOUL.md,AGENTS.md,USER.md(L1) — обновляются.decisions-log.md— append-only, бессрочно.user-profile.md— обновляется по коррекции, не истекает.
4.2 Fusion — когда сливать похожие памяти
Условия fusion (все три одновременно):
- Семантическая близость (cosine similarity) ≥ 0.92.
- Одинаковый
type(оба Policy, оба World-Model, оба Trace). - Одинаковый
scope(тот же проект/сервер/тема).
Пороги:
- 0.92–0.96 — предложить fusion агенту на review (semi-auto).
- >0.96 — auto-fuse, оставить merged-запись с
sources: [id1, id2], оригиналы пометитьfused_into: merged_id.
Что не сливать:
- Decisions-log ��аписи (даже если семантически близки — разные решения в разное время).
- Error-логи с разными error-signature.
- Trace-записи (каждая транзакция уникальна по timestamp).
4.3 Dedup — обнаружение дубликатов
Типы дубликатов:
- Exact match — одинаковый content hash → auto-drop нового.
- Near-duplicate — cosine ≥ 0.98, тот же timestamp ±60s → auto-drop, оставить canonical.
- Semantic duplicate — cosine ≥ 0.92, разный timestamp → fusion (см. §4.2).
Когда проверять:
- На записи (before insert) — обязательно.
- Раз в неделю — cron-задача
memos dedup --scan.
Что НЕ дедуплицируется:
- Trace-записи (по определению уникальны).
- Daily journals (разные дни — разные записи).
4.4 Archiving — что в архив, что в delete
| Объект | Архив → L5 | Удалить навсегда |
|---|---|---|
| Trace старше 90 дней | ✅ сжатый | ✅ из L3 после архивации |
| Session logs старше 365 дней | ✅ в backup | ✅ из L5 |
| Superseded decisions | ❌ остаются в decisions-log | ❌ никогда |
| Завершённые проекты | ✅ Agent-OpenClaw/archive/projects/ | ❌ никогда |
| Deprecated skills | ✅ Agent-OpenClaw/archive/skills/ | ❌ никогда |
| Ошибочные факты (after correction) | ✅ помечать superseded_by | ❌ никогда (история) |
| Дубликаты после fusion | ✅ помечать fused_into | ❌ никогда (история) |
| Приватные данные (токены, пароли) | ❌ | ✅ немедленно, не архивировать |
4.5 Conflict resolution — когда факты противоречат
Алгоритм:
- Обнаружение: новый факт конфликтует с существующим (тот же
subject, другойvalue). - Приоритет источника:
- Явная коррекция пользователя → высший приоритет.
- Недавний trace (≤7 дней) → выше, чем старый.
- Официальный источник (доку, config file) → выше, чем вывод агента.
- Действие:
- Новый факт → canonical в L2/L3.
- Старый факт → помечается
superseded_by: new_id, superseded_at: timestamp. - В decisions-log → запись о конфликте и resolution.
- Уведомление: если конфликт неоднозначен (оба источника равнозначны) — агент спрашивает пользователя.
Пример:
[exist] assist.unf86.org → Contabo (from 2026-04-15)
[new] assist.unf86.org → Hetzner (from 2026-06-24, source: user correction)
→ [new] canonical, [exist] superseded_by=new, decisions-log += «Миграция assist на Hetzner»
4.6 Gate criteria — что проходит в память
Сохраняем (проходит gate):
- ✅ Решения (выбор из альтернатив + причина) → L2 + L3
- ✅ Факты-привязки (IP, порты, пути, зависимости) → L2 + L3 + L4
- ✅ Ошибки с последствиями → L2 (mistakes.md) + L3 (error-signature)
- ✅ Смена фазы проекта → L2 (project-state) + L3
- ✅ Исправления от пользователя → L1 (USER.md) + L2 (user-profile) + L3
- ✅ Новые процедуры/скиллы → L1/L2 + Skills Workshop + L3 (метка)
НЕ сохраняем (шум, gate отбрасывает):
- ❌ Техническая рутина (curl вернул 200, ls отработал)
- ❌ Промежуточные неудачные попытки (кроме error-signature)
- ❌ Содержимое файлов (оно в файлах)
- ❌ Общеизвестные факты («Python — язык программирования»)
- ❌ Приватные данные (токены, пароли, ключи) — фильтр на этапе записи
- ❌ Дубликаты (см. §4.3)
Тест gate: «Если через неделю агент прочитает это — изменит ли это его действия?»
- Да → сохраняем.
- Нет → отбрасываем.
5. Протокол записи
5.1 Что куда пишется — матрица
| Событие | L0 MEMORY | L1 Instr | L2 Vault | L3 MemOS | L4 Graph | L5 Archive |
|---|---|---|---|---|---|---|
| Явная команда «запомни X» | ⚡ если критично | — | ✅ | ✅ | ✅ если сущности | — |
| Конец сессии (checkpoint) | — | — | ✅ daily | ✅ trace summary | — | ✅ auto |
| Принято решение | — | — | ✅ decisions-log | ✅ Policy | ✅ Decision node | — |
| Инфра-изменение (IP, порт) | ⚡ если топ-3 | — | ✅ project-state | ✅ World Model | ✅ Server/Service update | — |
| Ошибка + lesson learned | — | — | ✅ mistakes.md | ✅ с error-signature | ✅ Error node + caused_by | ✅ сырой лог |
| Новая процедура | — | ⚡ ссылка в AGENTS.md | ✅ отдельный md | ✅ метка L4 skill | — | — |
| Коррекция пользователя | — | ✅ USER.md если prefs | ✅ user-profile | ✅ supersede старого | ✅ update node | — |
| Спавн субагента | — | — | — | ✅ trace | — | ✅ auto |
| Tool call | — | — | — | ✅ trace (краткий) | — | ✅ auto |
| Чат-сообщение user→agent | — | — | — | ✅ trace (без приватных данных) | — | ✅ auto |
5.2 Когда писать — триггеры
End of session:
- Агент пишет checkpoint в
Agent-OpenClaw/daily/YYYY-MM-DD.md. - Перезаписывает
working-context.md. - Если были решения — append в
decisions-log.md. - Плагин MemOS автоматически flush’ит trace за сессию в L3.
On decision (в момент принятия):
- Append в
decisions-log.md(canonical). - Индекс в MemOS L2 (Policy).
- Узел
Decisionв Neo4j с связями к затронутым сущностям.
On error (после дебага):
- Запись в
mistakes.md(canonical): что было, что ожидалось, причина, fix. - Индекс в MemOS L3 с
error-signature(stack hash + context). - Узел
Errorв Neo4j + связьcaused_byк компоненту.
On user request («запомни X»):
- Классификация X: fact / decision / preference / infra.
- Маршрутизация по §5.1.
On infra change (детектится агентом или пользователем):
- Update
project-state.md(перезапись с timestamp). - Update L3 (supersede старого факта).
- Update L4 (update node properties).
Automatic (через плагин):
- Каждый tool call → L3 trace (краткий).
- Каждая сессия → L5 полный лог.
- Каждое принятое решение (детектируется по паттерну «выбираю X потому что Y») → L2 Policy candidate (на review агентом в конце сессии).
5.3 Что пишет в MEMORY.md (L0, manual, always-on)
Только критичные правила и топ-факты:
- Правила работы с инфраструктурой (5–7 пунктов).
- Текущая топ-инфраструктура (серверы, роли) — 4–5 строк.
- Топ-3 критичных факта, которые агент должен видеть в каждом prompt.
- Известные шорткаты/ограничения среды (например, «Telegram DM Topics требуют
[[reply_to_current]]»).
Размер: ≤3 KB. Жёстко. Если превышает — переносить в L1 или L2.
Кто пишет: только агент вручную по решению «это критично для каждого prompt». Никогда не автоматически.
5.4 Что пишет в MemOS (L3, automatic via plugin)
Автоматически (через memos-cloud-openclaw-plugin):
- Trace всех interactions (после фильтра приватных данных).
- Извлечённые факты (через MemReader на базе
unf86/gpt-5.4). - Error-signatures.
- Entity-relationship triples (для Neo4j).
Полуавтоматически (агент решает, плагин执行):
- Policy-записи (после review trace в конце сессии).
- Skill-метки (при создании нового skill).
Никогда в MemOS:
- Полные содержимые файлов (только path + hash + summary).
- Приватные данные (фильтр на записи).
- Сырые дампы логов (только извлечённые факты).
5.5 Что пишет в Vault (L2, agent decisions)
Только агент, только значимые изменения:
decisions-log.md— append-only.project-state.md— перезапись с timestamp.user-profile.md— по явной коррекции пользователя.daily/YYYY-MM-DD.md— checkpoint в конце сессии.mistakes.md— при error + lesson learned.working-context.md— перезапись в конце сессии.
Никогда не пишет автоматически в Vault: плагин MemOS не трогает Vault. Vault — human-readable canonical, редактируется только агентом (или пользователем напрямую).
5.6 Что пишется в оба (MemOS + Vault)
| Объект | Vault (canonical) | MemOS (index/search) |
|---|---|---|
| Решение | decisions-log.md | L2 Policy + L4 Decision node |
| Инфра-факт | project-state.md | L3 World Model + L4 Server/Service node |
| Error + lesson | mistakes.md | L3 с error-signature + L4 Error node |
| Процедура | AGENTS.md или отдельный md | L3 skill-метка (не canonical) |
| Daily checkpoint | daily/YYYY-MM-DD.md | L3 trace summary |
Принцип: Vault = canonical (человек читает, агент правит). MemOS = индекс (агент ищет, машина использует). Если противоречие — Vault wins, MemOS обновляется.
6. Протокол чтения
6.1 Что в каждом prompt (L0 + L1 inline)
Всегда в контексте:
MEMORY.md(~2.7 KB) — правила, топ-инфра, критичные факты.SOUL.md,AGENTS.md,USER.md(~5–10 KB) — идентичность, инструкции, prefs.
Размер inline-блока: ≤15 KB. Жёстко. Если превышает — переносить в L2.
6.2 Что извлекается per-task (L3 retrieval)
Когда: перед каждой генерацией ответа, если задача не тривиальная.
Как: memos-cloud-openclaw-plugin автоматически:
- Извлекает query из последнего user-сообщения.
- Vector search (top-k=10, cosine ≥0.65) по L3.
- FTS5 search по ключевым словам.
- Keyword exact-match для error-signature.
- Cypher-запрос в Neo4j для entities, упомянутых в query.
- Реранкинг, дедупликация, top-5 в контекст.
Размер retrieval-блока: ≤8 KB на ответ. Жёстко.
Что извлекается:
- Релевантные Policy (L2 MemOS).
- Релевантные World Model факты (L3 MemOS).
- Связанные сущности из графа (L4).
- Похожие ошибки (если задача — дебаг).
6.3 Что читается на старте сессии (L2 Vault)
На старте каждой сессии:
Agent-Shared/user-profile.md— кто пользователь.Agent-Shared/project-state.md— статус проектов.Agent-OpenClaw/working-context.md— текущий снимок.Agent-OpenClaw/daily/YYYY-MM-DD.md— если есть за сегодня.Agent-Shared/decisions-log.md— последние 10 записей (top of file).
Размер session-start блока: ≤30 KB. Если больше — читать только top.
6.4 Что ищется on-demand (L5 + L2 search)
Session search (L5):
- Когда L3 retrieval не нашёл ответа.
- Когда нужен сырой контекст прошлой беседы.
- Через
session-logsskill (jq-based).
Vault search (L2):
- Когда нужно найти в
decisions-log.md(append-only, растёт). - Когда нужно найти в
daily/за конкретный период. - Через
memory_searchtool (vector + FTS5).
Wiki search:
- Когда нужны большие знания (specs, доку).
- Через
web_fetchк wiki.unf86.org.
7. План миграции
7.1 Анализ существующих 15 memory/*.md файлов
| Файл | Размер | Тип контента | Куда мигрирует |
|---|---|---|---|
2026-04-15.md | 2.2 KB | Daily checkpoint | L2 (остаётся) + L3 (индекс trace) |
2026-04-15-2150.md | 170 B | Микро-checkpoint | L5 (архив), в L3 — только если есть уникальный факт |
2026-04-15-lightrag-mcp-test.md | 6.9 KB | Trace тестирования | L5 (архив), в L3 — извлечённые факты (Policy: «LightRAG MCP работает, но таймаутит на query») |
2026-04-15-lightrag-security.md | 2.7 KB | Security decisions | L2 decisions-log.md (append) + L3 Policy + L4 Server/Service nodes |
2026-04-16-gog-auth.md | 7.5 KB | Trace настройки gog | L5, в L3 — Policy «gog auth flow» + L4 Service: gog |
2026-04-17.md | 4.8 KB | Daily + decisions | L2 (остаётся) + L3 (индекс) + decisions-log (append ключевых) |
2026-04-18.md | 3.4 KB | Daily | L2 (остаётся) + L3 (индекс) |
2026-04-23.md | 846 B | Микро-checkpoint | L5, в L3 — только уникальные факты |
2026-04-23-1617.md | 170 B | Микро-checkpoint | L5, в L3 — только уникальные факты |
2026-04-24.md | 8.5 KB | Daily + decisions | L2 (остаётся) + L3 (индекс) + decisions-log (append) |
2026-04-26.md | 2.4 KB | Daily | L2 (остаётся) + L3 (индекс) |
2026-05-03-1001.md | 2.5 KB | Daily | L2 (остаётся) + L3 (индекс) |
2026-05-03-1819.md | 8.5 KB | Daily + decisions | L2 (остаётся) + L3 (индекс) + decisions-log (append) |
2026-05-13-1407.md | 2.2 KB | Daily | L2 (остаётся) + L3 (индекс) |
2026-06-11-2058.md | 310 B | Микро-checkpoint | L5, в L3 — только уникальные факты |
7.2 Что остаётся в MEMORY.md vs перемещается в MemOS
Остаётся в MEMORY.md (L0):
- «Правила работы с инфраструктурой» (6 пунктов) — критично для каждого prompt.
- «Инфраструктура Unf86» (4 сервера + провайдеры) — топ-факты.
- «Telegram DM Topics» — активное ограничение среды.
Перемещается в MemOS L3 (индексируется, убирается из L0):
- Детали про удаление LightRAG (2026-06-23) — это событие, не правило. В L0 — только «LightRAG на assist удалён», в L3 — полный контекст.
- Детали про MCP-сервер
@g99/lightrag-mcp-server— в L3 как World Model факт. - DNS/Caddy details — в L3 + L4 graph.
Перемещается в L1 (USER.md или AGENTS.md):
- Если есть prefs, которые сейчас в MEMORY.md — переносятся в USER.md.
7.3 Процедура миграции — шаги
Шаг 1: Подготовка (до деплоя MemOS)
# Backup существующих memory-файлов
mkdir -p /root/.openclaw/workspace/memory/_backup-pre-memos-2026-06-24
cp -a /root/.openclaw/workspace/memory/*.md \
/root/.openclaw/workspace/memory/_backup-pre-memos-2026-06-24/
# Backup MEMORY.md
cp /root/.openclaw/workspace/MEMORY.md \
/root/.openclaw/workspace/MEMORY.md.backup-pre-memos-2026-06-24Шаг 2: Деплой MemOS (на assistai.unf86.org)
- Запустить Neo4j Community (Docker).
- Запустить MemOS API (порт 8000).
- Настроить Polza embeddings (
text-embedding-3-small, 1536 dims). - Настроить
unf86/gpt-5.4для MemReader. - Проверить health:
curl http://assistai.unf86.org:8000/health.
Шаг 3: Установка плагина
- Установить
memos-cloud-openclaw-pluginв OpenClaw на assist.unf86.org. - Настроить
baseUrl: http://assistai.unf86.org:8000(или через Caddy HTTPS). - Настроить
apiKey,user_id: "openclaw-main".
Шаг 4: Импорт существующих memory-файлов в MemOS
# Скрипт миграции (концептуальный)
import os
from memos_cloud_openclaw_plugin import MemOSClient
client = MemOSClient(
base_url="http://assistai.unf86.org:8000",
api_key="...",
user_id="openclaw-main"
)
memory_dir = "/root/.openclaw/workspace/memory"
for filename in sorted(os.listdir(memory_dir)):
if not filename.endswith(".md"):
continue
filepath = os.path.join(memory_dir, filename)
with open(filepath, "r") as f:
content = f.read()
# Классификация контента
# - Если decisions → MemOS L2 Policy + append в decisions-log.md
# - Если infra-fact → MemOS L3 World Model + Neo4j nodes
# - Если trace → MemOS L1 Trace
# - Если micro-checkpoint → только L5 archive
client.ingest(
content=content,
source=filepath,
tags=["migration", "2026-06-24"],
auto_classify=True # MemReader классифицирует
)Шаг 5: Извлечение decisions в decisions-log.md
- Пройти по всем
memory/*.md, найти все решения. - Каждое решение → append в
Agent-Shared/decisions-log.md(canonical). - В MemOS → L2 Policy индекс.
Шаг 6: Извлечение entities в Neo4j
- Из всех memory-файлов извлечь сущности: серверы, сервисы, люди, проекты.
- Создать узлы в Neo4j:
Server,Service,Project,Person,Decision,Error. - Создать связи:
hosts,depends_on,decided_about,caused_by.
Шаг 7: Тримминг MEMORY.md
- Убрать из MEMORY.md детали, которые теперь в MemOS.
- Оставить только критичные правила и топ-факты (≤3 KB).
- Проверить: каждый prompt всё ещё получает критичное.
Шаг 8: Валидация
- Запустить тестовую сессию.
- Проверить: L0+L1 в prompt, L2 читается на старте, L3 retrieval работает.
- Проверить:
memory_searchвозвращает релевантные результаты из MemOS. - Проверить: Neo4j Cypher-запросы работают.
Шаг 9: Включение auto-write
- Включить плагин на auto-write trace.
- Настроить end-of-session checkpoint.
- Настроить weekly dedup cron.
7.4 Откат (rollback)
Если MemOS нестабилен:
- Отключить плагин (
memos-cloud-openclaw-plugin.enabled = false). - OpenClaw продолжает работать на L0–L2 + L5 (как сейчас).
- MemOS данные не теряются (Neo4j persistence).
- Восстановить MEMORY.md из backup при необходимости.
- Починить MemOS, включить плагин снова.
Принцип: MemOS — augmentation, не critical path. Система работает и без него, но хуже (нет semantic search, нет графа).
8. Конфигурация
8.1 MemOS.env (на assistai.unf86.org)
# === MemOS Server Config ===
# LLM для MemReader (классификация, extraction)
MEMOS_LLM_PROVIDER=openai-compatible
MEMOS_LLM_BASE_URL=https://api.polza.ru/v1
MEMOS_LLM_API_KEY=${POLZA_API_KEY}
MEMOS_LLM_MODEL=unf86/gpt-5.4
MEMOS_LLM_TEMPERATURE=0.1
# Embeddings (Polza, text-embedding-3-small)
MEMOS_EMBEDDING_PROVIDER=openai-compatible
MEMOS_EMBEDDING_BASE_URL=https://api.polza.ru/v1
MEMOS_EMBEDDING_API_KEY=${POLZA_API_KEY}
MEMOS_EMBEDDING_MODEL=text-embedding-3-small
MEMOS_EMBEDDING_DIMS=1536
# Graph (Neo4j Community)
MEMOS_GRAPH_BACKEND=neo4j
MEMOS_GRAPH_URI=bolt://localhost:7687
MEMOS_GRAPH_USER=neo4j
MEMOS_GRAPH_PASSWORD=${NEO4J_PASSWORD}
MEMOS_GRAPH_DATABASE=memos
# Vector store (встроенный или внешний)
MEMOS_VECTOR_BACKEND=sqlite-vec
MEMOS_VECTOR_PATH=/var/lib/memos/vectors.db
# FTS5 (SQLite)
MEMOS_FTS_BACKEND=sqlite
MEMOS_FTS_PATH=/var/lib/memos/fts.db
# API
MEMOS_API_HOST=0.0.0.0
MEMOS_API_PORT=8000
MEMOS_API_AUTH_ENABLED=true
MEMOS_API_API_KEY=${MEMOS_API_KEY}
# Hygiene
MEMOS_DEDUP_THRESHOLD=0.98
MEMOS_FUSION_THRESHOLD=0.92
MEMOS_FUSION_AUTO_THRESHOLD=0.96
MEMOS_TRACE_TTL_DAYS=90
MEMOS_WORLD_MODEL_STALE_DAYS=60
MEMOS_SKILL_DEPRECATED_DAYS=180
MEMOS_ARCHIVE_TTL_DAYS=365
# Retrieval
MEMOS_RETRIEVAL_TOP_K=10
MEMOS_RETRIEVAL_MIN_COSINE=0.65
MEMOS_RETRIEVAL_CONTEXT_LIMIT_KB=8
MEMOS_RETRIEVAL_RERANK=true
# Privacy filter
MEMOS_PRIVACY_FILTER_ENABLED=true
MEMOS_PRIVACY_PATTERNS=api_key,token,password,secret,private_key8.2 Конфигурация плагина (OpenClaw на assist.unf86.org)
{
"memos-cloud-openclaw-plugin": {
"enabled": true,
"baseUrl": "https://assistai.unf86.org:8000",
"apiKey": "${MEMOS_API_KEY}",
"user_id": "openclaw-main",
"agent_id": "openclaw",
"auto_write_trace": true,
"auto_extract_facts": true,
"auto_extract_entities": true,
"retrieval": {
"enabled": true,
"top_k": 10,
"min_cosine": 0.65,
"context_limit_kb": 8,
"rerank": true,
"on_every_prompt": false,
"on_tool_call": true
},
"privacy_filter": {
"enabled": true,
"patterns": ["api_key", "token", "password", "secret", "private_key"],
"redact_with": "[REDACTED]"
},
"write_targets": {
"trace": "memos_l1",
"policy": "memos_l2+vault_decisions_log",
"world_model": "memos_l3+vault_project_state",
"skills": "memos_l4_metka+skills_workshop"
},
"session_checkpoint": {
"enabled": true,
"on_end": true,
"write_daily": true,
"write_working_context": true
},
"hygiene_cron": {
"dedup": "0 3 * * 0",
"archive": "0 4 * * 0",
"expire": "0 5 * * 0"
}
}
}8.3 Caddy reverse proxy (на assistai.unf86.org)
# /etc/caddy/Caddyfile (фрагмент)
memos.assistai.unf86.org {
reverse_proxy localhost:8000
basicauth {
openclaw $2a$14$... # bcrypt hash
}
encode gzip
header {
Strict-Transport-Security "max-age=31536000"
X-Content-Type-Options nosniff
X-Frame-Options DENY
}
}Или (если плагин ходит по локальной сети между серверами — проще):
- OpenClaw на assist.unf86.org →
http://assistai.unf86.org:8000(прямой HTTP, через WireGuard/Tailscale). - Или через SSH tunnel.
8.4 Параметры retrieval — тонкая настройка
| Параметр | Значение | Обоснование |
|---|---|---|
top_k | 10 | Баланс между recall и контекст-окном |
min_cosine | 0.65 | Ниже — шумит, выше — пропускает релевантное |
context_limit_kb | 8 | Не перегружать prompt |
rerank | true | MemReader переранжирует после retrieval |
on_every_prompt | false | Не делать retrieval для тривиальных ответов |
on_tool_call | true | Перед tool call — искать похожие ошибки/процедуры |
8.5 Политики expiration — конфигурация
expiration:
trace:
ttl: 90d
action: archive_to_l5_then_delete_from_l3
world_model_infra:
stale_after: 30d
archive_after: 60d
action: mark_stale_then_archive
world_model_project:
check_every: 7d
on_complete: move_to_archive
skills:
deprecated_after: 90d_unused
archive_after: 180d
session_logs:
ttl: 365d
action: delete_after_backup
permanent:
- memory.md
- soul.md
- agents.md
- user.md
- decisions_log.md
- user_profile.md8.6 Конфигурация Neo4j
// Создание индексов
CREATE INDEX server_name IF NOT EXISTS FOR (n:Server) ON (n.name);
CREATE INDEX service_name IF NOT EXISTS FOR (n:Service) ON (n.name);
CREATE INDEX project_name IF NOT EXISTS FOR (n:Project) ON (n.name);
CREATE INDEX decision_ts IF NOT EXISTS FOR (n:Decision) ON (n.timestamp);
CREATE INDEX error_signature IF NOT EXISTS FOR (n:Error) ON (n.signature);
// Constraints
CREATE CONSTRAINT server_unique IF NOT EXISTS FOR (n:Server) REQUIRE n.name IS UNIQUE;
CREATE CONSTRAINT service_unique IF NOT EXISTS FOR (n:Service) REQUIRE n.name IS UNIQUE;8.7 Примеры Cypher-запросов для агента
// Все сервисы на сервере
MATCH (s:Server {name: 'assist.unf86.org'})-[:hosts]->(svc:Service)
RETURN svc.name, svc.port, svc.status;
// Все решения по проекту
MATCH (p:Project {name: 'OpenClaw'})<-[:about]-(d:Decision)
RETURN d.timestamp, d.summary, d.rationale
ORDER BY d.timestamp DESC LIMIT 10;
// Все ошибки сервиса и их причины
MATCH (svc:Service {name: 'LightRAG'})<-[:occurred_in]-(e:Error)
OPTIONAL MATCH (e)-[:caused_by]->(cause)
RETURN e.timestamp, e.signature, e.summary, cause.name;
// Что зависит от этого сервера
MATCH (s:Server {name: 'assist.unf86.org'})<-[:depends_on]-(dep)
RETURN dep.name, dep.type;9. Контрольные метрики (post-deploy)
После внедрения — отслеживать:
| Метрика | Цель | Как измерять |
|---|---|---|
| Размер L0+L1 в prompt | ≤15 KB | Логировать per-prompt |
| Recall L3 retrieval | ≥80% релевантных ответов найдено | Тестовый набор запросов |
| Precision L3 retrieval | ≥90% retrieved-фактов релевантны | Тестовый набор |
| Latency retrieval | ≤500 ms | Метрики плагина |
| Дубликаты в L3 | ≤2% | Weekly dedup cron report |
| Conflicts unresolved | 0 | Все конфликты либо auto-resolved, либо escalated |
| Vault size growth | ≤10% в месяц | du -sh Agent-OpenClaw/ |
| Session-start read time | ≤2 s | Метрики OpenClaw |
| Trace volume в L3 | ≤100 MB/месяц | Метрики MemOS |
10. Открытые вопросы (на обсуждение)
- Polza rate limits: выдержит ли Polza embeddings при автоматическом trace-writing? Нужен ли batching?
- Neo4j Community vs Enterprise: Community — один database, нет RBAC. Достаточно для одного пользователя?
- Backup MemOS: как бэкапить Neo4j + SQLite-vec + FTS5? Раз в сутки на mon.unf86.org?
- Multi-agent: Hermes тоже пишет в MemOS? Отдельный
user_id: "hermes"или общий с OpenClaw? - Wiki integration: индексировать ли wiki.unf86.org в MemOS? Или держать отдельно?
- Skills Workshop ↔ MemOS L4: как синхронизировать? Webhook при apply?
- Memory search fallback: если MemOS недоступен — fallback на
memory_searchпо Vault?
11. Итоговая схема — однострочник
L0 (MEMORY.md, ~3KB) + L1 (SOUL/AGENTS/USER, ~10KB) → каждый prompt
L2 (Vault: user-profile, project-state, decisions-log, daily) → session start
L3 (MemOS: trace + policy + world model, vector+FTS5) → per-task retrieval
L4 (Neo4j: entities + relationships) → per-task Cypher
L5 (Session archive, jq-search) → on-demand
Принцип: критичное — в prompt (L0+L1). Canonical — в Vault (L2). Searchable — в MemOS (L3+L4). Сырое — в архиве (L5).
Документ утверждён как blueprint для реализации.
Deploys выполнен 2026-06-24.
Следующий шаг: установка плагина @mem0/openclaw-mem0 на assistai, миграция memory/*.md, настройка auto-capture/recall.
12. Фактический деплой (на 2026-06-24)
12.1 Что развёрнуто
| Компонент | Статус | Детали |
|---|---|---|
| MemOS API | ✅ running | systemd memos.service, /opt/memos, Python/uvicorn, порт 8000 |
| Qdrant | ✅ running | Docker qdrant-memos, порты 6333-6334, v1.18.2 |
| Neo4j Community | ✅ running | Docker neo4j-memos, порты 7474/7687, v5.26.27 |
| Caddy reverse proxy | ✅ running | memos.unf86.org → 127.0.0.1:8000, HTTPS (Let’s Encrypt) |
| DNS | ✅ | memos.unf86.org → 43.245.226.189 |
| Cube | ✅ created | openclaw-main, owner: alexey |
| Тестовая запись | ✅ | Добавлена, search работает, vector + rerank активны |
12.2 Реальный конфиг MemOS (/opt/memos/.env)
# === LLM (UNF86 — gpt-5.4) ===
OPENAI_API_KEY=sk-4ab…adf9
OPENAI_API_BASE=https://api.unf86.org/v1
MOS_CHAT_MODEL=gpt-5.4
# === MemReader ===
MEMRADER_MODEL=gpt-5.4
MEMRADER_API_KEY=sk-4ab…adf9
MEMRADER_API_BASE=https://api.unf86.org/v1
# === Embeddings (Polza) ===
MOS_EMBEDDER_MODEL=text-embedding-3-small
MOS_EMBEDDER_BACKEND=universal_api
MOS_EMBEDDER_API_BASE=https://polza.ai/api/v1
MOS_EMBEDDER_API_KEY=pza_R_…af2X
EMBEDDING_DIMENSION=1536
MOS_RERANKER_BACKEND=cosine_local
# === Neo4j ===
NEO4J_BACKEND=neo4j-community
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=***
NEO4J_DB_NAME=neo4j
MOS_NEO4J_SHARED_DB=false
# === Scheduler ===
DEFAULT_USE_REDIS_QUEUE=false
# === API ===
ENABLE_CHAT_API=true
# === Qdrant (vector store) ===
MOS_VEC_BACKEND=qdrant
MOS_VEC_URI=http://localhost:633312.3 systemd unit
# /etc/systemd/system/memos.service
[Unit]
Description=MemOS API Server
After=network.target docker.target
Wants=docker.target
[Service]
Type=simple
WorkingDirectory=/opt/memos
ExecStart=/opt/miniconda/envs/memos/bin/python -m dotenv run -- /opt/miniconda/envs/memos/bin/uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8000
Restart=on-failure
RestartSec=10
Environment=PATH=/opt/miniconda/envs/memos/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Install]
WantedBy=multi-user.target12.4 Docker-контейнеры
# Qdrant
docker run -d --name qdrant-memos -p 6333:6333 -p 6334:6334 \
-v /var/lib/qdrant:/qdrant/storage qdrant/qdrant:latest
# Neo4j Community
docker run -d --name neo4j-memos -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/*** \
-v /var/lib/neo4j:/data neo4j:5-community12.5 Официальный плагин для OpenClaw
Разработчик mem0ai выпускает официальный npm-пакет: @mem0/openclaw-mem0.
Документация: https://docs.mem0.ai/integrations/openclaw
Поддерживает два режима:
- Platform mode — подключение к Mem0 Cloud (не наш случай)
- Open-source mode — подключение к self-hosted MemOS (наш случай)
В open-source режиме плагин работает с Qdrant + Neo4j + OpenAI-compatible LLM/embedder — точно нашим стеком.
Возможности плагина:
- Triage (auto-capture) — автоматическое извлечение фактов из разговоров
- Recall (auto-recall) — поиск релевантных воспоминаний перед каждым ответом
- Dream — периодическая консолидация: дедупликация, resolution конфликтов, cleanup
- 8 agent tools — явные операции с памятью во время对话
Команды установки:
# Установка плагина
openclaw plugins install @mem0/openclaw-mem0
# Инициализация в open-source режиме
openclaw mem0 init --mode open-source \
--oss-llm openai --oss-llm-key <UNF86-key> --oss-llm-url https://api.unf86.org/v1 \
--oss-embedder openai --oss-embedder-key <Polza-key> --oss-embedder-url https://polza.ai/api/v1 \
--oss-vector qdrant --oss-vector-url http://localhost:6333Конфигурация в openclaw.json:
{
"plugins": {
"slots": {
"memory": "openclaw-mem0"
},
"entries": {
"openclaw-mem0": {
"enabled": true,
"config": {
"userId": "alexey",
"skills": {
"triage": { "enabled": true },
"recall": {
"enabled": true,
"tokenBudget": 1500,
"rerank": true,
"keywordSearch": true,
"identityAlwaysInclude": true
},
"dream": { "enabled": true },
"domain": "companion"
},
"oss": {
"llm": {
"provider": "openai",
"apiKey": "${OPENAI_API_KEY}",
"baseUrl": "https://api.unf86.org/v1",
"model": "gpt-5.4"
},
"embedder": {
"provider": "openai",
"apiKey": "${MOS_EMBEDDER_API_KEY}",
"baseUrl": "https://polza.ai/api/v1",
"model": "text-embedding-3-small"
},
"vector": {
"provider": "qdrant",
"url": "http://localhost:6333"
}
}
}
}
}
}
}⚠️ Важно: плагин занимает эксклюзивный слот plugins.slots.memory — заменяет memory-core. Встроенный memory_search по memory/*.md перестаёт работать. Нужно мигрировать memory-файлы в MemOS ДО установки плагина.
12.6 Совместимость
| Параметр | Значение | Совместимо? |
|---|---|---|
| Архитектура assistai | x86_64 | ✅ (баг #4050 касается только ARM64) |
| OpenClaw | 2026.6.9 | ✅ (требуется >= 2026.4.25) |
| Node.js | v22.22.2 | ✅ |
| MemOS API | 1.0.1 | ✅ |
| Qdrant | 1.18.2 | ✅ |
| Neo4j | 5.26.27 Community | ✅ |
12.7 Открытые вопросы — обновление (§10)
| # | Вопрос | Статус |
|---|---|---|
| 1 | Polza rate limits для embeddings | ⚠️ Открыт. Нужен batching. Плагин имеет встроенный batch, но при большом trace volume может упереться в лимит. Контролировать после включения auto-capture. |
| 2 | Neo4j Community vs Enterprise | ✅ Закрыт. Community достаточно для одного пользователя. |
| 3 | Backup MemOS | ⚠️ Открыт. План: daily dump Neo4j + Qdrant snapshots → mon.unf86.org. Не реализовано. |
| 4 | Multi-agent: Hermes в MemOS | ⚠️ Открыт. Решение: отдельный user_id: "hermes" в том же MemOS. Реализовать после стабилизации OpenClaw. |
| 5 | Wiki integration | ⚠️ Открыт. Решение: не индексировать Wiki в MemOS. Wiki — отдельный источник, MemOS — для agent memory. В MemOS хранить только метки-указатели. |
| 6 | Skills Workshop ↔ MemOS L4 | ⚠️ Открыт. Не реализовано. Webhook при apply — будущая задача. |
| 7 | Memory search fallback | ⚠️ Открыт. План: если MemOS недоступен — fallback на memory-core (переключение слота). Не автоматизировано. |
| 8 | API auth | ⚠️ Открыт. MemOS API сейчас без auth. Нужно добавить API-ключ перед боевой эксплуатацией. |
| 9 | memos-cloud-openclaw-plugin vs @mem0/openclaw-mem0 | ✅ Закрыт. Blueprint упоминал несуществующий memos-cloud-openclaw-plugin. Реальный пакет — @mem0/openclaw-mem0 от mem0ai. |