Локальная копия: что хранится и как держать её свежей
This page is in Russian.
Всё, что max прочитал, остаётся у вас: из копии можно ответить без сети, искать и выгружать.
Эта страница — о копии: что в ней, как держать её свежей, как дочитать историю и выгрузить её
в файл.
Что хранится
Прочитанное сохраняется рядом, чтобы было чем ответить без сети:
max chats list --offline # только из локальной копии, никуда не подключаться
max messages send 0 "текст" --offline # отказ: из копии отправить нельзя
max cache clear # забыть всё, что этот профиль накопил
max cache clear --left # забыть только чаты, из которых вы вышли, с их сообщениямиЧат, из которого вы вышли или вас удалили, пропадает из chats list и chats show при следующем
входе. Его сообщения остаются в копии; max store clear --left --allow-dangerous стирает их вместе с
чатом (без --allow-dangerous команда только говорит, сколько удалит), а max cache clear --left —
то же в прежней копии max. Если вас вернут в чат, он снова появится в списке.
chats list|show и contacts list|show хранят прочитанное в общей копии, той же, что у tg.
Она заполняется с первого запуска без --offline после обновления: прежняя копия max в неё не
переносится. Настройки группы (description, access, settings) chats show знает только от MAX,
поэтому с --offline их в ответе нет.
Обычные команды всё равно спрашивают MAX: ответ на вход и так приносит чаты и контакты, поэтому
отвечать из копии значит сознательно не узнать, что изменилось. --offline — это когда сети нет
или когда подключаться не нужно.
Спрашивают при этом немного: вход несёт метку времени прошлого входа, и MAX присылает только
то, что с тех пор изменилось. Поэтому max contacts list отвечает из локальной копии — она и
есть текущий ответ, — а не из того, что принёс именно этот вход. max cache clear забывает и
строки, и метку: метка, пережившая строки, заставила бы следующий вход просить изменения с момента,
данных за который ни у кого нет.
Скачать историю
max store fetch скачивает историю одного чата в локальную копию — назад до даты, до числа
сообщений или до начала чата:
max store fetch Друзья --since-time 2026-01-01
max store fetch Друзья --last 500
max store fetch Друзья --background # в фоне; `max store jobs show <id>` следит за нимОна листает назад так же, как веб-версия при прокрутке вверх: по 30 сообщений, от самого старого
загруженного. Между страницами — пауза от --pause до вдвое большей (по умолчанию 5s, то есть
5–10 с: примерно так страницы идут, когда человек листает чат во вкладке). За один запуск — не
больше --limit сообщений (по умолчанию 1200, это 40 страниц). Та же команда ещё раз
продолжает с места, где остановилась, и пропускает то, что уже скачано. Без --since-time и --last
запуски идут до самого начала чата; --since-time и --last вместе не принимаются. --since-time —
время в ISO 8601 или «столько назад» (30d). Ctrl-C или --timeout останавливают после страницы в работе,
и скачанное остаётся.
Если MAX просит подождать и говорит сколько, команда ждёт; на любой другой ошибке останавливается и
не повторяет запрос. Реакции store fetch не читает, прочитанным ничего не отмечает. --estimate
для MAX не работает: id сообщений MAX не позволяют сосчитать, сколько не хватает.
Скачанное ложится в общую локальную копию, ту же, что у tg (путь показывает max store info).
max store status показывает по каждому чату, сколько сообщений хранится и какие куски скачаны
целиком. Копия, которую max вёл до общей, в неё не переносится — историю скачайте заново.
Выгрузить в файл
Переписку из локальной копии можно выгрузить в файл — в JSONL (те же объекты, что
messages list --jsonl) или в Markdown для чтения:
max store export Друзья --format markdown --output друзья.md
max store export 111 --format jsonl --since-time 2026-09-01 > чат.jsonlВыгрузка никуда не подключается и берёт только то, что уже скачано или прочитано; дочитать
назад — max store fetch <чат>. Существующий файл она не перезаписывает. Файл из --output
доступен только вам (0600): в нём ссылки на фото, которые открываются без входа.
Разговоры в группе
В оживлённой группе идут сразу несколько разговоров. max conversations находит их в локальной копии —
по ответам, упоминаниям и тому, кто написал следом, — не спрашивая MAX и без всякого ИИ:
max conversations build --chat Друзья # найти; ещё раз — после того, как скачано больше
max conversations list --chat Друзья --since-time 7d
max conversations show 91 # один разговор, от старых к новым
max messages links Друзья <id> # почему это сообщение там, где оно естьПока не запущен build, ничего не построено, и новый build заменяет прошлый. Сначала скачайте
историю: max store fetch.
Связать сообщения точнее может ваш собственный агент: max conversations batches status --chat <чат>
говорит, сколько это сообщений и пачек, batches next отдаёт следующую пачку, а conversations links add --batch <id> читает ответ агента в JSON со входа. conversations links clear убирает его ответы.
Сам max модель не вызывает.
Новые сообщения сразу: max serve и max watch
Обычная команда подключается, делает одно дело и выходит. max serve — исключение: он держит одно
подключение к MAX открытым и раздаёт новые сообщения тем, кто слушает.
Запускать его руками не обязательно. Первая команда, которой нужен MAX, сама запускает
max serve в фоне, если его нет, и работает дальше своим подключением; следующие идут через
сервер. Такой сервер сам останавливается через 15 минут, если им никто не пользуется. Что он
пишет — в файле <профиль>.serve.log рядом с состоянием профиля (права 600). Не запускать —
--no-serve на один раз или max config set serve false насовсем. max session end сначала
останавливает сервер профиля, если его запустила команда.
Сервер, запущенный руками (max serve, max server start), останавливают только Ctrl-C и
max server stop: ни простой, ни max session end, ни другие запросы по сокету. Если в фоне
уже работает сервер, который запустила команда, max serve руками сменяет его. --idle руками —
пожалуйста: это ваш собственный выбор. max session start останавливает любой сервер профиля,
входит и запускает его снова уже на новой сессии: подключение к MAX в каждый момент одно.
max serve # вручную, в одном терминале; Ctrl-C — остановить
max serve --idle 30m # или остановиться, когда им 30 минут никто не пользуется
max server start # то же, но в фоне; ответ — когда сервер уже подключён
max server status # работает ли, с какого времени, какой версии, подключён ли к MAX
max server restart # остановить и запустить снова — например, после обновления max
max server stop # остановить сервер профиля, как бы он ни был запущен
max server logs # последние строки его журнала; --lines 200 — больше
max server install # служба systemd (Linux) или launchd (macOS) для профиля; ничего не запускает
max server uninstall # убрать службу; сначала max server stop
max watch # в другом: новые сообщения по мере прихода
max watch --jsonl # то же для скрипта: одно сообщение на строку, как у `messages list`
max watch --jsonl | ./on-message.sh
max watch --events --jsonl # ещё правки, удаления и реакции; у каждой строки поле "event"- После обновления
maxсервер, который запустила команда, сменяется новым сам. Запущенный руками работает на старой версии, пока его не перезапустить:max server statusэто покажет,max server restartисправит. - Служба вместо команды. После
max server installкомандаmax server startзапускает сервер через systemd или launchd, аmax server stopостанавливает его там же. Служба запускаетmax serve— сервер «руками», без простоя. Если MAX не принял вход, служба не перезапускает сервер: каждый повтор был бы новым входом в аккаунт.max server statusпоказывает службу и где её журнал. - Один сервер на профиль. Второй
max serveтого же профиля откажется. Сокет лежит рядом с состоянием профиля, права 600: слушать может только владелец. - Что он делает в сети — как вкладка web.max.ru: пинг раз в 30 секунд, ответ на пинг MAX, подтверждение каждого пришедшего сообщения. Прочитанным он ничего не помечает и ничего не отправляет.
- Если MAX оборвал связь, сервер подключается снова: через 1, 2, 4 … секунды, не реже раза в
минуту.
max watchпишет об этом в stderr. Если MAX больше не принимает токен, сервер останавливается с ошибкой входа. - У профиля одно подключение к MAX на всех. Команды,
max mcpиmax watchне входят в MAX сами: вход им отдаёт сервер, и всё — чтение, отправка, реакции — идёт через его подключение. Защиты отправки срабатывают в самой команде, как раньше. Сервера нет — команда запускает его и ждёт; приserve: falseбез сервера команда входит сама. Два сервера на профиль не запускаются: второй отказывает, ещё не войдя в MAX. - Сервер держит свой вход в актуальном состоянии: новое сообщение, чат прочитан на телефоне, чат изменился — всё это он учитывает. Если MAX сообщил о том, чего он учесть не может (удалены сообщения), сервер в фоне входит заново — не чаще раза в минуту.
- С
--eventsстроки другие:{"event": "message", "message": …},{"event": "edit", "message": …},{"event": "delete", "chatId", "chatTitle", "messageId"},{"event": "reaction", "chatId", "chatTitle", "messageId", "reactions"}. Без флага вывод прежний — одно сообщение на строку. Кто печатает сообщение,max watchне показывает: MAX присылает это только клиенту, который держит чат открытым. max watchвидит только то, что пришло, пока он и сервер подключены. Пока связь с MAX обрывалась, сообщения шли мимо. Строкаstatusсconnected: trueпосле обрыва — сигнал добрать пропущенное:max inbox --since <время из поля at предыдущей строки status>.
Дальше
- usage.md — чтение и отправка
- diagnostics.md — что команда делала
- commands.md — каждая опция
store,serve,watch