CLI tools

Изменения

This page is in Russian.

Заметные изменения в @leemour/max-cli. Формат — по одному разделу на версию, новое сверху; номера версий по семантике, то есть до 1.0.0 интерфейс команд ещё может меняться.

Не выпущено

Что нового

  • max conversations build|list|show и max messages links — разговоры внутри группы, найденные в локальной копии по ответам, упоминаниям и тому, кто написал следом; MAX не спрашивается. conversations batches status|next и conversations links add|clear — пачки для вашего агента и его ответы.

  • max server logs, max server install, max server uninstall — как в tg. install пишет службу systemd (Linux) или launchd (macOS) для профиля и ничего не запускает; дальше max server start и stop идут через неё. Если MAX не принял вход, служба сервер не перезапускает: каждый повтор был бы новым входом в аккаунт. max server start --idle и restart --idle остаются.

  • max skill install ставит навык для агентов одной командой: в ~/.claude/skills/max-cli/ для Claude Code и в ~/.agents/skills/max-cli/ для Codex и Gemini CLI, с номером версии max. --for claude или --for agents — только в одну папку. max skill show печатает то же, что раньше.

  • Агент узнаёт о навыке сам. Если задана переменная AI_AGENT или CLAUDECODE, а навыка нет или он старше max, раз в сутки в stderr выходит одна строка про max skill install. В stdout ничего не добавляется. Выключается max config set skillHint false --defaults.

  • max mcp и max bot mcp отдают навык ресурсом max://skill и называют его в своих инструкциях для агента.

  • max cache clear --left стирает из локальной копии только чаты, из которых вы вышли, вместе с их сообщениями. Остальная копия не трогается.

  • max store status — сколько сообщений каждого чата хранится и какие куски скачаны целиком. store fetch --background и store jobs list|show|cancel — скачивание в фоне. store info|check|migrate|backup|restore|reindex — уход за файлом общей копии. store clear --left --allow-dangerous удаляет из неё чаты, из которых вы вышли, с их сообщениями.

  • max messages search --regex — одно регулярное выражение по всему сохранённому тексту. messages show|context msg:… — сообщение по ссылке из search, без id отдельно.

  • max polls show <чат> <сообщение> — опрос с id вариантов и числом голосов, ничего не меняя.

  • max polls create --send-id — повторить создание опроса, ответ на которое не пришёл, без второго опроса. --revote — в опросе можно переголосовать.

  • max messages edit --md — разметка в правке, как в send.

  • max messages send --voice и --as-file снова есть, теперь в общей команде tg и max.

  • max messages forward --send-id — повторить пересылку, ответ на которую не пришёл, без второй копии. Если пересылка ответила outcome_unknown, ошибка называет команду повтора с этим номером.

  • max messages send --photo <путь> — отправить .jpg .png .webp фотографией, как в tg. --no-preview у send тоже есть, но MAX его не поддерживает, и команда откажет.

  • max messages delete отвечает с operationId — номером этого удаления; тот же номер стоит в журнале отправок (max sends list). Инструмент MCP max_messages_delete отвечает так же. Сама команда и её опции не меняются: это теперь общая команда tg и max.

  • Установка легче примерно на 16 МБ (cli-messaging 0.61.0): слой базы данных теперь встроен в пакет, а не ставится отдельно. Команды max не меняются.

  • У каждой записи в журнале отправок есть operationId — номер одного действия. Все строки об одной отправке, правке, удалении или изменении чата несут один и тот же номер, так что по нему видно, чем действие кончилось. У отправки сообщения это её sendId.

Изменено — может сломать скрипты

  • max serve --detach и max serve --stop убраны: это max server start и max server stop.

  • max server status --json отвечает теми же полями, что tg: byHand стал by (hand — руками, command — его запустила команда, server — max server start, unit — служба); добавлены log, unit и stale (сервер упал и оставил метку). max server start, stop и restart отвечают как в tg: { started, by, pid, startedAt, log } и { stopped, by, pid }; поля socket больше нет.

  • max messages send --at теперь --at-time — как во всех командах tg и max, где опция принимает время. Скрипт с --at получит ошибку «неизвестный параметр» — замените на --at-time. Параметр at у max_messages_send в MCP не меняется.

  • --markdown больше нет, только --md — в messages send, messages edit и везде, где разметка читается. Так названо во всех командах tg и max; скрипт с --markdown получит ошибку «неизвестный параметр» — замените на --md.

  • max store — общая группа команд tg и max. store fetch пишет в общую локальную копию, ту же, что у tg, и листает MAX как раньше: по 30 сообщений, 5–10 с между страницами, до 40 страниц за запуск. Копия, которую max вёл раньше, не переносится — историю скачайте заново. Что ещё изменилось:

    • store fetch --estimate для MAX отказывает: id сообщений MAX не позволяют сосчитать, сколько не хватает;
    • store fetch|export --since теперь --since-time, и только время, не id сообщения;
    • store fetch --max-pages <n> теперь --limit <сообщений> (по умолчанию 1200, то есть 40 страниц по 30); размер страницы — --page-size;
    • store export --format md теперь --format markdown; jsonl как был. Выгрузка больше не перечисляет в stderr куски, которых нет в копии, — их показывает store status; существующий файл она не перезаписывает;
    • store fetch в конце не печатает готовую команду выгрузки.
  • max messages list|show|context|search — общие команды tg и max. --offline и search отвечают из общей локальной копии, той же, что у tg; она заполняется с первого запуска без --offline после обновления, прежняя копия max в неё не переносится — и с ней расшифровки голосовых, услышанных до обновления. Что ещё изменилось:

    • голосовое — вложение "kind": "voice", а не "audio" (в inbox и review пока "audio");
    • messages list --before и --after разделились на --before-id, --before-time, --after-id, --after-time, а у messages context — --before-n и --after-n, как в tg. Скрипт со старым именем получит ошибку «неизвестный параметр»;
    • messages list --before-id не включает само это сообщение; с --offline годится только --before-id, и только с id сообщения из локальной копии;
    • messages list --transcribe --json больше не отвечает полем transcribeProblem: причина — в stderr; с --offline unheard пуст. Голосовое скачивается на отдельном соединении — с --no-serve это второй вход в MAX;
    • модели речи max ищет в ~/.cache/cli-common/models/audio, одной папке с tg; скачанную в ~/.cache/max-cli/models/audio нужно скачать заново или перенести;
    • messages search ищет слова и их начала (квартир найдёт «квартира»), а не любые три буквы подряд; --chat принимает и имя сохранённого чата.
  • max chats list|show и max contacts list|show — общие команды tg и max. Их --offline отвечает из общей локальной копии, той же, что у tg. Она заполняется с первого запуска без --offline после обновления; прежняя копия max в неё не переносится, и до того --offline ответит not_found. Что ещё изменилось:

    • chats list --search|--kind|--unread без --offline ищет в 200 самых свежих чатах и пишет в stderr, если были старше; с --offline — во всех сохранённых;
    • chats show --offline отвечает без description, access и settings: их знает только MAX;
    • неверный --kind отвергается другими словами: --kind is one of dialog, group, channel, saved.
    • cache clear забывает и то, что этот аккаунт хранит в общей копии, а contacts sync забирает всё и туда.
  • max polls — общие команды tg и max. polls vote|close --json отвечают {operationId, poll}, где poll — {chatId, messageId, question, answers: [{id, text, voters, chosen}], closed, multiple, anonymous, voters}; polls create — {sendId, operationId, message}. Так же отвечают инструменты MCP max_polls_vote, max_polls_close, max_polls_create; у max_polls_create вместо revote теперь silent.

  • max messages send|edit|forward — теперь общие команды tg и max. Пока общие команды не получат того, что было только у max, этого нет:

    • у send — несколько --file в одном сообщении: теперь одно вложение из --file и одно из --photo;
  • Ответы --json: send — {sendId, operationId, message} (с scheduledFor, если с --at), edit и forward — {operationId, message}, вместо сообщения без обёртки. Так же отвечают инструменты MCP max_messages_send, max_messages_edit и max_messages_forward; у max_messages_edit больше нет markdown, у max_messages_forward — send_id.

  • Если отправка с --at не получила ответа, ошибка советует messages scheduled, не называя чат.

  • max messages unpin <чат> <сообщение> — теперь нужен номер сообщения, как у pin и в tg. В чате MAX закреплено одно сообщение, и открепляется оно, какой бы номер ни был указан. Инструмент MCP max_messages_unpin тоже просит message.

  • Ответы --json у реакций, закрепления и отметки прочитанным — общие с tg, и в каждом есть operationId, номер этого действия, как в журнале отправок:

    • reactions add|remove: {operationId, chatId, messageId, reaction} — ваша реакция или null, без счётчиков реакций на сообщении (их показывает messages list);
    • messages pin|unpin: {operationId, chatId, messageId, pinned}, где pinned — true или false;
    • chats mark-read: {operationId, chatId, until} — до какого сообщения, или null, если до последнего.

    Так же отвечают инструменты MCP max_reactions_add, max_reactions_remove, max_messages_pin, max_messages_unpin, max_chats_mark_read.

  • max sends list --json: поле cid → sendId, и это строка, а не число — то же имя, что в ошибке outcome_unknown и у --send-id. Строки, записанные раньше, показываются так же.

  • Записи запусков (--trace, --record, max runs show) — в общем формате tg и max. Номер отправки в событии называется send, а не cid; ключ отказа MAX — providerError, а не maxError, в событиях, в run.json и в details ошибки --json.

  • max bot отвечает outcome_unknown (код 14), если на отправку или другое изменение пришёл ответ 502, 503 или 504. Раньше это был отказ provider_unavailable (код 12). Почему: такой ответ даёт шлюз перед MAX, и он не говорит, выполнил ли MAX запрос. Сообщение могло уйти. Что учесть: скрипт, который повторял изменение после кода 12, мог отправить его дважды. После кода 14 сначала проверьте, выполнилось ли оно. Чтение по-прежнему повторяется само и отвечает provider_unavailable.

