---
title: "ThunderPhone CLI"
description: "Входите в систему, управляйте голосовыми агентами и звонками, настраивайте клиенты MCP и создавайте каркасы проектов из терминала."
---

Для CLI требуется Node.js 18.18 или новее. Запустите его через `npx` или установите глобально:

```bash
npm install -g thunderphone
thunderphone --help
```

## Войдите в систему

```bash
npx thunderphone login
thunderphone whoami --json
```

Вход выводит код подтверждения, открывает браузер и ожидает авторизации.
На машине без графического интерфейса используйте `--no-browser` и откройте выведенный URL в другом месте.
Для входа с устройства требуется поддержка OAuth device flow в API. Ключ API организации в `THUNDERPHONE_API_KEY` также может аутентифицировать команды и имеет приоритет
над сохранёнными учётными данными для входа.

Учётные данные хранятся по профилям в `~/.config/thunderphone/credentials.json`
с режимом файла `0600`. `XDG_CONFIG_HOME` и `THUNDERPHONE_CONFIG_DIR` переопределяют
каталог. Токены доступа обновляются автоматически, а ротируемые токены обновления
сохраняются атомарно. Токены никогда не выводятся командой входа.

```bash
thunderphone login --profile work
thunderphone agents list --profile work --json
thunderphone logout --profile work
```

`THUNDERPHONE_PROFILE` задаёт профиль по умолчанию. Выход удаляет локальные учётные данные;
он не отзывает серверное разрешение. API по умолчанию — `https://api.thunderphone.com`.
Используйте `--api-base-url` или `THUNDERPHONE_API_BASE_URL` для другого API. Токен профиля
нельзя отправить на другой настроенный URL API; войдите на этот URL, используя отдельный профиль.

## Команды

Каждая команда поддерживает `--json`. Данные при успешном выполнении выводятся в stdout; ошибки — в stderr
с ненулевым кодом выхода. Без `--json` выводится компактная таблица или список полей.
JSON сохраняет структуру ответа API, при этом поля с учётными данными скрываются. Обслуживание MCP
резервирует stdout для протокола MCP.

| Команда | Назначение |
| --- | --- |
| `login [--no-browser] [--scope "scopes"]` | Авторизоваться с помощью кода устройства |
| `logout`, `whoami` | Удалить локальные учётные данные; вывести список доступных организаций |
| `agents list`, `agents get ID` | Получить агентов |
| `agents create --file agent.json` | Создать агента |
| `agents update ID --file agent.json` | Сохранить черновик агента |
| `agents deploy ID`, `agents delete ID` | Развернуть черновик; удалить агента |
| `numbers list` | Получить номера телефонов |
| `numbers provision --country US --area-code 415` | Выделить входящий номер США |
| `numbers assign NUMBER_ID --agent ID` | Назначить входящего агента |
| `sms send TO --from FROM --body TEXT --idempotency-key KEY` | Отправить SMS через номер оператора, подключённого клиентом, с безопасным повторным выполнением |
| `sms list [--limit N]`, `sms get UUID` | Вывести список или проверить записи SMS |
| `call TO --agent ID --from FROM [--wait]` | Выполнить исходящий звонок; при необходимости дождаться его расшифровки |
| `calls list [--limit N] [--agent ID]` | Вывести список звонков (лимит 1–200) |
| `calls get ID`, `calls transcript ID` | Получить один звонок или его расшифровку |
| `test run AGENT_ID [--scenario ID] --consent-to-charge` | Запустить платные сохранённые сценарии через веб-канал |
| `test status RUN_ID [--agent ID]` | Проверить пакет, включая сведения о сценариях при указании агента |
| `import VENDOR export.json` | Подготовить импорт JSON от поставщика для проверки |
| `imports get UUID`, `imports commit UUID` | Проверить импорт; подтвердить выбранных агентов после проверки |
| `mcp setup`, `mcp serve` | Настроить клиент; запустить мост stdio |
| `init [directory]` | Создать каркас проекта |

