@wirecat/max-cli 0.45.4 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,21 +1,13 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/WireCatLabs/max-cli/main/docs/design/logo_text.png" alt="Max CLI" width="480">
2
+ <img src="https://raw.githubusercontent.com/WireCatLabs/max-cli/main/docs/images/social-preview.png" alt="MAX CLI для людей, ботов и агентов" width="100%">
3
3
  </p>
4
4
 
5
- # max-cli
5
+ # MAX CLI для людей, ботов и агентов
6
6
 
7
- Ваши боты [MAX](https://max.ru) и ваш личный аккаунт — в терминале и в ИИ-агентах. `max` —
8
- программа для терминала и MCP-сервер: пишите от имени бота через официальный Bot API, а в свои
9
- чаты — сами или руками Claude, Codex, Cursor и других агентов. В группах, которые вы ведёте, —
10
- следите за непрочитанным и сразу реагируйте на проблемы: спам, чужие ссылки, флуд, вопросы без
11
- ответа — по вашим правилам.
7
+ Ваш аккаунт и ваши боты [MAX](https://max.ru) — в терминале и в ИИ-агентах. Читайте, ищите и
8
+ отвечайте сами или поручите это Claude, Codex и Cursor — по вашим правилам.
12
9
 
13
- Работает в Windows, macOS и Linux. Документация — [wirecat.dev/ru/docs/max](https://wirecat.dev/ru/docs/max).
14
-
15
- ```sh
16
- max sales bot messages send "Команда продаж" "Сборка готова" # от имени бота
17
- max messages send "Иван Петров" "Опаздываю на 15 минут" # от вашего имени
18
- ```
10
+ [Документация](https://wirecat.dev/ru/docs/max) · [Примеры](https://github.com/WireCatLabs/max-cli/blob/main/docs/recipes.md) · [WireCat](https://wirecat.dev/ru)
19
11
 
20
12
  [![npm](https://img.shields.io/npm/v/@wirecat/max-cli)](https://www.npmjs.com/package/@wirecat/max-cli)
21
13
  [![CI](https://github.com/WireCatLabs/max-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/WireCatLabs/max-cli/actions/workflows/ci.yml)
@@ -24,511 +16,370 @@ max messages send "Иван Петров" "Опаздываю на 15 минут
24
16
  [![npm downloads](https://img.shields.io/npm/dm/@wirecat/max-cli)](https://www.npmjs.com/package/@wirecat/max-cli)
25
17
  [![License: Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
26
18
 
27
- ## Бот
19
+ <!-- Слот для демо: GIF или видео на 30–45 секунд, файл в docs/images/, ссылка абсолютная
20
+ (https://raw.githubusercontent.com/WireCatLabs/max-cli/main/docs/images/…), чтобы картинка
21
+ открывалась и на npmjs.com. Только вымышленный аккаунт. -->
28
22
 
29
- `max bot` работает с ботом через **официальный** [Bot API MAX](https://dev.max.ru/docs-api) по токену
30
- бота. Ботов может быть несколько: каждый хранится под именем, которое вы выбираете, и это имя —
31
- первое слово команды.
23
+ Пример разговора с агентом (люди и чаты вымышленные):
24
+
25
+ ```text
26
+ Вы: Что я кому обещал за последние три дня?
27
+ Агент: (вызывает max review: 12 чатов, 3 голосовых расшифровано)
28
+ Я должен
29
+ · Алисе Пример — прислать счёт до пятницы. Личный чат, 24.09
30
+ Жду от других
31
+ · Борис Образцов — макет к 25.09. В группе «Дизайн» его пока нет
32
+ Нужно уточнить
33
+ · «Проект Альфа»: кто везёт образцы — договорились «потом решим», 25.09
34
+ Вы: Напомни Борису про макет.
35
+ Агент: Черновик: «Борис, привет! Как там макет?» Отправить?
36
+ Вы: Да.
37
+ ```
32
38
 
33
- **Полный Bot API.** Все методы официальной схемы MAX доступны из терминала через
34
- `max <бот> bot api <операция>`: параметры — флаги, тело запроса — JSON. Удобные команды
35
- для сообщений и чатов дополняются полным API для собственных сценариев и автоматизации.
36
- [Руководство по Bot API](docs/bot.md) и [полный справочник команд](docs/commands.md).
39
+ ## Быстрый старт
37
40
 
38
41
  ```sh
39
- max sales bot auth set # токен — в скрытом вводе, MAX его проверит
40
- max sales bot me # какой это бот
41
- max sales bot api get-updates --limit 10 # номер группы — в поле chat_id
42
- max sales bot messages send "Команда продаж" "Сборка готова" --file report.pdf
43
- max sales bot recipients add "Команда продаж" # писать только сюда
44
- max bot list --check # все боты на этом компьютере
42
+ npm install -g @wirecat/max-cli
43
+ max setup --agent claude # вход по QR-коду и навык для Claude Code
44
+ max inbox # непрочитанное во всех чатах, ничего не отмечая
45
45
  ```
46
46
 
47
- Чат называют по номеру или, когда бот его уже видел, по названию; человеку пишут как
48
- `user:<номер>`. Где взять номер чата — [docs/bot.md](docs/bot.md#где-взять-номер-чата).
49
-
50
- - **Сообщения и чаты.** Отправка в чат по номеру, человеку как `user:<номер>` или в чат по
51
- названию; правка, удаление, чтение, закрепление. `chats list` — чаты, которые бот видел: списка
52
- чатов бота у MAX нет.
53
- - **Файлы, участники, комментарии, кнопки, меню команд, вебхуки.** `messages send --file`,
54
- `chats members`, `chats admins`, `comments`, `callbacks answer`, `commands`, `webhooks` — у каждой записи тот
55
- же список получателей и журнал.
56
- - **Модерация от имени бота.** `bot chats moderate` сверяет новое в группе с правилами
57
- (`bot chats rules`) и удаляет спам и людей — с запретом вернуться по ссылке. Вступления видит
58
- `bot watch`, который печатает всё, что происходит в чатах бота.
59
- - **Копия переписки на этом компьютере.** `bot contacts show <кто>` — где человек писал и его личный
60
- чат с ботом; `bot search messages --from <кто>` и `bot messages between <кто> <кто>` — без
61
- запросов к MAX.
62
- - **Бот для агента.** `max sales bot mcp` — MCP-сервер бота: агенту доступно то, что разрешают
63
- `permissions` профиля бота; `ask` и `allow` разрешают действие без формы, а `readonly` запрещает запись.
64
- - **Все методы Bot API.** Полное покрытие официальной схемы через `max bot api <операция>` — с флагами
65
- для параметров и JSON-телом, которое сверяется со схемой до отправки.
66
- - **Бот не напишет лишнего.** У каждого бота свой список чатов, куда ему можно писать, и журнал
67
- всего, что он отправил, — без текста. `permissions` ограничивает и бота.
68
- - **Токен не в файле.** Токен бота — в системном хранилище паролей, отдельно от вашего.
69
-
70
- Бота создают на [business.max.ru](https://business.max.ru/self); MAX выдаёт их подтверждённым
71
- организациям, ИП и самозанятым. Полностью — [docs/bot.md](docs/bot.md).
47
+ `max setup` за пять минут проводит через вход: вы сканируете QR-код в приложении MAX, и `max`
48
+ становится ещё одним вашим устройством. Вместо `claude` можно указать `codex`, `cursor`, `gemini`,
49
+ `all` или `none`; войти можно и по SMS через web.max.ru — `max setup --help`.
72
50
 
73
- ## Личный аккаунт
51
+ Нужен Node 22.16+ (ветка 22.x) или 24+, либо Bun 1.3+; работает в Windows, macOS и Linux.
52
+ Попробовать без установки — `npx @wirecat/max-cli --help`. Если `max` не находится,
53
+ `npx @wirecat/max-cli doctor` скажет почему.
74
54
 
75
- `max` без слова `bot` работает с вашим личным аккаунтом: как ещё одно ваше устройство, со всеми
76
- чатами, историей, группами и контактами.
55
+ Подробнее: [установка](https://github.com/WireCatLabs/max-cli/blob/main/docs/installation.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/installation)), [вход и профили](https://github.com/WireCatLabs/max-cli/blob/main/docs/sessions.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/sessions)).
77
56
 
78
- > ⚠️ **Для личного аккаунта max-cli использует неофициальный внутренний API MAX.** API может
79
- > измениться без предупреждения, а использование инструмента может нарушать условия сервиса. Вы
80
- > используете max-cli на свой риск; авторы и контрибьюторы не несут ответственности за блокировки
81
- > аккаунтов, потерю данных или другие последствия. Бот работает через официальный API, и к нему
82
- > это не относится.
57
+ ## Что можно сделать
58
+
59
+ **Разобрать, что пришло.** «Используй max CLI: кто ждёт моего ответа и что срочно?»
83
60
 
84
61
  ```sh
85
- max chats list --limit 5
86
- max messages list "Иван Петров"
87
- max messages send "Иван Петров" "Опаздываю на 15 минут"
62
+ max inbox
88
63
  ```
89
64
 
90
- Всё ниже, до раздела «Установка», — про личный аккаунт. Полностью — [docs/usage.md](docs/usage.md).
91
-
92
- ## Как это использовать
93
-
94
- Самое полезное — поручить переписку агенту: Claude, Codex или другому. Он читает чаты через `max`
95
- и делает то, что вы попросили словами.
65
+ **Найти что угодно.** «Когда мы договорились о встрече с Алисой?» — ответ с датой и самим
66
+ сообщением, по локальной копии и без запросов к MAX.
96
67
 
97
- - **Проверка по расписанию.** Утром и вечером агент смотрит, что пришло, и присылает короткую
98
- сводку: кто ждёт ответа, что срочно, что можно не читать.
99
- - **Отчёты.** Итог недели по рабочему чату: что решили, кто что взял на себя, какие вопросы
100
- остались без ответа.
101
- - **Кто кому должен.** `max review` одним вызовом отдаёт всё, что было в переписке с прошлого
102
- обзора, — ваши сообщения тоже, голосовые — текстом. Агент раскладывает это на «я должен», «жду от
103
- других» и «нужно уточнить», а прежде чем назвать что-то просроченным, проверяет рабочие группы:
104
- может, уже сделано.
105
- - **Напоминания.** Кому вы обещали ответить и не ответили; чей вопрос висит третий день.
106
- - **Черновики ответов.** Агент предлагает текст, а отправляете вы — или он сам, если вы разрешили
107
- писать в этот чат.
108
- - **Поиск.** «Когда мы договорились о встрече с Иваном?» — ответ с датой и самим сообщением.
109
- - **Группа, которую вы ведёте.** Какие вопросы висят без ответа, кто вступил за неделю и с каким
110
- аккаунтом, удалить приглашения в чужие чаты — по вашим правилам и с вашим «да»
111
- ([ниже](#группы-которые-вы-ведёте)).
68
+ ```sh
69
+ max search all "встреча Алиса"
70
+ ```
112
71
 
113
- Как это выглядит:
72
+ **Понять, кто кому что должен.** «Что я обещал и чего жду от других?» — вся переписка с прошлого
73
+ обзора, ваши сообщения и голосовые текстом.
114
74
 
115
- ```text
116
- Вы: Что я кому обещал за последние три дня?
117
- Агент: (вызывает max review: 12 чатов, 3 голосовых расшифровано)
118
- Я должен
119
- · Ивану Петрову — прислать счёт до пятницы. «Иван Петров», 24.09
120
- Жду от других
121
- · Ольга — макет к 25.09. В группе «Дизайн» его пока нет
122
- Нужно уточнить
123
- · «Проект Альфа»: кто везёт образцы — договорились «потом решим», 25.09
124
- Следующий обзор — с 26.09, 14:05.
125
- Вы: Напомни Ольге про макет.
126
- Агент: Черновик: «Ольга, привет! Как там макет?» Отправить?
127
- Вы: Да.
75
+ ```sh
76
+ max review --since-time 3d --transcribe
128
77
  ```
129
78
 
130
- Агент отправляет только по вашей просьбе; подтверждение вызовов настройте в своём ИИ-приложении. Чтение не ставит отметку «прочитано». Как настроить
131
- агента под каждую задачу — готовые запросы, расписание и ограничения:
132
- [docs/recipes.md](docs/recipes.md).
79
+ Ещё: сводки утром и вечером, итог недели по рабочему чату, кому вы обещали ответить, черновики
80
+ ответов, которые отправляете вы или агент с вашего разрешения.
133
81
 
134
- ## Группы, которые вы ведёте
82
+ Подробнее: [рецепты для агентов](https://github.com/WireCatLabs/max-cli/blob/main/docs/recipes.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/recipes)).
135
83
 
136
- ```sh
137
- max review --chat "Поход" --unanswered # вопросы, на которые сутки никто не ответил
138
- max chats events "Поход" # кто вступил и вышел за неделю
139
- max chats members list "Поход" --all # все участники: когда заведён аккаунт
140
- max chats rules set "Поход" invites delete # приглашения в чужие чаты — удалять
141
- max chats moderate "Поход" --allow-dangerous # проверить группу и сделать, что разрешено
142
- ```
84
+ ## Для ИИ-агентов
143
85
 
144
- Проверка сверяет новое в группе с вашими правилами: заблокированные люди, приглашения, ссылки,
145
- пересланное, флуд, совсем новые аккаунты. По умолчанию она только отмечает. Для каждого действия
146
- вы решаете сами: никогда, только с флагом, с вашим подтверждением или сразу. Сценарии с агентом,
147
- все правила и ограничения — [docs/groups.md](docs/groups.md).
148
-
149
- ## Как это работает
150
-
151
- `max` работает от вашего имени, как ещё одно ваше устройство, а не как бот. Вы входите один раз
152
- по QR-коду, и дальше доступно то же, что в приложении: чаты, сообщения, файлы, группы, контакты и
153
- профиль.
154
-
155
- Агенту `max` подключается одним из двух способов:
156
-
157
- - **Агент с терминалом** — Claude Code, Codex, Gemini CLI. Он сам вызывает команды `max`. Дайте
158
- ему навык (skill) — инструкцию, как работать с `max`: одна команда, см.
159
- [ниже](#для-скриптов-и-агентов).
160
- - **Агент без терминала** — Claude Desktop, Cursor и другие клиенты MCP. Подключите `max mcp`:
161
- готовую запись для их настроек печатает `max mcp config`. Там же есть команды `/catch-up` (что
162
- нового), `/review` (кто кому должен), `/reply` (черновик ответа) и `/find` (поиск). По умолчанию
163
- права агента задают `permissions`; большинство записей разрешено по умолчанию. `readonly`
164
- запрещает запись, а `ask` и `allow` допускают вызванную запись без серверной формы.
165
-
166
- ## Что умеет
167
-
168
- - **Читать.** Чаты, история, одно сообщение вместе с соседними, непрочитанное во всех чатах
169
- сразу (`max inbox`), вся переписка с прошлого обзора для разбора «кто кому должен» (`max review`), новые сообщения по мере прихода (`max watch`), скачивание вложений,
170
- расшифровка голосовых в текст на вашем компьютере, выгрузка переписки в JSONL или Markdown.
171
- - **Искать.** Сообщения — по тексту всего прочитанного, без подключения к MAX. Чаты и контакты —
172
- по части названия или имени.
173
- - **Писать.** Текст и разметка, ответы, фото, видео, файлы и голосовые, правка, пересылка, закрепление, реакции,
174
- опросы, отложенная отправка, удаление — у себя или у всех.
175
- - **Вести группы и каналы.** Создать группу, вступить по ссылке, выйти, участники и админы,
176
- название и настройки, ссылка-приглашение, папки. Для админа — вопросы без
177
- ответа, кто вступил и вышел, все участники с возрастом аккаунта, правила и проверка группы по ним
178
- ([docs/groups.md](docs/groups.md)).
179
- - **Контакты и аккаунт.** Найти человека по номеру, добавить, удалить, переименовать для себя,
180
- заблокировать, импортировать из файла; изменить профиль и фото; посмотреть и завершить другие
181
- сеансы.
182
- - **Входить удобным способом.** QR-код прямо в терминале, QR-код или SMS через web.max.ru в
183
- браузере, или готовый токен.
184
-
185
- ## Чем он хорош
186
-
187
- - **Читает незаметно.** Чтение не ставит отметку «прочитано»: собеседник не видит, что вы открыли
188
- чат. Отметить прочитанным можно, когда нужно: `max chats mark-read` или `--mark-read`.
189
- - **Агент не напишет лишнего.** Есть профиль только для чтения, список чатов, в которые можно
190
- писать, и лимит сообщений в час. В MCP сервер проверяет права профиля; подтверждение действий настраивается в приложении агента.
191
- Если имя подходит к двум чатам, `max` не выбирает сам, а показывает оба.
192
- - **Модерация по вашим правилам, а не по чужим.** Проверка группы по умолчанию только отмечает.
193
- Удалить сообщение или человека она может, только если вы разрешили: для каждого действия —
194
- никогда, с флагом, с вашим подтверждением или сразу. Не больше 10 действий за раз, и ничего не
195
- следит за группой в фоне.
196
- - **Сообщение не уйдёт дважды.** Если связь оборвалась во время отправки, `max` прямо говорит, что
197
- не знает, дошло ли сообщение, и даёт команду для повтора. MAX узнаёт повтор и второго сообщения не
198
- создаёт.
199
- - **Своя копия переписки.** Всё прочитанное сохраняется на вашем компьютере. По ней работает
200
- быстрый поиск по тексту сообщений, и её можно читать без интернета (`--offline`). При входе MAX
201
- присылает только изменившихся людей. Полный список заново — `max contacts sync`; данные
202
- покинутых чатов удаляет `max store clear --left --allow-dangerous`.
203
- - **Чужой текст не управляет вашим терминалом.** Имена, названия чатов, имена файлов и сообщения
204
- пишут другие люди. Управляющие символы из них показываются как текст, имя всегда печатается в одну
205
- строку, а автодополнение подставляет только номер чата — поддельную строку переписки или команду в
206
- оболочке так не подсунуть.
207
- - **Пароль от аккаунта не лежит в файле.** Токен входа хранится в системном хранилище паролей:
208
- Keychain в macOS, Secret Service (GNOME Keyring, KWallet) в Linux, диспетчер учётных данных в
209
- Windows. В историю команд он не попадает.
210
- - **Скрипт и агент разбирают ответ без догадок.** С `--json` команда отдаёт только данные, в одной и
211
- той же форме, без текста для человека вокруг. Ошибка приходит отдельно и с номером, поэтому
212
- скрипт сразу понимает, что случилось: нет входа, чат не найден или MAX не ответил вовремя.
213
- - **Разбор проблем без вашей переписки.** `--trace` показывает каждый запрос к MAX, чтобы понять,
214
- почему команда не сработала. В этой записи нет текстов, имён, телефонов и токена, поэтому её
215
- можно приложить к сообщению об ошибке. Полностью удачный запуск без флага не записывается; ошибки и частичные результаты сохраняются по умолчанию без текстов, если запись явно не выключена.
216
-
217
- ## Под заказ
218
-
219
- Делаем автоматизацию процессов и инструменты под вашу задачу: интеграции с MAX и другими
220
- мессенджерами, ИИ-агентов, внутренние сервисы. Пишите на [info@neirox.ai](mailto:info@neirox.ai).
221
-
222
- ## Чем отличается от других
223
-
224
- Для MAX уже есть хорошие проекты, и max-cli многому у них научился.
225
- [PyMax](https://github.com/MaxApiTeam/PyMax) — самая полная библиотека для личного аккаунта; её код
226
- помог разобрать многие операции протокола. Выбирайте то, что подходит под задачу.
86
+ Ваш агент. Ваш MAX. Ваши правила.
227
87
 
228
- | | max-cli | [PyMax](https://github.com/MaxApiTeam/PyMax) | [max-mcp](https://github.com/renosaza/max-mcp) |
229
- |---|:-:|:-:|:-:|
230
- | что это | программа для терминала и MCP-сервер | библиотека на Python | MCP-сервер на PyMax |
231
- | MCP-сервер и навык для агентов | ✅ | — | MCP |
232
- | ограничения для агента: только чтение, разрешённые действия, список чатов, лимит в час, подтверждение отправки | ✅ | — | — |
233
- | расшифровка голосовых в текст на вашем компьютере | ✅ | — | — |
234
- | готовые команды — не нужно писать свою программу | ✅ | — (библиотека для своего кода на Python) | — |
235
- | локальная копия с поиском и чтением без интернета | ✅ | — | — |
236
- | новые сообщения в реальном времени | ✅ `max watch` | ✅ обработчики событий | — |
237
- | отложенная отправка — уходит, даже если компьютер выключен | ✅ | ✅ | — |
238
- | выгрузка переписки в JSONL или Markdown | ✅ | — | — |
239
- | чтение, отправка текста, фото и файлов | ✅ | ✅ | ✅ |
240
- | реакции, правка, пересылка, закрепление | ✅ | ✅ | — |
241
- | удаление сообщений — у себя или у всех, с лимитом | ✅ | ✅ | — |
242
- | отметка «прочитано» по запросу | ✅ | ✅ | — |
243
- | группы и каналы: создать, вступить, участники, админы | ✅ | ✅ | чтение каналов |
244
- | для админа группы: вопросы без ответа, новенькие, проверка по правилам | ✅ | — | — |
245
- | контакты, профиль, другие сеансы | ✅ | ✅ | — |
246
- | отправка видео | ✅ | ✅ | — |
247
- | отправка кружков | — | ✅ | — |
248
- | отправка голосовых | ✅ | ⚠️ в 2.4.1 не проходит ([#102](https://github.com/MaxApiTeam/PyMax/issues/102), [#103](https://github.com/MaxApiTeam/PyMax/issues/103)) | — |
249
- | опросы: показать, проголосовать, создать, закрыть | ✅ | ✅ | — |
250
- | фото профиля | ✅ | ✅ | — |
251
- | вход с облачным паролем | ✅ по QR-коду | ✅ | — |
252
- | установить или снять облачный пароль | — | ✅ | — |
253
-
254
- Для бота есть `max bot` — через официальный Bot API, отдельно от личного аккаунта
255
- ([docs/bot.md](docs/bot.md)). Таблица выше — про личный аккаунт.
256
-
257
- ## Содержание
258
-
259
- - [Бот](#бот)
260
- - [Личный аккаунт](#личный-аккаунт)
261
- - [Группы, которые вы ведёте](#группы-которые-вы-ведёте)
262
- - [Установка](#установка)
263
- - [Вход](#вход)
264
- - [Использование](#использование)
265
- - [Для скриптов и агентов](#для-скриптов-и-агентов)
266
- - [Безопасность](#безопасность)
267
- - [Документация](#документация)
268
- - [Разработка](#разработка)
269
- - [Дорожная карта](#дорожная-карта)
270
- - [Лицензия](#лицензия)
271
- - [Участие](#участие)
272
-
273
- ## Установка
274
-
275
- Пакет — **`@wirecat/max-cli`**, команда, которую он ставит, — **`max`**.
276
-
277
- Запустить, ничего не устанавливая:
88
+ - **Агент с терминалом** — Claude Code, Codex, Cursor, Gemini CLI. Он сам вызывает `max`, а навык
89
+ (skill) — инструкция для агента — объясняет ему команды и ограничения. `max setup` ставит навык
90
+ сам; отдельно — `max skill install`.
91
+ - **Приложение без терминала** — Claude Desktop, Cursor и другие клиенты MCP. Подключите
92
+ MCP-сервер `max mcp`; готовые просьбы `/catch-up`, `/review`, `/reply` и `/find` уже внутри.
93
+ - **ChatGPT или Claude в браузере** — через HTTPS-туннель и вход по коду.
278
94
 
279
95
  ```sh
280
- npx @wirecat/max-cli --help
96
+ max mcp setup claude-code # или codex
97
+ max mcp config # запись для Claude Desktop, Cursor и других
281
98
  ```
282
99
 
283
- Поставить насовсем:
100
+ С `--json` каждая команда отдаёт только данные, а ошибка приходит отдельно, с постоянным кодом
101
+ завершения.
284
102
 
285
- ```sh
286
- npm install -g @wirecat/max-cli
287
- max --version
288
- max setup --agent codex # вход и подключение навыка агента
289
- ```
103
+ Подробнее: [MCP-сервер](https://github.com/WireCatLabs/max-cli/blob/main/docs/mcp.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/mcp)), [браузер](https://github.com/WireCatLabs/max-cli/blob/main/docs/remote.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/remote)), [контракт для скриптов](https://github.com/WireCatLabs/max-cli/blob/main/docs/cli-contract.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/cli-contract)).
290
104
 
291
- Глобальная установка через npm устанавливает навык агента, а на Windows сохраняет PATH
292
- для новых терминалов. Агенту в уже открытом терминале нужно обновить окружение и прочитать
293
- `max skill show` перед входом. `MAX_INSTALL_AGENT=none` отключает установку навыка.
105
+ ## Почему max
294
106
 
295
- Нужен **Node 22.16+ (ветка 22.x) или 24+**, либо **Bun 1.3+**. Работает на macOS, Linux и Windows. Подробности,
296
- переменные окружения и то, куда ложатся файлы, — [docs/installation.md](docs/installation.md).
107
+ - **Весь аккаунт, а не только бот.** Чаты, история, группы, контакты, файлы и голосовые — как в
108
+ приложении. И отдельно бот через официальный Bot API.
109
+ - **Своя копия переписки.** Всё прочитанное хранится на вашем компьютере: быстрый поиск и чтение
110
+ без интернета (`--offline`), выгрузка в JSONL или Markdown.
111
+ - **Сделан для агентов.** Навык, MCP-сервер, одна форма JSON и коды ошибок, по которым скрипт
112
+ решает, что делать дальше.
113
+ - **Безопасен по умолчанию.** Чтение не ставит отметку «прочитано». Есть профиль только для чтения,
114
+ список чатов для записи и лимит сообщений в час. Если имя подходит к двум чатам, `max` не выбирает
115
+ сам. Если связь оборвалась при отправке, `max` так и скажет, а повтор не создаст второе сообщение.
116
+ - **Порядок в группах, которые вы ведёте.** Вопросы без ответа, кто вступил, проверка по вашим
117
+ правилам: спам, чужие ссылки, флуд. По умолчанию проверка только отмечает.
297
118
 
298
- Если после установки команда `max` не находится, `npx @wirecat/max-cli doctor` скажет почему и
299
- напечатает команду, которая это исправит.
119
+ ### Чем отличается от других
300
120
 
301
- ## Вход
121
+ Для MAX есть и другие хорошие проекты; [PyMax](https://github.com/MaxApiTeam/PyMax) — самая полная
122
+ библиотека для личного аккаунта, и её код помог разобрать протокол. Коротко, для личного аккаунта:
302
123
 
303
- `max setup` проводит через первый запуск: проверяет локальные каталоги, показывает QR-код,
304
- проверяет аккаунт и до пяти чатов, затем предлагает подключить навык агента. Выделите около
305
- пяти минут. Скачивание истории — отдельный шаг после выбора чата и объёма; setup не запускает
306
- фоновый сервис. Повторный запуск проверяет существующую сессию без нового входа.
124
+ | | max-cli | [PyMax](https://github.com/MaxApiTeam/PyMax) | [max-mcp](https://github.com/renosaza/max-mcp) |
125
+ |---|:-:|:-:|:-:|
126
+ | что это | программа и MCP-сервер | библиотека на Python | MCP-сервер на PyMax |
127
+ | готовые команды, навык и MCP для агентов | ✅ | — | MCP |
128
+ | ограничения для агента: только чтение, список чатов, лимит в час | ✅ | — | — |
129
+ | локальная копия с поиском без интернета | ✅ | — | — |
130
+ | расшифровка голосовых на вашем компьютере | ✅ | — | — |
131
+ | реакции, правка, пересылка, опросы, отложенная отправка | ✅ | ✅ | — |
132
+ | для админа группы: вопросы без ответа, проверка по правилам | ✅ | — | — |
307
133
 
308
- ```sh
309
- max setup --agent codex # QR-вход и навык Codex
310
- max setup --agent claude # или Claude Code
311
- max setup --method qr-chrome # QR через web.max.ru в Chromium
312
- max setup --method sms # номер телефона вводится в браузере
313
- max setup --method token # скрытый ввод токена или stdin
314
- max setup --help # все способы и примеры
315
- ```
134
+ Подробнее: [полная таблица](https://github.com/WireCatLabs/max-cli/blob/main/docs/index.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max)).
316
135
 
317
- Вместо агента можно выбрать `cursor`, `gemini`, `all` или `none`. Агент перед входом читает
318
- `max skill show`; инструкция доступна без сессии. `max session start` остаётся отдельной
319
- командой импорта токена, а `max session start qr` — явного повторного входа при истёкшей сессии
320
- ([docs/sessions.md](docs/sessions.md)).
136
+ ## Личный аккаунт
321
137
 
322
- Несколько аккаунтов — несколько профилей, и профиль называется **первым словом**, а не флагом:
138
+ `max` без слова `bot` работает с вашим аккаунтом как ещё одно ваше устройство.
139
+
140
+ > ⚠️ **Для личного аккаунта max-cli использует неофициальный внутренний API MAX.** API может
141
+ > измениться без предупреждения, а использование инструмента может нарушать условия сервиса. Вы
142
+ > используете max-cli на свой риск; авторы и контрибьюторы не несут ответственности за блокировки
143
+ > аккаунтов, потерю данных или другие последствия. Бот работает через официальный API, и к нему
144
+ > это не относится.
145
+
146
+ - **Читать.** Чаты, история, сообщение вместе с соседними, непрочитанное во всех чатах (`max inbox`),
147
+ разбор «кто кому должен» (`max review`), новые сообщения по мере прихода (`max watch`), вложения,
148
+ голосовые — текстом на вашем компьютере.
149
+ - **Писать.** Текст и разметка, ответы, фото, видео, файлы и голосовые, правка, пересылка,
150
+ закрепление, реакции, опросы, отложенная отправка, удаление — у себя или у всех.
151
+ - **Группы и каналы.** Создать, вступить по ссылке, выйти, участники и админы, настройки, ссылка-приглашение, папки.
152
+ - **Контакты и аккаунт.** Найти по номеру, добавить, переименовать, заблокировать, свои заметки о
153
+ людях; профиль и фото; другие сеансы.
323
154
 
324
155
  ```sh
325
- max chats list # профиль default
326
- max personal chats list # профиль personal
327
- export MAX_PROFILE=personal # или на всю сессию оболочки
156
+ max inbox # непрочитанное, ничего не отмечая
157
+ max messages list "Алиса Пример" --limit 20
158
+ max messages send "Алиса Пример" "Созвонимся в 15:00?" --reply-to <id>
159
+ max reactions add "Алиса Пример" <id> 👍
160
+ max messages send 0 "Позвонить Борису" --at-time 2h # напоминание себе в «Избранное»
161
+ max chats mark-read "Алиса Пример" # отметить прочитанным, когда нужно
328
162
  ```
329
163
 
330
- ## Использование
164
+ Подробнее: [личный аккаунт](https://github.com/WireCatLabs/max-cli/blob/main/docs/usage.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/usage)), [один человек](https://github.com/WireCatLabs/max-cli/blob/main/docs/people.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/people)), [ответы](https://github.com/WireCatLabs/max-cli/blob/main/docs/replies.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/replies)).
165
+
166
+ ## Бот
331
167
 
332
- **Бот пишет в группу, закрепляет объявление и следит за порядком:**
168
+ `max bot` работает через **официальный** [Bot API MAX](https://dev.max.ru/docs-api) по токену бота.
169
+ Ботов может быть несколько: каждый хранится под именем, которое вы выбираете, и это имя — первое
170
+ слово команды. Бота создают на [business.max.ru](https://business.max.ru/self); MAX выдаёт их
171
+ подтверждённым организациям, ИП и самозанятым.
333
172
 
334
173
  ```sh
174
+ max sales bot auth set # токен — в скрытом вводе, MAX его проверит
175
+ max sales bot recipients add "Команда продаж" # писать только сюда
335
176
  max sales bot messages send "Команда продаж" "**Сборка готова**" --md --file report.pdf
336
- max sales bot messages pin "Команда продаж" <mid> # id сообщения — из ответа на send
337
- max sales bot watch --events # всё, что происходит в чатах бота, по мере прихода
338
- max sales bot chats rules set "Команда продаж" links delete
177
+ max sales bot messages pin "Команда продаж" <mid> # id сообщения — из ответа на send
178
+ max sales bot watch --events # всё, что происходит в чатах бота
339
179
  max sales bot chats moderate "Команда продаж" --dry-run # что нарушает правила — без действий
340
- max sales bot contacts show "Иван" # где человек писал и его личный чат с ботом
180
+ max sales bot api get-updates --limit 10 # любой метод Bot API
181
+ max bot list --check # все боты на этом компьютере
341
182
  ```
342
183
 
343
- **Разговор от своего имени:**
184
+ - **Полный Bot API.** Каждый метод официальной схемы — `max <бот> bot api <операция>`: параметры —
185
+ флаги, тело — JSON, который сверяется со схемой до отправки.
186
+ - **Сообщения и чаты.** Чат называют по номеру, по названию, если бот его видел, или человека как
187
+ `user:<номер>`. Файлы, участники, комментарии, кнопки, меню команд, вебхуки.
188
+ - **Модерация.** `bot chats rules` и `bot chats moderate` удаляют спам и людей по вашим правилам.
189
+ - **Копия переписки бота.** `bot contacts show`, `bot search messages --from`,
190
+ `bot messages between` — без запросов к MAX.
191
+ - **Бот не напишет лишнего.** Свой список чатов для записи, журнал отправленного без текста,
192
+ `permissions` и MCP-сервер `max <бот> bot mcp`. Токен — в системном хранилище паролей, отдельно от вашего.
344
193
 
345
- ```sh
346
- max inbox # непрочитанное во всех чатах, ничего не отмечая
347
- max messages list "Иван Петров" --limit 20
348
- max messages send "Иван Петров" "Созвонимся в 15:00?" --reply-to <id>
349
- max reactions add "Иван Петров" <id> 👍
350
- max messages send 0 "Позвонить маме" --at-time 2h # напоминание себе в «Избранное» через два часа
351
- max review --since-time 1d # вся переписка за сутки: кто кому что обещал
352
- ```
194
+ Подробнее: [бот MAX](https://github.com/WireCatLabs/max-cli/blob/main/docs/bot.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/bot)).
353
195
 
354
- **Группа, которую вы ведёте:**
196
+ ## Группы, которые вы ведёте
355
197
 
356
198
  ```sh
357
- max chats create "Поход" "Аня" "Борис" # создать и позвать людей
358
- max chats admins add "Поход" "Аня" --can pin,members
359
- max chats link reset "Поход" # старая ссылка-приглашение перестаёт работать
360
- max polls create "Поход" "Когда едем?" "Суббота" "Воскресенье"
361
199
  max review --chat "Поход" --unanswered # вопросы, на которые сутки никто не ответил
362
- max chats moderate "Поход" --dry-run # спам, чужие ссылки, флуд — по вашим правилам
200
+ max chats events "Поход" # кто вступил и вышел
201
+ max chats members list "Поход" --all # все участники: когда заведён аккаунт
202
+ max chats rules set "Поход" invites delete # приглашения в чужие чаты — удалять
203
+ max chats moderate "Поход" --dry-run # что нарушает правила — без действий
363
204
  ```
364
205
 
365
- **Найти и сохранить:**
206
+ Проверка сверяет новое в группе с вашими правилами: заблокированные люди, приглашения, ссылки,
207
+ пересланное, флуд, совсем новые аккаунты. По умолчанию она только отмечает. Для каждого действия вы
208
+ решаете сами: никогда, только с флагом, с вашим подтверждением или сразу. Не больше 10 действий за
209
+ раз, и ничего не следит за группой в фоне.
210
+
211
+ Подробнее: [группы](https://github.com/WireCatLabs/max-cli/blob/main/docs/groups.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/groups)), [рейтинги](https://github.com/WireCatLabs/max-cli/blob/main/docs/rankings.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/rankings)).
212
+
213
+ ## Локальная копия и поиск
214
+
215
+ Всё прочитанное сохраняется на вашем компьютере. По копии работают поиск и чтение без интернета;
216
+ историю чата можно скачать глубже и выгрузить.
366
217
 
367
218
  ```sh
368
- max search all "договор" # сообщения, почта и заметки сразу, без сети
369
- max search messages "договор" --chat "Проект Альфа" # только сообщения одного чата
370
- max store fetch "Проект Альфа" --last 500
219
+ max search all "договор" # сообщения, почта и заметки сразу
220
+ max search messages "договор" --chat "Проект Альфа" # только один чат
221
+ max store fetch "Проект Альфа" --last 500 # последние 500 сообщений — в копию
371
222
  max store export "Проект Альфа" --format markdown --output alfa.md
223
+ max chats list --offline # без подключения к MAX
372
224
  ```
373
225
 
374
- Каждая команда отвечает JSON с `--json` и пишет в журнал, что отправила, — без текстов.
226
+ Поиск понимает слова, людей, даты, файлы, ссылки и ваши метки; есть поиск по темам и сохранённые
227
+ запросы. Текст из сохранённых вложений ищется через `content:`.
375
228
 
376
- Полностью: [docs/usage.md](docs/usage.md). Каждая команда и каждая опция:
377
- [docs/commands.md](docs/commands.md) — эта страница собирается из самой программы, поэтому описать
378
- версию, которой не существует, она не может.
229
+ Подробнее: [локальная копия](https://github.com/WireCatLabs/max-cli/blob/main/docs/archive.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/archive)), [поиск](https://github.com/WireCatLabs/max-cli/blob/main/docs/search.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/search)), [язык запросов](https://github.com/WireCatLabs/max-cli/blob/main/docs/query-language.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/query-language)), [поиск по темам](https://github.com/WireCatLabs/max-cli/blob/main/docs/topic-search.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/topic-search)), [вложения](https://github.com/WireCatLabs/max-cli/blob/main/docs/attachments.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/attachments)), [голосовые](https://github.com/WireCatLabs/max-cli/blob/main/docs/audio-recognition.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/audio-recognition)).
379
230
 
380
- ## Для скриптов и агентов
231
+ ## Агенты: навык и MCP
381
232
 
382
- ### Навык для агентов с терминалом
383
-
384
- Навык (skill) — файл с инструкцией, который агент читает перед работой. В навыке `max` описано,
385
- какие команды есть, что агент делает только по вашей просьбе и как безопасно повторить отправку.
386
- Его понимают **Claude Code**, **Codex**, **Cursor** и **Gemini CLI**. Навык ставится одной командой и всегда
387
- той же версии, что и `max`:
233
+ **Навык** ставится одной командой и всегда той же версии, что и `max`: в `~/.claude/skills/max-cli/`
234
+ для Claude Code и в `~/.agents/skills/max-cli/` для Codex, Gemini CLI и Cursor. После обновления
235
+ `max` запустите установку ещё раз.
388
236
 
389
237
  ```sh
390
- max skill show # прочитать перед входом
391
- max skill install --for all # установить без входа
238
+ max skill show # прочитать до входа
239
+ max skill install --for all # или --for claude, --for agents
392
240
  ```
393
241
 
394
- Команда кладёт навык в `~/.claude/skills/max-cli/` для Claude Code и в `~/.agents/skills/max-cli/`
395
- для Codex, Gemini CLI и Cursor (при поддержке обнаружения навыков); `--for claude` или `--for agents` — только в одну из папок. После
396
- обновления `max` запустите её ещё раз. Если навыка нет или он старше `max`, агент раз в сутки
397
- увидит об этом строку в stderr; выключается `max config set skillHint false --defaults`.
242
+ **MCP-сервер** работает с тем же аккаунтом. Права профиля проверяются при каждом вызове; формы
243
+ подтверждения на сервере нет — подтверждение вызовов настраивается в приложении агента. Навык
244
+ доступен ресурсом `max://skill`.
245
+
246
+ ```sh
247
+ max mcp doctor # проверить локальный MCP
248
+ max mcp --http --public-url https://<имя>.ts.net # для ChatGPT и Claude в браузере
249
+ max mcp --permission messages.send=ask # временно изменить право
250
+ ```
398
251
 
399
- Как эти агенты находят навыки: [Codex](https://learn.chatgpt.com/docs/build-skills),
400
- [Gemini CLI](https://geminicli.com/docs/cli/skills/).
252
+ Подробнее: [MCP-сервер](https://github.com/WireCatLabs/max-cli/blob/main/docs/mcp.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/mcp)), [браузер](https://github.com/WireCatLabs/max-cli/blob/main/docs/remote.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/remote)), [внешние модели](https://github.com/WireCatLabs/max-cli/blob/main/docs/external-models.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/external-models)).
401
253
 
402
- ### MCP-сервер для агентов без терминала
254
+ ## Для скриптов
403
255
 
404
- Claude Desktop, Cursor и другие клиенты MCP подключаются к `max mcp` и работают с тем же
405
- аккаунтом. Права `deny`/`readonly` запрещают записи; `ask`/`allow` допускают запрошенное действие через MCP.
406
- Серверных форм подтверждения нет; подтверждение вызовов зависит от настроек вашего ИИ-приложения.
407
- Навык доступен ресурсом `max://skill`. Для браузерных клиентов есть
408
- `max mcp --http --public-url https://<имя>.ts.net`: HTTPS-туннель и вход по коду.
409
- `--permission ключ=уровень` временно переопределяет права процесса ([подключение](docs/remote.md)).
256
+ С `--json` команда печатает только данные; так же она работает, когда её вывод читает другая
257
+ программа (`max … | jq`). Любой список приходит в одной форме:
410
258
 
411
- ```sh
412
- max mcp doctor # проверить локальный MCP
413
- max mcp setup codex # Codex
414
- max mcp setup claude-code # Claude Code
415
- max mcp config # запись для Claude Desktop, Cursor и других — с полными путями
259
+ ```json
260
+ { "items": [ … ], "page": 1, "limit": 20, "hasMore": true }
416
261
  ```
417
262
 
418
- Команды сервера — `/catch-up`, `/review`, `/reply`, `/find` — готовые просьбы: агент знает, какие
419
- инструменты вызвать и чего не делать.
263
+ Ошибка приходит одной строкой JSON в stderr, stdout остаётся пустым. Код завершения говорит, что
264
+ случилось: `4` — нужно войти, `5` — права не разрешают, `6` — чат или сообщение не найдены, `8` —
265
+ лимит, `9` — MAX не ответил вовремя, `14` — неизвестно, ушло ли сообщение (повторять только с тем же
266
+ `--send-id`). Частичный результат может прийти с кодом `0`: проверьте поле `complete`.
420
267
 
421
- ### Ответы в JSON
268
+ Подробнее: [контракт](https://github.com/WireCatLabs/max-cli/blob/main/docs/cli-contract.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/cli-contract)), [все команды и коды](https://github.com/WireCatLabs/max-cli/blob/main/docs/commands.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/commands)).
269
+
270
+ ## Вход и профили
422
271
 
423
272
  ```sh
424
- max chats list --json
273
+ max setup --agent codex # QR-код в терминале и навык Codex
274
+ max setup --method qr-chrome # QR через web.max.ru в браузере
275
+ max setup --method sms # номер телефона — в браузере
276
+ max setup --method token # готовый токен, скрытым вводом или через stdin
277
+ max session start qr # повторный вход, когда сессия истекла
425
278
  ```
426
279
 
427
- С `--json` команда печатает только данные в JSON, без таблиц, цвета и подсказок. Так же она
428
- работает, когда её вывод читает другая программа, — например, в конвейере `max … | jq`. Любой
429
- список — чаты, сообщения, участники, всё у бота — приходит в одной форме:
280
+ Несколько аккаунтов — несколько профилей; профиль называется **первым словом**:
281
+ `max personal chats list`, или `export MAX_PROFILE=personal` на всю сессию оболочки.
430
282
 
431
- ```json
432
- { "items": [ … ], "page": 1, "limit": 20, "hasMore": true }
433
- ```
283
+ Подробнее: [вход и сессии](https://github.com/WireCatLabs/max-cli/blob/main/docs/sessions.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/sessions)), [профили](https://github.com/WireCatLabs/max-cli/blob/main/docs/profiles.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/profiles)).
434
284
 
435
- Ошибка, завершающая команду, приходит отдельно от данных — одной строкой в stderr, а stdout остаётся пустым, поэтому её
436
- нельзя принять за пустой результат:
285
+ ## Настройки и права
437
286
 
438
- ```json
439
- {"error":{"code":"authentication_error","message":"no session for profile \"default\" — run `max setup` in a local terminal; agents: read `max skill show`"}}
287
+ У каждого профиля свои настройки и права; без файла настроек действуют встроенные значения.
288
+
289
+ | Настройка | Что делает | По умолчанию |
290
+ |---|---|---|
291
+ | `permissions` | что можно: `deny`, `readonly`, `ask`, `allow` — для команды или группы команд | всё, кроме удаления и других необратимых действий: они спрашивают |
292
+ | `sendsPerHour` | сколько сообщений профиль отправит за час | `30` |
293
+ | `requestsPerMinute` | темп обращений к MAX | `20` |
294
+ | `catchUpMarksRead` | `inbox` и `review` отмечают показанное прочитанным | `false` |
295
+ | `limit` | сколько строк в списке | `20` |
296
+
297
+ ```sh
298
+ max config set permissions.messages readonly # профиль только для чтения
299
+ max config set permissions.messages.send ask # спрашивать перед отправкой
440
300
  ```
441
301
 
442
- У ошибки, завершающей команду, есть номер — код завершения программы. По нему скрипт решает, что делать дальше:
443
- `4` — нужно войти, `6` — чат или сообщение не найдены, `9` — MAX не ответил вовремя, `14` —
444
- неизвестно, выполнено ли изменение. Все коды — в [docs/commands.md](docs/commands.md).
302
+ Подробнее: [настройки](https://github.com/WireCatLabs/max-cli/blob/main/docs/configuration.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/configuration)), [права](https://github.com/WireCatLabs/max-cli/blob/main/docs/permissions.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/permissions)), [все ключи](https://github.com/WireCatLabs/max-cli/blob/main/docs/configuration-reference.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/configuration-reference)).
303
+
304
+ ## Ограничения
445
305
 
446
- Частичное чтение или скачивание может вернуть JSON с кодом `0`: проверьте `complete` и `batch` или `issue`. JSONL частичной загрузки добавляет `batch_summary`. [Как продолжить](docs/attachments.md#если-часть-файлов-не-прочиталась).
306
+ `max` держит каждый профиль в одном темпе: первые 10 запросов идут сразу, дальше — 20 в минуту, и
307
+ две команды одновременно делят этот темп. Если MAX отвечает «слишком много запросов», `max`
308
+ останавливается и не повторяет запрос сам. Фоновый `max serve` держит одно подключение для всех
309
+ команд и сам останавливается, когда им 15 минут никто не пользуется.
310
+
311
+ Подробнее: [ограничения и ожидания](https://github.com/WireCatLabs/max-cli/blob/main/docs/limits.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/limits)).
447
312
 
448
313
  ## Безопасность
449
314
 
450
- - Токен входа — в системном хранилище паролей, не в файле и не в строке команды.
451
- - Локальная копия переписки и все служебные файлы доступны только вашему пользователю; от кражи
452
- диска защищает шифрование диска целиком.
315
+ - Токен входа — в системном хранилище паролей, не в файле и не в истории команд.
316
+ - Локальная копия и служебные файлы доступны только вашему пользователю; от кражи диска защищает
317
+ шифрование диска целиком.
453
318
  - Перед каждой отправкой, в том числе через фоновый сервер и MCP, `max` проверяет ограничения
454
319
  профиля и пишет строку в журнал — без текста сообщения.
455
- - Подтверждение MCP-вызовов настройте в приложении агента. `--file` защищает известные файлы
456
- с учётными данными, папки CLI и хранилище. Обычные скрытые рабочие папки разрешены;
457
- `--allow-any-file` доступен только в CLI. Ограничения профиля действуют при каждом вызове.
320
+ - `--file` не отправит известные файлы с учётными данными, папки `max` и хранилище.
321
+ - Чужой текст не управляет вашим терминалом: управляющие символы из имён и сообщений показываются
322
+ как текст.
458
323
  - Ограничения защищают от агента, которого уговорило прочитанное сообщение, но не от агента,
459
- который хочет их обойти: против такого нужна граница снаружи — песочница или отдельный
460
- пользователь.
324
+ который хочет их обойти: для этого нужна песочница или отдельный пользователь.
325
+
326
+ Подробнее: [безопасность](https://github.com/WireCatLabs/max-cli/blob/main/docs/security.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/security)).
327
+
328
+ ## Когда не работает
329
+
330
+ ```sh
331
+ max doctor # где лежат файлы и есть ли вход; к MAX не подключается
332
+ max chats list --trace # каждый запрос к MAX — без текстов, имён и токена
333
+ max runs list # неудачные и частичные запуски сохраняются сами
334
+ ```
335
+
336
+ Запись `--trace` можно приложить к сообщению об ошибке.
461
337
 
462
- Подробно — что пишется на диск, что уходит в сеть и чего инструмент не делает никогда:
463
- [docs/security.md](docs/security.md).
338
+ Подробнее: [по симптому](https://github.com/WireCatLabs/max-cli/blob/main/docs/troubleshooting.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/troubleshooting)), [диагностика](https://github.com/WireCatLabs/max-cli/blob/main/docs/diagnostics.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/diagnostics)).
464
339
 
465
340
  ## Документация
466
341
 
467
- - [docs/installation.md](docs/installation.md) — установка, обновление, куда что ложится
468
- - [docs/bot.md](docs/bot.md) — бот: токен, несколько ботов, сообщения, чаты, список получателей, любая операция API
469
- - [docs/usage.md](docs/usage.md) — личный аккаунт: вход, чтение, отправка, машинный режим
470
- - [docs/sessions.md](docs/sessions.md) — токен, хранилище паролей, профили
471
- - [docs/configuration.md](docs/configuration.md) — настройка по шагам
472
- - [docs/configuration-reference.md](docs/configuration-reference.md) — все ключи, переменные и порядок разрешения
473
- - [docs/cli-contract.md](docs/cli-contract.md) — команды, JSON, ошибки, пределы и запуск агентом
474
- - [docs/mcp.md](docs/mcp.md) — MCP-сервер: подключение, отправка, соединение с MAX
475
- - [docs/remote.md](docs/remote.md) — ChatGPT или Claude в браузере
476
- - [docs/groups.md](docs/groups.md) — группы, которые вы ведёте: сценарии с агентом, правила, проверка
477
- - [docs/people.md](docs/people.md) — один человек: профиль, его сообщения по чатам, похож ли на бота
478
- - [docs/recipes.md](docs/recipes.md) — рецепты для агентов: сводки, отчёты, долги, напоминания, расписание
479
- - [docs/diagnostics.md](docs/diagnostics.md) — `--trace`, `--record`, `max runs`
480
- - [docs/roadmap.md](docs/roadmap.md) — что планируется
481
- - [docs/security.md](docs/security.md) — что пишется на диск, а что никогда
482
- - [docs/troubleshooting.md](docs/troubleshooting.md) — по симптому: что делать, когда не работает
483
- - [docs/commands.md](docs/commands.md) — каждая команда и опция — **генерируется** из программы
484
- - [docs/dev/protocol.md](docs/dev/protocol.md) — каждый опкод и откуда известна его форма — **генерируется**
485
- - [docs/dev/ARCHITECTURE.md](docs/dev/ARCHITECTURE.md) — как это устроено и какие швы нельзя пересекать
486
- - [docs/dev/BACKLOG.md](docs/dev/BACKLOG.md) — что осталось
487
-
488
- Оглавление целиком — [docs/README.md](docs/README.md).
342
+ Каждая страница есть и на сайте — [wirecat.dev/ru/docs/max](https://wirecat.dev/ru/docs/max); ниже —
343
+ исходники в этом репозитории.
344
+
345
+ | Раздел | Страницы |
346
+ |---|---|
347
+ | Начало | [обзор и сравнение](https://github.com/WireCatLabs/max-cli/blob/main/docs/index.md) · [установка](https://github.com/WireCatLabs/max-cli/blob/main/docs/installation.md) |
348
+ | Как пользоваться | [личный аккаунт](https://github.com/WireCatLabs/max-cli/blob/main/docs/usage.md) · [вход и сессии](https://github.com/WireCatLabs/max-cli/blob/main/docs/sessions.md) · [локальная копия](https://github.com/WireCatLabs/max-cli/blob/main/docs/archive.md) · [поиск](https://github.com/WireCatLabs/max-cli/blob/main/docs/search.md) · [вложения](https://github.com/WireCatLabs/max-cli/blob/main/docs/attachments.md) · [голосовые](https://github.com/WireCatLabs/max-cli/blob/main/docs/audio-recognition.md) · [внешние модели](https://github.com/WireCatLabs/max-cli/blob/main/docs/external-models.md) · [рейтинги](https://github.com/WireCatLabs/max-cli/blob/main/docs/rankings.md) · [поиск по темам](https://github.com/WireCatLabs/max-cli/blob/main/docs/topic-search.md) · [язык запросов](https://github.com/WireCatLabs/max-cli/blob/main/docs/query-language.md) · [бот MAX](https://github.com/WireCatLabs/max-cli/blob/main/docs/bot.md) · [группы](https://github.com/WireCatLabs/max-cli/blob/main/docs/groups.md) · [один человек](https://github.com/WireCatLabs/max-cli/blob/main/docs/people.md) · [ответы](https://github.com/WireCatLabs/max-cli/blob/main/docs/replies.md) · [MCP-сервер](https://github.com/WireCatLabs/max-cli/blob/main/docs/mcp.md) · [браузер](https://github.com/WireCatLabs/max-cli/blob/main/docs/remote.md) · [рецепты](https://github.com/WireCatLabs/max-cli/blob/main/docs/recipes.md) |
349
+ | Справочник | [все команды](https://github.com/WireCatLabs/max-cli/blob/main/docs/commands.md) · [настройки](https://github.com/WireCatLabs/max-cli/blob/main/docs/configuration.md) · [права](https://github.com/WireCatLabs/max-cli/blob/main/docs/permissions.md) · [профили](https://github.com/WireCatLabs/max-cli/blob/main/docs/profiles.md) · [все ключи настроек](https://github.com/WireCatLabs/max-cli/blob/main/docs/configuration-reference.md) · [контракт для скриптов](https://github.com/WireCatLabs/max-cli/blob/main/docs/cli-contract.md) · [ограничения](https://github.com/WireCatLabs/max-cli/blob/main/docs/limits.md) |
350
+ | Если что-то не так | [диагностика](https://github.com/WireCatLabs/max-cli/blob/main/docs/diagnostics.md) · [когда не работает](https://github.com/WireCatLabs/max-cli/blob/main/docs/troubleshooting.md) · [безопасность](https://github.com/WireCatLabs/max-cli/blob/main/docs/security.md) |
351
+ | Проект | [дорожная карта](https://github.com/WireCatLabs/max-cli/blob/main/docs/roadmap.md) |
352
+ | Изменения | [CHANGELOG.md](https://github.com/WireCatLabs/max-cli/blob/main/CHANGELOG.md) |
353
+
354
+ Для разработчиков: [архитектура](https://github.com/WireCatLabs/max-cli/blob/main/docs/dev/ARCHITECTURE.md), [проверки](https://github.com/WireCatLabs/max-cli/blob/main/docs/dev/TESTING.md),
355
+ [протокол](https://github.com/WireCatLabs/max-cli/blob/main/docs/dev/protocol.md) (генерируется), [что осталось](https://github.com/WireCatLabs/max-cli/blob/main/docs/dev/BACKLOG.md).
489
356
 
490
357
  ## Разработка
491
358
 
492
359
  ```sh
493
360
  pnpm install
494
361
  pnpm lint && pnpm typecheck && pnpm test
495
- pnpm build && pnpm smoke:bun # собранная команда под вторым рантаймом
362
+ pnpm build && pnpm smoke:bun # собранная команда под Bun
496
363
  pnpm generate # переписать сгенерированные файлы
497
364
  ```
498
365
 
499
- Протокол MAX неофициальный и разобран обратной инженерией: это не Bot API. Каждый опкод и форма
500
- каждого сообщения объявлены один раз в `src/spec/`, а реестр, типизированный клиент и
501
- [docs/dev/protocol.md](docs/dev/protocol.md) из них генерируются — и CI падает, если дерево устарело.
502
-
503
- Половина, не имеющая отношения к MAX — потоки вывода, рендерер, коды ошибок, хранилище паролей, часы, —
504
- вынесена в [`@wirecat/cli-core`](https://github.com/WireCatLabs/cli-core) и общая с `braze-cli`.
505
-
506
- ## Дорожная карта
507
-
508
- [docs/roadmap.md](docs/roadmap.md).
509
-
510
- ## Лицензия
366
+ Протокол MAX неофициальный и разобран обратной инженерией. Каждый опкод объявлен один раз в
367
+ `src/spec/`, а реестр, типизированный клиент и `docs/dev/protocol.md` из него генерируются; CI
368
+ падает, если дерево устарело. Общая часть — потоки вывода, коды ошибок, хранилище паролей — в
369
+ [`@wirecat/cli-core`](https://github.com/WireCatLabs/cli-core).
511
370
 
512
- Apache License 2.0 — см. [LICENSE](LICENSE).
371
+ ## Часть WireCat
513
372
 
514
- ## Участие
373
+ max-cli — часть [WireCat](https://wirecat.dev/ru): открытого слоя контекста для ИИ-агентов, который
374
+ хранит данные на вашем компьютере. Начните с MAX. Добавьте Telegram, почту и заметки, когда
375
+ понадобится. Ваш контекст. Любой агент.
515
376
 
516
- Пулл-реквесты, сообщения об ошибках и предложения приветствуются —
517
- [issues](https://github.com/WireCatLabs/max-cli/issues). Как устроен код и как его проверять —
518
- [docs/dev/ARCHITECTURE.md](docs/dev/ARCHITECTURE.md) и [docs/dev/TESTING.md](docs/dev/TESTING.md).
377
+ ## Участие и лицензия
519
378
 
520
- ### Private contact notes and automatic tags
379
+ Пулл-реквесты, сообщения об ошибках и предложения —
380
+ [issues](https://github.com/WireCatLabs/max-cli/issues).
521
381
 
522
- `max contacts alias set <person> <alias>` задаёт локальное имя для выбранного аккаунта;
523
- `contacts rename` меняет запись в адресной книге мессенджера. Собственные заметки:
524
- `contacts notes add <person> --file <path>`, затем `list`, `show`, `edit --revision <n>` и `remove`.
525
- `contacts show --with-notes` включает заметки явно; `contacts list --search-notes <text>` ищет в них.
526
- Заметка о контакте видна в каждом профиле, который видит этот контакт; псевдоним — только в своём.
527
- Обновление контактов сохраняет заметки и псевдонимы. Связывание людей не объединяет эти данные.
382
+ Делаем автоматизацию и инструменты под задачу: интеграции с MAX и другими мессенджерами,
383
+ ИИ-агентов, внутренние сервисы — [info@neirox.ai](mailto:info@neirox.ai).
528
384
 
529
- `max metadata refresh --chat <id>` сохраняет описание группы или канала локально;
530
- `metadata get --chat <id>` читает сохранённые данные. `tags auto --chat <id> --dry-run`
531
- показывает метки по ключевым словам. Для актуального описания добавьте `--refresh-metadata`
532
- без `--dry-run`. Команда обрабатывает не более 500 чатов за запуск, по умолчанию 50.
533
- Автоматические метки не удаляют ручные; `tags list|remove --source auto` выбирает только
534
- автоматические метки. Текст сообщений и внешние модели при классификации не используются.
385
+ Apache License 2.0 — [LICENSE](LICENSE).
package/dist/bin/max.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import { migrateFolders } from "@wirecat/cli-messaging/background";
2
3
  import { ensureSqlite } from "@wirecat/cli-messaging/sqlite-runtime";
4
+ import { MAX_APP } from "../app.js";
3
5
  // `max chats --json | head` closes the pipe while we are still writing, and an unhandled EPIPE
4
6
  // makes Node print a stack trace over the output of the command that just worked. A reader that
5
7
  // stopped reading is not an error: leave quietly, as every other Unix tool does.
@@ -13,6 +15,8 @@ for (const stream of [process.stdout, process.stderr]) {
13
15
  throw error;
14
16
  });
15
17
  }
18
+ // Before anything resolves a path: a write into a new folder first would strand the old one.
19
+ migrateFolders(MAX_APP);
16
20
  await ensureSqlite();
17
21
  // A static import would load the whole program, and its SQLite, before ensureSqlite could swap it.
18
22
  const { run } = await import("../program.js");
@@ -1 +1 @@
1
- {"version":3,"file":"max.js","sourceRoot":"","sources":["../../src/bin/max.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,+FAA+F;AAC/F,gGAAgG;AAChG,iFAAiF;AACjF,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,YAAY,EAAE,CAAA;AACpB,mGAAmG;AACnG,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;AAC7C,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"max.js","sourceRoot":"","sources":["../../src/bin/max.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,+FAA+F;AAC/F,gGAAgG;AAChG,iFAAiF;AACjF,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,6FAA6F;AAC7F,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,MAAM,YAAY,EAAE,CAAA;AACpB,mGAAmG;AACnG,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;AAC7C,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.45.4";
1
+ export declare const VERSION = "0.46.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "0.45.4";
1
+ export const VERSION = "0.46.0";
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/max-cli",
3
- "version": "0.45.4",
3
+ "version": "0.46.0",
4
4
  "description": "MAX Messenger bots through the official Bot API, and a personal MAX account, from the terminal — built for agents and scripts",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",
@@ -99,8 +99,8 @@
99
99
  "@modelcontextprotocol/server": "2.1.0",
100
100
  "@msgpack/msgpack": "3.1.3",
101
101
  "@valibot/to-json-schema": "1.8.0",
102
- "@wirecat/cli-core": "0.19.4",
103
- "@wirecat/cli-messaging": "0.231.0",
102
+ "@wirecat/cli-core": "0.20.0",
103
+ "@wirecat/cli-messaging": "0.242.0",
104
104
  "commander": "15.0.0",
105
105
  "lossless-json": "4.3.1",
106
106
  "ogg-opus-decoder": "1.7.5",