🍁 Осень 2026
31 октября 2026
Скиллы и команды плагина «Пачка», руководства по ботам и изменения API
Плагин «Пачка» научил агента писать коллегам по правилам Пачки и получил три команды: summarize-thread пересказывает тред и разбирает замечания из него со статусом по коду, watch-thread следит за тредом и отвечает в нём, post-changes пишет пост об изменениях. Подробнее — на страницах Скиллы и Команды плагина. В Codex плагин отдаёт агенту все инструменты Пачки.
Появились руководства Первый бот, Интерактивный бот, Разработка и запуск обработчика и страница для администратора Агенты и MCP в пространстве. Быстрый старт отправляет первое сообщение, а права для типовых задач собраны в разделе Наборы прав.
Ещё изменения:
- Новая страница Агент следит за тредом.
- Раздел Участники треда описывает, кто попадает в тред.
- Методом PUTРедактирование бота можно удалить входящий вебхук.
- В ответах GETпоиска сотрудников, GETчатов и GETсообщений появилось поле
has_next. - Входящий вебхук GitLab не отключается из-за событий, которые Пачка пропускает. Подробнее — в разделе Ответ вебхука.
- Ссылка на поток событий действует один-два часа. Подробнее — в разделе События в реальном времени.
- Голосовое сообщение отправляют только токеном сотрудника.
- POSTОткрытие представления описано с телом ответа, а GETЖурнал аудита — с полями деталей событий.
- У POSTНового сообщения два примера тела: минимальный и с кнопкой.
- Лимит обмена кода на токен считается по
client_idи при заголовкеAuthorization: Basic. - Личные переписки попадают в выгрузку по запросу владельца в поддержку. Подробнее — в гайде Экспорт сообщений.
- Напоминания в документации и скиллах называются так же, как в интерфейсе Пачки.
MCP-инструментыv1.5.0
+
pachca_update_bot удаляет входящий вебхук бота, если передать kind: null~
Инструменты напоминаний называются так же, как в интерфейсе Пачки: «Новое напоминание», «Список напоминаний» и другие, имена
pachca_*_task прежние~
pachca_send_message: голосовое сообщение отправляют токеном сотрудника, а для голосового сообщения обязателен duration_ms~
Инструменты поиска отдают
has_next, а агент заканчивает обход на has_next: false~
Агент берёт ник для упоминания из ответа инструмента, а
user_id из данных~
После отказа
insufficient_scope агент не повторяет вызов и объясняет, как получить недостающее право~
pachca_get_audit_events описывает детали событий токенов, авторизаций, ботов и вебхуков так, как их пишет API, а dlp_rule_id приходит строкой~
pachca_open_form возвращает результат, а pachca_download_export предупреждает, что через 7 дней архив удалён и выгрузку заказывают заново~
Инструменты тредов и участников описывают, кто попадает в тред: добавление в тред никого не уведомляет, упоминание в самостоятельном треде при выключенных сквозных тредах никого не добавляет, а
skip_invite_mentions у pachca_send_message гасит и уведомление~
pachca_update_message говорит, что правка никого не уведомляет, а pachca_list_message_readers помогает решить, поправить сообщение или дописать ответомMCP-плагин и скиллыv1.0.5
+
Команда
watch-thread: агент следит за тредом через CLI и отвечает в нём, пока открыта сессия, а без треда открывает его под сообщением или создаёт самостоятельный тред с коллегой. Новые сообщения приходят агенту в Markdown с именами авторов, а текст каждого стоит в теге, как в ответах MCP-сервера+
Команда
post-changes: пост о том, что сделано по задаче или в сессии, в стиле прошлых постов чата, черновиком в поле ввода. При повторном запуске агент обновляет черновик или уже отправленный пост~
Команда
thread-summary теперь называется summarize-thread, как watch-thread: действие, потом тред. Она принимает несколько тредов сразу, пересказывает только новое за названный период и отвечает на заданный вопрос, например «ответили ли мне», а замечания из треда разбирает по пунктам со статусом по коду~
Описания скиллов и команд начинаются по-русски, а у команд появились русские и английские фразы запросов
~
Скиллы называют задачи напоминаниями, как интерфейс Пачки
~
pachca-search и pachca-api: обход результатов поиска заканчивается на has_next: false, как у списочных методов~
В Codex плагин ставится по своему манифесту Codex, без предела на размер описаний инструментов, и агенту доступны все инструменты Пачки, включая отправку сообщений
~
pachca: по списку инструментов, оборванному на середине алфавита, агент понимает, что его обрезала программа, и говорит, как вернуть инструменты. Прежде чем сказать, что инструмента нет, агент ищет его по точному имени, потому что Codex прячет инструменты MCP за поиском, когда у всех серверов вместе их больше 100, а в VS Code раскрывает свёрнутую группу инструментов~
pachca-search разбирает ссылки вида chats/<id>?thread_message_id=…: число в пути — чат, а тред агент берёт из параметров ссылки~
pachca-messaging: ник для упоминания берётся из ответа инструмента, а user_id из данных, потому что ник, составленный из имени, никого не упоминает~
pachca: вход в Codex через браузер работает с версии 0.148.0, а после отказа insufficient_scope агент советует войти заново, не сужая права~
pachca-ai-agent: длинный ответ карточкой .md отправляется с обязательным file_type, а файл из stdin загружается с --name~
pachca-bots: ссылку на поток событий меняют до expires_at, потому что в этот момент сервер закрывает подключение~
pachca-admin: правило DLP в режиме BLOCK пишет в журнал аудита только message_updated, а срок хранения журнала агент не обещает~
pachca-api: справочник CLI описывает pachca doctor, null в полях и загрузку файла с --name~
pachca-messaging: подходы к переписке с коллегами с выбором по умолчанию и приоритетом указаний сотрудника, «отправь» и «спроси у…» отправляют сразу, «подготовь» кладёт черновик в поле ввода нужного чата, свою правку агент делает по тому, прочитали ли сообщение, ошибку в своём сообщении, на которую указал сотрудник, исправляет сразу, без вопроса, а участников самостоятельного треда добавляет pachca_add_members−
Команды
catch-up, digest, announce и tasks-from убраны: сводку пропущенного, дайджест, объявление и напоминания по итогам обсуждения агент делает по обычной просьбе со скиллами pachca-search и pachca-messagingn8nv2.2.3
+
Bot: в операции Update у поля Kind есть значение None, которое удаляет входящий вебхук бота+
Draft: в операции Update переключатель Clear Parent Message ID отправляет parent_message_id: null и снимает ответ на сообщение+
Bot: в операции Update текст null в поле OAuth Client выключает авторизацию от имени сотрудника~
File: в операции Create есть поля загрузки File Source, File URL, Input Binary Field и Additional Fields с File Name и Content Type, так что файл загружается по ссылке или из бинарных данных любого поля~
Bot: в операции Update поле Webhook URL необязательное. Пустое поле оставляет прежний адрес исходящего вебхука, поэтому бота можно переименовать или удалить у него входящий вебхук, не задавая исходящий.~
С
Simplify операция Bot > Get Many Tokens оставляет id, name, scopes, created_at и last_used_at, Bot > Get Many Events — id, event_type, payload и created_at, а Group Tag > Get Many Users — поля сотрудника~
Pachca Trigger: события видеозвонков называются Video Call Started, Video Call Finished и Video Call Recording Ready, значения событий прежние~
Pachca Trigger: подсказки ручного и автоматического режима напоминают отметить события на вкладке «Исходящий вебхук» бота и для New Message выбрать «Любые сообщения» или перечислить команды~
Pachca Trigger: в автоматическом режиме узел определяет тип токена методом GET /profile и токену без права profile:read с пустым Bot ID отвечает ошибкой, которая называет это право и подсказывает, как добавить его токену бота~
Pachca Trigger: при пустом Bot ID другой сбой метода GET /profile возвращает исходную ошибку, а ответ 403 метода PUT /bots/{id} после отказа в profile:read подсказывает добавить это право токену бота и очистить Bot ID~
Pachca Trigger: подсказка автоматического режима перечисляет права токена бота — profile:read и bot_self:webhook:write~
Подсказка поля
Webhook Signing Secret в учётных данных говорит, где взять Signing secret~
Form: операция Open возвращает ответ API { "success": true }~
Описания полей следуют API: правило команд бота, правило упоминаний в тексте сообщения,
Kind, duration_ms и file_type у файлов сообщения и черновика, OAuth Client и Promo у Bot > Create и Update, List Tags у User > Update, поля напоминаний, добавление участников в тред и Skip Invite Mentions~
Значение
null можно отправить в любое поле, которое его принимает: значением None у поля с вариантами, текстом null в JSON-поле и переключателем Clear рядом с числовым полем операции Update~
Ресурс
/tasks называется Reminder, как напоминания в Пачке, а его действия — Create a reminder и так далее. Значение ресурса task прежнее, поэтому сохранённые сценарии работают.~
Custom Property: тип сущности Task показан как Reminder, значение прежнееCLIv2026.10.4
+
pachca upload принимает флаг --name: он задаёт имя файла, которым заканчивается key, так что данные из stdin загружаются с расширением и уходят в сообщение под этим именем~
pachca doctor проверяет тот же токен, что и остальные команды, в том же порядке: --token, --profile, PACHCA_TOKEN, PACHCA_PROFILE, активный профиль, поэтому с одной переменной PACHCA_TOKEN команда проходит в CI без конфига~
pachca doctor при ошибке хотя бы одной проверки завершается с кодом 1 в любом формате вывода, в том числе с -o json~
pachca doctor без файла конфига показывает путь, по которому его ищет~
Слово
null во флаге поля, которое принимает null, уходит в API как JSON null: pachca bots update --kind null удаляет входящий вебхук бота, а pachca drafts update --parent-message-id null снимает ответ с черновика~
Пример в справке
pachca auth login и подсказка при --token - без потока ввода передают токен из буфера обмена: pbpaste | pachca auth login --token -~
Отказ
403 с role_forbidden в терминале объясняется словами: право у токена есть, но действие не разрешает роль, поэтому новый вход или токен не помогут. Вывод с -o json прежний.~
Объяснение отказа
insufficient_scope в терминале зависит от источника токена: с --token или PACHCA_TOKEN команда предлагает pachca oauth token-info -o json, а если право есть в сохранённом списке профиля, советует обновить его через pachca auth status --remote~
Когда вход через браузер завершён или отозван, сообщение и подсказка
pachca auth login называют профиль, с которым шла команда~
pachca views open выводит ответ API { "success": true }~
Справка команд следует обновлённым описаниям API: удаление входящего вебхука, правило совпадения команд бота, правило упоминаний в тексте сообщения,
duration_ms и file_type у файлов, срок ссылки на поток событий, напоминания вместо задач, поле scopes у bot_token_updated и другие поля деталей журнала аудита, значения настройки бота у restricted_bot_tag_denied в подсказке --list-tags, добавление участников в тред, создание треда, --skip-invite-mentions, правка без уведомления и список прочитавших~
Команды поиска с
--all останавливаются по has_next и показывают в терминале, сколько результатов загружено из общего числа найденных~
Справка
pachca api … --docs и схема --spec методов поиска показывают поле has_next в meta.paginate−
Справка
pachca api … --docs и схема --spec показывают dlp_rule_id в деталях события dlp_violation_detected строкой, как его отдаёт API−
pachca upload отклоняет файл, которого нет на диске, до запроса подписи−
--dry-run показывает запрос без входа и без PACHCA_TOKEN, а токен в заголовке Authorization заменён маской−
pachca files direct-url --dry-run показывает запрос без заголовка Authorization, как он и уходит в хранилище−
pachca auth login с --quiet печатает адрес и код подтверждения при входе через браузер, а флаг убирает только строку ожидания и отчёт о входе−
pachca messages, drafts и tasks (create, update) берут текст из потока ввода, только когда поток не пуст, а с пустым потоком, как у скрипта или агента, отправляют поля из флагов−
Эквивалентная команда в справке
pachca api … --describe повторяет пример запроса из спецификации и работает при копировании−
Пример
pachca api POST /messages в --help передаёт message[entity_id] в кавычках и работает при копировании, а описание pachca api и ошибка --describe для неизвестного пути говорят «метод»−
Справка
pachca api GET /audit_events --docs и схема --spec описывают scopes в деталях бота журнала аудита так, как его писал API до 7 октября 2026 года: список прав у bot_token_created и объект с previous и new у bot_token_updatedSDK-библиотекиv1.8.0
+
Go: у моделей запроса с полями, которые принимают
null, есть поле NullFields: поле, названное в нём по имени в Go, уходит со значением null, например Kind в BotUpdateRequestWebhook удаляет входящий вебхук+
В деталях событий журнала аудита для токенов, авторизаций, входа в CLI, ботов и их настроек описаны поля, которые пишет API, например
access_token_id, access_token_preview, application_id, webhook_id и bot_name, а смену названия токена бота описывает модель AuditDetailsTokenNameChange+
Kotlin, Python, C# и Swift: у моделей запроса с полями, которые принимают
null, есть поле nullFields (в Python null_fields, в C# NullFields). Поле, названное в нём по имени в языке SDK, уходит со значением null: например, kind в BotUpdateRequestWebhook удаляет входящий вебхук, а oauthClient в BotUpdateRequest выключает у бота авторизацию от имени сотрудника. Незаданное поле в запрос не попадает, а неизвестное имя даёт ошибку до отправки запроса.+
Поле
scopes в деталях события bot_token_updated (AuditDetailsBotTokenUpdated) и модель AuditDetailsTokenScopesChange с полями previous и new: права токена до и после изменения, когда права передали в запросе+
В
meta.paginate ответов поиска есть has_next (SearchPaginationMeta), и методы *All() поиска останавливаются по нему, без лишнего запроса за пустой страницей~
Поле
dlp_rule_id в деталях события dlp_violation_detected (AuditDetailsDlp) стало строкой, как его отдаёт API, например pasport-rf~
Python: пакет работает на Python 3.10 и новее
~
Swift: пакет ставится через Swift Package Manager по адресу репозитория
https://github.com/pachca/openapi~
Kotlin: библиотека собрана под Java 11 и работает на Java 11 и новее, координаты на JitPack —
com.github.pachca:openapi:1.8.0~
Go: в запрос
UpdateBot и UpdateDraft попадают только поля, которые вы задали, в том числе oauth_client и webhook.kind у бота и parent_message_id и schedule у черновика~
Метод
openView возвращает OpenViewResult с полем success, как отвечает API, а в Go его сигнатура — OpenView(ctx, request) (*OpenViewResult, error)~
Поле
kind в запросе редактирования бота принимает null, а client_id в деталях oauth_authorization_granted может прийти null в записях до 7 октября 2026 года~
Kotlin, C#, Go, Python и Swift: SDK перебирает варианты деталей события журнала аудита от лучше всего совпавшего по ключам и берёт первый, который разобрался, поэтому запись прежнего формата разбирается вместе с остальной страницей
GET /audit_events~
Kotlin: поля деталей журнала аудита и событий вебхуков, которые API отдаёт со значением
null, объявлены nullable, например tokenName, actionMessage, actorId и callbackId~
Kotlin:
kotlinx-serialization-json, kotlinx-coroutines-core и ktor-client-core приходят в проект вместе с SDK, потому что их типы JsonElement, Flow и HttpClient есть в API SDK~
Kotlin: при
429 без заголовка Retry-After паузы между попытками 1, 2 и 4 с, как в остальных SDK, а при 5xx и сетевой ошибке у GET, PUT и DELETE — 10, 20 и 40 с~
TypeScript: поле
errors у ApiError обязательное, при ответе без тела это пустой массив~
Python: из зависимостей пакета убраны
attrs и python-dateutil, SDK их не использует~
Примеры вызовов методов строятся по примеру тела из спецификации, в TypeScript вызывают методы с
await, а в Go записаны с пакетом pachca~
README пакетов показывают рабочую загрузку файла, обработку ошибок и правило разворачивания тела, а примеры загрузки на Go и C# используют сервис
Files~
Комментарии в коде следуют обновлённым описаниям API: срок ссылки на поток событий, скачивание выгрузки после 7 дней, правило команд бота, правило упоминаний в тексте сообщения,
duration_ms и file_type у файлов~
Python: вариант деталей журнала аудита выбирается с учётом типов полей, поэтому запись со списком
scopes разбирается в AuditDetailsToken, а запись bot_token_updated с объектом scopes — в AuditDetailsBotTokenUpdated~
Комментарии в коде называют сущность
/tasks напоминанием, как интерфейс Пачки, а комментарий к полю list_tags в запросе редактирования сотрудника называет значения настройки «Кто может добавлять бота в чаты», при которых приходит restricted_bot_tag_denied~
В
examples.json у метода createMessage есть поле examples с кодом для каждого именованного примера тела, в том числе для сообщения с кнопкой~
Поле
scopes в деталях бота журнала аудита (AuditDetailsBot) принимает оба вида, которые API писал до 7 октября 2026 года: список прав у bot_token_created и объект AuditDetailsTokenScopesChange с полями previous и new у bot_token_updated. Запись bot_token_updated прежнего формата разбирается в AuditDetailsBot вместе с изменением прав. Тип поля в TypeScript и Python — объединение string[] | AuditDetailsTokenScopesChange, в Go, C#, Kotlin и Swift — AuditDetailsBotScopesValue с вариантом на каждый вид.~
C# и Go: при разборе деталей журнала аудита вариант пропускается, если в записи нет его обязательного поля, в том числе во вложенной модели, как в Kotlin, Python и Swift. Например, запись с
scopes: {} не попадает в AuditDetailsBot, а запись с device без platform не попадает в AuditDetailsLoginGrantApproved.~
Python: при выборе варианта деталей журнала аудита типы значений проверяются и во вложенных моделях, например у
scopes.previous и scopes.newSDK-генераторv1.4.0
+
Kotlin, Python, C# и Swift: модели запроса с необязательными полями, которые принимают
null, получают поле nullFields (в Python null_fields, в C# NullFields), как NullFields в Go. Названное в нём поле уходит со значением null, а неизвестное имя даёт ошибку до отправки запроса.+
С флагом
--examples запись метода в examples.json хранит в поле examples код вызова для каждого именованного примера тела запроса по ключу примера, а usage самой записи соответствует первому примеру+
Поле, заданное как
anyOf или oneOf из значений разных видов JSON, среди которых есть $ref, типизировано во всех языках: в TypeScript и Python это объединение типов, в Go и C# — тип со свойством на каждый вариант, в Kotlin — sealed-интерфейс, в Swift — enum. Вариант выбирается по виду значения JSON.~
Python: сгенерированный клиент работает на Python 3.10, где нет
enum.StrEnum, а datetime.fromisoformat не принимает время с суффиксом Z~
Go: необязательное поле тела запроса попадает в запрос, только когда задано, в том числе поле, которое принимает
null, а явный null отправляет поле NullFields модели запроса~
Kotlin, C#, Go, Python и Swift: объединение без дискриминатора перебирает варианты от лучше всего совпавшего по ключам и берёт первый, который разобрался, а ошибку возвращает, только когда не разобрался ни один
~
Kotlin: обязательное поле варианта объединения, которое принимает
null, объявлено nullable, как в обычных моделях~
Kotlin: при
429 без заголовка Retry-After клиент ждёт 1, 2 и 4 с, при 5xx и сетевой ошибке — 10, 20 и 40 с~
TypeScript: поле
errors у ApiError обязательное, это пустой массив, если в теле ответа нет ошибок~
Пример вызова метода с телом строится по примеру тела из спецификации, первому из
examples или example: в нём заданные там поля и обязательные поля модели, а у объединения один подходящий вариант~
Примеры TypeScript вызывают методы с
await, примеры Go записаны с пакетом pachca, датами через time.Date и вариантами объединений, примеры Kotlin экранируют $ в строках, а примеры Swift оборачивают вариант объединения в случай enum~
C#: примеры записывают полностью типы SDK, которые совпадают по имени с типами из неявных
using .NET, например Pachca.Sdk.TaskStatus~
Python: при переборе вариантов объединения без дискриминатора вариант, у которого тип поля не совпадает со значением, например объект вместо списка или строка вместо числа, пропускается, как в Kotlin, C#, Go и Swift
~
Swift: тело запроса кодирует
JSONEncoder без последующего вырезания null, поэтому незаданное поле в тело не попадает, а null внутри значения произвольной формы уходит как есть~
C# и Go: объединение без дискриминатора пропускает вариант, в записи которого нет ключа обязательного поля, как Kotlin, Python и Swift. Ключи проверяются и во вложенных моделях, в списках моделей и в полях, которые принимают список или объект, а модель, которую разбирают отдельно, обязательные ключи не проверяет.
~
Python: при переборе вариантов объединения без дискриминатора типы значений проверяются и во вложенных моделях и списках моделей варианта
~
Go: клиент импортирует
time, только когда пользуется им, а методы *All берут has_next и next_page из модели пагинации спецификации, поэтому клиент для спецификации без полей даты и с другой пагинацией компилируется~
Методы
*All() останавливаются по meta.paginate.has_next, если это поле есть в модели ответа, а без него — на пустой странице