Исправлено

  • max messages send --voice снова уходит через max serve. Через сервер MAX отказывал (proto.payload): полоска громкости голосового терялась по дороге.

  • max chats list и max chats show больше не показывают чаты, из которых вы вышли. Раньше такой чат оставался в списке навсегда, с устаревшим числом участников. Теперь он исчезает при следующем входе, если max получил от MAX полный список ваших чатов; сообщения остаются в копии до max cache clear --left. max serve узнаёт о выходе только при следующем полном входе.

  • Пустая локальная копия max снова заполняется целиком. После обновления копии или удалённого файла вход спрашивал у MAX только изменения, и чаты и люди, которые не менялись, в неё не возвращались: --offline, участники в chats show и contacts show отвечали неполно. Теперь вход в таком случае забирает всё.

  • max serve больше не путает ответы после долгой работы. Номер запроса занимает два байта и после 65 536 запросов начинается заново. Если запрос с тем же номером ещё ждал ответа, новый запрос мог получить чужой ответ. Теперь такой номер пропускается.

0.21.0 — 30.09.2026

Изменено — может сломать скрипты

Команды названы по одному правилу: сначала предмет, потом действие. Старые имена больше не работают — max отвечает «unknown command» или «unknown option» с кодом 1 и ничего не делает.

  • max backup messages → max store fetch. Теперь команда скачивает сразу; только посчитать — --estimate (раньше наоборот: без --run только считала). Каждый запуск по-прежнему не больше --max-pages страниц (40) с той же паузой. --pause принимает длительность: 5s, 500ms — число без единицы теперь отказ. --since и --last необязательны: без них запуски идут до начала чата, каждый — с места, где остановился прошлый.
  • max export messages → max store export.
  • --cid → --send-id у messages send и messages forward. В ошибке outcome_unknown номер теперь в поле sendId; у инструментов MCP max_messages_send и max_messages_forward аргумент cid → send_id.
  • max chats read → max chats mark-read; инструмент MCP max_chats_read → max_chats_mark_read.
  • max chats settings больше нет. Настройки группы показывает max chats show (поля settings, description, access; ссылку-приглашение — по-прежнему max chats link show), меняет max chats update <чат> --all-can-pin on|off и остальные флаги настроек.
  • max update → max upgrade, и строка о новой версии называет max upgrade.
  • max recipients off → max recipients clear, в ответе off → cleared; max bot recipients off → max bot recipients clear.
  • max account sessions end-others → max account sessions end --others; без --others — отказ.

Что нового

  • max complete виден в max --help — чтобы найти, как включить дополнение по Tab.
  • Страница docs/remote.md: ChatGPT или Claude в браузере — через прокси со входом по паролю и публичный адрес Tailscale без своего домена. Схема собрана по документации этих инструментов и целиком не проверена.

0.20.0 — 30.09.2026

Изменено — может сломать скрипты

  • Общее хранилище сообщений переходит на версию 6 (cli-messaging 0.49.0). Первый запуск max обновляет messages.db; после этого tg старше выпущенного в тот же день отказывается открывать файл и просит обновиться — npm install -g @leemour/tg-cli@latest. Команды max не меняются.
  • --all-bots работает, только если боту разрешено читать других ботов. Настройка readOtherBots в разделе bot: max <имя> config set --bot readOtherBots true — всех, или список профилей. Без неё команда отказывает с кодом 5 и называет, как разрешить.
  • Когда имя подходит нескольким людям, кандидаты перечислены по имени, люди без имени — первыми; раньше — в том порядке, в каком лежали в кэше. Текст ошибки тот же.

Что нового

  • --bots news,support у bot messages search, bot people show и bot messages between — прочитать копии только этих ботов, если readOtherBots их разрешает. bot messages search теперь понимает и --all-bots.
  • Агент через bot mcp получает all_bots и bots у тех же трёх инструментов — только когда бот может читать других.
  • Люди — у каждого бота свои. Человек, которого видел один бот, не находится у другого без --all-bots или --bots.
  • Поиск по тексту сообщений бота находит любые три буквы внутри слова (вартир находит «квартиру»), как поиск личного аккаунта.

0.19.0 — 28.09.2026

Изменено — может сломать скрипты

  • Агент через max mcp закрывает опрос, только если профилю разрешено edit. Раньше хватало reaction. Почему: закрытие правит сообщение с опросом, и команда max polls close всегда требовала edit — агент и человек получали на одно действие разные права. Что учесть: если в allow профиля есть reaction, но нет edit, агент больше не видит инструмент max_polls_close; чтобы он мог закрывать опросы, добавьте edit. Если allow не задан, ничего не меняется. Подробнее — docs/mcp.md.

Исправлено

  • max mcp --confirm-send запускается, когда изменения аккаунта включены только настройкой mcpTools. Раньше флаг требовал ещё одного из --allow-*, иначе сервер не запускался. Почему это важно: из-за этого сервер с одной mcpTools работал без формы подтверждения — агент мог добавлять и удалять контакты, создавать группы и менять профиль, не спрашивая вас. Что учесть: без --confirm-send всё как раньше. Чтобы видеть форму перед каждым изменением, добавьте флаг в команду запуска сервера.
  • max <бот> bot messages search --limit N говорит, что найдено больше. Раньше в ответе всегда было hasMore: false, а в limit — значение из настроек, а не ваше N. Что учесть: скрипт или агент, который по hasMore решал, искать ли дальше, останавливался на первой странице и пропускал совпадения. Теперь он получит hasMore: true, когда совпадений больше N.

0.18.1 — 28.09.2026

Исправлено

  • После max contacts rename новое имя видно сразу — в contacts show и в названии личного чата с этим человеком. Раньше там оставалось прежнее имя, пока фоновый max serve не входил в MAX заново: MAX присылает переименованный контакт в ответе, а сервер его не применял. Что учесть: если после переименования имя всё ещё старое, у вас работает сервер прежней версии — его заменит первая же команда 0.18.1.

0.18.0 — 28.09.2026

