> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getdial.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getdial.ai/_mcp/server.

# Install & onboarding

> Install the Dial CLI and create an account with the email one-time code flow.

The `dial` CLI is the fastest way to use Dial and the surface most agents drive. Install it once, sign up, and you're authenticated for every command.

## Install

```bash
npm install -g @getdial/cli
```

Requires Node 22 or newer. Confirm the install:

```bash
dial --version
```

## Create an account

Dial uses one-time codes — no password. Creating an account needs a verified **email** and a verified **phone number**.

```bash
dial auth login you@example.com              # emails a 6-digit code
dial auth verify-otp --code 123456           # verifies your email
dial auth register-number +14155550123       # texts a 6-digit code
dial auth verify-otp --number --code 654321  # verifies your phone, finishes setup
```

Each step prints the command to run next, so you can follow the flow without memorizing it.

`register-number` requires a number that can receive SMS — use one you keep. A Dial number can't be used to register a Dial account.

The final step creates your account, issues an API key, **saves it locally**, and provisions your first phone number. That number starts with a default inbound voice-agent prompt; change it with `dial number set`.

If you need to pass the email verification explicitly, use `--verification-id <id>`; otherwise the CLI uses the pending sign-up from the previous step.

## Sign in to an existing account

Signing in needs only the email steps — you're never asked for a phone number again:

```bash
dial auth login you@example.com
dial auth verify-otp --code 123456
```

## Check your setup

```bash
dial doctor
```

`doctor` reports your account, saved key, and number — and tells you the next step if anything is missing. Add `--json` for machine-readable output.

## Where your key is stored

Once verification completes, your key lives in `~/.local/share/dial/auth.v1.json` (honoring `XDG_DATA_HOME`). Every `dial` command reads it automatically — you never paste your key again. The `v1` in the name is the file's schema version: when an update changes a state file's shape, the CLI migrates the old file forward on first read, so updates never lose your sign-in.

## Pointing at another environment

Set `DIAL_API_URL` to send CLI requests to a different deployment:

```bash
export DIAL_API_URL=https://api.getdial.ai
```

## Identifying the tool driving the CLI

If you're embedding the CLI in your own product or agent runtime, set `DIAL_USER_AGENT` so your traffic is identifiable:

```bash
export DIAL_USER_AGENT="nanoclaw/1.1.1"
```

Your value is **prepended** to the CLI's own `User-Agent`, which is always still sent:

```
User-Agent: nanoclaw/1.1.1 @getdial/cli/0.36.0
```

It never replaces the CLI's identifier. Use the conventional `name/version` form. Leave the variable unset and the header goes out unchanged.

## Updating

The CLI keeps itself current. At most once an hour, any command spawns a detached background `npm install -g @getdial/cli@latest` (global npm installs only — `npx` runs already resolve the latest version on each invocation). The background check never touches a command's output; its progress lands in `~/.local/state/dial/cli.log`. Set `DIAL_NO_AUTO_UPDATE=1` to turn it off.

To update on demand:

```bash
dial update
```

If the background [listen service](/documentation/cli/listen-service) is running, it notices the new version within a couple of minutes and restarts itself onto it.

## Uninstall

```bash
dial uninstall
```

One command removes everything Dial put on the machine — the listen daemon, the installed agent skills, and all local state including the saved API key — then prints the final step:

```bash
npm uninstall -g @getdial/cli
```

Uninstall is local-only: your account and numbers are untouched. Coming back is the same email flow — `dial auth login` + `dial auth verify-otp`.

## Next

#### [Commands](/documentation/cli/commands)

Every command and flag.

#### [Listen service](/documentation/cli/listen-service)

Capture events in the background.