# Создайте свой CLI (/ru/docs/build-create-cli)

Вы можете быстро собрать свой инструмент командной строки для любого сервиса или API — с нашим шаблоном и вашим
ИИ-агентом. Пользуетесь CRM, трекером задач или приложением для заметок, которое WireCat пока не поддерживает?
Добавьте его сами.

Эта страница показывает, что для этого нужно, что вы получите и с чего начать. Руководства после неё проводят по
каждой части.

## Два варианта [#два-варианта]

Оба начинаются с одного шаблона и получают одну и ту же основу. Разница только в том, насколько вы связываете
инструмент с остальными.

* **Отдельный инструмент.** Вам нужен быстрый инструмент командной строки для одного сервиса, и больше ничего. Шаблон
  с первого дня даёт основу: данные сервиса хранятся на вашем компьютере, по ним работает быстрый поиск, есть память
  для того, что узнал агент, сервер для ИИ-агентов и безопасный вход. Другие инструменты WireCat не нужны.
* **Часть WireCat.** Вы также пользуетесь WireCat для чатов, почты или встреч и хотите искать по всему сразу. Тогда
  свяжите свой инструмент с остальными: то, что он сохраняет, окажется рядом со всем остальным, и один вопрос найдёт
  это. Для этого нужно несколько дополнительных шагов, они описаны на странице
  [Добавить источник](/llms.mdx/docs/ru/build-add-source/content.md).

Можно начать с первого варианта и связать инструмент позже.

## Как его собрать, вкратце [#как-его-собрать-вкратце]

1. **Начните с шаблона.** Одна команда создаёт работающий инструмент, где всё уже настроено. Вы не начинаете с пустой
   папки.
2. **Скажите ИИ-агенту, какой сервис подключить.** В шаблоне есть инструкции для агента. Он задаст вам несколько
   простых вопросов о сервисе — что в нём хранится, как в него входят — и напишет код.
3. **Проверьте на своём аккаунте.** Запустите инструмент, посмотрите, что он нашёл, и попросите агента исправить то,
   чего не хватает.
4. **Поделитесь, если хотите.** Встроенные проверки скажут, когда инструмент готов к публикации для других людей.

Чтобы начать, не нужно знать, как WireCat устроен внутри. Руководства ниже объясняют каждую часть, когда она вам
понадобится.

## Что WireCat даёт вашему инструменту [#что-wirecat-даёт-вашему-инструменту]

* **Данные на вашем компьютере и быстрый поиск.** То, что сохраняет инструмент, лежит в локальном файле. Поиск
  находит слова в любой форме на русском, английском и испанском, а если включить — и по смыслу.
* **Память для агента.** Агент может сохранить то, что узнал, — итог, предпочтение — и найти это позже.
* **Один поиск по всем инструментам,** если вы связали свой: то, что он сохраняет, лежит рядом с сообщениями,
  письмами, встречами и документами из других инструментов.
* **Работа с ИИ-агентами.** Каждая команда вашего инструмента готова для агента, а что агенту можно менять, решаете вы.
* **Аккаунты не смешиваются.** Вы всегда указываете, с каким аккаунтом работает команда, поэтому ничего не уйдёт не
  туда.
* **Вход и пароли под защитой.** Ключи хранятся в связке ключей вашего компьютера и никогда не появляются в выводе.
* **Проверки, которые сохраняют работоспособность.** Шаблон приносит те же проверки, что запускает каждый инструмент
  WireCat, поэтому ваш инструмент продолжает работать, пока WireCat растёт.

## Что понадобится [#что-понадобится]

* **Аккаунт в сервисе** и способ, которым программы до него достучатся. Большинство сервисов выдают API-ключ в
  настройках или позволяют приложению войти за вас. Ссылка на документацию сервиса для разработчиков очень помогает
  агенту.
* **ИИ-агент для кода, который умеет запускать команды**: Claude Code, Codex, Cursor, Gemini CLI или похожий.
* **Node.js, pnpm и git** на вашем компьютере.

## Начните с шаблона [#начните-с-шаблона]