Что нового

  • Агенту можно разрешить менять аккаунт через max mcp. Появились инструменты для контактов (добавить, удалить, переименовать, заблокировать), для закрытия своего опроса, для групп (вступить, выйти, создать, назначить и снять админа) и для имени и описания профиля. Раньше агент через MCP мог только читать и писать сообщения. Почему только в настройках: эти действия видят другие люди, и включить их должен владелец, а не сам агент — дописав флаг в свою же команду запуска. Что учесть: всё выключено, пока группа не названа в настройке mcpTools, например max config set mcpTools contacts,polls. Флагом это не включается. Каждое действие проходит те же проверки readOnly, allow и журнал, что и команда. Подробнее — docs/mcp.md.
  • Загрузка файла ботом видна в --trace и в записи запуска. bot messages send --file и bot uploads put показывают загрузку двумя строками: вид файла, размер, HTTP-код и время. Раньше загрузка в запись не попадала. Что учесть: адрес загрузки и имя файла не пишутся — ни на экран, ни в запись.

Исправлено

  • max contacts rename переименовывает. Раньше MAX отвечал «успешно», а имя оставалось прежним. Почему: без поля lastName MAX молча ничего не меняет. Теперь lastName уходит всегда (null, если фамилии нет) — так делает и веб-клиент. Что учесть: имена, «изменённые» через 0.17.x, на самом деле не изменились — переименуйте ещё раз.

0.17.1 — 28.09.2026

Исправлено

  • Ошибка в --limit, --last и --max-pages повторяет то, что вы набрали. Это касается messages list, inbox, backup, sends list и команд бота. Раньше на --limit abc они называли введённое NaN; в 0.17.0 это исправили только у списков со страницами.
  • runs list и sends list, обрезанные по --limit, говорят hasMore: true. Раньше в ответе было hasMore: false, а в limit — не то число, что вы просили. Что учесть: скрипт, который по hasMore решал, читать ли дальше, раньше останавливался на первой странице.
  • Контакт, которого вы переименовали, показывается под вашим именем, как в приложении MAX. Раньше max показывал имя, которое человек дал себе сам, даже если вы переименовали его в contacts rename или в приложении.

0.17.0 — 28.09.2026

Изменено — может сломать скрипты

  • Любой список в --json — объект {items, page, limit, hasMore}, а не массив. Так теперь отвечают account sessions list, chats members list, chats folders list, messages scheduled, messages download, messages context, models audio list, recipients list, sends list, runs list, chats check, chats events и все списки бота. Раньше часть из них отдавала массив, а chats events — {events, more}. Почему: списки приходили в трёх разных формах, и скрипту или агенту приходилось помнить форму каждой команды. Что учесть: скрипт, который читал массив, теперь должен брать .items. У списка без страниц page равен 1, а limit — числу пришедших строк. bot members list и bot admins list кладут рядом marker, а user_id у них теперь строка. bot messages get отвечает самим сообщением, а не массивом из одного. --jsonl и таблица для человека не изменились. В MCP — то же самое.

Что нового

  • max doctor и max config show видят ботов. Список профилей — все профили на этом компьютере, с пометкой: личный аккаунт, бот или оба. Раньше профили ботов в нём не появлялись. doctor показывает, откуда взят токен бота (без самого токена), сколько чатов бот видел и где лежат файлы профиля; doctor --online спрашивает у Bot API, чей это токен. Что учесть: для профиля бота doctor и личные команды больше не советуют session start, а называют нужную команду max <имя> bot ….
  • Инструменты max_status и max_bot_status в MCP. Агент видит, за какой профиль говорит сервер, есть ли токен и какие пишущие инструменты включены. Они ничего не отправляют, а max_status даже не входит в MAX.
  • Дополнение по Tab знает о ботах. Для команд бота оно предлагает чаты, которые видел бот, а не чаты личного аккаунта; в первом слове — все профили, в том числе профили ботов.
  • Команды бота записываются, как личные. max <имя> bot … --trace показывает в stderr каждый запрос к Bot API: операцию, чат или сообщение, HTTP-код и время. --record сохраняет запуск, а упавший запуск бота сохраняется сам, вместе с запросами. Смотреть — max runs list и max runs show. Что учесть: загрузка файлов (--file) в эту версию записи ещё не попадала — это добавлено в 0.18.0.
  • Настройки отдельно для личных аккаунтов и для ботов. В файле настроек появились разделы personal и bot, у каждого свои defaults и profiles. max config set --personal|--bot пишет в раздел, max config show --bot показывает настройки бота и называет ключ, из которого прочитано значение, например config file: bot.profiles.test. Почему: у одного человека бывают и личный аккаунт, и боты, и одни и те же правила им не подходят. Что учесть: побеждает самая точная запись — профиль в разделе, затем профиль, затем раздел, затем общие defaults. Прежний файл читается как раньше. Подробнее — docs/configuration.md.
  • У бота может быть лимит отправок в час. max <имя> config set --bot sendsPerHour 200 задаёт его. По умолчанию лимита у бота по-прежнему нет.
  • max config set defaultProfile <имя> — какой профиль берётся, если первое слово не профиль. Раньше это всегда был default.
  • Фото профиля, своё имя для контакта, блокировка. max account update --photo <файл> ставит новое фото профиля. max contacts rename <кто> <имя> [фамилия] даёт человеку имя, которое видите только вы. max contacts block <кто> и unblock блокируют и разблокируют — даже того, кого нет в контактах. Что учесть: всё проходит те же проверки, что account update и contacts add. В этой версии contacts rename на деле не менял имя — исправлено в 0.18.0.
  • Каналы. max chats create <название> --channel создаёт закрытый канал. Что учесть: людей в канал зовут ссылкой-приглашением (max chats link show) — добавить человека напрямую MAX может не дать.
  • Права админа на чтение и на ссылку. max chats admins add <чат> <кто> --can read,link даёт читать все сообщения группы и менять ссылку-приглашение. Что учесть: бот-админ без права read сообщений группы не видит.
  • Время можно задать как «столько назад». --since, --before и --after понимают 30m, 2h, 1d: max review --since 1d. Раньше нужно было писать точное время.

Исправлено

  • Ваше же изменение чата видно сразу. После max chats update, chats settings и chats link reset команды chats show и chats list несколько минут показывали старое название. Почему: MAX не присылает ваше изменение обратно, а фоновый max serve не применял чат из ответа MAX. Теперь применяет — как уже делал с отправленными сообщениями.
  • max export messages не предупреждает о пропуске «до 1970-01-01» после полного backup. Раньше выгрузка чата, прочитанного до самого начала, всё равно говорила, что начало не прочитано.
  • Ошибка в --limit и --page повторяет то, что вы набрали. Раньше на --limit abc она называла введённое NaN.
  • Сброшенная ссылка-приглашение в chats inspect и chats join — ошибка «ссылка никуда не ведёт» (not_found, код 6). Раньше это был непонятный отказ MAX с номером операции. Что учесть: скрипт, который ждал другой код выхода, теперь получит 6.
  • max config show и max doctor не показывают лишний профиль <имя>.moderation. Раньше они принимали файл правил модерации группы за профиль.
  • Ошибка в подкоманде называет неизвестное слово, а не профиль. Раньше max work bot auth status говорил, что work прочитано как имя профиля, хотя неизвестным было слово status.
  • max config show показывает transcribeModel — модель распознавания речи. Раньше эта настройка не выводилась.

Удалено

  • Заявки на вступление: max chats requests list|accept|decline, правило requests и уровни consent.accept и consent.decline в правилах группы. Почему: в MAX группа либо открытая, либо в неё входят по ссылке-приглашению; одобрять новых участников негде, поэтому заявок не бывает. Команды обещали то, чего MAX не делает. Что учесть: файл правил, где эти ключи остались, читается как прежде; при следующей записи они из него уходят. Скрипт, который вызывал chats requests, получит ошибку «нет такой команды».

0.16.0 — 27.09.2026

