Архитектура памяти 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 Таблица слоёв

СлойИмяНазначениеОбъёмКогда загружаетсяТехнологияСтатус
L0InlineПравила работы, инфраструктура, личность~2.7 KBВ каждый promptMEMORY.md✅ существует
L1InstructionsИдентичность агента, пользовательские prefs~5–10 KBВ каждый promptSOUL.md, AGENTS.md, USER.md✅ существует
L2VaultСтруктурированные долгоживущие факты: project-state, user-profile, decisions-log, daily journals~50–200 KBНа старте сессииObsidian Vault (markdown)✅ существует, расширить
L3MemOS MemoryСемантически индексированные факты, извлекаемые по запросуБез ограниченийПоиск per-task (vector + FTS5 + keyword)MemOS API + Neo4j + Polza embeddings🆕 внедряется
L4MemOS GraphСвязи между сущностями (проекты, серверы, люди, решения)Без ограниченийCypher-запросы, traversalNeo4j Community🆕 внедряется
L5Session ArchiveСырые транскрипты прошлых сессийРастётПоиск по session searchOpenClaw session logs✅ существует

1.3 Что осталось, что новое, что перемещается

КомпонентБыло (wiki 2026-05-04)Стало (post-MemOS)Действие
MEMORY.mdL1 Inline, ~2.2 KBL0 Inline, ~2.7 KBОстаётся, переименован в L0 для ясности
SOUL/AGENTS/USER.mdL2 InstructionsL1 InstructionsОстаётся, перенумерован
Obsidian VaultL3, read on session startL2 VaultОстаётся, но часть контента мигрирует в L3
Session searchL4L5 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 MEMORYL1 InstrL2 VaultL3 MemOSL4 GraphL5 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 historyL3 MemOS Memory (trace partition) + L5 ArchiveMemOS API → Neo4j; сырые транскрипты — в session logs«2026-06-24 00:58 — пользователь спросил X, агент ответил Y, использовал tool Z»
L2 Policy — induced cross-task strategiesL2 Vault decisions-log.md (canonical) + L3 MemOS (индекс)Vault + MemOS«При деплое всегда проверяем Caddy config перед restart», «Для vision-задач используем polza/qwen3.6-plus вместо Opus»
L3 World Model — compressed knowledge about environmentL2 Vault project-state.md + user-profile.md (canonical) + L3 MemOS (индекс) + L4 GraphVault + MemOS + Neo4j«assist.unf86.org — Contabo, OpenClaw+Hermes», «Polza — фолбэк-провайдер LLM», «LightRAG удалён 2026-06-23»
L4 Skills — crystallized repeatable proceduresL1 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 Archive365 днейПосле — удалять (сжатый лог остаётся в backup)
Daily journals30 дней в 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 (все три одновременно):

  1. Семантическая близость (cosine similarity) ≥ 0.92.
  2. Одинаковый type (оба Policy, оба World-Model, оба Trace).
  3. Одинаковый 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 — обнаружение дубликатов

Типы дубликатов:

  1. Exact match — одинаковый content hash → auto-drop нового.
  2. Near-duplicate — cosine ≥ 0.98, тот же timestamp ±60s → auto-drop, оставить canonical.
  3. 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 skillsAgent-OpenClaw/archive/skills/❌ никогда
Ошибочные факты (after correction)✅ помечать superseded_by❌ никогда (история)
Дубликаты после fusion✅ помечать fused_into❌ никогда (история)
Приватные данные (токены, пароли)✅ немедленно, не архивировать

4.5 Conflict resolution — когда факты противоречат

Алгоритм:

  1. Обнаружение: новый факт конфликтует с существующим (тот же subject, другой value).
  2. Приоритет источника:
    • Явная коррекция пользователя → высший приоритет.
    • Недавний trace (≤7 дней) → выше, чем старый.
    • Официальный источник (доку, config file) → выше, чем вывод агента.
  3. Действие:
    • Новый факт → canonical в L2/L3.
    • Старый факт → помечается superseded_by: new_id, superseded_at: timestamp.
    • В decisions-log → запись о конфликте и resolution.
  4. Уведомление: если конфликт неоднозначен (оба источника равнозначны) — агент спрашивает пользователя.

