CLI tools

Сессии и профили

This page is in Russian.

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

Откуда берётся токен

max session start <способ> — четыре способа войти. Каким бы способом ни был получен токен, в ключницу он попадает только после того, как MAX его принял.

СпособЧто происходитЧто нужно
token (по умолчанию)вставить токен, выданный официальным клиентом, или подать его трубой—
qrQR-код рисуется прямо в терминале; вы сканируете его приложением MAX. Узкий терминал — код откроется в браузере по умолчаниютерминал шириной от ~70 колонок, иначе любой браузер
qr-chromeоткрывается web.max.ru в отдельном окне браузера; вы сканируете его QR-кодChrome, Chromium, Edge или Brave
smsто же окно web.max.ru; на странице выберите вход по номеру телефонаChrome, Chromium, Edge или Brave
max session start qr

qr-chrome и sms — самые осторожные. Вход делает сам web.max.ru в настоящем браузере, и MAX видит свой собственный веб-клиент. Браузер запускается с отдельным временным профилем, а не с вашим; как только web.max.ru вошёл, окно закрывается, а профиль удаляется — и при Ctrl-C тоже. Закрытие окна не завершает сессию: это как закрыть вкладку. Браузер ищется сам; другой можно указать в MAX_BROWSER. Браузеры из snap не подходят — у них своя папка /tmp.

qr просит код у MAX нашим собственным соединением, изображая веб-клиент. Он работает без браузера, но это уже не настоящий веб-клиент.

Вход по SMS — только через браузер. Когда SMS просит наше соединение, MAX требует капчу, а её можно пройти только на странице.

После любого из трёх входов в списке сессий приложения MAX появится новое устройство. Если у аккаунта есть облачный пароль, qr спросит его без эха, до трёх раз; потом код придётся сканировать заново.

Все три требуют человека у терминала: без него команда откажет с кодом 2. Для скриптов и агентов остаётся token. Пока задана MAX_TOKEN, они тоже откажут: она старше ключницы и перекрыла бы новую сессию.

Токен вручную

max session start без способа импортирует токен, который уже выдан официальным клиентом — веб-версией web.max.ru или другим клиентом, — и кладёт его в ключницу. Он работает и тогда, когда вход упирается в капчу или в необычный второй фактор.

max session start
MAX token: ▏          # ввод не отображается

Токен не передаётся аргументом. Аргумент команды виден в ps любому процессу на машине и остаётся в истории оболочки. Поэтому он спрашивается у терминала без эха — или читается из трубы, если терминала нет:

pass show max/token | max session start

Для CI и разовых запусков есть переменная. Она старше ключницы: если MAX_TOKEN задана, берётся она, и в ключницу ничего не пишется. Фоновый сервер max serve с ней не запускается: команда подключается к MAX сама.

MAX_TOKEN="$(cat /path/to/token)" max chats list --json

Проверить и забыть

max account show      # кто вы: id, имя, телефон
max session end       # забыть токен на этой машине

session end стирает токен локально и ничего не сообщает серверу. Сессия, открытая в браузере, продолжает работать — это видно и в ответе:

{ "profile": "default", "forgotten": true, "revokedOnServer": false }

Разница не косметическая: забытый токен, который всё ещё живёт на сервере, — это не то же самое, что отозванный.

Профили

Профиль — это отдельный аккаунт: свой токен, своё состояние, свой кэш. Называется первым словом, а не флагом:

max chats list              # профиль default
max personal chats list     # профиль personal
export MAX_PROFILE=personal # или на всю сессию оболочки

Правило: первое слово — это профиль, если оно не совпадает с именем команды. Поэтому профиль нельзя назвать chats, runs или session — такое имя отвергается при создании, пока это ещё можно объяснить. Потом max chats молча значило бы «профиль chats без команды».

Если первое слово не команда и команды за ним нет, программа не показывает справку молча, а говорит, что произошло:

"nonsense" is not a command, so it was read as a profile name — and no command followed it.
Run `max --help` for the commands, or `max nonsense account show` if "nonsense" is your profile.

Где что лежит

ЧтоГде
токенключница ОС, служба max-cli, запись — имя профиля
токен ботаключница ОС, служба max-cli, запись bot:<профиль>; или MAX_BOT_TOKEN
чаты, которые видел бот~/.local/share/max-cli/bots/
устройство, счётчик входов, viewerId~/.local/share/max-cli/profiles/<профиль>.json, режим 0600
настройки~/.config/max-cli/config.json

Личность устройства записывается при первом же чтении, до того как будет использована. Клиент, который представляется MAX новым устройством на каждую команду, — это не подражание настоящему клиенту, и сессии на стороне сервера привязаны именно к нему.

⚠ MAX_CONFIG_DIR, MAX_STATE_DIR и MAX_CACHE_DIR переносят и запись в ключнице: под капотом меняется имя службы. Сессия, сохранённая с этими переменными, не видна команде, запущенной без них, и наоборот. Либо ставьте их всегда, либо никогда.

Если ключницы нет

На машине без ключницы (типичный контейнер) запись не удаётся — тогда токен ложится в файл credentials.json рядом с настройками, с правами 0600, и команда говорит об этом одной строкой на stderr.

В CI правильнее не полагаться ни на то, ни на другое и передавать MAX_TOKEN.

Сколько живёт токен

Срок жизни токена неизвестен: MAX его не сообщает. Токен продолжает работать и после того, как вкладка web.max.ru закрыта. Когда MAX перестаёт его принимать, войдите заново: max session start.

max не ограничивает число входов, но считает их для каждого профиля; счётчик показывает max doctor.

Дальше

  • usage.md — первые команды
  • configuration.md — настройки и порядок их разрешения
  • security.md — что попадает на диск, а что не попадает никогда

On this page