Что нового

  • Люди и переписка бота. max <имя> bot people show <кто> показывает, где человек писал, и его личный чат с ботом. bot messages search --from <кто> — что писал один или несколько человек. bot messages between <кто> <кто> — их переписка в чатах, где писал каждый. Что учесть: всё берётся из копии на этом компьютере, то есть только из того, что бот уже видел. --all-bots смотрит копии всех ботов.
  • Бот проверяет группу по её правилам. max <имя> bot chats check <чат> сверяет новое в группе с правилами (bot chats rules show|set|unset) и действует от имени бота: удаляет сообщения и удаляет людей. Вступления берёт из bot updates watch. Что учесть: удалённый человек не сможет вернуться по ссылке-приглашению, если не указан --no-ban; снять этот запрет через Bot API нельзя. Возраст аккаунта через Bot API не виден, и правила о нём здесь не срабатывают.
  • Опросы. max messages list показывает опрос словами: вопрос, варианты с id в [скобках], голоса и ✓ у вашего варианта. max polls vote <чат> <сообщение> <вариант>… голосует, --retract снимает голос, max polls close закрывает свой опрос, max polls create создаёт новый. В MCP — max_polls_vote и max_polls_create, только с --allow-send. Что учесть: что отказал бы веб-клиент — закрытый опрос, лишние варианты, второй голос без права переголосовать, — max отказывает сам, ничего не отправляя. web.max.ru опросы не показывает, и polls create об этом напоминает.
  • max <имя> bot mcp — MCP-сервер бота для агента. По умолчанию только чтение; запись — по флагам --allow-send, --allow-delete, --allow-moderate, --confirm-send. Что учесть: каждая запись идёт через ту же команду, что набрали бы вы, — со списком получателей и журналом. Действия проверки по правилам, которые нужно подтвердить, агент показывает вам одной формой. Подробнее — docs/bot.md.

Изменено — может сломать скрипты

  • Параметр timeout у max bot api get-updates теперь задаётся флагом --poll-timeout. Раньше флаг --timeout этой операции до MAX не доходил: --timeout — это общий срок самой команды. Что учесть: скрипт, который передавал --timeout для долгого опроса, должен перейти на --poll-timeout.

Исправлено

  • Фоновый max serve прежней версии заменяется при первой же команде новой версии. Раньше, пока старый сервер отвечал, он оставался работать и отказывал в новых операциях — например, в голосе в опросе, — пока его не останавливали через max server stop.
  • Сервер из другой сборки с тем же номером версии тоже заменяется. Раньше он оставался работать. Что учесть: сервер, запущенный вручную, на незнакомую операцию отвечает отказом с подсказкой max server stop.
  • max bot api get-updates --limit … работает. Раньше --limit операции принимался за настройку самого max, и команда отказывала.

0.15.0 — 27.09.2026

Что нового

  • max chats check <чат> — модерация группы по её правилам. Команда читает, что пришло с прошлой проверки (сообщения и новых участников), сверяет с правилами группы (max chats rules) и делает то, что они разрешают: сообщает, удаляет сообщение, удаляет человека из группы. Что учесть: по умолчанию команда только сообщает; --dry-run только планирует; за раз — не больше 10 действий. Удаление и исключение проходят те же проверки, что любое другое изменение. Заявки на вступление в этой версии только планировались — в 0.17.0 их убрали совсем, потому что в MAX их нет. Подробнее — docs/groups.md.
  • Модерация через агента. max mcp --allow-moderate даёт инструмент max_chats_check — ту же проверку. Всегда доступны три инструмента только для чтения: max_chats_events, max_chats_members, max_chats_rules. Что учесть: без флага инструмента проверки нет. Действия, которые правила велят подтвердить, агент показывает вам одной формой.
  • Роли и ссылка. max chats members list помечает каждого участника owner, admin или member. max chats link show <чат> печатает ссылку-приглашение.
  • Видео и голосовые с личного аккаунта. max messages send <чат> --file ролик.mp4 отправляет видео, которое смотрят прямо в чате (.mp4 .mov .webm .mkv). max messages send <чат> --voice заметка.ogg отправляет голосовое с полоской громкости и длительностью. Что учесть: раньше видео уходило файлом; чтобы отправить его файлом и теперь, добавьте --as-file. Голосовое — только Ogg Opus; для другого звука команда подскажет строку ffmpeg. Подробнее — docs/usage.md.
  • Голосовые текстом прямо в списке. max messages list <чат> --transcribe и max inbox --transcribe расшифровывают показанные голосовые на этом компьютере; текст стоит под сообщением со значком 🎤, в --json — в поле transcript. В MCP — transcribe: true у max_messages_list и max_inbox. Что учесть: уже расшифрованные голосовые показывают текст и без флага. Для расшифровки нужна скачанная модель.
  • Остальные команды бота. max <имя> bot messages send --file <путь> прикладывает картинку, видео, звук или файл, а bot uploads put только загружает его. bot members list|add|remove и bot admins list|add|remove — участники и админы чата; bot comments list|get|send|edit|delete — комментарии под постом канала; bot callbacks answer — ответ на нажатую кнопку; bot commands list|set|clear — меню команд бота; bot webhooks list|set|delete — вебхуки. Всё — в docs/bot.md. Что учесть: webhooks set отказывает, пока задан другой адрес: MAX не заменяет старый вебхук, а шлёт события на оба.
  • Локальная копия переписки бота. Всё, что бот прочитал, отправил или получил, сохраняется на этом компьютере. max <имя> bot messages list <чат> --offline и messages get --offline читают её без сети, bot messages search <текст> ищет по ней. Что учесть: сообщение, удалённое ботом или удаление которого заметил updates watch, из копии пропадает. Копия содержит тексты сообщений.
  • max <имя> bot updates watch печатает события бота по мере прихода, до Ctrl-C, и сохраняет их сообщения в копию. Следующий запуск продолжает с того места, где остановился прошлый. Что учесть: пока у бота настроен вебхук, команда не работает. Она забирает события у других читателей бота — запускайте её, только если бот больше никому не нужен.
  • Люди в копии бота. max <имя> bot people show <кто> — чаты, где человек писал, и последние сообщения из его личного чата с ботом; --refresh перечитывает этот чат у MAX. bot messages search --from <кто> — всё, что он написал. bot messages between <кто> <кто> … — переписка нескольких людей в чатах, где писал каждый. --all-bots смотрит копии всех ботов. Кто — номер, @username или часть имени.

Изменено — может сломать скрипты

  • max bot messages list печатает старые сообщения сверху, как max messages list. Раньше сверху были новые. Отправленное ботом сообщение теперь помечено как своё. Что учесть: скрипт, который брал первую строку как самое новое сообщение, теперь получит самое старое.

Исправлено

  • max review --transcribe не держит соединение с MAX открытым, пока работает модель. Записи скачиваются заранее, соединение закрывается, и только потом идёт распознавание.
  • max bot api edit-my-commands, subscribe, unsubscribe и get-upload-url работают. Раньше они падали с «an account change without a known action» и ничего не отправляли.
  • Отправка ботом на положительный номер без user: подсказывает, что это, скорее всего, человек, и что писать ему надо как user:<номер>.
  • Примеры в docs/bot.md не содержат выдуманного номера чата, и там же сказано, как узнать настоящий.

0.14.0 — 27.09.2026

Что нового

  • max bot — работа с ботом через официальный Bot API. max bot auth set проверяет токен бота у MAX и сохраняет его в ключнице, отдельно от личного аккаунта. Профиль — первое слово, как везде: max рабочий bot me. max bot me показывает бота, а max bot api <операция> вызывает любую из 33 операций API с флагами для параметров и JSON-телом. Команды сгенерированы из официальной схемы (список). Что учесть: идентификатор больше 2^53 печатается строкой, чтобы не потерять цифры, — скрипт должен читать его как строку.
  • Удобные команды бота. max <имя> bot messages send <чат> <текст> пишет в чат по номеру, человеку — как user:<номер>, или по названию чата, который бот уже видел; есть и edit, delete, list, get. max <имя> bot chats list — чаты, которые бот видел, и chats get|pin|unpin|leave|action. max bot list — все имена с токеном бота. Почему «которые видел»: у MAX нет списка чатов бота, поэтому max запоминает чаты сам.
  • Список получателей и журнал отправок бота. max <имя> bot recipients add|list|remove|off и max <имя> bot sends list. Список проходит любая запись бота, в том числе через bot api. Что учесть: лимита отправок в час у бота в этой версии нет (появился в 0.17.0). Всё о боте — docs/bot.md.
  • Модерация групп: что происходит. max review --unanswered [часы] — вопросы в группах, на которые ни вы, ни админы ещё не ответили; max review --chat <чат> — обзор одного чата. max chats events <чат> — кто вступил, вышел, кого добавили и удалили. max chats members list <чат> — все участники группы или канала, с датой регистрации и последним появлением. max chats rules show|set|unset <чат> — правила модерации группы, в одном файле, как config set.