Для исходящих звонков требуется номер с поддержкой исходящих вызовов. `THUNDERPHONE_FROM_NUMBER` может
передавать значение для `--from`. Клиентские номера VoIP продолжают поддерживать исходящие звонки.
Номера, выделенные ThunderPhone, изначально поддерживают только входящие вызовы; администратор организации может
запросить исходящие звонки на странице «Номера телефонов», где каждый запрос
проверяется вручную. По умолчанию для `--wait` установлен тайм-аут в один час; используйте
`--timeout SECONDS`, чтобы изменить его. Тайм-аут прекращает ожидание, не завершая звонок.

Для SMS также требуется номер с поддержкой SMS в вашей подключённой учётной записи Twilio или Telnyx.
SMS никогда не отправляются с номера, принадлежащего ThunderPhone. Повторно используйте ключ идемпотентности
только при повторной попытке отправить сообщение с точно таким же отправителем, получателем и текстом.

Импорт поддерживает `vapi`, `retell`, `elevenlabs` и `bland`. Второй аргумент — это
путь к экспорту JSON поставщика, а не удалённый идентификатор поставщика. API асинхронно подготавливает сопоставление;
проверьте его с помощью `imports get UUID` и подтверждайте только после готовности,
а также после проверки сопоставленных полей и предупреждений. См. [импорт агентов](/ru/guides/import-agents).

## Настройка MCP

```bash
thunderphone mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client codex --scope user --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client claude-desktop --scope user
```

Клиенты: `claude-code`, `codex`, `cursor`, `vscode`, `gemini`, `claude-desktop` и
`windsurf`. По умолчанию используется область проекта. Для Desktop и Windsurf требуется область пользователя.
Не указывайте `--client`, чтобы определить единственный клиент в проекте; при неоднозначном определении
CLI запрашивает выбор в интерактивном режиме или завершает работу с инструкциями в неинтерактивном сеансе.
Настройка выводит путь к созданному файлу и сохраняет несвязанные серверы. Существующий JSON
должен быть корректным строгим JSON; значения TOML для Codex сохраняются, но комментарии могут быть переформатированы.

Настройка предпочитает прямой удалённый HTTP. При использовании `--api-key-env` она записывает ссылку
на переменную, но не сам ключ. Без этого параметра прямой HTTP использует поддержку
OAuth клиента; файл учётных данных CLI не используется. Чтобы повторно использовать учётные данные
`thunderphone login` в любом клиенте с поддержкой stdio, используйте:

```json
{
  "mcpServers": {
    "thunderphone": {
      "command": "npx",
      "args": ["-y", "@thunderphone/mcp"]
    }
  }
}
```

Обёртка проверяет `THUNDERPHONE_API_KEY`, затем текущий профиль CLI (обновляя его
при необходимости), после чего передаёт OAuth в `mcp-remote`. `THUNDERPHONE_MCP_URL` переопределяет
конечную точку. Телеметрия не отправляется. Отдельная настройка также доступна через
`npx -y @thunderphone/mcp setup --client cursor` или `thunderphone-mcp setup` после
глобальной установки `@thunderphone/mcp`.

## Создание проекта

```bash
npx create-thunderphone-agent my-receptionist
npx create-thunderphone-agent my-outbound --template python --agent-type outbound
# Equivalent:
thunderphone init my-receptionist --template node --agent-type receptionist
```

Доступные шаблоны: `node` и `python`; типы агентов: `receptionist`, `outbound` и
`custom`. Агент по умолчанию — англо-испанский администратор стоматологической клиники с явно заданными
демонстрационными данными. Проекты включают `agent.json`, скрипты развёртывания, конфигурации MCP для
Claude Code, Cursor и VS Code, инструкции для агента, `.env.example` и README.
Создание каркаса работает офлайн и не перезаписывает непустой каталог.

Перед развёртыванием отредактируйте сведения о компании. Экспортируйте API-ключ, подключённый номер
звонящего и получателя тестового звонка, как указано в созданном README. `npm run deploy`
или `python deploy.py` создаёт или обновляет агента, развёртывает его черновик и выполняет
платный тестовый звонок. Скрипты используют аутентификацию по API-ключу; CLI и обёртка MCP для stdio
также поддерживают вход с устройства. Для скриптов Python требуется Python 3.9 или новее.
