---
title: "ThunderPhone CLI"
description: "Zaloguj się, zarządzaj agentami głosowymi i połączeniami, konfiguruj klientów MCP oraz twórz szkielety projektów z terminala."
---

CLI wymaga Node.js 18.18 lub nowszego. Uruchom je za pomocą `npx` albo zainstaluj globalnie:

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

## Zaloguj się

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

Logowanie wyświetla kod weryfikacyjny, otwiera przeglądarkę i czeka na autoryzację.
Na komputerze bez interfejsu graficznego użyj `--no-browser` i otwórz wyświetlony adres URL w innym miejscu.
Logowanie urządzenia wymaga wdrożenia przepływu OAuth dla urządzeń przez API. Klucz API organizacji
w `THUNDERPHONE_API_KEY` może również uwierzytelniać polecenia i ma pierwszeństwo
przed zapisanymi poświadczeniami logowania.

Poświadczenia są przechowywane według profilu w `~/.config/thunderphone/credentials.json`
z trybem pliku `0600`. `XDG_CONFIG_HOME` i `THUNDERPHONE_CONFIG_DIR` zastępują
katalog. Tokeny dostępu są odświeżane automatycznie, a rotacyjne tokeny odświeżania są
zapisywane atomowo. Tokeny nigdy nie są wyświetlane podczas logowania.

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

`THUNDERPHONE_PROFILE` ustawia domyślny profil. Wylogowanie usuwa lokalne poświadczenia;
nie unieważnia uprawnienia na serwerze. Domyślne API to `https://api.thunderphone.com`.
Użyj `--api-base-url` lub `THUNDERPHONE_API_BASE_URL` dla innego API. Token profilu
nie może zostać wysłany do innego skonfigurowanego adresu URL API; zaloguj się do tego adresu URL przy użyciu osobnego profilu.

## Polecenia

Każde polecenie obsługuje `--json`. Pomyślne dane trafiają do stdout; błędy trafiają do stderr
z niezerowym kodem zakończenia. Bez `--json` dane wyjściowe mają postać zwięzłej tabeli lub listy pól.
JSON zachowuje strukturę odpowiedzi API, z zamaskowanymi polami poświadczeń. Obsługa MCP
rezerwuje stdout dla protokołu MCP.

| Polecenie | Cel |
| --- | --- |
| `login [--no-browser] [--scope "scopes"]` | Autoryzuj za pomocą kodu urządzenia |
| `logout`, `whoami` | Usuń lokalne poświadczenia; wyświetl dostępne organizacje |
| `agents list`, `agents get ID` | Odczytaj agentów |
| `agents create --file agent.json` | Utwórz agenta |
| `agents update ID --file agent.json` | Zapisz wersję roboczą agenta |
| `agents deploy ID`, `agents delete ID` | Wdróż wersję roboczą; usuń agenta |
| `numbers list` | Odczytaj numery telefonów |
| `numbers provision --country US --area-code 415` | Udostępnij amerykański numer przychodzący |
| `numbers assign NUMBER_ID --agent ID` | Przypisz agenta do połączeń przychodzących |
| `sms send TO --from FROM --body TEXT --idempotency-key KEY` | Wyślij SMS przez numer operatora podłączony przez klienta z bezpiecznym ponowieniem |
| `sms list [--limit N]`, `sms get UUID` | Wyświetl lub sprawdź rekordy SMS |
| `call TO --agent ID --from FROM [--wait]` | Wykonaj połączenie wychodzące; opcjonalnie czekaj na jego transkrypcję |
| `calls list [--limit N] [--agent ID]` | Wyświetl połączenia (limit 1–200) |
| `calls get ID`, `calls transcript ID` | Odczytaj jedno połączenie lub jego transkrypcję |
| `test run AGENT_ID [--scenario ID] --consent-to-charge` | Uruchom płatne zapisane scenariusze za pomocą kanału internetowego |
| `test status RUN_ID [--agent ID]` | Sprawdź partię wraz ze szczegółami scenariusza, gdy podano agenta |
| `import VENDOR export.json` | Przygotuj import JSON dostawcy do sprawdzenia |
| `imports get UUID`, `imports commit UUID` | Sprawdź import; zatwierdź wybranych agentów po sprawdzeniu |
| `mcp setup`, `mcp serve` | Skonfiguruj klienta; uruchom most stdio |
| `init [directory]` | Utwórz szkielet projektu |