Исправлено

  • Когда MAX закрывает соединение, ошибка называет код и причину закрытия.

0.13.0 — 26.09.2026

Что нового

  • max review — кто кому что должен. Одним вызовом — все сообщения, ваши тоже, во всех чатах, где что-то было с прошлого обзора (без --since — за 3 дня). --transcribe расшифровывает голосовые. В конце ответа — с какого момента начинать следующий обзор. Что учесть: если что-то не прочитано, ответ прямо говорит «неполный» — не принимайте такой обзор за полный (usage.md).
  • Инструмент max_review и команда /review в MCP. Агент раскладывает переписку на «я должен», «жду от других» и «нужно уточнить», проверяет рабочие группы, прежде чем назвать что-то просроченным, и готовит напоминания. Что учесть: напоминания уходят только после вашего «да» (mcp.md).
  • max mcp config печатает готовую запись для Claude Desktop, Cursor и других клиентов. Почему: запись содержит полные пути, поэтому работает и на Windows, и в приложениях, которые не видят PATH терминала (mcp.md).
  • max doctor проверяет установку: чем запущен max, куда поставлен, найдёт ли его новый терминал, загружаются ли ключница и SQLite, скачана ли модель речи. Что учесть: если каталог команды не на PATH, doctor печатает команду, которая это исправит, — для PowerShell на Windows и export на Linux и macOS. Если сама max не находится, запустите npx @leemour/max-cli doctor (troubleshooting.md).
  • max doctor --online проверяет связь с MAX: один вход, один чат и запуск MCP-сервера. Ничего не отправляет.
  • max models audio download после скачивания проверяет, что модель работает. Если модель не скачана, сообщение называет её язык и другие модели с размерами.

Изменено — может сломать скрипты

  • MCP-инструмент max_messages_attachment переименован в max_messages_photo. Что учесть: если в клиенте MCP было сохранено разрешение на старое имя, дайте его заново.
  • Профиль больше нельзя назвать review, потому что это теперь команда. Что учесть: профиль с таким именем придётся переименовать.

Безопасность

  • Отчёт о проблеме на Windows скрывает домашний каталог в любом написании. Раньше имя пользователя оставалось в части путей.

0.12.0 — 26.09.2026

Что нового

  • MCP-сервер умеет больше: max_inbox — всё новое одним вызовом; ответ на сообщение и оформление текста при отправке; реакции; фото — как картинка, которую агент видит (mcp.md).
  • Команды /catch-up, /reply, /find и чаты по @ в Claude Code (mcp.md).

Исправлено

  • max serve работает на Windows. Там сервер теперь слушает именованный канал, а не файл.
  • Слишком длинный путь к сокету на macOS и Linux даёт понятную ошибку, а не EINVAL. Путь становится длинным из-за длинного имени профиля или MAX_STATE_DIR.

0.11.0 — 26.09.2026

Что нового

  • max watch --events показывает не только новые сообщения, но и правки, удаления и реакции; у каждой строки есть поле event. Без флага вывод прежний (usage.md).
  • Отчёт о проблеме уходит в задачу на GitHub, а не письмом. max doctor report create печатает ссылку на новую задачу с заполненным заголовком и заготовкой текста; файл отчёта прикладывается к задаче. Что учесть: задача на GitHub и приложенный файл видны всем (troubleshooting.md).
  • Любая ошибка любой команды сохраняется в запись запуска — и неверный флаг, и проверка до начала работы, и команды, которые в MAX не ходят (models, server, watch). Раньше сохранялись только ошибки команд, дошедших до MAX. Что учесть: сохраняются только слова команды, без того, что написано после них, — текст сообщения в запись не попадает (diagnostics.md).
  • max backup messages --run говорит, где сохранённое и что дальше. Сообщения лежат в локальной копии, а файл делает max export messages: готовая команда стоит в конце вывода и в поле export.
  • Фоновый сервер max serve сам проверяет ограничения на отправку и ведёт журнал отправок: профиль только для чтения, разрешённые действия, список получателей, лимит в час. Изменение через config set действует без перезапуска сервера. Что учесть: с переменной MAX_TOKEN сервер не запускается.
  • max serve после входа запрашивает то же, что вкладка web.max.ru: папки, баннеры, историю звонков, наборы стикеров и реакций. И входит повторно так же: передаёт MAX время прошлого входа и спрашивает только изменившиеся чаты, а не весь список. Почему: чем меньше max отличается от веб-клиента, тем меньше у MAX поводов его заметить. Что учесть: всё это только чтение; ответы не показываются и не сохраняются. Одноразовые команды это не делают (security.md).
  • Фоновый сервер переживает повреждённое входящее сообщение от MAX: пропускает его, пишет об этом одну строку и работает дальше. Раньше такое сообщение могло остановить сервер.

Изменено — может сломать скрипты

  • Защиты для агентов строже.

    • max mcp --confirm-send спрашивает перед любой записью — правкой, пересылкой, закреплением, отметкой о прочтении, удалением, — а не только перед отправкой. «Да» действует один раз и 5 минут.
    • В часовой лимит sendsPerHour теперь идут правки, закрепления с уведомлением и каждый добавленный человек. Отложенное сообщение считается в час, когда уйдёт. Две одновременные отправки у предела больше не проходят обе.
    • Если включён список получателей, группа создаётся и люди добавляются, только если личный чат с каждым из них есть в списке.
    • chats members add не показывает новичку старые сообщения без --history; флаг --hide-history убран.
    • MAX_PROFILE_LOCK запирает процесс на одном профиле.
    • --file не берёт скрытые файлы и папки и папки самого max без --allow-any-file.

    Что учесть: лимит в час теперь исчерпывается быстрее, чем раньше. Скрипт с --hide-history получит ошибку — уберите флаг. Скрипт, который отправлял скрытый файл, должен добавить --allow-any-file.

Исправлено

  • max watch не выдаёт правку или удаление за новое сообщение. MAX присылает их тем же сообщением с пометкой, и раньше такое могло появиться в выводе как новое.
  • Точное название чата больше не выигрывает молча. Если оно входит и в название другого чата, команда покажет оба и попросит выбрать по id. Почему: отправку в не тот чат нельзя отменить.

Безопасность

  • Токен из MAX_TOKEN остаётся только там. Если MAX выдаёт сессии новый токен, max не пишет его ни в ключницу, ни в файл, а говорит об этом в stderr. max doctor называет файл credentials.json, если токен хранится в нём, а не в ключнице.
  • max session start показывает номер телефона скрытым, как max account show. Ctrl-C на вопросе о токене завершает команду с кодом 130.
  • Фоновый сервер не отдаёт токен командам, которые спрашивают у него вход: им он не нужен, они сверяются с ключницей.
  • Пределы для сети. Кадр MAX распаковывается не больше чем в 32 МиБ. Подключение к MAX и скачивание файла не висят бесконечно, если сеть замолчала. max messages download скачивает только по https, не ходит по ссылкам на этот компьютер и в локальную сеть — в том числе после перенаправления — и не качает больше 4 ГиБ; голосовое для расшифровки — не больше 32 МиБ. Почему: ссылка в сообщении приходит от чужого человека и может вести куда угодно.
  • Права на локальную копию. База и её журналы -wal и -shm создаются с правами 0600, каталог — 0700; права старых файлов выставляются так же при следующем открытии. В отчёте о проблеме номера чатов и сообщений заменены метками.
  • Чужой текст печатается в одну строку, а управляющие символы — видимыми — в ленте, таблицах, списке кандидатов, выгрузке Markdown и путях messages download. Из имени скачанного файла убираются управляющие символы и символы смены направления текста. В Markdown ссылками становятся только адреса http и https.
  • Автодополнение на месте чата или человека подставляет только номер, а название или имя показывает рядом. Почему: название и @имя задаёт кто-то другой, и оболочка не должна получать от него ничего, кроме цифр.
  • max cache clear без имени профиля очищает профиль по умолчанию и учитывает MAX_PROFILE.
  • Выпуск строже. Версии зависимостей закреплены точно; пакет собирается с нуля перед каждой упаковкой, без тестовых помощников; публикует отдельный шаг, который не ставит и не запускает зависимости.

