PHPackages                             mb4it/bitrix-console - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. mb4it/bitrix-console

ActiveLibrary[CLI &amp; Console](/categories/cli)

mb4it/bitrix-console
====================

Artisan-like console for 1C-Bitrix with an AI-agent layer (MB\\Bitrix\\Console). Standalone — depends only on symfony/console + Bitrix core.

0.1.2(1mo ago)011MITPHPPHP ^8.2

Since Jul 8Pushed 1mo agoCompare

[ Source](https://github.com/Dictator90/mb-bitrix-console)[ Packagist](https://packagist.org/packages/mb4it/bitrix-console)[ RSS](/packages/mb4it-bitrix-console/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (2)Versions (4)Used By (1)

mb4it/bitrix-console
====================

[](#mb4itbitrix-console)

Консоль в стиле artisan для 1С-Битрикс поверх `symfony/console` — с **агент-слоем**для ИИ: любая команда умеет отдавать машиночитаемый JSON-конверт, самоописываться (`manifest`/`describe`), работать неинтерактивно и с детерминированными кодами возврата. Namespace — `MB\Bitrix\Console\`.

Пакет собирает команды из себя, из других mb4it-пакетов и из штатной консоли Битрикса (`.settings.php['console']['commands']`) в один бинарь `bx`.

Требования
----------

[](#требования)

- PHP `^8.2`
- 1С-Битрикс (ядро; модуль `main`)
- `symfony/console ^6.4|^7`, `psy/psysh ^0.12` (для `tinker`) — **единственные обязательные** зависимости

Опциональные пакеты-компаньоны (ставить не обязательно):

- `mb4it/bitrix-migration` — добавляет команды `migrate*` / `make:migration*`;
- `mb4it/bitrix-support` — тогда консоль работает на **едином** контейнере приложения (иначе — на собственном).

Быстрый старт
-------------

[](#быстрый-старт)

Пакет **самодостаточен**: обязательны только `symfony/console` + `psy/psysh` и ядро Битрикса — НЕ требует `mb4it/bitrix-support`.

```
composer require mb4it/bitrix-console
```

Пакеты-сателлиты подключаются **автоматически** через discovery: они объявляют провайдер в `composer.json → extra.mb-console.providers`, а `Console\PackageManifest`читает `vendor/composer/installed.json`. Так, `mb4it/bitrix-migration` добавляет команды `migrate*` — ручной регистрации не нужно.

Готовый бинарь появится как `vendor/bin/bx`. Всё работает сразу:

```
php vendor/bin/bx list                    # список команд
php vendor/bin/bx about                   # окружение и рантайм
php vendor/bin/bx manifest --format=json  # самоописание для ИИ-агента
php vendor/bin/bx tinker                  # REPL
```

Чтобы вызывать просто `php bx …`, поставьте точку входа в корень сайта одной командой (см. [«`bx` в корне сайта»](#bx-%D0%B2-%D0%BA%D0%BE%D1%80%D0%BD%D0%B5-%D1%81%D0%B0%D0%B9%D1%82%D0%B0)):

```
php vendor/bin/bx bx:install              # создаст ./bx в корне (DocumentRoot)
php bx list
```

`vendor/bin/bx` сам поднимает ядро Битрикса (CLI). **Контейнер один на приложение с фолбэком:** если установлен `mb4it/bitrix-support`, консоль подхватывает его общий контейнер приложения (те же сервисы, что и в вебе); если support нет — работает на собственном минимальном контейнере. Отдельного включения модулей не требуется.

Расположение `vendor` роли не играет — оно может быть в корне (`vendor/bin/bx`), в `local/vendor/bin/bx` или в vendor модуля: composer-прокси сам знает путь к своему `autoload.php`. Меняется только путь запуска (`php local/vendor/bin/bx …`).

`DOCUMENT_ROOT` ищется **независимо от vendor**: из переменной окружения `BITRIX_DOCUMENT_ROOT`, иначе поиском вверх от текущего каталога до папки с `bitrix/`. Поэтому запускайте из любого места внутри проекта, либо задайте env (например, для cron с `cwd=/`):

```
BITRIX_DOCUMENT_ROOT=/var/www/site php local/vendor/bin/bx migrate
```

> Далее в примерах `bx` = `php vendor/bin/bx`. Для краткости добавьте в проект обёртку или shell-alias, например `alias bx='php vendor/bin/bx'`.

Команды видны и через штатную консоль Битрикса (`php bitrix/modules/main/cli/bitrix.php `) — мост через `.settings.php`.

> **Веб-контекст.** Чтобы классы пакетов были доступны и вне CLI, подключите composer-автозагрузку как обычно в Bitrix-проекте (например, `require``vendor/autoload.php` в `local/php_interface/init.php`).

### `bx` в корне сайта

[](#bx-в-корне-сайта)

Чтобы разработчики вызывали просто `php bx `, установите точку входа в корень одной командой:

```
php vendor/bin/bx bx:install          # создаст ./bx в корне (DocumentRoot)
php bx list
```

`bx:install` генерирует самодостаточный CLI-only файл; путь к composer-автозагрузке вычисляется при установке (с фолбэками на `local/vendor` и `vendor`). Опции: `--path` (каталог), `--name` (имя файла, по умолчанию `bx`), `--force`(перезаписать). После переноса проекта перегенерируйте: `bx bx:install --force`.

**Безопасность.** Сгенерированный `bx` исполняется только из CLI: при обращении по HTTP отдаёт `404` и ничего не выполняет (консоль умеет `tinker` — выполнение произвольного PHP). Тем не менее для файла в веб-корне соблюдайте гигиену:

- держите `vendor/` вне веб-корня либо закройте к нему доступ на уровне сервера;
- запретите прямой доступ к `/bx` (nginx: `location = /bx { deny all; }`; Apache: ` Require all denied `).

### Локальная разработка пакетов

[](#локальная-разработка-пакетов)

Если пакеты подключаются как локальные path-репозитории (не с Packagist), добавьте их в `repositories` потребителя:

```
{
  "require": { "mb4it/bitrix-console": "@dev" },
  "repositories": [
    { "type": "path", "url": "/path/to/mb-bitrix-console" },
    { "type": "path", "url": "/path/to/mb-bitrix-migration" }
  ]
}
```

Агент-слой
----------

[](#агент-слой)

Любая команда-наследник `MB\Bitrix\Console\Command` принимает глобальные опции:

- `--format=json` — вместо человекочитаемого вывода отдаёт **единый конверт**;
- `--pretty` — форматировать JSON.

Конверт (`MB\Bitrix\Console\Output\Envelope`):

```
{
  "ok": true,
  "command": "migrate",
  "exitCode": 0,
  "data": { "applied": ["2026_..._create_orders"], "count": 1 },
  "messages": [{ "level": "success", "text": "1 migration(s) applied." }],
  "error": null
}
```

При ошибке — `ok:false`, `exitCode>0` и `error:{type,class,message,code}` (в т.ч. для ошибок уровня фреймворка: неизвестная команда, неверная опция).

Правила для агента:

- в JSON-режиме команда **неинтерактивна** (никогда не блокируется на stdin);
- **деструктивные** команды требуют `--force`, иначе отказ с `exitCode=2`;
- коды возврата детерминированы (`0` успех, `1` ошибка, `2` отказ).

Открытие возможностей без угадывания:

```
bx manifest --format=json          # все команды: аргументы, опции, флаг destructive, примеры
bx describe migrate --format=json  # одна команда детально
```

Справочник команд
-----------------

[](#справочник-команд)

### Ядро / интроспекция

[](#ядро--интроспекция)

КомандаНазначение`about`Окружение и рантайм консоли.`manifest`Машиночитаемый список всех команд (discovery для ИИ).`describe `Детальное описание одной команды.`tinker`REPL / выполнение PHP в поднятом приложении (см. ниже).`bx:install`Установить точку входа `bx` в корень сайта (см. «`bx` в корне сайта»).`ai:skills`Сгенерировать skill/инструкцию по консоли для ИИ-агента (`.claude/skills/bx-console/SKILL.md`).### Версионируемые миграции (движок — `mb4it/bitrix-migration`)

[](#версионируемые-миграции-движок--mb4itbitrix-migration)

КомандаОпцииДеструктивно`migrate``--module`, `--path`нет`migrate:status``--module`, `--path`нет`migrate:rollback``--step`, `--force`, `--module`, `--path`**да**`migrate:fresh``--force`, `--module`, `--path`**да**`make:migration ``--module`, `--path`нет`migrate:install`—нет`--module ` — миграции в `/migrations/` с изоляцией в леджере. `migrate:install` создаёт таблицу-леджер `mb_migration_version` (идемпотентно).

### Генераторы миграций из живых сущностей

[](#генераторы-миграций-из-живых-сущностей)

Читают существующую сущность Битрикса и создают файл миграции (up() воссоздаёт, down() откатывает) через fluent-билдеры пакета `mb4it/bitrix-migration`. Стратегия переносимости: воссоздание по ID → фолбэк по XML\_ID/коду. Все принимают `--module`/`--path`/`--name` (куда положить) и `--format=json`.

КомандаЧто экспортирует`make:migration:options `опции модуля (`b_option`)`make:migration:iblock `инфоблок + свойства + разделы`make:migration:iblock-elements `элементы + свойства (`--filter` JSON, `--ids`, `--limit`)`make:migration:hlblock `HL-блок + поля (UF)`make:migration:hlblock-elements `строки HL-блока (`--filter`, `--ids`, `--limit`)`make:migration:agents`агенты (`--for-module`)`make:migration:mail`почтовые типы событий + шаблоны (`--event`)`make:migration:user-groups`группы пользователей`make:migration:users`пользователи (`--filter`, `--ids`, `--limit`) — **без хешей паролей**`make:migration:sitemap`конфигурации sitemap (seo)Те же билдеры доступны и для ручного написания миграций: `\MB\Bitrix\Database\Migrations\Builders\OptionBuilder::make('main','x')->value('1')->apply();`.

### Жизненный цикл модуля (оркестратор `MB\Bitrix\Migration\Facade`)

[](#жизненный-цикл-модуля-оркестратор-mbbitrixmigrationfacade)

> **Только при установленном `mb4it/bitrix-support`.** Эти команды используют его оркестратор `MB\Bitrix\Migration\Facade`, поэтому в standalone-консоли (без support) они **скрыты** — `bx list` их не покажет.

КомандаОпцииДеструктивно`module:install ``--only=files,storage,events,agents`нет`module:uninstall ``--only=...`, `--force`**да**Синхронизирует `files → storage (ORM-таблицы) → events` + агенты (через `AgentManager`). `module:install` идемпотентна.

### Генераторы

[](#генераторы)

КомандаОпции`make:command ``--namespace`, `--path`, `--command`, `--description`, `--force``make:orm ``--namespace`, `--path`, `--table`, `--force` (создаёт `Storage\Base`)> Штатные генераторы Битрикса (`make:agent`, `make:component`, `make:entity`, `make:controller`, `make:module`, `make:tablet` …) доступны через `bx` как есть — дубли не создаются.

### Служебные (read-only, удобны агенту)

[](#служебные-read-only-удобны-агенту)

КомандаНазначение`cache:clear`Очистить managed- и файловый кэш Битрикса.`events:run`Запустить крон-обработчик Битрикса (агенты + очередь почты/sender).`module:list`Установленные модули и версии.`iblock:list`Инфоблоки.`hlblock:list`Highload-блоки.`agent:list`Зарегистрированные агенты.`events:run` заменяет крон-строку Битрикса — запускает `bitrix/modules/main/tools/cron_events.php` в отдельном PHP-процессе (свои константы `BX_CRONTAB` и т.д.) и возвращает его вывод/код:

```
* * * * * php /path/to/site/vendor/bin/bx events:run >/dev/null 2>&1
```

### Инспекция: инфоблоки, настройки, события (read-only)

[](#инспекция-инфоблоки-настройки-события-read-only)

Инфоблоки принимают id **или** символьный код. Все команды поддерживают `--format=json`.

КомандаНазначение`iblock:types`Типы инфоблоков.`iblock:info `Метаданные ИБ + счётчики элементов/разделов.`iblock:properties `Свойства (код, тип, множ., связь, enum-значения).`iblock:sections `Разделы в порядке дерева.`iblock:elements `Элементы: `--filter` (JSON), `--select`, `--order` (JSON), `--limit`, `--offset`, `--with-props`.`iblock:element  `Один элемент: все поля + свойства.`option:list `Все опции модуля (`b_option`).`option:get  `Одна опция (`--site`, `--default`).`config:module [module]`Секции `.settings.php` модуля (или проекта).`event:handlers [module] [event]`Постоянные обработчики (`b_module_to_module`).`agent:run ` ⚠️Ручной прогон одного агента (`--force`).Пример запроса элементов:

```
bx iblock:elements news --filter='{"=ACTIVE":"Y","!PREVIEW_TEXT":false}' \
   --select='["ID","NAME","CODE"]' --order='{"SORT":"ASC"}' \
   --limit 20 --with-props --format=json
```

tinker
------

[](#tinker)

Аналог Laravel Tinker (на PsySH).

```
bx tinker                                    # интерактивный REPL ($app в скоупе)

# неинтерактивно (для агента) — вернуть значение через "return":
bx tinker -e "return \Bitrix\Main\ModuleManager::getVersion('main');" --format=json
echo "return 2 + 2;" | bx tinker --format=json
```

В JSON-режиме результат: `data.result` (строка), `data.resultType`, `data.output`(перехваченный вывод).

> На Windows/PowerShell 5.1 пайп в stdin искажает кодировку — используйте `--execute`или cmd-пайп.

Как написать свою команду
-------------------------

[](#как-написать-свою-команду)

1. Унаследуйте `MB\Bitrix\Console\Command`, реализуйте `handle(): int`:

```