Połączenia wychodzące wymagają numeru z włączonymi połączeniami wychodzącymi. `THUNDERPHONE_FROM_NUMBER` może
dostarczyć wartość dla `--from`. Numery VoIP klientów nadal obsługują połączenia wychodzące.
Numery udostępnione przez ThunderPhone początkowo obsługują tylko połączenia przychodzące; administrator organizacji może
poprosić o połączenia wychodzące na stronie Numery telefonów, gdzie każdy wniosek jest
sprawdzany ręcznie. Domyślny limit czasu dla `--wait` wynosi godzinę; ustaw
`--timeout SECONDS`, aby go zmienić. Przekroczenie limitu czasu przestaje czekać bez kończenia połączenia.

SMS wymaga również numeru obsługującego SMS na połączonym koncie Twilio lub Telnyx.
Nigdy nie jest wysyłany z numeru należącego do ThunderPhone. Używaj ponownie klucza idempotencji
wyłącznie podczas ponawiania dokładnie tego samego nadawcy, odbiorcy i treści.

Importy obsługują `vapi`, `retell`, `elevenlabs` i `bland`. Drugi argument to
ścieżka do eksportu JSON dostawcy, a nie zdalny identyfikator dostawcy. API przygotowuje mapowanie
asynchronicznie; sprawdź je za pomocą `imports get UUID` i zatwierdź dopiero, gdy będzie gotowe
oraz po sprawdzeniu zmapowanych pól i ostrzeżeń. Zobacz [importy agentów](/pl/guides/import-agents).

## Konfiguracja 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
```

Klienci: `claude-code`, `codex`, `cursor`, `vscode`, `gemini`, `claude-desktop` i
`windsurf`. Zakres projektu jest domyślny. Desktop i Windsurf wymagają zakresu użytkownika.
Pomiń `--client`, aby wykryć pojedynczego klienta w projekcie; niejednoznaczne wykrycie
wyświetla interaktywny monit lub kończy się niepowodzeniem z instrukcjami w sesji nieinteraktywnej.
Konfiguracja wyświetla zapisany plik i zachowuje niepowiązane serwery. Istniejący JSON
musi być prawidłowym ścisłym JSON-em; wartości TOML dla Codex są zachowywane, ale komentarze mogą zostać przeformatowane.

Konfiguracja preferuje bezpośrednie zdalne HTTP. Przy użyciu `--api-key-env` zapisuje
odwołanie do zmiennej, nigdy klucz. Bez tej opcji bezpośrednie HTTP korzysta z obsługi
OAuth klienta; nie używa pliku poświadczeń CLI. Aby ponownie wykorzystać poświadczenia
`thunderphone login` w dowolnym kliencie obsługującym stdio, użyj:

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

Wrapper sprawdza `THUNDERPHONE_API_KEY`, następnie bieżący profil CLI (odświeżając go
w razie potrzeby), a następnie przekazuje OAuth do `mcp-remote`. `THUNDERPHONE_MCP_URL` zastępuje
punkt końcowy. Nie wysyła telemetrii. Samodzielna konfiguracja jest również dostępna przez
`npx -y @thunderphone/mcp setup --client cursor` lub `thunderphone-mcp setup` po
globalnej instalacji `@thunderphone/mcp`.

## Utwórz projekt

```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
```

Szablony to `node` i `python`; typy agentów to `receptionist`, `outbound` i
`custom`. Domyślny agent to angielsko-hiszpańska recepcjonistka stomatologiczna z wyraźnie
określonymi faktami demonstracyjnymi. Projekty zawierają `agent.json`, skrypty wdrażania,
konfiguracje MCP dla Claude Code, Cursor i VS Code, instrukcje agenta, `.env.example` oraz README.
Tworzenie szkieletu działa offline i nie pozwala nadpisać niepustego katalogu.

Przed wdrożeniem edytuj informacje o firmie. Wyeksportuj klucz API, podłączony numer
rozmówcy i odbiorcę połączenia testowego zgodnie z dokumentacją w wygenerowanym README. `npm run deploy`
lub `python deploy.py` tworzy lub aktualizuje agenta, wdraża jego wersję roboczą i wykonuje
rozliczane połączenie testowe. Skrypty używają uwierzytelniania kluczem API; CLI i wrapper MCP
stdio obsługują również logowanie urządzenia. Skrypty Python wymagają Python 3.9 lub nowszego.