0.10.0 — 25.09.2026

Что нового

  • max doctor report и max doctor report create — отчёт о проблеме для автора. Первая команда объясняет, что попадёт в отчёт; вторая пишет файл без текстов сообщений и печатает, что сделать по шагам. В этой версии отчёт отправлялся письмом; с 0.11.0 — задачей на GitHub (troubleshooting.md).
  • max backup messages <чат> --since <дата> | --last <n> дочитывает историю чата в локальную копию. Что учесть: без --run команда только показывает расчёт и ничего не отправляет. С --run она листает назад по 30 сообщений с паузами, не больше 40 страниц за запуск, и при повторе продолжает с места (usage.md).
  • max doctor показывает, какой версией веб-клиента MAX представляется max, и предупреждает, если её прочитали больше 60 дней назад. Почему: MAX может перестать принимать старую версию клиента (troubleshooting.md).
  • max server start|stop|status|restart — фоновый сервер как отдельная вещь, как max session. status показывает, работает ли сервер, с какого времени, какой версии и подключён ли к MAX, и подсказывает restart, если версия сервера отстала от max. max serve --detach и --stop по-прежнему работают (usage.md).
  • Чтение истории шлёт те же пять полей, что веб-версия, и вход просит у MAX 15 чатов, как вкладка web.max.ru, а остальные дочитывает одним запросом. Раньше max добавлял к запросу поле, которого веб-версия не шлёт, и просил 40 чатов за раз. Почему: чем меньше max отличается от веб-клиента, тем меньше у MAX поводов его заметить. Что учесть: список чатов тот же. Проверено на канале с непрочитанными: чтение по-прежнему ничего не отмечает прочитанным.
  • Описание устройства берётся с вашего компьютера: часовой пояс, язык системы и операционная система — свои у каждой установки, как у браузера. Раньше каждая установка max называла себя одним и тем же Chrome на Linux в часовом поясе Мадрида.
  • max serve шлёт MAX одно служебное событие, как скрытая вкладка веб-версии: «показан список чатов», через 20 секунд после входа. Что учесть: в событии номер аккаунта и время — ни сообщений, ни названий. Одноразовые команды его не шлют (security.md).
  • Слишком длинное название папки max отклоняет сам — не длиннее 20 знаков, сколько принимает MAX. Раньше запрос уходил в MAX и возвращался с его отказом.

Изменено — может сломать скрипты

  • Отказ MAX во входе из-за частых попыток больше не ведёт к новым попыткам. Команда выходит с кодом 8, а профиль сам не входит какое-то время: 1 минуту после первого отказа, дальше 5 минут, 30 минут, час, 6 часов, сутки. Фоновый сервер на любом отказе во входе останавливается; раньше он пробовал снова раз в минуту без конца. Что учесть: скрипт, который повторял команду сразу после отказа, теперь получит тот же код 8 до конца паузы — ждите время из ошибки (troubleshooting.md).

Исправлено

  • Недоступная ключница больше не выдаётся за отсутствие входа. Если профиль уже входил на этом компьютере, а токена не видно — например, из cron, — max и max doctor говорят, что дело, вероятно, в ключнице. Раньше они советовали войти заново. Почему это важно: новый вход в этом случае — лишнее новое устройство в аккаунте (recipes.md).
  • Запуск, который кончился ошибкой, сохраняется и без --record. В записи теперь есть ключ ошибки MAX (например login.token), предупреждения кодом, место падения, версия среды и система. Тексты по-прежнему не пишутся. Лог фонового сервера — строками JSON со временем (diagnostics.md).
  • max chats read --until отмечает прочитанным только до указанного сообщения. Раньше отметка уходила с текущим временем, и MAX считал прочитанным всё до «сейчас», включая более новые сообщения. То же исправлено у messages list --mark-read. Что учесть: собеседники могли видеть «прочитано» у сообщений, которых вы не читали.

0.9.0 — 25.09.2026

Что нового

  • max говорит с MAX так же, как веб-версия: тот же адрес, двоичные кадры и сжатие, что у web.max.ru, и то же описание устройства с обновлёнными версиями приложения и браузера. Раньше max слал текстовые кадры в старом формате. Почему: по старому формату max отличить от веб-клиента было проще всего. Кроме того, голосовым и кружкам нужно поле с байтами, которое старый формат передать не мог. Что учесть: команды и их вывод не изменились. Отправка голосовых — в следующих версиях. Пока при каждом входе MAX присылает список чатов целиком, а не только изменения: это работает, но даёт лишний трафик.
  • Фоновый max serve, запущенный командой, после обновления max перезапускается сам. Что учесть: сервер, запущенный вами вручную, продолжает работать по-старому, пока вы его не остановите: max serve --stop, затем запустите снова.

0.8.0 — 25.09.2026

Что нового

  • max messages transcribe <чат> <id> — голосовое в текст прямо на вашем компьютере. Запись никуда не уходит, её распознаёт локальная модель. max models audio list покажет, какая модель подходит для каких языков, max models audio download <id> скачает её и сверит контрольную сумму. Для MCP — max_messages_transcribe (usage.md). Что учесть: модель скачивается один раз и только по вашей команде. Текст сохраняется в локальной копии, так что повторно ни MAX, ни модель не нужны.
  • Одно подключение к MAX на профиль. Все команды, max mcp и max watch одного профиля ходят в MAX через один фоновый max serve, а не каждая своим подключением. Почему: меньше входов с одним токеном — меньше поводов для MAX завершить ваши сеансы. Что учесть: max session start останавливает сервер, входит и запускает его снова (usage.md).
  • max serve --detach запускает сервер в фоне и отвечает, когда он подключился; max serve --stop его останавливает. Что учесть: сервер, запущенный вами вручную, останавливается только Ctrl-C или --stop — max session end его не трогает.
  • Настройка allow — что профилю можно. max work config set allow send,reaction разрешает профилю только писать и ставить реакции. Имён двенадцать, от send до sessions. Что учесть: без списка разрешено всё, как раньше. Запрещённое отказывает с кодом 5 ещё до подключения, и ошибка называет команду, которая это разрешит. В max mcp агент не видит инструментов, которых профиль не разрешает (usage.md).
  • max messages send … --at <время> — отправить позже. Сообщение ждёт на сервере MAX и уйдёт, даже если компьютер выключен. Время — 2026-09-25T09:00 (местное) или 30m, 2h, 1d. max messages scheduled <чат> — что ждёт отправки. Для MCP — at у max_messages_send и max_messages_scheduled. Что учесть: отменить отложенное можно только в приложении MAX (usage.md).
  • max chats read <чат> и max messages list … --mark-read отмечают чат прочитанным — только когда вы это попросили. Для MCP — max mcp --allow-mark-read. Что учесть: собеседник видит отметку. Без этих команд чтение по-прежнему ничего не отмечает (usage.md).
  • max export messages <чат> --format jsonl|md выгружает переписку из локальной копии в JSONL или Markdown, с --since и --output. В MAX не ходит. Что учесть: чего в копии нет, команда называет в stderr. Файл из --output доступен только вам (usage.md).
  • max messages delete <чат> <id…> --allow-dangerous удаляет сообщения, до 10 за раз. По умолчанию только у вас; с --for-everyone — у всех в чате. Для MCP — max mcp --allow-delete, только «у меня». Что учесть: без --allow-dangerous команда отказывает. Каждое удалённое сообщение считается в sendsPerHour (usage.md).

