> **Коротко.** 19 августа 2026 инженеры Perplexity опубликовали разбор Brain — слоя памяти их агента Computer. Главная мысль там не про алгоритм, а про рамку: **память надо отдавать агенту как среду, а не как базу данных**. Файлы в песочнице, связанные Markdown-страницы поверх них, `grep` и `cat` вместо специального API, и фоновые агенты, которые переписывают эту вики офлайн. Числа они привели честные: корректность ответов 0.600 → 0.661 на внутреннем наборе, +9.3 пункта в проде — и при этом на 15% меньше токенов и на 10% дешевле. Мы шли к тому же независимо, и в трёх местах решили иначе: заметка ключуется темой, а не сессией; каждый факт проходит проверку на выводимость из транскрипта и при сомнении не пишется; ничего не удаляется — устаревшее тускнеет в ранжировании. Ниже — что именно они сделали, что у нас, и что мы у них заберём.

## Задача: десятая сессия должна быть умнее первой

Формулировка из их поста точная, и она же наша: пользователь работает с агентом месяцами и сотнями сессий. К десятой сессии система обязана быть заметно полезнее, чем в первой — помнить, что за проект, кто в нём участвует, какие форматы человек предпочитает, чем закончился прошлый разбор. Если каждый разговор начинается с нуля, это не сотрудник, а поисковая строка с хорошими манерами.

Проблема при этом двойная. Агенту мало знать факт — ему нужно знать, **что этот факт вообще существует** и как до него дойти. И, дойдя, нужно понимать, **актуален ли он и откуда взялся**. Одинокий факт без источника и без соседей стоит мало: его нельзя перепроверить и нельзя обновить.

Два очевидных решения оба плохи. Свалить все файлы памяти в контекст — размен точности на полноту: контекст забивается всё менее релевантным, а урезание бьёт по качеству ответа. Положить всё во внешнюю базу — гибко, но навигация ложится на агента: векторное хранилище отдаёт разрозненные обрывки, граф требует уметь его запрашивать.

## Что такое Brain

Brain — это вики поверх файловой памяти. Память Computer'а материализована в песочнице как обычная файловая система, под `memory/` три верхних каталога:

- `sessions/` — сырьё: индексы, саммари, полные транскрипты;
- `notes/` — дистиллированные снипеты по темам;
- `knowledge/` — собственно Brain: синтезированная вики.

Вики — связанные Markdown-страницы, одна страница = один субъект, и она обязана быть полезной при чтении в одиночку. Рёбер два типа, и разделение здесь — самое ценное в их дизайне:

- `[[wikilinks]]` — рёбра контекста, вбок. Отвечают на вопрос «что ещё мне нужно знать»: проект ссылается на владельца, клиента, зависимости.
- `[cite:N]` — рёбра доказательств, вниз. Отвечают на вопрос «откуда я знаю, что это правда»: ведут в конкретную сессию или в источник коннектора.

Всё это под git — чтобы были версии, диффы и changelog, и чтобы несколько агентов могли править вики одновременно, не затирая друг друга.

Дальше три решения, каждое из которых стоит отдельно отметить.

**Компактный индекс вики кладётся прямо в первое сообщение.** Не «агент может его прочитать», а он уже там. Отдельный рандомизированный эксперимент дал −6.9% недовольства памятью от одного этого изменения. Дешёвая правка с измеримым эффектом.

**Навигация — обычными инструментами.** `cat memory/knowledge/index.md`, `grep -Ril "kyoto" memory/knowledge/`, переход по ссылке, сравнение ревизий в git. Никакого нового интерфейса между моделью и памятью: агент и так умеет работать с файлами.

**Локальный рабочий набор вместо всего корпуса.** Копировать всё дерево при старте песочницы дорого и бессмысленно; держать его на удалённой ФС — тоже, и вот почему: агент делает тысячи файловых операций за одну команду, и если каждая станет сетевым запросом, цикл исследования встанет. Их замер: `grep` по удалённому FUSE-пути оказался **в 400–500 раз медленнее** локального. Поэтому при старте подгружается карта из недавних сессий, а дальше субагент (Memory Agent) по описанию нужного семантически ищет и **доматериализует файлы** в то же дерево — рабочий набор растёт постепенно, пути остаются стабильными.

## Dream: память переписывается офлайн

