2026: OpenClaw Active Memory и подагенты на удалённом физическом Mac — воспроизводимый runbook: миграция MEMORY.md, write-heat и JSONL-аудит в песочнице шлюза для сессий 7×24 (фрагменты конфигурации + FAQ)
Платформенные команды, которые крутят OpenClaw долгие сессии 7×24 на арендованных удалённых физических Mac, стабильно упираются в три сбоя: MEMORY.md расходится с рабочими каталогами подагентов, write-heat забивает SSD, а JSONL-аудит песочницы шлюза не сшивается с хостовыми логами. Здесь — две матрицы решений, семь шагов воспроизводимого runbook, готовые к вставке фрагменты конфигурации, три порога для подписания отчёта и FAQ; плюс перекрёстные ссылки на дисциплину бэкапа JSONL и каналы выпуска на том же классе железа.
1. Область и аудитория
Предполагается, что OpenClaw уже установлен на macOS со шлюзом, и вы используете или планируете Active Memory (долговременная рабочая память между ходами) и подагентов (отдельные процессы и часто другой cwd для инструментов). Вне рамок: квоты облачных API и маршрутизация моделей — только контракты путей, каденция сброса на диск, поля аудита и allowlist песочницы.
Вывод: держите MEMORY.md (или эквивалент) по абсолютному пути из конфигурации; подагенты пишут только через него или через контролируемый RPC; снижайте write-heat через half-life и пакетный flush; выпускайте requestId на границе шлюза, чтобы JSONL внутри и снаружи песочницы использовали одно имя поля. Для безлюдной стабильности и ротации JSONL дополните этот runbook материалом о резервном копировании по расписанию и JSONL-наблюдаемости шлюза OpenClaw 7×24 и сценариями обновления в каналах выпуска OpenClaw, откатах и приёмке doctor на удалённом Mac.
2. Три типовых боли
- Ограничение: относительные пути × несколько cwd. Подагенты, стартующие из подпапки репозитория, пишут
MEMORY.mdглубоко в поддереве, пока родитель читает старое расположение — это раскол путей, а не загадочная амнезия. - Скрытая стоимость: write-heat = write amplification. Полные перезаписи с частым fsync каждый ход плюс аудит JSONL могут забить
iowaitна хостах 7×24 раньше, чем вырастет бизнес-трафик. - Стабильность и аудит: два писателя, два дерева. Когда песочница блокирует хостовые пути, подагенты оставляют аудит в приватных каталогах и
jq-соединения на хосте ломаются — обычно не унифицированы requestId и политика writable.
3. Матрицы решений
Согласуйте до выката, где живёт память и насколько агрессивно сбрасывать на диск.
| Носитель памяти | Когда уместно | Главный риск |
|---|---|---|
| Один MEMORY.md | Небольшие команды, ручной diff, до нескольких тысяч записей | Конкурентные записи; хвост размера одного файла |
| Шардированные файлы (тема или сессия) | Длинные сессии с LRU и архивами | Индекс и сквозные ссылки между файлами |
| Только внешний векторный индекс | Recall через поиск, шлюз вне хоста | Сетевой разрыв — заранее определите путь деградации |
| Стратегия write-heat | Дружелюбность к диску | Риск консистентности |
|---|---|---|
| Полная перезапись каждый ход | Низкая | Низкий |
| Порог + пакетный flush в окне времени | Высокая | Окно после сбоя может потерять последний пакет (добавьте WAL или dual-write) |
| Только высокоценные события | Максимальная | Плохие промпты недодокументируют контекст |
4. Фрагменты конфигурации (согласованы с песочницей)
Иллюстративный JSON — имена полей должны совпадать с закреплённой версией OpenClaw. Необсуждаемые требования: абсолютные пути, allowlist и проброс requestId.
{
"memory": {
"path": "/Users/ocagent/workspace/MEMORY.md",
"encoding": "utf-8",
"flush": { "maxEvents": 32, "intervalMs": 5000, "halfLifeRounds": 12 }
},
"subagents": {
"defaultCwd": "/Users/ocagent/workspace",
"inheritEnv": ["OPENCLAW_REQUEST_ID", "MEMORY_PATH"]
},
"gateway": {
"auditJsonl": "/Users/ocagent/logs/gateway-audit.jsonl",
"sandbox": {
"writable": [
"/Users/ocagent/workspace/.sandbox/scratch",
"/Users/ocagent/logs/sandbox-audit.jsonl"
]
}
}
}
В plist launchd экспортируйте MEMORY_PATH и OPENCLAW_REQUEST_ID (или пусть обёртка шлюза выставляет их на запрос), чтобы интерактивный SSH не расходился с безлюдным демоном.
5. Семь шагов runbook (удалённый физический Mac)
- Заморозить авторитетные пути. Зафиксируйте файл памяти, audit JSONL и scratch песочницы как абсолюты на обложке runbook — без расхождения между вики и комментариями в коде.
- Мигрировать MEMORY.md. Копируйте в режиме обслуживания или только для чтения, проверьте
diff, проставьтеmigratedAtв шапке. - Нормализовать cwd подагентов. Принудительно задайте
defaultCwdна основной workspace или эквивалентный флаг памяти. - Включить схему JSONL. Договоритесь о
ts,level,requestId,actor,memoryOp,durationMsдля шлюза и дочерних процессов. - Приёмка песочницы. Пробы: запись вне allowlist падает и даёт строки
deny; успехи остаются внутриwritable. - Настроить write-heat. Переходя с полного flush каждый ход на оконные пакеты, прогоните 24-часовой сценарий диалога и смотрите
iostatи рост JSONL. - Replay-сшивка. Внешнее соединение JSONL хоста и песочницы по
requestIdчерезjq; любая пропущенная пара блокирует вывод в прод.
6. Цифры для отчёта
- Стартовое окно пакетного сброса: порядка 3–8 с или 16–32 событий — что наступит раньше; удлиняйте окно с half-life для очень длинных сессий.
- Ротация audit JSONL: делите файлы около 128–256 МБ, чтобы синхронизация в объектное хранилище не таскала многогигабайтные хвосты.
- SLA на join: в предпрод soak — 0% пропущенных пар
requestIdза час; в проде алерт при устойчивом уровне выше 0,1% за исключением корзин clock-skew, которые вы документируете.
7. FAQ
В: EACCES при записи MEMORY.md?
О: Проверьте владельца и UserName в plist; на сетевых томах — что монтирование не root-only.
В: Лог подагента резолвит путь памяти иначе, чем основной конфиг?
О: Порядок переменных окружения — уберите устаревший MEMORY_PATH из профилей и задайте явные EnvironmentVariables в launchd.
В: Строки JSONL огромные и диск заканчивается?
О: Не кладите полные промпты по умолчанию — хэши, длины, алиасы моделей; большие полезные нагрузки — в объектное хранилище.
В: Аудит песочницы пишется, но не собирается пайплайном?
О: Добавьте путь в allowlist сборщика или read-only монтирование с формальным security review.
8. Итог: почему Mac mini подходит под память и аудитный IO длинных сессий
Active Memory с JSONL-аудитом — это по сути частый мелкий IO плюс долгоживущие процессы: качество диска, справедливость планировщика и энергоповедение решают, сработает ли ваша стратегия write-heat. Mac mini на Apple Silicon (например M4) даёт пропускную способность unified memory и порядка ~4 Вт в простое — удобно для бесшумных шлюзов 7×24 с локально быстрой памятью и логами.
В macOS есть launchd, Unified Logging и снимки APFS, поэтому triage короче при строке deny песочницы или регрессии burst-flush; Gatekeeper и SIP дополняют картину по сравнению с типичной экспозицией вредоносного ПО на постоянно включённых Windows-узлах.
Если вы переносите длинные сессии с ноутбука на удалённый физический Mac, чтобы подагенты, песочница шлюза и ротация JSONL делили один предсказуемый baseline, Mac mini M4 сегодня один из самых экономичных якорей — зафиксируйте пути один раз и проведите тот же runbook через staging и production.
Выделенный Mac mini под OpenClaw с Active Memory
Физические узлы macOS на ZoneMac: те же абсолютные пути, launchd и стек JSONL, что вы проверили в staging, без сюрпризов виртуализации.