Исправлено

  • Обновление max больше не стирает прочитанную историю. Раньше каждая новая версия с другим устройством локальной копии выбрасывала все сохранённые сообщения. Теперь сообщения переносятся в новую копию. Что учесть: этот выпуск сам меняет устройство копии, и история сохранится. Чаты и люди, как и раньше, приходят заново при следующем входе.
  • Если MAX отказал фоновому серверу во входе, команды 10 минут не запускают новый сервер. Раньше каждая команда поднимала сервер, который снова пытался войти и снова получал отказ. max session start снимает это ожидание сразу.
  • max watch видит сообщения, которые отправил сам max. Раньше они проходили мимо: MAX не присылает сообщение обратно тому подключению, которое его отправило.
  • Несколько команд max разом больше не теряют вход в локальной копии. Раньше из трёх одновременных команд две писали «the local record did not take this login» и не сохраняли чаты, участников и отметку синхронизации. Теперь вторая ждёт, пока допишет первая.

Безопасность

  • Текст ошибки тоже не управляет терминалом. В 0.7.0 это сделали для сообщений, имён и таблиц; теперь управляющие символы показываются как \x1b и в тексте ошибки. Почему: ошибка часто повторяет то, что вы ввели или что ответил MAX.

0.7.0 — 24.09.2026

Что нового

  • max reactions remove <чат> <id> снимает вашу реакцию.
  • Группы и каналы под max chats: посмотреть ссылку, вступить, выйти, создать группу, добавить и удалить людей, назначить и снять админа, переименовать, поменять настройки, перевыпустить ссылку. Здесь же были заявки на вступление — их убрали в 0.17.0, потому что в MAX их нет. Что учесть: всё это видят другие люди, и каждое действие проходит те же проверки, что отправка (usage.md).
  • max update обновляет max тем же менеджером пакетов, которым он поставлен; --check только говорит, есть ли версия новее. Что учесть: раз в сутки человек в терминале видит строку о новой версии; агент и скрипт — никогда. Выключается updateCheck: false в defaults (installation.md).
  • Дополнение по Tab в zsh, bash, fish и PowerShell: source <(max complete zsh). Предлагает команды, флаги, их значения, а также чаты и людей из локальной копии — без подключения к MAX (installation.md).
  • max mcp — тот же профиль для агентов по MCP, для клиентов без терминала (Claude Desktop, Cursor). Подключение — docs/mcp.md. Что учесть: сервер только читает, пока не запущен с --allow-send; отправка проходит те же проверки, что max messages send.
  • max mcp --allow-send --confirm-send показывает форму перед каждой отправкой: в какой чат (название и id) и что. Что учесть: без вашего «да» ничего не уходит; клиент, который не умеет показывать формы, получает ошибку (docs/mcp.md).
  • max messages send … --file <путь> отправляет фото и файлы; несколько фото уходят одним сообщением.

Безопасность

  • Чужой текст больше не управляет терминалом. Сообщение, имя отправителя, название чата, имя файла или реакция с управляющими символами могли стереть строку и напечатать поверх того, что max уже вывел. Теперь такие символы показываются как \x1b — в ленте, в таблицах, в сообщениях об ошибках и в подсказках по Tab. Что учесть: JSON не меняется — он и раньше их экранировал.

0.6.0 — 24.09.2026

Что нового

  • max commands --json описывает все команды, аргументы, флаги и коды выхода одним ответом. Команды, которые что-то меняют в MAX, помечены mutates: true. Почему: агенту не нужно звать --help для каждой команды. Что учесть: работает без входа в MAX и даже со сломанным файлом настроек.
  • max messages send … --reply-to <id> — ответ на сообщение.
  • max messages send … --markdown (или --md) оформляет текст: **жирный**, _курсив_, ~~зачёркнутый~~ и `код`. Без флага текст уходит как набран.
  • max reactions add <чат> <id> <эмодзи> ставит реакцию; прежняя ваша заменяется.
  • Реакции видны при чтении: messages list, show и context печатают под сообщением 👍 3 🔥 1 (you: 🔥), в JSON — поле reactions. Что учесть: это один дополнительный запрос на страницу, только чтение. С --offline реакций нет (null), потому что они не хранятся.
  • Журнал отправок и список разрешённых получателей. Каждая попытка отправки пишется в журнал без текста — max sends list. Необязательный список получателей — max recipients add|remove|list|off; отправка в чат не из списка отказывает с кодом 7. Профиль только для чтения (readOnly) отказывает с кодом 5. Что это защищает и что нет — security.md.
  • max session start qr | qr-chrome | sms | token — вход без копирования токена из браузера. qr рисует QR-код в терминале (в узком терминале откроет его в браузере); qr-chrome и sms открывают настоящий web.max.ru в отдельном окне Chrome, Chromium, Edge или Brave. Без способа — как раньше: токен вручную или из трубы.

Изменено — может сломать скрипты

  • Отправка ограничена лимитом в час: по умолчанию 30 сообщений (sendsPerHour). Сверх лимита max messages send отказывает с кодом 8. Раньше лимита не было. Что учесть: скрипту, который шлёт больше, нужно поднять sendsPerHour в настройках.

0.5.0 — 24.09.2026

Что нового

  • max messages download <чат> <id> [--output <каталог>] сохраняет фото, файлы, видео и аудио из сообщения. Существующий файл не перезаписывается.
  • max config set <настройка> <значение> и max config unset <настройка> меняют файл настроек без редактора; с --defaults — для всех профилей сразу. Новый раздел defaults в файле действует на каждый профиль, у которого нет своей настройки.
  • max chats list --unread — только чаты с непрочитанным.
  • max messages list <чат> --after <id|время> читает вперёд — то, что пришло после сообщения или момента. Подсказка следующей страницы — --after <id самого нового>.
  • max chats show <чат> — один чат с участниками; max contacts show <человек> — один человек по id, @username или части имени, с общими чатами. Что учесть: неоднозначное имя не угадывается — команда перечисляет подходящих.
  • Всё новое в этой версии только читает: ничего не отправляет и не отмечает прочитанным.

Исправлено

  • --offline работает. Раньше флаг не доходил ни до одной команды: чтение всё равно шло в MAX, а max --offline messages send отправлял сообщение. Теперь чтение отвечает из записанного, а отправка и скачивание с --offline отказываются. Что учесть: если вы запускали --offline messages send на 0.4.0 или раньше, сообщение ушло.
  • Ошибка в файле настроек объясняется словами: какая настройка неизвестна и какие есть, что допускает значение. Раньше это было сообщение библиотеки проверки.
  • Сломавшийся посреди команды журнал запуска (--record) больше не роняет команду. Вместо этого — одна строка предупреждения в stderr, а ответ и код выхода прежние. Предупреждение видно и с --quiet.

Безопасность

  • Версии публикуются из GitHub Actions, и npm прикладывает к ним подтверждение происхождения. По нему можно проверить, что пакет собран из этого репозитория.

0.4.0 — 23.09.2026

Что нового

  • max messages show <чат> <id> — одно сообщение по id; max messages context <чат> <id> с --before и --after — окно вокруг него. Искомое помечено ◀ в ленте и "anchor": true в JSON. Что учесть: если сообщения нет, команда говорит «не найдено», а не показывает соседнее.
  • max skill show печатает инструкцию для агента из установленного пакета: max skill show > ~/.claude/skills/max-cli/SKILL.md.
  • max config show показывает, какой профиль действует и что его выбрало, файл настроек и есть ли он, все профили — включая те, что есть только в состоянии и в файл настроек не записаны, — и каждую настройку с тем, откуда она взялась: флаг, переменная, файл или встроенное значение. Что учесть: если задан MAX_CONFIG_DIR или соседние переменные, команда предупреждает, что используется не та запись в ключнице, что обычно.
  • Текст сообщения можно передать через pipe: echo "текст" | max messages send <чат> — без аргумента с текстом он читается из stdin. Почему: так текст не видят ps и история оболочки, и в нём могут быть переводы строк.
  • --timeout <срок> ограничивает всю команду целиком — подключение, вход и сам запрос, а не ожидание одного ответа.
  • max doctor показывает, от чего зависит каждая команда, без обращения к MAX: откуда берётся токен (сам токен не печатается), сколько было входов и когда последний, какие профили входили, схему локальной копии против той, что знает эта версия, и какая запись ключницы используется. Что учесть: команда отвечает и тогда, когда всё сломано: «сессии нет» — это поле ответа, а не ошибка.