Пример:

[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 MEMORYL1 InstrL2 VaultL3 MemOSL4 GraphL5 Archive
Явная команда «запомни X»⚡ если критично✅ если сущности
Конец сессии (checkpoint)✅ daily✅ trace summary✅ auto
Принято решение✅ decisions-log✅ PolicyDecision node
Инфра-изменение (IP, порт)⚡ если топ-3✅ project-state✅ World ModelServer/Service update
Ошибка + lesson learned✅ mistakes.md✅ с error-signatureError 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.mdL2 Policy + L4 Decision node
Инфра-фактproject-state.mdL3 World Model + L4 Server/Service node
Error + lessonmistakes.mdL3 с error-signature + L4 Error node
ПроцедураAGENTS.md или отдельный mdL3 skill-метка (не canonical)
Daily checkpointdaily/YYYY-MM-DD.mdL3 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 автоматически:

  1. Извлекает query из последнего user-сообщения.
  2. Vector search (top-k=10, cosine ≥0.65) по L3.
  3. FTS5 search по ключевым словам.
  4. Keyword exact-match для error-signature.
  5. Cypher-запрос в Neo4j для entities, упомянутых в query.
  6. Реранкинг, дедупликация, top-5 в контекст.

Размер retrieval-блока: ≤8 KB на ответ. Жёстко.

Что извлекается:

  • Релевантные Policy (L2 MemOS).
  • Релевантные World Model факты (L3 MemOS).
  • Связанные сущности из графа (L4).
  • Похожие ошибки (если задача — дебаг).

6.3 Что читается на старте сессии (L2 Vault)

На старте каждой сессии:

  1. Agent-Shared/user-profile.md — кто пользователь.
  2. Agent-Shared/project-state.md — статус проектов.
  3. Agent-OpenClaw/working-context.md — текущий снимок.
  4. Agent-OpenClaw/daily/YYYY-MM-DD.md — если есть за сегодня.
  5. Agent-Shared/decisions-log.md — последние 10 записей (top of file).

Размер session-start блока: ≤30 KB. Если больше — читать только top.

Session search (L5):

  • Когда L3 retrieval не нашёл ответа.
  • Когда нужен сырой контекст прошлой беседы.
  • Через session-logs skill (jq-based).

Vault search (L2):

  • Когда нужно найти в decisions-log.md (append-only, растёт).
  • Когда нужно найти в daily/ за конкретный период.
  • Через memory_search tool (vector + FTS5).

Wiki search:

  • Когда нужны большие знания (specs, доку).
  • Через web_fetch к wiki.unf86.org.

7. План миграции

7.1 Анализ существующих 15 memory/*.md файлов

ФайлРазмерТип контентаКуда мигрирует
2026-04-15.md2.2 KBDaily checkpointL2 (остаётся) + L3 (индекс trace)
2026-04-15-2150.md170 BМикро-checkpointL5 (архив), в L3 — только если есть уникальный факт
2026-04-15-lightrag-mcp-test.md6.9 KBTrace тестированияL5 (архив), в L3 — извлечённые факты (Policy: «LightRAG MCP работает, но таймаутит на query»)
2026-04-15-lightrag-security.md2.7 KBSecurity decisionsL2 decisions-log.md (append) + L3 Policy + L4 Server/Service nodes
2026-04-16-gog-auth.md7.5 KBTrace настройки gogL5, в L3 — Policy «gog auth flow» + L4 Service: gog
2026-04-17.md4.8 KBDaily + decisionsL2 (остаётся) + L3 (индекс) + decisions-log (append ключевых)
2026-04-18.md3.4 KBDailyL2 (остаётся) + L3 (индекс)
2026-04-23.md846 BМикро-checkpointL5, в L3 — только уникальные факты
2026-04-23-1617.md170 BМикро-checkpointL5, в L3 — только уникальные факты
2026-04-24.md8.5 KBDaily + decisionsL2 (остаётся) + L3 (индекс) + decisions-log (append)
2026-04-26.md2.4 KBDailyL2 (остаётся) + L3 (индекс)
2026-05-03-1001.md2.5 KBDailyL2 (остаётся) + L3 (индекс)
2026-05-03-1819.md8.5 KBDaily + decisionsL2 (остаётся) + L3 (индекс) + decisions-log (append)
2026-05-13-1407.md2.2 KBDailyL2 (остаётся) + L3 (индекс)
2026-06-11-2058.md310 BМикро-checkpointL5, в 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 нестабилен:

  1. Отключить плагин (memos-cloud-openclaw-plugin.enabled = false).
  2. OpenClaw продолжает работать на L0–L2 + L5 (как сейчас).
  3. MemOS данные не теряются (Neo4j persistence).
  4. Восстановить MEMORY.md из backup при необходимости.
  5. Починить 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_key

8.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_k10Баланс между recall и контекст-окном
min_cosine0.65Ниже — шумит, выше — пропускает релевантное
context_limit_kb8Не перегружать prompt
reranktrueMemReader переранжирует после retrieval
on_every_promptfalseНе делать retrieval для тривиальных ответов
on_tool_calltrueПеред 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.md

8.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 unresolved0Все конфликты либо 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. Открытые вопросы (на обсуждение)

  1. Polza rate limits: выдержит ли Polza embeddings при автоматическом trace-writing? Нужен ли batching?
  2. Neo4j Community vs Enterprise: Community — один database, нет RBAC. Достаточно для одного пользователя?
  3. Backup MemOS: как бэкапить Neo4j + SQLite-vec + FTS5? Раз в сутки на mon.unf86.org?
  4. Multi-agent: Hermes тоже пишет в MemOS? Отдельный user_id: "hermes" или общий с OpenClaw?
  5. Wiki integration: индексировать ли wiki.unf86.org в MemOS? Или держать отдельно?
  6. Skills Workshop ↔ MemOS L4: как синхронизировать? Webhook при apply?
  7. 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✅ runningsystemd memos.service, /opt/memos, Python/uvicorn, порт 8000
Qdrant✅ runningDocker qdrant-memos, порты 6333-6334, v1.18.2
Neo4j Community✅ runningDocker neo4j-memos, порты 7474/7687, v5.26.27
Caddy reverse proxy✅ runningmemos.unf86.org → 127.0.0.1:8000, HTTPS (Let’s Encrypt)
DNSmemos.unf86.org → 43.245.226.189
Cube✅ createdopenclaw-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:6333

12.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.target

12.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-community

12.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 Совместимость

ПараметрЗначениеСовместимо?
Архитектура assistaix86_64✅ (баг #4050 касается только ARM64)
OpenClaw2026.6.9✅ (требуется >= 2026.4.25)
Node.jsv22.22.2
MemOS API1.0.1
Qdrant1.18.2
Neo4j5.26.27 Community

12.7 Открытые вопросы — обновление (§10)

#ВопросСтатус
1Polza rate limits для embeddings⚠️ Открыт. Нужен batching. Плагин имеет встроенный batch, но при большом trace volume может упереться в лимит. Контролировать после включения auto-capture.
2Neo4j Community vs Enterprise✅ Закрыт. Community достаточно для одного пользователя.
3Backup MemOS⚠️ Открыт. План: daily dump Neo4j + Qdrant snapshots → mon.unf86.org. Не реализовано.
4Multi-agent: Hermes в MemOS⚠️ Открыт. Решение: отдельный user_id: "hermes" в том же MemOS. Реализовать после стабилизации OpenClaw.
5Wiki integration⚠️ Открыт. Решение: не индексировать Wiki в MemOS. Wiki — отдельный источник, MemOS — для agent memory. В MemOS хранить только метки-указатели.
6Skills Workshop ↔ MemOS L4⚠️ Открыт. Не реализовано. Webhook при apply — будущая задача.
7Memory search fallback⚠️ Открыт. План: если MemOS недоступен — fallback на memory-core (переключение слота). Не автоматизировано.
8API auth⚠️ Открыт. MemOS API сейчас без auth. Нужно добавить API-ключ перед боевой эксплуатацией.
9memos-cloud-openclaw-plugin vs @mem0/openclaw-mem0✅ Закрыт. Blueprint упоминал несуществующий memos-cloud-openclaw-plugin. Реальный пакет — @mem0/openclaw-mem0 от mem0ai.