Bitrix24
История изменений
История выпусков CLI Битрикс24: новые возможности, изменения и исправления.
Заметные изменения в @wirecat/bitrix24-cli. По одному разделу на версию, новые сверху.
0.14.0 — 12.11.2026
Добавлено
b24 guideпоказывает сценарии для частых задач: команды по порядку и зачем каждая.first-sync(первая синхронизация и доска воронки),keep-in-sync(таймер и поиск) иsafe-agent-writes(агент через MCP, чьи записи остаются под вашим контролем).b24 guide <name> --jsonвыдает один сценарий как данные.- Страницы MCP и Разрешения. Как подключить
b24к агенту, что агент видит и чего ему никогда не предлагают. Каждый уровень, встроенные уровни, ключи, которые проверяет одна команда, и проверки, которые не снимает ни один уровень. - Вход через локальное приложение.
b24 <profile> session start --portal <host> --client-id <id>входит через локальное приложение, которое вы создаете на портале, в браузере и действует с правами сотрудника, который вошел. Ключ приложения спрашивается скрытым вводом или читается из stdin илиB24_BITRIX24_CLIENT_SECRET. Вход возвращается черезhttps://wirecat.dev/webhooks/apps/b24-callbackили через адрес, который вы вставите. Токены обновляются сами.session statusиsession listпоказывают способ входа, аsession endзабывает любой из них. Входящий вебхук остается быстрым способом, см. вход.
Исправлено
- Быстрый старт копирует сделки. В README
теперь до первого
syncвыбирается, чьи сделки и лиды копировать, а до этого он ничего не копирует. README больше не говорит, что администратор копирует всю CRM, говорит, что через MCP удаление с уровнемaskвыполняется, и называетwcat-b24на случай, если первой находится командаb24из другого пакета. В устранении неполадок есть ошибка "no CRM user is chosen". - Через MCP
askне останавливает запись. README, безопасность и первый экран советовали ставитьdeals.moveнаaskпротив роботов портала. Но так перемещение останавливается только в терминале: через MCP отвечать некому, и запись проходит. Теперь там сказано ставитьreadonlyилиdenyили включить подтверждение в клиенте агента. - Навык агента покрывает то, что агенту нужно. В
b24 skill showтеперь есть коды выхода и причины ошибок, MCP и ловушка сask, первая настройка от вебхука до первой синхронизации, границы записи и подводные камни. - В примерах везде профиль
workвместоpersonal. b24 commandsпоказывает CRM по разделам. Сделки, лиды, контакты и компании разделены на Read и Write, воронки, стадии, поля, товары, пользователи иapiстоят в Read,syncв Automate, аsessionв Set up. Раньше большая частьb24была в Other.- Два локальных файла состояния пишутся атомарно и остаются закрытыми. Список ваших собственных компаний и дневной счетчик показанных чужих клиентов теперь пишутся через временный файл и переименование, как и файл настроек.
- Ежедневный
syncбольше не читает всех клиентов заново. Раунд изменений читал каждый контакт и каждую компанию из сделок и лидов выбранных пользователей, даже если ничего не менялось. На портале с 50 000 сделок это было около 300 запросов и почти три минуты на синхронизацию без новых данных. Теперь он читает только клиентов изменившихся сделок и лидов, а сделки пользователей для их клиентов получает один раз за синхронизацию, а не отдельно для контактов и для компаний.
0.13.0 — 11.11.2026
Изменено — может сломать вызовы
- Удаляет и очищает в CRM только вебхук администратора Битрикс24. Для любого другого вебхука
b24отклоняетdeals delete,leads delete,api callк методу, который удаляет (его имя заканчивается на.delete,.deletefieldvalueили.markdeleted), обновление или.set, которое делает поле пустым (пустое значение,null,[], связь с компанией, контактом или лидом0, телефон или e-mail с пометкойDELETE: Y), а такжеbatch. Отказ приходит какpermission_errorс причинойemployee.delete,employee.clearилиemployee.batch, и ни один уровень разрешений его не снимает. При создании поля по-прежнему можно оставить пустыми. - Отвязывает записи и объединяет дубли только вебхук администратора Битрикс24. Для любого другого вебхука
api callотклоняет метод, имя которого заканчивается на.unbind, напримерcrm.timeline.bindings.unbind, с причинойemployee.unbind, и объединение дублейcrm.entity.mergeBatch, которое удаляет все записи, кроме одной, с причинойemployee.merge. Как и для удалений, ни один уровень разрешений этого не снимает.crm.deal.contact.deleteиcrm.deal.contact.items.deleteи раньше считались удалениями. - Аккаунт портала хранится как рабочий. Первый
sync, запись или чтение в профиле сохраняет аккаунт нового портала с областьюwork, поэтому рабочие представления и подготовка к встречам читают его копию, а личные чтения ее пропускают. Портал, который уже есть в хранилище, сохраняет свою область, а во всех хранилищах до сих пор этоpersonal. Переключите ее один раз командойmemo groups update bitrix24:<portal> --scope work(memo 0.131.81 или новее). Синхронизация никогда не меняет область обратно.
0.12.0 — 10.11.2026
Добавлено
store applyубирает из копии, сделанной приscope mine, контакты, которые не названы ни в одной сделке или лиде выбранных пользователей и не относятся ни к одной оставленной компании, а также людей, которые после этого остаются пустыми. Без--yesкоманда только считает. Синхронизация, которая сужает копию, илиsync --rescanделают это сами, и в их ответе количество приходит какcontacts_removed.- Основан на cli-core 0.631.0 (было 0.630.0). При первом открытии хранилище переходит на версию 64: сохранение или удаление связи сделки с человеком больше не читает все такие связи. Что изменилось, описано в истории изменений cli-core.
Изменено — может сломать вызовы
- Синхронизация копирует только сделки и лиды пользователей, которых владелец выбрал в
crm.bitrix24:<portal>.unassigned, и их клиентов. По умолчанию не выбран никто, даже пользователь самого вебхука. Пока владелец не выберет, синхронизация отклоняется (configuration_error, причинаbitrix.scope-users-unchosen) и называетconfig set, который нужно выполнить. Обратите внимание, что существующая копия упадет при следующей синхронизации, пока владелец не выберет пользователей. - Ни одна синхронизация больше не копирует всю CRM, даже у администратора. Синхронизация при сохраненном
scope allотклоняется (причинаbitrix.scope-all-refused, былоbitrix.scope-all-admin-only) и предлагает поставитьmine. После этого сделки и лиды невыбранных пользователей помечаются удаленными в локальной копии. Любого другого клиента можно найти на портале напрямую черезpeople listилиorganizations list. - Вебхук сотрудника может выбрать себя, уволенного пользователя или не сотрудника, а вебхук администратора кого угодно.
Исправлено
- Имя контакта больше не несет
nullилиnull #<id>, которые импорт в портал оставил в полях имени ("Ярослав Орлов null #907" теперь "Ярослав Орлов"). На одном живом портале так было у 101 876 из 114 165 контактов. Обратите внимание, что имя, сохраненное раньше, сохраняет этот хвост, пока контакт не синхронизируется снова. - Основан на cli-core 0.630.0 (было 0.623.0). При первом открытии хранилище переходит на версию 63. Контакт CRM больше не присоединяется к вашему собственному человеку и не переименовывает его, а два контакта с общим ящиком или телефоном компании остаются двумя людьми. Что изменилось за это время, описано в истории изменений cli-core.
0.11.0 — 10.11.2026
Изменено — может сломать вызовы
- При
scope mineсинхронизация копирует только клиентов пользователя: контакты и компании, назначенные ему или пользователю из списка ничьих, и те, что названы в копируемых сделках и лидах. Раньше она копировала всю базу контактов и компаний портала, 114 165 контактов на одном живом портале, где у пользователя не было ни одной сделки. Ежедневный проход по удалениям тоже перечисляет только эти id. Обратите внимание, что копия, в которой уже есть вся база, сохраняет свои контакты, а компании ждутsync --rescan. - Синхронизировать при
scope allможет только администратор Битрикс24. Руководителю отдела отказывают так же, как сотруднику (bitrix.scope-all-admin-only, былоbitrix.scope-all-manager-only). - Все, кроме администратора Битрикс24, видят телефоны и e-mail только своих клиентов.
people listиorganizations listне показывают их у остальных, аpeople showиorganizations showдля одной записи показывают, но не больше 100 таких контактов и компаний в день на пользователя и его агентов вместе.api callотклоняет чтение контактов и компаний (crm.contact.*,crm.company.*,crm.item.*типа 3 или 4, реквизиты, адреса, поиск дублей) для всех, кроме администратора, что бы ни говорили разрешения. - Назвать работающего сотрудника в
crm.bitrix24:<portal>.unassignedможет только администратор Битрикс24. Руководитель отдела, как и все остальные, может назвать только уволенных пользователей и не сотрудников. - Основан на cli-core 0.623.0 (было 0.621.0). При первом открытии хранилище переходит на версию 61 (связи между людьми, только добавления). Что изменилось за это время, описано в истории изменений cli-core.
0.10.0 — 09.11.2026
Добавлено
session startиsession status --checkотвечают рядом сadmin,managerли пользователь вебхука, то есть администратор Битрикс24 или руководитель отдела.
Изменено — может сломать вызовы
- Все сделки и лиды копирует только руководитель: синхронизация при
crm.bitrix24:<portal>.scope allотклоняется (configuration_error), если пользователь вебхука не администратор Битрикс24 и не руководитель отдела. Это проверяется при каждой синхронизации. Все остальные копируют свои сделки и лиды и ничьи, а отказ советует поставитьscopeвmine. Обратите внимание, что без областиdepartmentу вебхука руководитель отдела считается сотрудником. - Для всех, кроме руководителя,
crm.bitrix24:<portal>.unassignedучитывает только пользователей, которых портал показывает уволенными или не сотрудниками (экстранет, e-mail, бот), и это проверяется при каждой синхронизации. Работающий сотрудник в списке пропускается с причиной вissuesсинхронизации (crm.unassigned-dropped), а его сделки и лиды уходят из локальной копии. Руководитель по-прежнему может указать кого угодно. Обратите внимание, что без областиuserу вебхука для сотрудника ничьим не считается никто.
0.9.0 — 09.11.2026
Добавлено
syncхранит в локальном хранилище, кто есть кто. Контакт состоит в каждой своей компании с рольюcontact, и рядом стоит его должность. У сделки и лида есть их контакты с отметкой главного, а ответственный за них стоит какowner. Сотрудники состоят в ваших собственных компаниях, читаются при каждой синхронизации и подчиняются руководителю своего отдела. Сконвертированный лид указывает на свою сделку. Эти связи остаютсяreported, пока вы их не подтвердите, завершаются, а не удаляются, когда портал перестает о них говорить, и никогда не меняют связь, которую создали вы. Обратите внимание, что вебхуку нужны областиuser_basicиdepartmentдля e-mail сотрудников и подчинения. Без них синхронизация читает все остальное.scheduleставит таймер, который сам запускаетsyncили другую командуb24. MCP ее не предлагает.- По умолчанию синхронизация копирует только сделки и лиды собственного пользователя вебхука и пользователей из
crm.bitrix24:<portal>.unassigned. Битрикс24 всегда называет ответственного, поэтому так сделки из формы на сайте или из интеграции считаются ничьими.config set crm.bitrix24:<portal>.scope allкопирует все. В ответе синхронизации естьscope(с пользователем вебхука какself) иout_of_scopeдля каждого вида записей: сделка, переданная другому пользователю, уходит из локальной копии при следующей синхронизации. Контакты и компании, как и раньше, копируются целиком. - Если настройки
scopeнет, первыйmine, который пометил бы удаленными больше половины сохраненных сделок или лидов, оставляет их (crm.narrowing-held), пока владелец не задастscope. Агент не может задатьscope,selfилиunassigned. - Копия одного портала принадлежит одному пользователю. Синхронизация через вебхук другого пользователя, чем при
первой синхронизации, отклоняется до
config unset crm.bitrix24:<portal>.self.
Изменено — может сломать вызовы
- В
peopleсделки и лида теперь есть ответственный сотрудник с рольюownerрядом с ее контактами. Обратите внимание на код, который считал каждую запись вpeopleконтактом клиента. store statusсчитает ваши собственные компании среди организаций, а сотрудников портала среди людей.api call department.getиcrm.mycompany.basic.listвыполняются без вопроса, как и другие чтения, которые делаетb24.department.getотклоняется приusers.list: deny, аcrm.mycompany.*приorganizations.list: deny.- Вебхук, созданный только с областями
crmиuser, теперь получает запись вissuesпри каждой синхронизации: Битрикс24 не отдает ему отделы. Добавьте областьdepartmentили будьте готовы к этой записи. - Первая синхронизация после обновления помечает удаленными в локальной копии сделки и лиды других пользователей.
Они пропадают из списков и поиска, а их прежняя копия остается в файле хранилища. Чтобы сохранить их, задайте
crm.bitrix24:<portal>.scope allдо нее. - Ответ списка без элементов теперь проваливает синхронизацию этого вида записей (
invalid_response), а не заканчивает на нем список.
Исправлено
api show department.getиapi callназывали область методаbasic, а у Битрикс24 этоdepartment.- Метод, который Битрикс24 разрешает вызывать только установленному приложению (
WRONG_AUTH_TYPE), отклоняется какpermission_errorс причинойwebhook.app-only. Раньшеb24говорил, что вебхук отклонен, и просил войти снова, а это не поможет. Обратите внимание на скрипты, которые ветвились поauthentication_errorдля этого отказа. createиupdateдляpeopleиorganizationsобъявляют свои ответы (crm_record_created,crm_record_updated), поэтому--jsonпринимает их поля, аcommands infoих перечисляет.session startи устранение неполадок называют те же области вебхука, что и README:crm,user_basicиdepartment. Устранение неполадок еще просилоcatalog, которыйb24не использует.api show,api listи отказ при вызове называли областьbasicдля каждого метода вне пяти префиксов имен, напримерim.message.addиtasks.task.add. Теперь они называют область из справочника Битрикс24 (im,task,calendar) илиunknown, а отказ для неизвестной области не называет никакой.
Безопасность
b24отправляет запросы только на портал из адреса вашего вебхука и отклоняет любой другой хост до того, как с машины уйдет хоть один байт. Его манифест говорит об этом (network), поэтому WireCat Desktop показывает, куда уходят данные.
0.8.0 — 08.11.2026
Добавлено
- Пакет поставляет
contracts/wirecat.json, поэтому WireCat Desktop до установки может прочитать, что делаетb24, как войти и что копируетsync.b24 --wcat-describeтеперь отвечает в формате 2: раздел Desktop из этого файла и его SHA-256.
Исправлено
- Первая синхронизация большого портала занимает гораздо меньше памяти и идет на треть быстрее: на синтетических данных с 20 000 сделок пик падает с 3,7 ГБ до 0,55 ГБ.
session startснова спрашивает вебхук, если ничего не пришло. Пустой Enter в скрытом вводе, например после Ctrl+V, который ничего не вставил в терминале Linux, сразу заканчивался ошибкой "no webhook address was given". Теперь команда подсказывает вставить через Ctrl+Shift+V (Cmd+V на macOS) и спрашивает снова, до трех раз.- Сбой при запуске
b24или в ожидаемом шаге завершается с кодом 1 и ошибкой сбоя b24 (command.crashedв JSON, когда stdout не терминал). Раньше печатался сырой стек Node.
0.7.0 — 08.11.2026
Добавлено
- Пакет ставит команду еще и как
wcat-b24, поэтомуwcat b24ее запускает, аwcat --helpпоказывает в списке.b24 --wcat-describeпечатает, что это за инструмент, его версию и страницу документации. config set owner_languagesзадает языки, на которых читает владелец.
Изменено — может сломать вызовы
- Поиск без единой буквы или цифры отклоняется (
validation_error)."", одинокий?или один эмодзи ничего не находили и ничего не сообщали. Одинокий*по-прежнему читается как подстановочный знак.
Исправлено
- Первая синхронизация большого портала идет примерно вдвое быстрее. Она больше не замедляется с каждой сохраненной сделкой: на синтетических данных с 10 ответственными за сделки 20 000 сделок, 10 000 лидов и 20 000 контактов синхронизируются за 30 с вместо 61 с.
0.6.0 — 08.11.2026
Добавлено
people list --format csvиorganizations list --format csvпечатают страницу как таблицу CSV для электронной таблицы, как теперь иdeals listсleads list. В stdout идет только таблица; путь к следующей странице идет в stderr. Столбцы — собственные поля записи, затем каждое пользовательское поле портала по его названию: денежное поле как<label> amountи<label> currency, а два поля с одним названием различаются по коду.--json=a,bрядом выбирает столбцы, пользовательское поле — какprovider_metadata.<code>. Ячейка, с которой электронная таблица начала бы формулу, получает в начале'.--jsonl,--jsonбез полей и--compactотклоняются сoutput.conflict, а агентам этот параметр не дается.pipelines show— доска воронки продаж: для каждой стадии ее сделки или лиды и их сумма в каждой валюте, а в терминале — таблица стадий с суммой открытых, числом выигранных и проигранных и долей выигранных. Воронку можно не называть, если на портале она одна.
Изменено — может сломать вызовы
- Пользовательское поле, которого на портале нет, названное в запросе списка или в
--json, отклоняется сparam--queryили--json, а не--field. - Команда для профиля без вебхука отклоняется с причиной
session.missing, а неwebhook.missing: это единый ответ «не выполнен вход», который дает каждый инструмент WireCat с API-токеном. Вебхук читается и хранится там же, где раньше:B24_TOKEN, затем записьtoken:<profile>в связке ключей подbitrix24-cli, затем закрытый файл; теперь это делает общее хранилище токенов cli-core.
0.5.0 — 07.11.2026
Добавлено
syncкопирует воронки, компании, контакты, сделки и лиды портала в локальное хранилище WireCat: то, что изменилось с прошлой синхронизации, или все с--rescan; раз в день он также находит, что портал удалил.store statusпоказывает, насколько продвинулся каждый вид. Синхронизация останавливается до своего срока или--max-pages, а следующая продолжает с этого места.deals close <ref> won|lostиleads close, на первую стадию успеха или провала воронки записи, а такжеdeals deleteиleads delete, которые сначала спрашивают.deals createиupdateпринимают--pipeline,--stage,--amountс--currency,--close-dateи--owner; лиды принимают то же, кроме--close-date. Стадия проверяет ключ перемещения, а стадия успеха или провала — еще и ключ закрытия.search allнаходит сохраненные сделки и лиды рядом с сообщениями, заметками и событиями других инструментов WireCat. Приdeals.list: denyон не берет сделки и называет их вmissingи в stderr, и так же для лидов; если запрещены все виды, о которых его спросили, он отклоняется (search.all-denied).b24 --helpиb24без аргументов начинаются с того, для чего нуженb24, что попробовать первым и с чего начать.
Изменено — может сломать вызовы
deals,leads,pipelinesиstages— общие CRM-команды cli-core, одинаковые в каждом CRM-инструменте WireCat. Их списки иshowчитают локальное хранилище, поэтому сначала запуститеsync;--offlineтеперь работает для них.- Сделка или лид называется своим ref,
deal:12илиlead:7, как его печатает список, а не id или названием в Битрикс24. - Сделка или лид отвечает
ref,pipelineиpipeline_name,stage(ее имя),status(open,wonилиlost),close_date,amountкак десятичной строкой вcurrency, обаnull, если суммы нет,assigneeкак<portal>/user/<id>, а собственными полями портала — вprovider_metadataпо коду.stage_id,pipeline_id,outcome,closes_on,assigned_toиperson_idsиз них убраны; контакты лежат вpeople, компания — вorganization. - Их запрос списка принимает
status,stage,pipelineиorganization; свободное слово, временные окна и собственные поля портала из него убраны.--allубран из этих списков. deals move <ref> <stage>принимает стадию как аргумент, а не как--stage.- У записи сделок и лидов нет
--body.--field <label or code>=<value>задает пользовательское поле по описаниям, которые сохранил последнийsync: поле-список принимает подпись или id своего варианта, поле с несколькими значениями — по одному--fieldна значение, а пустое значение его очищает. Код, который называет стандартное поле (stageId,categoryId,assignedById,STATUS_IDлида), отклоняется, как и--fieldбез ключа перед=. - Подпись пользовательского поля и подпись варианта списка сравниваются так, как cli-core сравнивает имена, для
каждого
--fieldи запроса:енаходитё, а буква, набранная двумя кодовыми точками, находит ту же букву, набранную одной.people showиorganizations showтак же сравнивают имя с совпадениями портала. Подпись, которая совпадала с одним полем, теперь может совпасть с двумя, и тогда она отклоняется с обоими. fields list <deals|leads|people|organizations>теперь из cli-core: он читает описания, которые сохранилsync, поэтому сначала запуститеsync, и каждое поле называет свои частиuntrusted.api.crm.deal.update(и другие ключиapi.*сделок и лидов) приaskтеперь спрашивает и наdeals update,moveиclose, а не только наapi call.--dry-runзаписи сделки или лида называет каждый ключ, который она может проверить: ключapi.*, а также ключи перемещения, закрытия иcrm.assign-othersс параметром, при котором каждый из них применяется.syncчитает описания полей портала для каждого вида, по одному лишнему запросу на вид, поэтому--max-pagesдоходит до записей позже. Вебхук без прав на их чтение все равно синхронизируется; любая другая ошибка там проваливает синхронизацию.- Лиды стоят в одной воронке с именем
Leads, потому что у лидов Битрикс24 воронок нет. deals.deleteиleads.deleteпо умолчанию равныask;api call, который задает стадию, проверяетdeals.close(илиleads.close) вместе сdeals.move.mcpиdoctor— общие команды cli-core:mcpдобавляетconfig,addиcheck, а также--profilesи--permissionуserve;doctorдобавляет--online.--bodyили методapi call, которые можно прочитать больше чем одним способом, отклоняются до отправки: тело, которое называет одно поле дважды в любом написании,entityTypeId, который не простое число,fields, который не объект, метод с любым суффиксом, кроме одного.json, и методcrm.itemбезentityTypeId. Отправляйте каждое поле один раз, в одном написании.--operation-idубран из всех записей. На живом портале создание, повторенное с тем же id, создало вторую запись, поэтому повтор никогда не безопасен: послеoutcome_unknownвыполнитеsyncиshowи повторите запись, только если ее там нет. Запись сделки или лида с--operation-idотклоняется до отправки.
Исправлено
syncпосле первого работает. Он спрашивал портал об изменениях со временем, которое портал отклоняет, поэтому каждый вид завершался ошибкой и ничего нового не копировалось. Время в фильтре теперь уходит в целых секундах со смещением, и это же исправляетupdated_at:иcreated_at:вpeople listиorganizations list.- Запись, на которую пришел ответ об ошибке сервера или шлюза (500, 502, 504), — это
outcome_unknown, а неprovider_unavailable: портал мог ее выполнить. Запись, прерванная отменой, — тожеoutcome_unknown, никогда неcancelled. - Стадии читаются страница за страницей: справочник длиннее первых 50 строк REST 2 терял свои последние стадии.
- Id или ответственный, который не является числом, отклоняется до отправки; раньше он уходил пустым.
--bodyсохраняет целые числа больше 2^53 как введены;api call --body -читает тело из stdin.- Запрос без ответа прерывается через 10 секунд, а не через 30, чтобы чтение можно было повторить до того, как истекут собственные 30 с разовой команды.
showдля людей и организаций завершается ошибкой, если подписи полей портала не получены по причине, отличной от нехватки прав, а не показывает запись без подписей.
Безопасность
- Проверки прав в
api callи в записиpeopleиorganizationsчитают тело ровно в том виде, в каком оно отправляется, поэтому проверяют тот ключ, который нужен записи. - Чтение через
api callпроверяет те же ключи, что и команды, которые читают эти записи, как уже делала его запись.
0.4.0 — 06.11.2026
Добавлено
createиupdateдля сделок, лидов, людей и организаций принимают--field "<label or code>=<value>", повторяя его для других полей или для каждого значения поля с несколькими значениями. Подпись ищется на портале; два поля с такой подписью отклоняются с их кодами. Поле-список принимает подпись или id своего варианта.--fieldважнее--bodyдля того же поля, а--title,--name,--first-nameи--last-nameважнее обоих. Остальные значения уходят на портал как введены.--dry-runимена не ищет.listдля сделок, лидов, людей и организаций фильтрует по собственным полям портала:<code or label>:<value>, для полей, по которым портал умеет фильтровать; поле-список принимает подпись или id своего варианта. Подпись с пробелами пишетсяlead_source:webилиLead\ source:web.list --json=…,provider_metadata.<code>добавляет это пользовательское поле к каждому элементу так, как его выдаетshow;--json=…,provider_metadataдобавляет все. Запрашиваются только коды, которые перечисляет портал.fields list <deals|leads|people|organizations>перечисляет пользовательские поля портала этого вида: код, подпись, тип, держит ли поле несколько значений, может ли список по нему фильтровать, а для поля-списка — его варианты с их id.
Изменено — может сломать вызовы
showвыдает значение поля-списка подписью его варианта, а не id; id переезжает вoption_idрядом. Поле с несколькими вариантами выдает и то, и другое массивами.api callработает по списку разрешенного. Чтение CRM, каталога и пользователей и запись четырех типов CRM разрешены, как и раньше. Любой другой метод спрашивает, поэтому без терминала ему нужен--yes, а семейства, которые пишут людям, публикуют или отправляют данные наружу, запрещены:imconnector,log.blogpost, публичные ссылки на файлы иevent.bindприсоединяются кim,imopenlinesи остальным.api showназывает уровень каждого метода.
Исправлено
denyв профиле снова останавливает команду чтения.b24передавал cli-core толькоresolveSettings, поэтому cli-core никогда не видел таблицу прав b24:deals.list: denyне останавливалdeals list, в том числе через MCP, а с любым ключом b24 в настройках каждый--dry-runпадал с «names no command».api.crm.<type>.addиapi.crm.<type>.updateтеперь действуют наcreate,updateиmoveуdeals,leads,peopleиorganizations, как ключи команд уже действовали наapi call.--dry-runназывает их рядом с собственным ключом команды.api call --dry-runназывает каждый ключ, который проверяет вызов, с его уровнем, напримерapi.crm.deal.deleteприask, вместо «no key, allowed».api call crm.item.add|update|deleteсentityTypeIdот 1 до 4 проверяет ключ команды лида, сделки, контакта или компании, как уже делалcrm.deal.update:deals.delete: denyтеперь останавливаетcrm.item.deleteдля сделки.- Каждый метод, имя которого заканчивается на
delete, спрашивает, а не только перечисленные. Имя метода заглавными буквами или с суффиксом.jsonчитается как его простое имя, поэтому больше не обходит ключ. - Запись, которая задает стадию, проверяет
deals.moveилиleads.move:updateиcreateсоstageIdв--body, в том числе через MCP, иapi callсоSTAGE_IDилиSTATUS_IDлида.ASSIGNED_BY_IDпроверяетcrm.assign-others, как иassignedById. - Запись отправляется один раз. Запись REST 3.0, на которую не пришел ответ, отправлялась до трех раз еще с тем же
Idempotency-Key, что на живом портале еще не проверено; теперь она сразу становитсяoutcome_unknown, и ее сообщение один раз называет--operation-id. pipeline_id:0, воронка по умолчанию, принимается вdeals listиstages list.- Список разрешенного, как и до него, оставляет отклоненным чтение запрещенных семейств:
crm.activity.list,im.*,tasks.*и остальные —deny, иapi showтак и говорит. - Сервер MCP применяет таблицу прав b24 (WC-PERM-23): команда, которую профиль запрещает, показывается в поиске инструментов как недоступная, а не предлагается как доступная.
0.3.0 — 06.11.2026
Изменено — может сломать вызовы
showдля сделок, лидов, людей и организаций выдает каждому пользовательскому полю его название на портале:provider_metadataсопоставляет коду поля{ "label", "value" }.labelравенnull, если у портала нет названия для поля или он не отвечает на запрос названий;showпри этом все равно отвечает.
0.2.0 — 06.11.2026
Исправлено
- Команды, которые обращаются к порталу, теперь выполняются внутри запуска cli-core:
meta.run_idкаждого ответа называет запуск, который находитruns show, с запросами к порталу в нем,meta.duration_msизмеряет команду, а--timeoutостанавливает зависшую команду. Переопределения прав агента MCP теперь тоже доходят до этих команд. showдля сделок, лидов, людей и организаций больше не перечисляет пользовательские поля портала без значения:provider_metadataпропускаетnull,""и[]и сам пропускается, если ничего не осталось.
0.1.0 — 06.11.2026
Исправлено
- Причина ошибки, которую определяет и более новый cli-core, больше не роняет каждую неудачную команду вместо того, чтобы напечатать ее ошибку.
Добавлено
- Создан из
@wirecat/cli-template0.14.0. - Клиент REST API Битрикс24 через входящий вебхук: REST 3.0 для сделок, лидов, контактов и компаний, REST 2 для
остального; ограничения частоты портала соблюдаются и выжидаются; запись повторяется только с
Idempotency-Key; секрет вебхука не попадает ни в одну ошибку и запись запуска. session start | status | endдля каждого профиля иsession list: адрес вебхука читается скрыто или из stdin, проверяется на портале и хранится в связке ключей подbitrix24-cli;session status --checkпоказывает, чьи права у вебхука.listиshowдляdeals,leads,people(контакты),organizations(компании),pipelines,stages(с исходом каждой стадии),productsиusers, напрямую с портала. Список принимает запрос, который становится собственным фильтром портала; свободное слово в нем совпадает с частью названия или имени. Имя, общее для двух записей, отклоняется, и обе показываются как кандидаты.createиupdateдляdeals,leads,peopleиorganizations, а такжеmoveдля сделок и лидов: каждая запись отвечает своимoperation_id, который Битрикс24 получает какIdempotency-Key, поэтому--operation-idбезопасно повторяет запись;--dry-runпоказывает ее заранее; назначение записи другому сотруднику запрещено, пока его не разрешат (crm.assign-others).api list,api show <method>иapi call <method> --body <json>: любой метод Битрикс24, на той версии REST, где он находится, с проверкойapi.<method>и ключа команды, которая делает то же самое; запись сообщений, автоматизации, задач иbatchзапрещена, пока ее не разрешат.