Repository navigation
archive
max сохраняет на вашем компьютере каждое сообщение, которое прочитал. Эта страница — для случая, когда
нужно, чтобы сохранённая история была полной и свежей: искать на месяцы назад, дать агенту отвечать без
подключения или выгрузить чат в файл.
Прочитав её, вы узнаете, что max сохраняет и где, как скачать старую историю чата, как держать копию
свежей, пока вас нет, как выгрузить и сохранить её и как проверить, что она в порядке.
Термины этой страницы:
-
Локальная копия (её ещё называют архивом) — один файл базы SQLite на этом компьютере с чатами,
сообщениями и контактами, которые видел
max. Поиск, выгрузка и--offlineотвечают из неё, не спрашивая MAX. -
Скачать историю (
messages sync) — дочитать в копию старые сообщения чата, страница за страницей. Чтение чата сохраняет только прочитанное; скачивание заполняет остальное. - Покрытие — какие отрезки истории чата копия держит без пропусков.
-
max personal serve— процессmax, который держит одно подключение к MAX и сохраняет новые сообщения, правки и удаления по мере прихода.
| Задача | Команда |
|---|---|
| Узнать, сколько каждого чата сохранено | max personal store status |
| Скачать историю чата или всех чатов |
max personal messages sync <чат>, max personal messages sync --all
|
| Скачивать долго — в фоне |
max personal messages sync <чат> --background, max personal store jobs list
|
| Держать копию свежей всё время |
max personal serve, max personal server start, max personal server install
|
| Читать чаты без подключения | max personal messages list <чат> --offline |
| Выгрузить чат в JSONL или Markdown | max personal store export <чат> --output <файл> |
| Подготовить сообщения для сводки агента | max personal messages evidence <чат> |
| Проверить, сохранить и восстановить копию |
max personal store check, max personal store backup, max personal store restore
|
Проверьте сохранённую историю перед загрузкой. Выберите нужный чат и период.
Ваш запрос:
Проверь сохранённую историю Книжный клуб. Скачай последние 30 дней этого чата и скажи, остались ли пробелы.
Проверить сохранённую историю:
max personal store status "Книжный клуб" --jsonСкачать выбранный период:
max personal messages sync "Книжный клуб" --since-time 30d --jsonПроверить ещё раз:
max personal store status "Книжный клуб" --jsonПример ответа агента:
Проверка До После Сохранено сообщений 30 300 История сообщений за нужные 30 дней Пробелы Сохранена без пробелов Этот результат относится к выбранному периоду, а не ко всей истории чата.
Если загрузка остановилась из-за предела или ожидания сервера, повторите её для продолжения, затем проверьте полноту. Успешное завершение команды само по себе не доказывает полноту истории. Числа в примере вымышлены.
chats list|show и contacts list|show хранят прочитанное в общей копии, той же, что у tg. Туда же
ложатся прочитанные сообщения и всё, что скачал max personal messages sync. Путь к файлу показывает
max personal store info. Копия заполняется с первого запуска без --offline после обновления: прежняя копия
max, которую он вёл до общей, в неё не переносится — историю скачайте заново. Старый кэш профиля
больше не открывается; max personal doctor показывает его путь, если файл остался.
Обычные команды всё равно спрашивают MAX: ответ на вход и так приносит чаты и контакты, поэтому
отвечать из копии значит сознательно не узнать, что изменилось. Настройки группы (description,
access, settings) chats show знает только от MAX, поэтому с --offline их в ответе нет.
MAX получает сохранённую метку контактов, поэтому следующий вход может принести только изменившихся
людей. max personal contacts list отвечает из общей копии, обновлённой этим входом. Чтобы получить весь
список контактов заново, выполните max personal contacts sync.
Команды удаления всей общей копии нет; store clear --left удаляет только данные покинутых чатов
(ниже).
max personal store status # по каждому чату: сколько сообщений, самое старое и новое, какие отрезки скачаны целикомmax personal store status "Книжный клуб" # один чатОтрезок, «скачанный целиком», — сообщения подряд, без пропусков. Сообщения, прочитанные то тут, то там,
оставляют пропуски; messages sync их закрывает.
max personal messages sync скачивает историю одного чата в локальную копию — назад до даты, до числа
сообщений или до начала чата:
max personal messages sync Друзья --since-time 2026-01-01max personal messages sync Друзья --last 500max personal messages sync --all # все чаты, самые активные первыми: последние 90 днейОна листает назад так же, как веб-версия при прокрутке вверх: по 30 сообщений, от самого старого
загруженного. Между страницами — пауза от --pause до вдвое большей (по умолчанию 5s, то есть
5–10 с: примерно так страницы идут, когда человек листает чат во вкладке). За один запуск — не
больше --limit сообщений (по умолчанию 1200, это 40 страниц). Та же команда ещё раз
продолжает с места, где остановилась, и пропускает то, что уже скачано. Без --since-time и --last
запуски идут до самого начала чата; --since-time и --last вместе не принимаются. --since-time —
время в ISO 8601 или «столько назад» (30d). Ctrl-C или --timeout останавливают после страницы в работе,
и скачанное остаётся.
Если MAX отвечает, что запросов слишком много, команда останавливается: из ответа MAX max не знает,
сколько ждать, поэтому max не ждёт и не повторяет запрос. На любой другой ошибке команда тоже
останавливается. Скачанное остаётся, следующий запуск продолжает с того же места
(пределы MAX). Реакции messages sync не читает, прочитанным ничего не отмечает.
--estimate для MAX не работает: id сообщений MAX не позволяют сосчитать, сколько не хватает.
Найти и заполнить пропуски внутри сохранённой истории и сразу подготовить поиск по темам
(--catch-up) — в разделе если ничего не нашлось.
Долгое скачивание может идти заданием, которое переживает команду:
max personal messages sync Друзья --background # печатает id заданияmax personal store jobs list # фоновые задания, новые сверхуmax personal store jobs list state:failed # только упавшие: running, done, partial, failed, cancelled или diedmax personal store jobs show # последнее задание и сколько его чата теперь в копииmax personal store jobs show <id>max personal store jobs cancel <id> # остановить после текущей страницы; следующий fetch продолжитmax personal store jobs retry <id> # упавшее задание ещё раз, новым заданием с теми же опциямиmax personal store jobs retry --failed # все чаты, чьё последнее задание упалоmax personal store jobs clear # забыть завершённые задания и их журналы; работающее остаётсяmax personal search messages находит сохранённые сообщения по словам, отправителю, чату, дате, файлам,
ссылкам и вашим меткам. Поиск слов в одном названном чате по умолчанию спрашивает ещё и сервер MAX;
без чата или с --backend archive читает только архив. --sync-first сначала ограниченно
скачивает новые сообщения из MAX, не отмечая их прочитанными. Руководство — поиск сообщений, там же
сохранённые поиски и подсчёт. Пустой ответ не доказывает отсутствия сообщения: проверьте coverage.next
и скачайте недостающую историю перед повторным поиском.
В оживлённой группе идут сразу несколько разговоров. max personal conversations разделяет их по сохранённым
сообщениям и находит по тому, о чём они были, на этом компьютере: поиск по темам.
Переписку из локальной копии можно выгрузить в файл — в JSONL (те же объекты, что
messages list --jsonl) или в Markdown для чтения:
max personal store export Друзья --format markdown --output друзья.mdmax personal store export 111 --format jsonl --since-time 2026-09-01 > чат.jsonlВыгрузка никуда не подключается и берёт только то, что уже скачано или прочитано; дочитать
назад — max personal messages sync <чат>. Существующий файл она не перезаписывает. Файл из --output
доступен только вам (0600): в нём ссылки на фото, которые открываются без входа.
--to <папка> пишет чаты в папку: по файлу JSONL на чат и manifest.json. Повторный запуск в ту же
папку добавляет только то, что изменилось с прошлого раза: новые сообщения, правки (в том числе старых
сообщений) и удаления. Удалённое сообщение записывается без текста — { "id", "chat_id", "deleted": true }.
max personal store export Друзья Работа --to ~/max-архивmax personal store export --kind group --to ~/max-группыmax personal store export --all --to ~/max-всёПапку с чужими файлами или выгрузку другого аккаунта max не трогает. Изменение одних реакций
изменением не считается.
--encrypt у store export (с --output или --to) и у store backup сжимает файл и шифрует его
паролем. Внешние программы не нужны. Открыть такой файл — max personal store decrypt <файл> --output <новый файл>;
max personal store restore сам спросит пароль зашифрованной копии.
-
Пароль нигде не сохраняется — ни в настройках, ни в хранилище паролей, ни в журнале. Забыли его — файл не открыть.
-
Сами вводите пароль в терминале: он не показывается и спрашивается дважды. Агент, которому вы дали пароль, передаёт его через stdin, а не в аргументе команды — аргумент виден другим программам:
printf '%s' 'пароль' | max personal store backup ~/max.sealed --encrypt
-
В зашифрованную папку пишется один файл на запуск.
manifest.jsonв ней без названий чатов, и запуск с другим паролемmaxне примет.
Когда вы просите агента сделать сводку чата, max personal messages evidence <чат> готовит сообщения, которые
ему нужно прочитать: один пакет из локальной копии этого профиля. Команда не подключается к MAX и
ничего не отмечает прочитанным, даже без --offline:
max personal messages evidence -1000 --limit 20 --json
max personal messages evidence -1000 --cursor <курсор из page.next> --jsonСообщения идут от новых к старым, со ссылками msg: и отпечатками содержимого. --limit принимает
1–100 и по умолчанию равен пределу профиля. Целые сообщения занимают не больше 64 КиБ JSON; заголовок
пакета — сверх этого. JSON и JSONL выдают один целый пакет.
Перед сводкой посмотрите coverage: там сколько сообщений выбрано, включено и пропущено, есть ли
более старые за пределами страницы; полнота истории остаётся unknown. Если в next есть шаг
page.next, передайте его cursor в --cursor, чтобы продолжить и не пропустить сообщения, которые не влезли по размеру.
Пустой курсор не доказывает, что копия полна. Если самое новое выбранное сообщение одно больше предела,
пакет пуст, truncated_by: "bytes" и курсора нет — этот случай нужно обработать явно. Неизвестный
курсор даёт not_found.
Агент может ссылаться на эти ссылки в сводке; сам max сводку не пишет. Текст сообщений — данные
источника, им нельзя доверять как инструкциям. Право профиля — messages.evidence, оно наследует
messages.
max personal chats list --offline # только из локальной копии, никуда не подключатьсяmax personal messages list "Книжный клуб" --limit 50 --offlinemax personal messages send 0 "текст" --offline # отказ: из копии отправить нельзя--offline отвечает из копии и никуда не подключается. Он нужен, когда сети нет или когда
подключаться не нужно. Если профиль ещё ничего не прочитал, команда отказывает: записанного нет.
Обычная команда подключается, делает одно дело и выходит. max personal serve — исключение: он держит одно
подключение к MAX открытым и раздаёт новые сообщения тем, кто слушает.
Запускать его руками не обязательно. Первая команда, которой нужен MAX, сама запускает
max personal serve в фоне, если его нет, и работает дальше своим подключением; следующие идут через
сервер. Такой сервер сам останавливается через 15 минут, если им никто не пользуется. Что он
пишет — в файле <профиль>.serve.log рядом с состоянием профиля (права 600). Не запускать —
--no-serve на один раз или max personal config set serve false насовсем. max personal session end сначала
останавливает сервер профиля, если его запустила команда.
Сервер, запущенный руками (max personal serve, max personal server start), останавливают только Ctrl-C и
max personal server stop: ни простой, ни max personal session end, ни другие запросы по сокету. Если в фоне
уже работает сервер, который запустила команда, max personal serve руками сменяет его. --idle руками —
пожалуйста: это ваш собственный выбор. max personal session start останавливает любой сервер профиля,
входит и запускает его снова уже на новой сессии: подключение к MAX в каждый момент одно.
max personal serve # вручную, в одном терминале; Ctrl-C — остановить
max personal serve --idle 30m # или остановиться, когда им 30 минут никто не пользуется
max personal server start # то же, но в фоне; ответ — когда сервер уже подключён
max personal server status # работает ли, с какого времени, какой версии, подключён ли к MAX
max personal server restart # остановить и запустить снова — например, после обновления max
max personal server stop # остановить сервер профиля, как бы он ни был запущен
max personal server logs # последние строки его журнала; --lines 200 — больше
max personal server install # служба systemd (Linux) или launchd (macOS) для профиля; ничего не запускает
max personal server uninstall # убрать службу; сначала max personal server stop
max personal watch # в другом: новые сообщения по мере прихода
max personal watch --jsonl # то же для скрипта: одно сообщение на строку, как у `messages list`
max personal watch --jsonl | ./on-message.sh
max personal watch --events --jsonl # ещё правки, удаления, реакции, прочтения и изменения чатов; у строки поле "event"-
После обновления
maxсервер, который запустила команда, сменяется новым сам. Запущенный руками работает на старой версии, пока его не перезапустить:max personal server statusэто покажет,max personal server restartисправит. -
Служба вместо команды. После
max personal server installкомандаmax personal server startзапускает сервер через systemd или launchd, аmax personal server stopостанавливает его там же. Служба запускаетmax personal serve— сервер «руками», без простоя. Если MAX не принял вход, служба не перезапускает сервер: каждый повтор был бы новым входом в аккаунт.max personal server statusпоказывает службу и где её журнал. -
Один сервер на профиль. Второй
max personal serveтого же профиля откажется. Сокет лежит рядом с состоянием профиля, права 600: слушать может только владелец. - Что он делает в сети — как вкладка web.max.ru: пинг раз в 30 секунд, ответ на пинг MAX, подтверждение каждого пришедшего сообщения. Прочитанным он ничего не помечает и ничего не отправляет.
-
Если MAX оборвал связь, сервер подключается снова: через 1, 2, 4 … секунды, не реже раза в
минуту.
max personal watchпишет об этом в stderr. Если MAX больше не принимает токен, сервер останавливается с ошибкой входа. -
У профиля одно подключение к MAX на всех. Команды,
max personal mcpиmax personal watchне входят в MAX сами: вход им отдаёт сервер, и всё — чтение, отправка, реакции — идёт через его подключение. Защиты отправки срабатывают в самой команде, как раньше. Сервера нет — команда запускает его и ждёт; приserve: falseбез сервера команда входит сама. Два сервера на профиль не запускаются: второй отказывает, ещё не войдя в MAX. - Сервер держит свой вход в актуальном состоянии: новое сообщение, чат прочитан на телефоне, чат изменился — всё это он учитывает. Если MAX сообщил о том, чего он учесть не может (удалены сообщения), сервер в фоне входит заново — не чаще раза в минуту.
-
С
--eventsстроки другие:{"event": "message", "message": …},{"event": "edit", "message": …},{"event": "delete", "chat_id", "chat_title", "message_id"},{"event": "reaction", "chat_id", "chat_title", "message_id", "reactions"},{"event": "read", "chat_id", "chat_title", "user_id", "up_to_time", "unread_count"}— кто-то прочитал чат до сообщения с этим временем; это может быть и сам владелец на другом устройстве,{"event": "chat", "chat"}— у чата сменилось название или участники, или владелец из него вышел. Пометка «непрочитанным» событием не считается. Без флага вывод прежний — одно сообщение на строку. Кто печатает сообщение,max personal watchне показывает: MAX присылает это только клиенту, который держит чат открытым. -
max personal watchвидит только то, что пришло, пока он и сервер подключены. Пока связь с MAX обрывалась, сообщения шли мимо. Строкаstatusсconnected: trueпосле обрыва — сигнал добрать пропущенное:max personal inbox 'date>"<время из поля at предыдущей строки status>"'.
max personal store info # где файл, его размер, схема и число строк; ничего не меняетmax personal store check # цел ли файл, индексы поиска и место на диске, какие чаты отсталиmax personal store backup ~/max-store.db # копия файла на ходу; --encrypt — с паролемmax personal store restore ~/max-store.db # положить копию на местоmax personal store migrate # перевести файл на схему этой версии maxmax personal store clear --left # посмотреть, сколько данных покинутых чатов можно удалитьmax personal store clear --left --allow-dangerous # удалить их из общей копии-
backupне перезаписывает существующий файл. Копия снимается на ходу. -
restoreоставляет прежний файл рядом. Зашифрованную копию он сам спросит пароль (Пароль). -
migrateпереводит файл на схему этой версииmaxи достраивает индексы для старых сообщений. -
Чат, из которого вы вышли или вас удалили, пропадает из
chats listиchats showпри следующем входе. Его сообщения остаются в копии;max personal store clear --left --allow-dangerousстирает их вместе с чатом (без--allow-dangerousкоманда только говорит, сколько удалит). Если вас вернут в чат, он снова появится в списке.
max personal store migrate достраивает индексы; max personal store reindex перестраивает их — индекс поиска, словарь
опечаток и основы слов; сообщения не теряются. store info и store check показывают готовность
индекса слов и индекса основ. Основа — часть слова, которая не меняется в его формах; по основам
строгий поиск находит формы слов, а exact: и --exact выбирают точную форму.
config set search_stemmers.cyrillic принимает russian или none, config set search_stemmers.latin
— english, spanish или оба через запятую (по умолчанию english,spanish: латинское слово ищется по
основам обоих языков), либо none; none отключает основы для этого алфавита. После своей настройки
выполните store reindex. Если основы строятся заново — после обновления max, сменившего настройку
по умолчанию, — поиск пока ищет точные формы слов и говорит об этом; max personal serve достраивает основы в
фоне, store migrate — сразу. Настройка общая для всех профилей и обоих мессенджеров, поэтому
--defaults, --personal и --bot к ней не применяются, а под MAX_PROFILE_LOCK менять её нельзя.
max personal store repair --dry-run --json показывает исправление структуры и откатывает изменения;
store repair применяет их без удаления данных. Неподходящая таблица сохраняется как копия,
строки и столбцы, которые не удалось перенести, указаны в ответе. Не удаляйте копию до проверки.
Имена копий есть в ответе store repair (copies в --json); store copies delete <точное имя>
удаляет только указанную. Остановите процессы, использующие архив, перед восстановлением структуры.
У устройства копии есть номер версии. Более новый max или другая программа может обновить файл;
более старый max продолжает с ним работать, пока изменение это позволяет. Когда не позволяет, каждая
команда, которая открывает копию, говорит:
the message store was written by a newer version (schema N, needs at least M; this one speaks K) — upgrade this tool
Общая локальная копия хранится в wirecat.db. Старый messages.db не переносится: при открытии копии по умолчанию он удаляется вместе с -wal и -shm.
Если в старом файле нужны заметки, псевдонимы, метки, задачи или расшифровки, остановите использующие его программы и скопируйте файл со служебными файлами в другую папку до первого запуска новой версии.
При заданном MESSAGING_STORE очистка не выполняется; открытый другим процессом файл остаётся до следующего открытия копии.
Сообщения из MAX можно заново получить через max personal messages sync --all; данные, существовавшие только локально, с сервера не вернутся. Вход сохраняется отдельно.
Обновляйте max и tg вместе, чтобы они использовали одну копию.
Если нужно обновить схему wirecat.db, выполните max upgrade после сохранения нужного старого файла.
- Поиск сообщений — найти то, что лежит в копии.
- Как пользоваться — чтение и отправка.
- Что команда делала — диагностика запусков.
-
Справочник команд — каждая опция
store,serve,watch.