Repository navigation
sessions
Прочитайте эту страницу, когда впервые подключаете max к аккаунту MAX, добавляете второй аккаунт
или max говорит, что входа нет. В конце вы знаете, как войти, как проверить, под кем выполнен вход,
как выйти и где max хранит то, что нужно, чтобы вход не пропадал.
Сначала — слова, которые здесь встречаются:
-
Сессия — вход
maxв ваш аккаунт MAX на этом компьютере. Она состоит из токена и личности устройства. MAX показывает её в приложении как ещё одно устройство. -
Токен — строка, которую MAX выдаёт при входе. С ним можно читать ваши чаты, поэтому
обращайтесь с ним как с паролем.
maxдержит его в ключнице. -
Личность устройства — то, чем
maxпредставляется MAX: всегда одно и то же устройство, а не новое на каждую команду. Она лежит в файле рядом с остальным состоянием. - Ключница (keyring) — хранилище паролей операционной системы: Keychain в macOS, Secret Service (GNOME Keyring, KWallet) в Linux, диспетчер учётных данных в Windows.
-
Профиль — имя для одного входа на этом компьютере, со своим токеном, состоянием и
настройками. Имя называется в каждой команде (
max personal …),MAX_PROFILEилиdefault_profile; самmaxпрофиль не выбирает. Второй профиль нужен только для второго аккаунта или для отдельных ограничений (профили).
Не путайте max personal session и max personal account sessions. max personal session — вход самого max;
max personal account sessions перечисляет все остальные устройства и приложения, вошедшие в ваш аккаунт.
max personal setup --agent codex проверяет локальные каталоги, проводит через QR-вход, проверяет
аккаунт и до пяти чатов и устанавливает навык агента. Варианты агента: codex, cursor,
claude, gemini, all, none. Без параметра в терминале задаётся вопрос; машинный режим
пропускает установку навыка. Инструкция max skill show доступна до входа.
Выделите около пяти минут. История скачивается отдельно после выбора чата и объёма;
setup не запускает фоновый сервис. Повторный запуск проверяет существующую сессию.
--method token|qr|qr-chrome|sms выбирает способ свежего входа; по умолчанию setup берёт qr.
QR и браузер требуют человека у локального терминала. Не передавайте токен аргументом.
Если настройка прервана, повторите setup. При истёкшем токене явно выполните
max personal session start qr; при недоступной ключнице сначала исправьте окружение по подсказке.
max personal session start <способ> — четыре способа войти. Каким бы способом ни был получен токен, в
ключницу он попадает только после того, как MAX его принял.
| Способ | Что происходит | Что нужно |
|---|---|---|
token (по умолчанию) |
вставить токен, выданный официальным клиентом, или подать его трубой | — |
qr |
QR-код рисуется прямо в терминале; вы сканируете его приложением MAX. Узкий терминал — код откроется в браузере по умолчанию | терминал шириной от ~70 колонок, иначе любой браузер |
qr-chrome |
открывается web.max.ru в отдельном окне браузера; вы сканируете его QR-код | Chrome, Chromium, Edge или Brave |
sms |
то же окно web.max.ru; на странице выберите вход по номеру телефона | Chrome, Chromium, Edge или Brave |
max personal session start qrqr-chrome и sms — самые осторожные. Вход делает сам web.max.ru в настоящем браузере, и MAX
видит свой собственный веб-клиент. Браузер запускается с отдельным временным профилем, а не с
вашим; как только web.max.ru вошёл, окно закрывается, а профиль удаляется — и при Ctrl-C тоже.
Закрытие окна не завершает сессию: это как закрыть вкладку. Браузер ищется сам; другой можно указать
в MAX_BROWSER. Браузеры из snap не подходят — у них своя папка /tmp.
qr просит код у MAX собственным соединением max, изображая веб-клиент. Он работает без
браузера, но это уже не настоящий веб-клиент.
Вход по SMS — только через браузер. Когда SMS просит соединение max, MAX требует капчу, а её
можно пройти только на странице.
После любого из трёх входов в списке сессий приложения MAX появится новое устройство. Если у
аккаунта есть облачный пароль, qr спросит его без эха, до трёх раз; потом код придётся сканировать
заново.
Все три требуют человека у терминала: без него команда откажет с кодом 2. Если вход запускает ваш
ИИ-агент без терминала, ему остаётся token. Пока задана MAX_TOKEN, эти три способа тоже
откажут: она старше ключницы и перекрыла бы новую сессию.
max personal session start без способа импортирует токен, который уже выдан официальным клиентом —
веб-версией web.max.ru или другим клиентом, — и кладёт его в ключницу. Он работает и тогда,
когда вход упирается в капчу или в необычный второй фактор.
max personal session start
MAX token: ▏ # ввод не отображаетсяТокен не передаётся аргументом. Аргумент команды виден в ps любому процессу на машине и
остаётся в истории оболочки. Поэтому он спрашивается у терминала без эха — или читается из трубы,
если терминала нет:
pass show max/token | max personal session startДля CI и разовых запусков есть переменная. Она старше ключницы: если MAX_TOKEN задана,
берётся она, и в ключницу ничего не пишется. Фоновый сервер max personal serve с ней не запускается:
команда подключается к MAX сама.
MAX_TOKEN="$(cat /path/to/token)" max personal chats list --jsonmax personal account show # под кем выполнен вход: id, имя, последние четыре цифры телефона
max account list # все профили на этом компьютере и аккаунт каждого
max personal account sessions list # все устройства и приложения, вошедшие в аккаунт; ничего не завершает
max personal session end # выйти из MAX и забыть токен на этой машинеsession end сначала завершает сессию на сервере MAX, потом стирает токен на этой машине. Ответ
говорит, что получилось:
{ "profile": "default", "forgotten": true, "revokedOnServer": true }Если вход был токеном из вкладки web.max.ru, это одна и та же сессия: session end выведет из MAX
и эту вкладку.
Если MAX не ответил, токен не стирается: команду можно повторить. Токен, который MAX уже не принимает, стирается сразу — выходить уже не из чего.
Срок жизни токена неизвестен: MAX его не сообщает. Токен продолжает работать и после того, как
вкладка web.max.ru закрыта. Когда MAX перестаёт его принимать, войдите заново:
max personal session start.
max не ограничивает число входов, но считает их для каждого профиля; счётчик показывает
max personal doctor.
Профиль хранит свой токен и своё состояние; локальная копия сообщений общая, с данными по аккаунтам. Профиль называется первым словом, а не флагом:
max personal chats list # профиль personal
max work chats list # профиль work
export MAX_PROFILE=personal # или на всю сессию оболочкиПравило: первое слово — это профиль, если оно не совпадает с именем команды. Поэтому профиль
нельзя назвать chats, runs или session — max personal session start и max personal setup отвергают такое
имя. Иначе max personal chats молча значило бы «профиль chats без команды». Имя состоит из латинских букв,
цифр, точки, дефиса и подчёркивания и начинается с буквы или цифры.
Порядок, первое совпадение побеждает: первое слово, MAX_PROFILE, default_profile в файле
настроек. Если ничего из этого нет, команда, которой нужен аккаунт, завершается с кодом 2 и
перечисляет профили этого компьютера — даже когда профиль один:
✗ name a profile: `max <profile> …` — profiles here: personal (or set MAX_PROFILE)
На компьютере без профилей сообщение говорит, как создать первый: max personal setup. Без
профиля работают только команды, которым аккаунт не нужен: --help, --version, commands,
skill show, account list, config show.
Если первое слово не команда и команды за ним нет, программа не показывает справку молча, а говорит, что произошло:
"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_PROFILE_LOCK закрепляет процесс за одним профилем. Задайте её там, где работает агент, и
первое слово или MAX_PROFILE с именем другого профиля будут отвергнуты (код возврата 5). Без неё
агент мог бы выбрать профиль с меньшими ограничениями.
Зачем нужен каждый профиль и как профиль работает с ботом — в разделе профили и боты.
| Что | Где |
|---|---|
| токен | ключница ОС, служба max-cli, запись — имя профиля |
| токен, если ключницы нет |
credentials.json рядом с настройками, режим 0600
|
| токен для CI |
MAX_TOKEN; она старше ключницы |
| токен бота | ключница ОС, служба max-cli, запись bot:<профиль>; или MAX_BOT_TOKEN
|
| чаты, которые видел бот | ~/.local/share/max-cli/bots/ |
устройство, счётчик входов, viewerId
|
~/.local/share/max-cli/profiles/<профиль>.json, режим 0600
|
| настройки | ~/.config/max-cli/config.json |
Каталоги для macOS и Windows перечислены в разделе куда всё ложится.
Личность устройства записывается при первом же чтении, до того как будет использована. Клиент, который представляется MAX новым устройством на каждую команду, — это не подражание настоящему клиенту, и сессии на стороне сервера привязаны именно к нему.
На машине без ключницы (типичный контейнер) запись не удаётся — тогда токен ложится в файл
credentials.json рядом с настройками, с правами 0600, и команда говорит об этом одной строкой
на stderr. В CI правильнее не полагаться ни на то, ни на другое и передавать MAX_TOKEN.
⚠
MAX_CONFIG_DIR,MAX_STATE_DIRиMAX_CACHE_DIRпереносят и запись в ключнице: меняется имя службы. Сессия, сохранённая с этими переменными, не видна команде, запущенной без них, и наоборот. Либо ставьте их всегда, либо никогда.