Самая интересная часть — не чтение, а поддержание. За него отвечают фоновые агенты Dream. Они запускаются в песочнице с теми же файлами и read-only инструментами, что и обычная сессия, но с единственной целью — улучшить контекст для будущих сессий. Каждый запуск стартует **не с нуля, а с вики, которую собрал предыдущий**.

Четыре фазы: сориентироваться (область, стоящие инструкции, лог удалений, условия остановки) → написать саммари для новых сессий → прикрепить значимые наблюдения к их субъектам → обновить вики: завести страницу под новый долгоживущий субъект, переписать устаревший синтез, добавить связи и цитаты. Или ничего не менять, если граф уже верен.

Пишут они в **staged-дерево**: постоянных изменений нет, пока агент не закончил весь набор правок. Это позволяет обновлять граф целиком, а не как несвязанные страницы. Дальше две проверки — детерминированная (frontmatter на месте, формат цитат верен) и семантическая (предложенный синтез действительно подтверждается собранными доказательствами и не противоречит остальному графу), и только потом синхронизация в репозиторий.

## Что у них получилось

Офлайн: 640 вопросов, 44 синтетические персоны, сравнение «вики включена / выключена» при том, что остальные слои памяти доступны в обоих случаях — то есть меряется вклад именно вики, а не памяти вообще. Корректность 0.600 → 0.661 (+6.1 п.п.), recall доказательств 0.573 → 0.625 (+5.2 п.п.). Больше всего выигрывают вопросы про предпочтения (+10.2 п.п.) и про время (+8.6 п.п.).

На публичных бенчмарках: на LoCoMo снятие вики роняет корректность на 4.6 п.п., на LongMemEval-S — значимой разницы нет. И они это честно объясняют: LongMemEval-S проверяет извлечение факта из одной сессии, где транскрипт даёт запасной путь к ответу, а LoCoMo требует сшивать доказательства через разговоры и даты — там вики и работает.

В проде — ежедневный парный замер на свежих когортах: +9.3 пункта корректности, +8.0 актуальности, +8.9 recall, при **−15% токенов, −10% стоимости и −10% времени генерации**. Последнее важнее первого: организованная память не добавляется к контексту, она его заменяет.

## Как это устроено у нас

Мы пришли к той же рамке — память как файловое дерево, которое агент обходит своими обычными инструментами, плюс фоновая дистилляция раз в сутки. Совпадений много, и это скорее хороший знак, чем повод расстроиться: две команды независимо упёрлись в одни и те же ограничения.

| | Perplexity Brain | Сам Решу |
|---|---|---|
| Носитель памяти | файлы в песочнице, `memory/{knowledge,notes,sessions}` | файловое дерево заметок, доступ через `read`, `read_many`, `grep`, `list` |
| Как агент ищет | `grep`, переход по `[[ссылкам]]`, git-диффы | `grep` и манифест с ранжированием |
| Кто обновляет | фоновые агенты Dream, офлайн | ночная дистилляция сессий, 04:00 UTC, по каждой организации |
| Ключ записи | субъект (страница вики) | **тема, а не сессия**: два разговора об одном сливаются в одну заметку |
| Связи | `[[wikilinks]]`, написанные моделью | рёбра, посчитанные детерминированно: по навыкам, по темам, по близости |
| Доказательства | `[cite:N]` вниз, к сессии или коннектору | проверка выводимости факта из транскрипта на этапе записи |
| Проверка перед записью | детерминированная + семантическая, staged-дерево | редакция чувствительного, гейт на выводимость (при сомнении — не писать), атомарная батч-запись |
| Устаревшее | удаляется, есть лог удалений | **не удаляется**: тускнеет в ранжировании по периоду полураспада |
| Замер эффекта | офлайн-абляции + ежедневный парный прод-замер | этого у нас нет |

## Три места, где мы решили иначе

**Заметка ключуется темой, а не сессией.** У них наблюдение прикрепляется к субъекту фоновым агентом; у нас это свойство самого ключа: два диалога об одном и том же попадают в одну заметку и сливаются. Хранилище держит картину того, что известно, а не журнал того, когда это узнали. Разница видна на длинной дистанции: журнал растёт линейно с числом разговоров, картина — с числом тем.

**Факт не попадает в память, если он не выводится из своего источника.** Отдельный лёгкий судья проверяет утверждение против захваченного транскрипта — не перезапрашивая живые данные. Не подтвердилось или ответ судьи не разобрался — утверждение отбрасывается. Это строже их семантической проверки: там верифицируется синтез страницы, у нас — каждое утверждение на входе. Цена за строгость честная: часть верных фактов теряется. Мы считаем этот размен правильным, потому что ошибка в долговременной памяти живёт месяцами и переписывается в новые ответы как своя.