[cli-template](https://github.com/WireCatLabs/cli-template) — это то, с чего начинается каждый новый инструмент. Эта
команда задаёт несколько коротких вопросов о сервисе и создаёт инструмент `acme` в папке `acme-cli`:

```sh
npx @wirecat/cli-template new acme-cli --command acme --package @example/acme-cli --owner example
```

Проверьте, что новый инструмент запускается:

```sh
cd acme-cli && pnpm install && pnpm build
node dist/bin/acme.js personal doctor
```

`personal` — это профиль: имя одного из ваших аккаунтов. Теперь откройте папку `acme-cli` в вашем ИИ-агенте.

## Что дальше [#что-дальше]

1. **Скажите агенту, чего вы хотите.** Назовите сервис, дайте ссылку на документацию для разработчиков и скажите, что
   нужно сделать. Например: «Подключи acme к API Acme CRM. Документация — [https://example.com/api](https://example.com/api). Я хочу видеть
   список своих сделок и находить сделку по названию».
2. **Ответьте на его вопросы.** Агент спросит, как входить в сервис, что в нём хранится и что нельзя сохранять никогда.
   Коротких ответов достаточно.
3. **Проверьте каждую команду на своём аккаунте.** Агент собирает команды по одной, например команду со списком
   сделок. Запускайте их и говорите агенту, что не так или чего не хватает.
4. **Сделайте данные доступными для поиска.** Попросите агента сохранять ответы сервиса в WireCat, чтобы поиск и ваши
   агенты находили их рядом с чатами и почтой. Как это сделать — на странице
   [Добавить источник](/llms.mdx/docs/ru/build-add-source/content.md).
5. **Поделитесь, если хотите.** Когда встроенные проверки проходят, опубликуйте инструмент в npm, и другие установят
   его так же, как любой инструмент WireCat.

## Если что-то не получается [#если-что-то-не-получается]

* Запустите `node dist/bin/acme.js personal doctor` в папке инструмента. Он проверяет установку, настройки и профили.
* Попросите агента ещё раз прочитать инструкции шаблона. В них описаны частые проблемы.
* Задайте вопрос или сообщите об ошибке в [cli-template](https://github.com/WireCatLabs/cli-template/issues). Не
  прикладывайте ключи, пароли и личные данные.

## Покажите его на wirecat.dev [#покажите-его-на-wirecatdev]

Инструмент вне WireCatLabs может появиться здесь в группе «Инструменты сообщества». Откройте pull request в
[cli-docs](https://github.com/WireCatLabs/cli-docs), который добавляет его в `tools.json` с `"community": true`. Его
страницы затем копируются из его репозитория на проверенном теге релиза, как наши.
[Список проверки](https://github.com/WireCatLabs/cli-docs/blob/main/docs/REVIEWING.md#community-tools) говорит, что
мы проверяем. Инструмент сообщества публикуется в своём пространстве имён npm: `@wirecat` и название «WireCat»
остаются нашими.

## Обновляйтесь [#обновляйтесь]

Шаблон продолжает улучшаться. В вашем инструменте, с чистым рабочим деревом git, запустите:

```sh
npx @wirecat/cli-template upgrade
```

Для каждого файла шаблона, который изменился с вашей версии, он спрашивает, что сделать: **apply** вливает изменение в
ваш файл, **replace** берёт файл шаблона, **skip** оставляет ваш, а **diff** сначала показывает изменение. Конфликт
оставляет обычные метки git; разрешите их и запустите `upgrade` снова. Файлы, которые шаблон только положил один раз,
например ваш код и ваши страницы, он никогда не трогает. `--dry-run` показывает, что изменится, и ничего не пишет.

## Подробности о шаблоне [#подробности-о-шаблоне]

Для случаев, когда вам или агенту нужны точные параметры.

### Семь вопросов [#семь-вопросов]

Каждый ответ, кроме языков, — выбор из короткого списка, и каждый также принимает `other:<ваш ответ>`. Без терминала,
например в скрипте или в оболочке агента, передайте ответы флагами. Тогда пропущенный ответ — ошибка со списком
вариантов; ничего не угадывается.

| Вопрос | Флаг | Варианты (несколько — через запятую) |
| --- | --- | --- |
| Что это за инструмент? | `--category` | `messenger`, `mail`, `notes`, `files`, `calendar`, `meetings` |
| На каких языках содержимое? | `--content-lang` | коды языков, можно несколько: `en,ru` |
| Как человек входит в сервис? | `--sign-in` | `oauth`, `token`, `session` (код по телефону, QR), `none` |
| На чём можно строить? | `--api` | `official-client`, `official-docs`, `unofficial` |
| Как люди фильтруют найденное? | `--filters` | несколько из `time`, `person`, `container`, `text`, `status` |
| Что никогда не должно попасть в хранилище, журнал или вывод? | `--never-store` | несколько из `tokens`, `codes`, `secret-links`, `content` |
| Какие недоверенные данные приходят? | `--untrusted` | несколько из `messages`, `files`, `links`, `names`; или `none` отдельно |

Тот же инструмент, созданный без единого вопроса:

```sh
npx @wirecat/cli-template new acme-cli --command acme --package @example/acme-cli --owner example \
  --category notes --content-lang en --sign-in token --api official-docs --filters time,text \
  --never-store tokens --untrusted messages,links
```

### Учитесь у похожего инструмента [#учитесь-у-похожего-инструмента]

В шаблоне нет примера кода. Ваш агент учится у инструмента WireCat, ближайшего к вашему; его выбирает первый ответ:

| Что за инструмент | Образец |
| --- | --- |
| мессенджер | [`whatsapp-cli`](https://github.com/WireCatLabs/whatsapp-cli), затем [`tg-cli`](https://github.com/WireCatLabs/tg-cli) и [`max-cli`](https://github.com/WireCatLabs/max-cli) |
| файлы и документы | [`drive-cli`](https://github.com/WireCatLabs/drive-cli) |
| встречи | [`zoom-cli`](https://github.com/WireCatLabs/zoom-cli) |
| заметки | [`cli-memo`](https://github.com/WireCatLabs/cli-memo) |
| почта, календарь, другое | пока нет: выберите ближайший вместе с агентом |

Пока что поиск показывает записи вашего инструмента как сообщения. Когда cli-core научится регистрировать новый вид
источника, ваш инструмент сможет зарегистрировать свой.

### Четыре шага, которые делает человек [#четыре-шага-которые-делает-человек]

`new` выводит их в конце. Последний нужен только инструментам в организации WireCatLabs.

1. Создайте репозиторий и защитите его ветку `main`, как сказано в
   [чек-листе нового CLI](https://github.com/WireCatLabs/cli-base/blob/main/docs/standards/new-cli.md).
2. Настройте в npm доверенную публикацию для вашего пакета с `release.yml` и добавьте секреты, если они нужны.
3. Выберите для ежемесячных проверок день месяца, который не занят другими вашими репозиториями. В
   `.github/workflows/monthly.yml` шаблона стоит заглушка, и CI отклоняет её, пока вы её не замените.
4. **Только для инструментов WireCatLabs:** добавьте инструмент в группы сравнения cli-base, в список инструментов
   WireCat в cli-core и в `tools.json` этого сайта.

Инструмент вне WireCatLabs вместо этого держит свой файл групп сравнения и запускает `cli-dev audit --groups <file>`:
так его сравнивают с нашими инструментами без pull request в cli-base.

## Куда дальше [#куда-дальше]

1. [Основы за пять минут](/llms.mdx/docs/ru/build-concepts/content.md) — как WireCat хранит записи из многих источников.
2. [Добавить источник](/llms.mdx/docs/ru/build-add-source/content.md) — сохраните данные сервиса, чтобы их видели поиск и агенты.
3. [Хранить свои данные](/llms.mdx/docs/ru/build-own-data/content.md) — где инструмент держит то, что нужно только ему.
4. [Вход в сервис](/llms.mdx/docs/ru/build-sign-in/content.md) — ключи, связка ключей и аккаунты.
5. [Соответствовать стандартам и обновляться](/llms.mdx/docs/ru/build-stay-compliant/content.md) — проверки, версии и обновления.