Изменено — может сломать скрипты

  • Флаг --query у списков переименован в --search. Изменение вошло ещё в 0.3.0, но в его описании его не было. Что учесть: скрипт с --query получит ошибку — замените на --search.

Исправлено

  • messages list --before <id> больше не требует, чтобы сообщение было прочитано раньше: время отправки берётся из самого id.
  • Участники групп показываются по имени, а не числом. Раньше имя было только у тех, кто есть в контактах, и в групповом чате почти все были номерами. Имена берутся одним запросом и сохраняются, так что следующее чтение их уже не спрашивает. То же — для авторов ответов и пересылок.
  • Выпуск версии больше не останавливается сразу после публикации, не поставив тег. Так было дважды; теперь версия проверяется в обход кэша npm, с ожиданием до трёх минут.

0.3.0 — 22.09.2026

Что нового

  • Переписка читается лентой: разделитель при смене дня, строка время автор и текст под ней, выровненный по колонке, с переносами по ширине терминала. вы — ваши сообщения; автор без имени показан номером. ↳ — на что ответ, ↪ — чья пересылка: MAX присылает их целиком, и они сохраняются в локальной копии.
  • -v и -vv — подробнее: id сообщения, отправителя, чата и адреса вложений; затем всё, что известно о сообщении.
  • --jsonl — по объекту JSON на строку, для потока и jq.
  • Вложения показываются ссылками: 📎 photo, 📎 photo ×3 1 2 3, 📎 файл.pdf · 24 MB. В JSON — url, width, height, title. Что учесть: ссылка на фото открывается без входа — кому её переслали, тот и увидит фото.
  • senderColors: true в настройках профиля — свой цвет у каждого автора. По умолчанию выключено.

Изменено — может сломать скрипты

  • -v теперь означает подробность вывода, а версия — max -V. Строки о запросах на stderr включает --trace — это бывший --verbose. Что учесть: скрипт, который звал max -v за версией или --verbose за трассировкой, должен перейти на -V и --trace.
  • Флаг --query у списков переименован в --search (в описании этой версии изначально не был указан).
  • Локальная копия переходит на схему 4 и при первом запуске собирается заново. Что учесть: прочитанная история в этой версии не сохраняется — её придётся прочитать снова.

Исправлено

  • Имя, подходящее к нескольким чатам, выводит их списком с id, а в JSON — полем candidates.
  • Предупреждение о локальной копии называет схему и что делать. Раньше причина называлась словом Error.
  • Подсказка о следующей странице у messages list советует --before <id>. Раньше она советовала несуществующий --page.

0.2.0 — 22.09.2026

Что нового

  • max messages send --silent — отправить без уведомления у получателя. Что учесть: что именно MAX делает с этим флагом, пока не наблюдали — для этого пришлось бы написать живому человеку.
  • Токен обменивается при первом входе. MAX отвечает на вход своим токеном, и max сохраняет его в ключницу вместо вставленного из браузера. Это происходит один раз.

Исправлено

  • max session start больше не портит рабочий токен. Раньше новый токен записывался до проверки, и опечатка заменяла рабочий токен мёртвым. Теперь сначала вход, потом запись.
  • Профиль привязан к своему аккаунту. Токен чужого аккаунта в профиле — отказ с объяснением. Почему: иначе команды профиля пошли бы от чужого имени.
  • Подсказка после неясного исхода отправки называет существующую команду. Раньше она называла несуществующую max send.
  • Сообщения из ответа на вход больше не выбрасываются из-за неверно описанной формы ответа.

0.1.0 — 21.09.2026

Первая версия, которой можно поделиться.

Что нового

  • Семь команд против настоящего MAX: session start|end, account show, chats list, contacts list, messages list, messages send.
  • Профиль — первое слово: max personal chats list. Несколько аккаунтов живут рядом, у каждого свой токен, своё состояние и своя локальная копия. То же задаёт MAX_PROFILE.
  • Токен хранится в ключнице операционной системы, а не в файле и не в аргументе команды. Что учесть: своего входа по номеру телефона пока нет — max session start берёт токен из официального клиента.
  • Машинный режим: --json кладёт на stdout ровно одно значение JSON и ничего больше; то же включается само, когда stdout не терминал. Ошибка уходит на stderr, stdout остаётся пустым. Ветвиться можно по коду выхода — таблица в docs/commands.md.
  • Диагностика без содержимого: --verbose показывает по строке на запрос, --record кладёт их в каталог запуска на 30 дней, max runs list|show|path читает обратно. По умолчанию не записывается ничего.
  • Локальная копия: прочитанное сохраняется рядом; --offline отвечает из неё, не подключаясь, а max cache clear её забывает.
  • Настройки в ~/.config/max-cli/config.json, с порядком «флаг → переменная окружения → файл → встроенное значение». Опечатка в имени поля — ошибка с именем поля, а не молчаливое умолчание.
  • Два рантайма: Node 22+ и Bun 1.3+; собранная команда выполняется под обоими в CI.
  • Чтение ничего не помечает прочитанным. «Получить историю» и «отметить прочитанным» — разные операции протокола; вторая не отправляется никогда, и это проверяется тестом.
  • Отправка не врёт об исходе. Если ответ не пришёл — outcome_unknown (код 14), а не «ошибка» и не «отправлено». Что учесть: повторять такую отправку можно только с тем же --cid, иначе сообщение может уйти дважды.
  • Протокол MAX неофициальный и разобран обратной инженерией: это не Bot API. Что учесть: он может измениться без предупреждения; тогда команда скажет об этом одной строкой в stderr, а не сломается молча.
  • Пока не умеет: входить по номеру телефона, работать с вложениями, реакциями, правками, группами, историями и звонками — только текст. Массовой рассылки не будет: это инструмент для личного аккаунта.

On this page

Не выпущеноЧто новогоИзменено — может сломать скриптыИсправлено0.21.0 — 30.09.2026Изменено — может сломать скриптыЧто нового0.20.0 — 30.09.2026Изменено — может сломать скриптыЧто нового0.19.0 — 28.09.2026Изменено — может сломать скриптыИсправлено0.18.1 — 28.09.2026Исправлено0.18.0 — 28.09.2026Что новогоИсправлено0.17.1 — 28.09.2026Исправлено0.17.0 — 28.09.2026Изменено — может сломать скриптыЧто новогоИсправленоУдалено0.16.0 — 27.09.2026Что новогоИзменено — может сломать скриптыИсправлено0.15.0 — 27.09.2026Что новогоИзменено — может сломать скриптыИсправлено0.14.0 — 27.09.2026Что новогоИсправлено0.13.0 — 26.09.2026Что новогоИзменено — может сломать скриптыБезопасность0.12.0 — 26.09.2026Что новогоИсправлено0.11.0 — 26.09.2026Что новогоИзменено — может сломать скриптыИсправленоБезопасность0.10.0 — 25.09.2026Что новогоИзменено — может сломать скриптыИсправлено0.9.0 — 25.09.2026Что нового0.8.0 — 25.09.2026Что новогоИсправленоБезопасность0.7.0 — 24.09.2026Что новогоБезопасность0.6.0 — 24.09.2026Что новогоИзменено — может сломать скрипты0.5.0 — 24.09.2026Что новогоИсправленоБезопасность0.4.0 — 23.09.2026Что новогоИзменено — может сломать скриптыИсправлено0.3.0 — 22.09.2026Что новогоИзменено — может сломать скриптыИсправлено0.2.0 — 22.09.2026Что новогоИсправлено0.1.0 — 21.09.2026Что нового