**Мы ничего не удаляем.** Заметка, которую перестали читать, не выпиливается через месяц — она опускается в ранжировании манифеста по периоду полураспада. Причина простая: удаление судит заметку по сигналу, который она физически не могла заработать. Заметку читают только если манифест её предложил, а каждая, которую мы раньше удаляли, имела ноль прочтений. Это был приговор за то, что её не показывали.

## Чего в их посте нет: память как канал отмывания инъекций

В разборе Brain много про точность и стоимость и ничего — про то, что память агента является каналом доставки инструкций.

Механика такая. Всё, что агент читает из веб-страницы, чужого MCP-сервера или чужой CRM, приходит на один ход и в огороженном виде: это данные, не команды. Но в тот момент, когда агент записывает вычитанное в файл собственной памяти, тот же текст возвращается **без ограды, в стабильном префиксе, под директивой, которая называет его собственной памятью агента**. Одноразовая цитата превратилась в стоячую инструкцию — и злоумышленник для этого не нужен, достаточно добросовестного пересказа враждебной страницы.

Поэтому файл проектной памяти у нас проходит тот же досмотр, что и файл правил проекта, а отфильтрованный вердикт отличается от пустого файла: если тело задержано, рендер обязан это сказать. Иначе директива «поддерживай этот файл в актуальном состоянии» плюс «файл пуст» = приглашение затереть реальную память ничем.

## Что мы заберём

Четыре вещи, по убыванию соотношения «эффект / работа»:

1. **Индекс памяти в первое сообщение.** У них это дало измеримый эффект почти даром. У нас манифест уже есть, вопрос только в том, чтобы он приезжал в стартовый контекст, а не по запросу.
2. **Цитаты как рёбра.** Наши заметки проверяются против источника на входе, но ссылка на источник не живёт в теле заметки как навигационный элемент. Это разные вещи: первое — гарантия при записи, второе — возможность перепроверить через месяц.
3. **Staged-дерево при ночной дистилляции.** Мы пишем атомарным батчем, но набор правок собирается по одной заметке за раз. Обновлять граф целиком — правильнее, особенно когда правки взаимозависимы.
4. **Парный замер.** Самое неудобное и самое нужное. У нас нет числа, которое говорит, сколько стоит наша память — включённая против выключенной, на одних и тех же вопросах. Пока такого числа нет, любые улучшения памяти делаются на вкус. Из всего поста Perplexity это единственное, что нужно скопировать прямо, а не с оговорками.

## Честно о границах

Их числа — не наши числа. Абляции проводились на их данных, их персонах и их агенте; ни один из этих результатов нельзя переносить на другую систему как обещание. Мы приводим их, потому что направление и порядок величин полезны, а не потому что ждём тех же процентов у себя.

Отдельно стоит отметить их честность в том месте, где было бы удобно промолчать: LongMemEval-S не показал значимой разницы, и они не спрятали этот результат, а объяснили. Пост о собственной архитектуре, в котором один из трёх замеров нулевой, вызывает больше доверия, чем пост, где все три зелёные.

## Частые вопросы

**Чем это отличается от RAG?**
Ретривал достаёт куски, похожие на запрос. Вики — это компилируемый офлайн артефакт: страница написана заранее, связана с соседями, привязана к источникам и переживает много сессий. Ретривал отвечает «что похоже на вопрос», вики — «что известно по этой теме». Одно не заменяет другое: сырьё под вики всё равно нужно искать.

**Почему файлы, а не база?**
Потому что агент уже умеет в файлы. Любой специальный интерфейс к памяти — это ещё один язык, которому модель должна научиться и в котором она будет ошибаться. `grep` она уже знает.

**Почему обновление памяти делается ночью, а не в диалоге?**
Потому что синтез — это не то же самое, что разговор. Хорошая страница памяти требует пройти несколько сессий, сравнить их, отбросить противоречия и переписать существующее. Внутри пользовательского хода на это нет ни времени, ни контекста, а результат должен пережить сам ход.

**Что происходит, когда факт меняется — например, человек сменил работу?**
Заметка о теме переписывается, а не дополняется. Старое утверждение не остаётся рядом с новым как альтернативная версия — иначе в памяти окажутся оба, и агент будет выбирать между ними случайно.
