Install
openclaw skills install @wirecat/max-cliЧитать и отправлять сообщения в личном аккаунте MAX Messenger владельца и от имени его ботов через команду max. Использовать, когда просят установить или подключить MAX, найти чат, прочитать переписку, найти сообщение, показать вложение, отправить сообщение в MAX или написать от имени бота.
openclaw skills install @wirecat/max-climax работает с настоящим личным аккаунтом владельца. Ошибка здесь не роняет тест, а пишет
живому человеку. Один вызов — одно действие: подключиться, сделать, напечатать, выйти.
Прочитайте этот навык, затем откройте только команды, нужные для задачи.
max commands search messages --json описывает одну команду;
max commands messages --json — всю группу. Оба ответа содержат аргументы, флаги,
глобальные флаги и коды выхода. Для короткой справки — max <команда> --help.
Слова после commands задают один путь, а не список групп: разные группы смотрите отдельными
вызовами. max commands --json возвращает всё дерево для общего обзора;
не читайте его целиком перед каждой задачей. effects.remote: "write" обозначает запись в MAX,
а один effects.local: "write" — запись только на этой машине. commands --json не подключается к аккаунту. Его поле contract —
версия общего JSON-контракта; она меняется только при несовместимом изменении полей ответа, а не
при обновлении пакета, поэтому проверяйте это поле, а не весь вывод целиком. Здесь — ловушки и границы.
max commands info messages list --json показывает схемы и эффекты одной команды.
Используйте --json --no-input для работы без вопросов; секреты передавайте явно через pipe.
--json=id,text оставляет эти поля каждого элемента списка вместе со страницей и полнотой. Для id
достаточно --json=id. Точка выбирает вложенное поле: --json=ref,text,reply_to.text. --max-output-bytes и --max-input-bytes задают byte budgets;
одноразовые действия имеют срок 30 секунд, меняемый через --timeout.
Перед чувствительной записью --dry-run проверяет форму запроса и права до действия;
общий preview не подключается к мессенджеру, не резервирует запись и оставляет цели непроверенными.
Полные правила — контракт CLI.
MCP: сначала max_tools_search, затем max_read или max_write с {command, arguments}.
Команда совпадает с CLI-путём, например stats messages show; прежние per-command имена
не вызываются. Для бота — max_bot_tools_search/read/write, команда без bot. Форм нет: права
профиля решают доступ, ask в MCP разрешает вызванную запись; CLI подтверждения сохраняются.
До входа прочитайте max --help и max personal setup --help.
Эта инструкция доступна через max skill show без сессии.
Для личного аккаунта запустите max personal setup --agent codex в локальном терминале владельца
(personal — имя профиля, которое владелец выбирает сам и потом называет в каждой команде);
вместо codex выбирайте cursor, claude, gemini, all или none для своей среды.
Предупредите: настройка может занять около пяти минут. QR сканирует владелец приложением MAX;
--method qr-chrome и sms используют web.max.ru в браузере, --method token — скрытый ввод
или stdin. Токен и пароль не запрашивайте в чате и не передавайте аргументами команды.
Без терминала: запустите max personal session start qr в фоне (команда ждёт сканирования до 2 минут,
а инструмент оболочки ничего не покажет до её конца), прочитайте вывод и вставьте блок QR в чат блоком кода,
ровно как напечатано. С --json код ещё и строка {"event":"qr","qr":{"text","expires_at","scan"}} в stderr.
Истёк — запустите снова и скажите, что старый код недействителен. Облачный пароль MAX так не ввести.
Через MCP вход недоступен: попросите владельца войти в терминале или в WireCat Desktop (Tools → MAX → Manage),
или используйте оболочку.
Повторный setup проверяет существующую сессию без нового входа. Если ключница недоступна,
исправьте окружение по подсказке, не создавайте новую сессию. При истёкшем токене владелец
явно запускает max personal session start qr.
Команда проверяет до пяти чатов, не запускает фоновый сервис и не скачивает историю.
Сначала предложите выбрать чат и объём истории; только затем используйте messages sync.
Навык можно поставить отдельно, без входа: max skill install --for all.
На Windows при блокировке скриптов используйте max.cmd и npm.cmd; без PATH:
npm.cmd exec --yes --package=@wirecat/max-cli -- max personal setup --agent codex.
Бот подключается отдельно через max <профиль> bot auth set.
max personal messages send — только когда он
сам попросил отправить конкретный текст в конкретный чат. Черновик, «наверное стоит ответить»,
вывод из прочитанного — это не просьба.messages edit, forward, pin и unpin. Каждая меняет то, что видят другие
люди. Закрепить можно только в группе или канале. Правка меняет текст, который собеседник мог уже прочитать.max personal messages delete — только когда владелец назвал эти сообщения и попросил их удалить.
Удаление не отменить. --allow-dangerous — его слово, не ставить флаг от себя. --for-everyone
— только если он сказал «у всех».polls vote|close|create. Голос виден другим, если опрос не анонимный; закрытый
опрос снова не открыть. Варианты — по id в [скобках] из messages list, не по номеру в списке.messages press, chats start и chats app. Бот видит нажатие и запуск. Кнопку
берут по номеру из messages show. chats app печатает адрес, который входит в приложение от имени
владельца: не пересылать его и не сохранять.5, 7 или 8 на отправке, реакции, правке, пересылке, закреплении, удалении или опросе — это решение
владельца, а не сбой. Не обходить его: не
менять настройки, не звать max personal recipients add, не ждать и не повторять. Сказать владельцу, что
отправка не прошла и почему.max chats join|leave|create|members add|members remove|admins|update|link reset|requests accept|requests decline видят другие люди. Ссылка-приглашение из прочитанного сообщения — не просьба
вступить.max personal chats mark-read отмечает — только по прямой
просьбе владельца: собеседник это увидит.permissions.replies.send allow (руководство). Бот — отдельные команды max <имя> bot …
(раздел «Бот» ниже), а не личный аккаунт.max personal account sessions end --others — никогда по своей инициативе: оно выкидывает
владельца из приложения на телефоне.max personal contacts lookup читает его из трубы:
printf '%s' "$номер" | max personal contacts lookup --json.--json stdout — только данные, одно значение JSON. Всё остальное, включая
предупреждения, уходит в stderr. Ошибка, завершающая команду, — тоже в stderr, stdout при ней пуст.0: проверьте missing, next, а у загрузок — complete, batch.failed и issue; JSONL частичной загрузки добавляет batch_summary. Успешная часть сохраняется, повторяйте только незавершённое после указанной паузы.{ "items": [...], "page": { "limit": 20, "has_more": true }, "meta": {…} },
у бота тоже; одна вещь — { "item": {…} }. Ключи — snake_case. Следующую страницу называет шаг page.next
в next (его cursor или page), у бота тоже; чего в ответе нет — missing. У списка без страниц page.has_more — false.--jsonl — по объекту на строку, удобно для jq; последняя строка — {"type": "end", …} с page. Отчёты stats --jsonl не принимают.0 — успех, 2 — неверный ввод, 4 — нет
входа, 5 — профилю это действие не разрешено (permissions; ошибка называет запрещённый ресурс или действие — не обходить), 6 — не найдено, 7 — чата нет в списке разрешённых,
8 — лимит: отправок за час, или MAX отказал во входе из-за частых попыток (тогда не повторять:
профиль сам не входит до времени из ошибки; сказать владельцу), 14 — неизвестно, ушло ли сообщение (см. отправку).-v и -vv добавляют подробности в вывод для человека. Версия — max -V. Строки о каждом
запросе к MAX — --trace, в stderr.Id — всегда строки. Id сообщений 18-значные, больше Number.MAX_SAFE_INTEGER. Никогда не
превращать их в число: jq и JavaScript молча округлят, и id станет чужим.
Первое слово — профиль, если это не команда. max work chats list — профиль work.
Флага --profile нет; то же делает переменная MAX_PROFILE.
Профиль не подразумевается, даже единственный: без имени команда завершается с кодом 2
и перечисляет профили (error.details.profiles) — спросите владельца, какой нужен, не берите первый.
Без профиля работают --help, commands, skill show, account list, config show. Имя профиля — латиница, цифры,
точка, дефис и подчёркивание: оно становится именем файла и записью в ключнице. Имя в другом
алфавите отвергается как имя (код 2), и это не то же самое, что профиль, в который никто
не входил (код 4).
Имя чата, подходящее к нескольким чатам, — ошибка, а не выбор. В JSON у неё есть
candidates: [{ id, title }]. Взять оттуда id и повторить с ним, а не угадывать. То же у
max personal contacts show — человек по id, @username или части имени, кандидаты
[{ id, name, username }]. contacts block, unblock, rename и account update --photo
меняют аккаунт владельца — только по его просьбе.
Код 14 — неизвестный исход записи, а не разрешение повторять её. Проверьте
max personal sends list --json по operation_id и историю целевого чата. operation_id связывает
запись с журналом, но не является ключом идемпотентности. Повтор сообщения возможен только
при подтверждённой дедупликации провайдера и с теми же чатом, темой, содержимым и --operation-id;
никакой автоматической повторной записи только по коду ошибки.
Искать начинайте с max personal search all: сообщения и заметки на этой машине одним ответом, у каждой
находки её вид (message, note, document). Импортированные Drive документы находятся в общей базе; --source drive:<профиль> выбирает профиль Drive. max personal chats documents list CHAT_ID показывает документы из сохранённых ссылок чата. Почта — не здесь: memo search mail. Уже: max personal search messages, search notes,
search conversations (по смыслу); весь поиск — под max personal search.
Для вопроса обычными словами или неточной формулировки используй
max personal search messages '<вопрос>' --discover или MCP discover: true. Это локальный поиск без
скачивания модели, со строгими ограничениями и подходящими прямыми ответами. Проверь
отсутствующие слова, родительские ссылки и сами сообщения; первый результат и его оценка
не доказывают ответ. Явный синтаксис остаётся строгим.
Без --discover, max personal search messages с одним чатом (chat: в запросе) спрашивает и сервер MAX
(--backend archive — только архив). Хороший поиск требует скачанных чатов: если ничего не нашлось, а
в next есть шаг messages.sync, выполните его (max personal messages sync --all --background) или спросите владельца, прежде чем
говорить, что сообщения нет. Слова и фразы находят формы слов; exact: или --exact — только точную форму.
Default — строгий профиль Lucene:
фразы, AND/OR/NOT, field groups и date ranges. alpha OR beta gamma = (alpha OR beta) AND gamma.
Для version/coverage используйте --json; пустая выдача не доказывает отсутствие сообщения.
--timezone задаёт календарную zone; kind:bot и in:bots имеют разные смыслы.
Term/body regex различаются. Даты — date:today, date:7d; файл — filename:*.pdf, size>10MB
(типа файла MAX не сообщает); ссылка — has:link AND "github.com"; метки владельца — tag:work.
Подсчёт — max personal stats messages show. Руководства: поиск,
поиск по темам (разговоры по смыслу),
язык запросов.
5a. Substring-поиску названий нужны три символа: title: у chats list. Запрос chats list отвечает только из
локальной копии — с --offline; contacts list name:/notes: отказывают, пока в копии нет контактов. Строгие message
terms могут быть короче; не заменяйте strict zero hits fuzzy discovery автоматически.
5b. max personal store export выгружает только скачанное и прочитанное и в MAX не ходит. Какие куски
чата скачаны целиком, показывает max personal store status <чат>; прежде чем отдать файл как «всю
переписку», сверьтесь с ним.
5c. max personal messages sync скачивает историю сразу — только по слову владельца: это сотни запросов с
его аккаунта. Посчитать заранее нельзя: --dry-run для MAX отказывает. Скажите владельцу, что
один запуск — до 40 страниц по 30 сообщений с паузой 5–10 с, то есть 3–7 минут.
5d. Ошибку, которую не удаётся объяснить, — в отчёт автору. Предложите владельцу
max personal doctor reports create: команда пишет файл без текстов сообщений и печатает ссылку на новую
задачу на GitHub. Задачу создаёт владелец сам: она видна всем.
5e. max не находится — "$(npm prefix -g)/bin/max" personal doctor (после pnpm — "$(pnpm bin -g)/max"). Вместо personal подставьте имя профиля владельца. Он скажет, куда поставлена команда и
почему терминал её не видит, и напечатает команду исправления. Клиенту MCP без терминала (Claude
Desktop) готовую запись с полными путями печатает max personal mcp config.
6. messages show и messages context требуют чат и id сообщения — или одну ссылку msg:… из
search messages. Искомое сообщение в JSON помечено "anchor": true. Если сообщения нет, это
not_found, а не соседнее сообщение.
7. Время сообщения зашито в его id: id >> 16 — миллисекунды. Поэтому id<… и id>… в запросе
messages list работают для любого id, даже не прочитанного раньше. Само сообщение не входит ни в
тот, ни в другой ответ. Две начальные точки (id<, id>, date<, date>) вместе — отказ с кодом 2.
date понимает и 30m, 2h, 1d — столько назад: max personal review 'date>1d'; точное время — в
кавычках с секундами и смещением: 'date>"2026-09-23T09:00:00Z"'. Запрос с > берите в одинарные кавычки.
8. MAX_CONFIG_DIR, MAX_STATE_DIR меняют и запись в ключнице. Устаревший MAX_CACHE_DIR
тоже влияет на неё. С этими переменными профиль ищет другой токен и может ответить
«нет сессии», хотя владелец вошёл. Файл общей копии задаёт MESSAGING_STORE. max config show
говорит, заданы ли они, и какой профиль и какие настройки действуют.
9. --offline отвечает из локальной копии и не подключается. Если там ничего нет — ошибка.
Отправка с --offline — всегда отказ.
10. Многострочный текст передаётся только через stdin. Аргумент командной строки перевод
строки не несёт вовсе, а тело в аргументе видно в ps и остаётся в истории оболочки. Последний
аргумент опускается, и тело читается со входа: printf 'первая\n\nтретья' | max personal messages send -1000. Один перевод строки в самом конце отбрасывается, остальные сохраняются.
11. Номер страницы на живом списке может повторить или пропустить строку. Сверху самое свежее,
поэтому сообщение, пришедшее между первой страницей и второй, сдвигает кого-то через границу.
Для переписки этого нет: id<… привязан ко времени и точен.
12. max personal inbox --new сдвигает место, где владелец остановился. После него следующий
--new владельца не покажет того, что уже увидел агент. Без сдвига: просто max personal inbox
(непрочитанное) или max personal inbox 'date>2h'.
13. --at-time ставит сообщение в очередь MAX, а не отправляет. Ответ — {item: {operation_id, message, scheduled_for}}; ушедшее сообщение получит другой id. Очередь: max personal messages scheduled <чат>.
Через MCP — параметр at_time у max_write (command: "messages send") и инструмент max_read (command: "messages scheduled").
Отменить можно только в приложении MAX.
Поиск слов и фраз допускает формы слов. Для точных форм используй exact: или --exact;
явное поле text: продолжает искать формы.
messages link <chat> <message> или messages link <msg:locator> проверяет сообщение в
архиве текущей учётной записи и возвращает locator без текста. Личный MAX пока не выдаёт
нативный permalink: url: null, access: unavailable, reason: unsupported_provider.
С --offline причина offline, подключения нет. Locator другой учётной записи отклоняется.
Это отдельная команда от messages links (связи разговоров).
Id ниже выдуманные — подставить настоящие из предыдущего ответа. Выбирайте команды по задаче владельца, а не начинайте всегда с последних сообщений:
store status; messages list показывает только окно сообщений.
Уточняйте найденное через messages context или messages show, приводите ссылки на сообщения.
Проверьте связанные чаты на поздние изменения. Пустой результат, пустой чат и has_more: false
не доказывают полноту истории MAX. Если это влияет на ответ, объясните пробел.
Скачивайте только разрешённый чат и ограниченный период или объём; сначала согласуйте
с владельцем чат и предел сообщений или период. Без сети недостающую историю скачать нельзя.messages evidence, проверяйте покрытие и продолжайте по курсору.
Отделяйте решения, открытые вопросы и предположения о сроках.contacts show и личными чатами; одинаковые имена не означают одного
человека. Прошлая доступность не подтверждает нынешнюю. Подготовьте черновик, если владелец
не попросил отправить его конкретному получателю. При отказе по правам остановитесь и сохраните
черновик; не меняйте настройки и не переключайте профили.max personal chats list title:проект --offline --json # найти чат, взять его id
max personal chats list 'unread_count>0' --offline --json # где есть непрочитанное
max personal inbox --json # непрочитанное во всех чатах
max personal inbox --new --json # что пришло с прошлой проверки, один раз
max personal review 'date>"2026-09-23T09:00:00Z"' --json # всё, свои тоже, для обзора «кто кому должен»
max personal review 'chat:"-1000"' --unanswered 4h --json # вопросы в группе, на которые 4 часа не ответили ни владелец, ни админы
max personal tasks list state:open --json # что ждёт ответа владельца; задачи открывает и закрывает review
max personal tasks add <ссылка> --type request --category documents --json
# выход 2 task.duplicate-candidates: возможно, это та же открытая задача; повторите с --into <задача> или --new. Похожая только на закрытую — новая задача со связью follow-up-of
max personal tasks duplicates list --json # пары, которые могут быть одной задачей; tasks merge <дубль> --into <задача>
max personal tasks duplicates reject <дубль> <задача> # не одна задача; defer — решит владелец (decision:unsure); tasks unmerge <дубль> отменяет merge
max personal tasks related <задача> --json # похожие задачи с полосой likely|maybe|different; ничего не меняет
max personal tasks agenda category:money tag:urgent --json # план на сегодня; claimed:any — и занятые другими
max personal tasks claim <задача> --json # занять, пока работаешь (30m, --lease); tasks release <задача> — отдать
max personal tasks categories --json # категории; список один на хранилище (tg, max, memo), меняет его только владелец: max config set task_categories.<имя>
max personal tasks close <задача> --as dismissed --reason no-reply-needed --certainty 0.9 --json # только когда владелец так решил; --certainty 0..1 обязателен, ниже порога задача остаётся открытой с предложением закрыть
max personal tasks list close:suggested --json # предложения закрыть, которые ждут владельца: он подтверждает tasks close или отклоняет tasks reject
max personal watch --jsonl # новые сообщения по мере прихода; `max personal serve` запустится сам
max personal watch --events --jsonl # плюс правки, удаления, реакции, прочтения, изменения чатов; поле "event" внутри data
max personal server status --json # работает ли фоновый сервер, какой версии, подключён ли
max personal chats show -1000 --json # один чат и кто в нём
max personal chats events -1000 'time>=2026-09-20' --json # кто вступил, вышел, кого добавили и удалили
max personal chats members list -1000 --all --json # все участники от MAX: registered_at, last_seen_at
max personal chats requests list -1000 --json # заявки в канал с одобрением; ни времени, ни порядка
max personal chats requests confirm -1000 20000002 # по одному человеку и только по просьбе владельца; decline — отказать
max personal chats rules show -1000 --json # правила модерации группы; set <ключ> <значение> меняет одно
max personal chats moderate -1000 --dry-run --json # что нового нарушает правила; без --dry-run — только по слову владельца
max personal contacts show @ivan --json # один человек и общие чаты
max personal messages list -1000 --limit 20 --json # последние сообщения, от старых к новым
max personal messages list -1000 'id>100000000000000001' --json # что было после этого сообщения
max personal messages context -1000 100000000000000001 --before-n 3 --after-n 3 --json
max personal messages transcribe -1000 100000000000000001 --json # текст голосового, на этой машине
Обзор «кто кому должен» — max personal review, одним вызовом: все сообщения обеих сторон во всех
изменившихся чатах. date>… в запросе — граница, на которой кончился прошлый обзор; её называет владелец или
прошлый обзор. Разложить на «я должен», «жду от других», «нужно уточнить» — работа агента; у пункта
чат, дата и id сообщений. Своё «сделаю» ищите в "outgoing": true. Если есть missing, сказать,
чего не хватает. Следующий обзор начинать с запроса шага review.next из next: при неполном обзоре он
повторяет ту же границу. Напоминания —
черновики, отправка — только по слову владельца.
watch --jsonl возвращает строки {"type":"item","data":…} и завершающую
{"type":"end",…}. watch --json отказывает до подключения. Читайте сообщение или событие из data; имена полей — snake_case.
Неполный end и код ошибки означают сбой источника, а не отсутствие новых сообщений.
Голосовое — вложение "kind": "voice" в messages list|show|context, search messages, inbox и review.
Его текст даёт max personal messages transcribe; до минуты на пять минут речи, повторно — сразу из общей
локальной копии сообщений. Уже расшифрованное голосовое несёт поле transcript в
messages list, inbox и review; остальные называет запись transcript в missing (обзор с ними не полон),
а --transcribe расшифровывает их и называет там то, что не вышло. При отсутствии модели пакетное чтение сохраняет
сообщения и сообщает причину там же; одиночная messages transcribe откажет
и назовёт max personal models download <id>: сказать об этом владельцу и не скачивать самому — это сотни
мегабайт, и выбор модели за ним.
Каталог аудиомоделей общий с Telegram; путь каждой модели есть в max personal models list kind:audio --json (path).
Существующие файлы используются повторно; WIRECAT_STATE_DIR задаёт другое место.
Вложение в JSON: { "kind": "photo", "url": "https://…", "width": 901, "height": 594 }. Чтобы
посмотреть фото, скачать его по url и открыть файл.
max <имя> bot … — бот владельца через официальный Bot API, не личный аккаунт. Имя — первое
слово, как профиль: max sales bot messages send "Команда продаж" "текст". Какие боты есть —
max sales bot list. Чат бота — номер, user:<номер> для человека или название чата, который бот уже
видел; списка чатов бота у MAX нет, max <имя> bot chats list — только увиденные. Положительный
номер — почти всегда человек: ему пишут user:<номер>. Файл — messages send --file <путь>. Прочитанное
и отправленное ботом хранится локально: bot messages list <чат> --offline — без сети,
bot search messages <текст> — поиск, --from <кто> — только его сообщения. bot contacts show <кто> —
где человек писал и его личный чат с ботом; bot messages between <кто> <кто> — их переписка в
чатах, где писал каждый (--limit — на чат). Всё это без сети, кроме contacts show --sync-first.
Чужие локальные копии ботов — --all-bots или --bots <профили> у search messages, contacts show и
messages between, и только если владелец разрешил read_other_bots; иначе отказ с кодом 5 — скажите
владельцу команду из ошибки. bot watch --jsonl забирает события у всех других
читателей бота — запускайте только по просьбе владельца. Отказ с кодом 7
значит «чата нет в списке получателей бота»: скажите владельцу, какую команду выполнить, и не
пишите в обход. Остальные коды бота: 4 — нет токена бота или MAX его не принял, 5 — профиль только
для чтения или действие не разрешено allow, 6 — чат не найден (название, которого бот не видел, или
человек без user:), 8 — исчерпан sends_per_hour, 14 — неизвестно, выполнена ли запись. С --json
stdout — только данные, в той же форме, что у личного аккаунта; id больше 2^53 приходит строкой.
Все методы официальной схемы Bot API доступны, включая операции вне удобных команд:
max <имя> bot api <операция>; её флаги —
max commands --json. Генераторы cli-base и конструктор native API общие с Telegram:
--body, --body-file и stdin для JSON, --poll-timeout для нативного ожидания,
--timeout для дедлайна команды. --store-token <profile> недоступен для текущих методов
MAX: все они отклоняют его до выполнения операции.
Отправляйте от имени бота только то, о чём просил владелец. Для агента есть
MCP-сервер бота: max <имя> bot mcp; права задаются через permissions.bot.*, большинство записей
разрешено по умолчанию. permissions.bot: readonly ограничивает запись, если нет более точных
разрешений. ask/allow допускают запрошенную запись без серверной формы. --trace и записи запусков
(max personal runs list) работают и для бота.
Команды изменения настроек, правил и получателей через MCP требуют mcp.authority: allow или
ask; по умолчанию — deny. Сырые bot api требуют отдельного явного bot.api: allow или
ask, даже при bot: allow. Не меняйте эти ключи и не заменяйте permissions целиком: это
делает владелец в терминале. Общий ответ «только чтение» при первом запуске ограничивает и
более точные разрешения профиля; агенту вопросы первого запуска не задаются.
Markdown --md обрабатывается форматтером MAX, не Telegram: **жирный**/__жирный__,
*курсив*/_курсив_, ~~зачёркнутый~~, ++подчёркнутый++, ссылки и код. Telegram
__текст__ — подчёркивание. ^^выделение^^, # заголовки и > цитаты доступны
MAX-боту; личный протокол явно отказывает неподтверждённым типам до upload/write.
Без --md текст literal; http/https/mailto ссылки, no spoiler и no auto mentions.
Глобальная установка через npm устанавливает навык автоматически, если разрешены сценарии
установки. До входа проверь max --version, max --help, max commands --json и max skill show,
затем загрузи установленный навык. На Windows обнови PATH своего терминала: сохранённый PATH
пользователя не меняет уже работающий процесс. Если npm пропустил сценарий, следуй восстановлению
из раздела установки. Убедись, что установленная команда доступна по имени.
Для количества совпадений в архиве используй max personal stats messages show [запрос] --by chat|sender|day|hour --json: одна
запись считается один раз. Проверяй missing: неполный архив даёт нижнюю границу. Отчёт — один {item}, --jsonl он не принимает. --source max явно включает
другие сохранённые профили; обычный вызов остаётся в текущей учётной записи.
MCP max_read с command: "stats chats show" читает активность из архива без запроса вступлений и выходов.
members отсутствует; число сообщений неполного архива — нижняя граница, медианы и доли могут отличаться.
В CLI: max personal stats chats show <чат> --offline --json.
MCP inbox/review принимают kinds и new; отметки новых сообщений отдельны от CLI.
max personal chats members check <чат> --json читает участников и причины оценки, никого не удаляя.
Оценка — подсказка: проверь more, unknown и каждого человека до действий модерации.
max personal mcp --http --public-url https://<имя>.ts.net работает через HTTPS-туннель со входом по коду.
Права deny/readonly запрещают запись; ask/allow допускают запрошенное действие без серверной формы.
--permission ключ=уровень временно ужесточает права, ослабить их не может. Агент не меняет права для обхода отказа.
max personal mcp --revoke завершает входы приложений этого профиля.
Используй tags для локальных меток и tag: в поиске; searches create/list/show/history/delete/clear и --saved для повторяемых запросов. Успешные запросы сохраняются отдельно от runs; --no-record отключает эту историю. flood clear — обслуживание владельца после окончания лимита, не обход для агента.
Без --discover поиск с одним чатом спрашивает и сервер MAX; --discover читает только архив, даже с --backend both; coverage говорит, что держит архив, coverage.next —
что скачать. --sync-first сначала скачивает новые сообщения, ничего не помечая
прочитанным: не больше 5 чатов, 500 сообщений и 30 секунд. Пределы меняют --max-chats, --max-messages,
--sync-time. Неполное или неудачное обновление сохраняет локальную выдачу и сообщает об устаревшем покрытии и
результате обновления.
--thread добавляет цепочку ответов и связанные сообщения из сохранённого графа; у messages context заменяет
соседей по времени. Пределы: 8 переходов, 50 сообщений, 65 536 байт и сутки по обе стороны. Их меняют
--thread-hops, --thread-messages, --thread-bytes, --thread-within. Если графа нет, используется контекст по
времени; устаревшие связи помечаются и не обходятся.
В MCP max_read с command "conversations list", "conversations show", "search conversations",
"conversations related" и "conversations status" читает построенное, а max_write (command: "conversations rebuild")
догоняет на этом компьютере. Через MCP агент получает инструкцию link-conversations, оценивает объём инструментом
max_read (command: "conversations batches status") и ждёт согласия владельца для этого чата. Затем читает
max_read (command: "conversations batches show"), сохраняет ответы через max_write (command: "conversations links add") и перестраивает граф через
max_write (command: "conversations links rebuild"). max_write (command: "conversations links clear") удаляет ответы агента; после него граф также нужно
перестроить. Запись требует conversations.links. Настройка внешних векторов действует и на MCP-поиск: вопрос
отправляется выбранному сервису.
Локальное извлечение читает UTF-8, UTF-16 с BOM, уверенно определённые старые кодировки, ODT, ODS, XLSX, PPTX и EPUB без модели. Сначала используй его для цифровых документов; формулы не вычисляются, картинки внутри документа не распознаются. Неоднозначную кодировку и неподдерживаемый формат проверяй доступными средствами агента.
content:договор ищет слова в сохранённом тексте вложения. Для DOCX нужен необязательный mammoth, для
PDF с текстовым слоем — unpdf. Фото и сканы читает ваш агент и сохраняет текст через attachments update. При нескольких
вложениях укажите --attachment, начиная с 1.
По умолчанию выполняйте OCR сами средствами чтения файлов и зрения агента. После загрузки и локального
извлечения обработайте строки needs-agent: найдите local_path через attachments list is:needs_text,
прочитайте фото или скан, затем сохраните буквальную расшифровку через attachments update.
Сохраняйте locator сообщения и номер вложения; проверьте результат запросом content:.
Не заменяйте этот путь автоматическим вызовом отдельного API. Массовую обработку через API выбирает
владелец явно. Если файл недоступен вашим средствам, сообщите об этом; путь на MCP-сервере сам по себе
не передаёт файл удалённому агенту.
Для явно выбранной владельцем массовой API-обработки используйте attachments extract --ocr
с models.ocr.provider и models.ocr.model, обычным ключом models keys set и --concurrency (1–8,
по умолчанию 4). --limit — 1–500 файлов, по умолчанию 100; продолжайте по cursor.
Не добавляйте --ocr к обычному извлечению автоматически. Сканы PDF требуют необязательных
unpdf и @napi-rs/canvas, максимум 20 страниц. Проверяйте failed и статусы; повтор использует
кеш успешных файлов. Текст агента и прежний индекс не заменяются при сбое или отмене API OCR.
max personal attachments extract --chat "Книжный клуб" --download --output-dir ./files
max personal search messages 'content:договор'
max personal attachments list 'chat:"Книжный клуб" is:needs_text'
max personal attachments update "Книжный клуб" 204 --text-file ./scan.txt
--download требует --output-dir; без них извлечение читает уже скачанные файлы. list показывает сохранённые
пути и состояние текста, а не сам текст.
Графики: max personal stats charts <chat> --json возвращает нейтральный JSON; --output activity.svg или --output activity.png также пишет новое изображение с тёмной темой. --chart-kind messages|active|membership, --by day|week, --since-time, --timezone задают вид и период. Пропуски — null, partial означает неполные данные. Membership недоступен offline; MCP max_read (command: "stats charts") отдаёт JSON без файлов и подключения; format: "png" добавляет PNG image content и JSON с данными и размером.
Автоответы: max personal replies add|edit|on|off редактируют локальные правила; replies audience — общую
аудиторию, где deny побеждает allow. Шаблоны Liquid читают только имена и факты чата; входящий
текст доступен лишь модели внутри ai. replies test показывает инструкцию и fallback без
модели; --ai передаёт сохранённые данные только после replies consents grant. Согласие
выдаётся на профиль и endpoint, consents deny|allow управляют запретами для чатов. Не расширяйте
аудиторию ответов и не запускайте реальные проверки без отдельного согласия владельца.
Файлы: attachments extract --chat <чат> --from-dir ./files, в MCP — команда attachments extract через max_write
(ограниченный обход с cursor, без текста в ответе), messages download <чат> <id> --extract.
Из from_dir нельзя читать известные файлы/папки с учётными данными, папки CLI и хранилище;
output_dir в MCP также их защищает. Обычные скрытые рабочие папки разрешены.
У текста PDF нет отдельного предела страниц и 30-секундного срока; действуют отмена и файловые бюджеты.
Локальная речь: полная mono/stereo Ogg Opus запись без 10-минутного предела; длинные записи требуют больше памяти.
Подготовка после явно разрешённой загрузки: messages sync <чат> --catch-up с
--catch-up-chunks, --catch-up-messages, --catch-up-time; --no-catch-up отменяет
настройку search_catch_up. Модели не скачиваются, удалённый провайдер не вызывается.
Разрывы: сначала локальный store gaps show <чат>, затем только по слову владельца
store gaps repair <чат> --fingerprint <хеш>; ограничивайте --max-gaps, --limit,
--repair-time, --page-size, --pause. --background использует обычные задания.
В MCP найдите store gaps show и store gaps repair и store jobs show и store jobs list через max_tools_search,
затем используйте max_read или max_write для соответствующей команды. Не трактуйте неизвестные края или
пропущенные номера сообщений как доказательство потерянной истории.
Псевдонимы хранятся локально для выбранного аккаунта; заметка о человеке видна в каждом профиле,
где он виден. Обновление контактов их не
затирает. contacts rename меняет запись в адресной книге мессенджера; contacts aliases —
только локальное имя. Если псевдоним неоднозначен, укажите id. Личные заметки отделены от
публичного описания человека. Показывайте и ищите их, когда это нужно для запроса владельца.
Чтобы пересказать, что писал человек, вызывайте contacts context <человек> --chat <чат> --limit <n>
(в MCP — chats и limit); ответ — { at, text } на сообщение. -v (в MCP detail: 1) — только
если нужны номера сообщений или локаторы. Связанные через contacts link аккаунты собирает только
contacts context без --chat; contacts info и --chat читают лишь названный аккаунт.
contacts info не печатает номер телефона целиком без --show-phone по просьбе владельца; MCP
всегда скрывает его. contacts check для MAX ничего не отправляет в списки спамеров; оценка — подсказка, не вывод.
max personal contacts aliases set 101 'Project lead'
max personal contacts aliases remove 101
max personal contacts notes add 101 --file /path/to/own-note.md
max personal contacts notes list 101 --json
max personal contacts notes show 101 NOTE_ID --json
max personal contacts notes edit 101 NOTE_ID --revision 1 --file /path/to/own-note.md
max personal contacts notes remove 101 NOTE_ID
max personal contacts show 101 --with-notes --json
max personal contacts list 'notes:"follow up"' --json
max personal metadata show --chat CHAT_ID --json
max personal metadata sync --chat CHAT_ID --limit 1 --json
max personal tags rebuild --chat CHAT_ID --dry-run --json
max personal tags rebuild --chat CHAT_ID --sync-first --limit 1 --json
max personal tags list sources:auto --json
max personal tags remove news --chat CHAT_ID --source auto
Автоматические метки определяются по ключевым словам в сохранённых названиях, адресах и
описаниях групп и каналов. Модель и тексты сообщений не используются. Обновление описания
запрашивается явно; удалённый чат не меняется. --dry-run читает только сохранённые данные
и не сочетается с --sync-first. За запуск обрабатывается не более 500 чатов.
Оценка правила не является вероятностью. Ручные метки сохраняются при повторной классификации.
Без --source удаление метки убирает оба источника; следующий явный запуск tags rebuild может
создать автоматическую метку снова. Связывание людей не объединяет их личные заметки.
Телефоны, почта, ссылки и документы Google из сохранённых сообщений хранятся как упоминания: их находят
правила при каждой записи в базу. mentions list принимает запрос: kind:phone|email|url|document,
status:found|linked|dismissed, domain: (сайт ссылки или адреса; docs.google.com значит google.com)
и value:; слово без поля — значение в любой записи, 89001234567 найдёт +79001234567. Сообщения,
сохранённые до появления упоминаний, читает один mentions rebuild. У каждой строки есть locator
сообщения; текст упоминаний — только владельцу, не в логи и не в файлы. Поиск сообщений понимает phone:, email:,
url: и domain: (почта в кавычках: email:"ana@example.com"). mentions confirm <id> [person:<uid>|organization:<id>]
записывает, чьё значение, mentions reject <id> отклоняет его насовсем; автор записи — агент или владелец
(--as-owner).
max personal mentions list kind:phone --json
max personal mentions list domain:google.com kind:url --json
max personal mentions show 12 --json
max personal mentions rebuild
max personal mentions confirm 12 person:<uid>
max personal mentions confirm 12 person:<uid> --all-in-chat # имя: и все нерешённые места с ним в этом чате
max personal mentions list --new --json # нерешённое с прошлого --new
max personal mentions domains --json # сайты, на которые ведут ссылки, самые частые сверху
max personal mentions reject 12
Рейтинги архива: max personal stats messages top / max personal stats contacts top — метрика --measure или
--score helpful|active|engaging; оценки используют всю допустимую выборку до limit.
Читай coverage/quality и исключения: неизвестные счётчики не равны нулю, свежесть наблюдений показана по полям; старые значения остаются unknown. Используй selection строки и шаг stats.evidence из next для stats messages evidence / stats contacts evidence,
продолжай по cursor шага page.next; при изменении данных начни без cursor.
Руководство: рейтинги.
Для вопросов без наблюдаемого ответа используй stats messages unanswered; время ответа явно
выбранных людей — stats contacts responses --answerer <person>. Помощь новичкам с известной датой
вступления — stats chats newcomers <chat>, посты каналов с просмотрами и малым обсуждением —
stats messages discussion. Проверяй качество архива и reply-графа, копируй точную selection строки
с --component report. Неизвестные история и дата вступления не равны нулю. Отчёты читают только
сохранённые данные; не выводи из выбранных id, кто был админом в прошлом.
Медиа чата: max personal chats media <чат> --type file --json; история звонков: max personal calls list --json.
max personal account privacy show --json читает приватность из ответа на вход.
max personal chats mute|unmute и max personal account privacy set меняют настройки владельца; выполняй
их только по его явной просьбе, сохраняй остальные поля. При проверке изменений сначала
сними значения и после проверки восстанови их.
Удалённому агенту доступны байты сохранённого файла: найдите attachments show через max_tools_search и вызовите max_read. Скрытые файлы, папки CLI и хранилище не передаются, включая ссылки. Соберите порции по next_offset_bytes, передавайте expected_fingerprint и проверьте хеш. Если клиент не может открыть PDF, запросите каждую страницу через page:1..pdf.page_count; нужны необязательные unpdf/@napi-rs/canvas. Страница возвращается изображением; если видны только метаданные, запросите format:base64 и покажите PNG средствами агента. Просмотрите реальные пиксели всех страниц, не считайте получение base64 чтением. pdf.source_sha256 — хеш исходного PDF, верхний sha256 — хеш PNG. Нет внешнего OCR API или автоматической записи: сохраните свой буквальный текст через attachments update и проверьте content:. Если показать страницы нельзя, сообщите об этом; не подставляйте прежний текст индекса. Качество зависит от разрешения, языка и структуры документа.
Удержание: max personal stats chats retention <chat> --checkpoints 1d,7d,30d --within 7d --json.
Используй только известные joined_at; partial absence и пропущенные снимки — unknown, будущие окна — pending.
Показывай observable знаменатель, неизвестные и фактическую дату снимка; не называй это непрерывным участием.
Сообщения когорты — через stats messages evidence --component report с точной selection строки.
Счётчики: max personal stats messages counters show --chat <chat> --counters views,reactions --json.
Проверяй observed_at/source/freshness каждого поля (24h по умолчанию). Refresh — remote read + local write:
stats messages counters sync --chat <chat> --max-messages 20 --sync-time 30s --dry-run --json.
Предпросмотр не подключается. Реальный refresh требует разрешённой записи и явного chat или pinned selection;
никогда не освежай весь аккаунт неявно. MAX поддерживает views/reactions; comments unsupported.
Не отправляй, не отмечай прочтение и не вызывай increment views. Сохранённые значения без наблюдения — unknown.
Владелец может назвать чат или человека обычным именем. Находите чат через chats list,
человека через contacts show / contacts list или сохранённых авторов через stats contacts top;
для отчёта используйте подтверждённый ID нужного аккаунта. Если совпадений несколько,
покажите кандидатов и уточните выбор. Не угадывайте ID и не превращайте неизвестное имя
в утверждение о нулевой активности. При неудачном поиске объясните, какое имя, @username
или уточнение аккаунта поможет. Счётчики относятся только к наблюдаемой истории.
Статистический --answerer также принимает сохранённое имя, своё имя и @username напрямую,
без подключения. При неоднозначности используйте возвращённые кандидаты нужного аккаунта,
не угадывайте. identity_known: false вместе с status: unknown означает, что явно выбранный
ID не наблюдался; ноль ответов не доказывает нулевую активность.