> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runanywhere.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> From a clean machine to your first hosted request.

Sign-in happens in the browser. You never paste a Cloud key into the terminal to authenticate.

## 1. Install

```bash theme={null}
curl -fsSL https://raw.githubusercontent.com/RunanywhereAI/wally/main/install.sh | sh
```

If you would rather not pipe a script to a shell, take the signed release for your platform
from the [releases page](https://github.com/RunanywhereAI/wally/releases) instead. macOS on
Apple Silicon and Windows x64 have published artifacts.

## 2. Sign in

```bash theme={null}
wally account login
```

The console opens with a short-lived request. Sign in with Google or GitHub, check the hostname
in the browser, and approve only a terminal you just started yourself. The credential lands in
the terminal after you approve.

If the browser cannot open, rerun with `--no-browser` and open the printed URL yourself.
Never put an access or refresh token in a URL, shell history, issue, or log.

## 3. Run against the cloud

Hosted and local are separate choices, so ask for the hosted one:

```bash theme={null}
wally opencode --cloud --model <model-id>
```

The model catalogue on [console.runanywhere.ai](https://console.runanywhere.ai) lists the ids
your signed-in account can pass here. A Cloud key is entitled separately, so the
`/v1/models` response in step 4 is scoped to that key and need not match the account
catalogue — read the list for whichever credential you are calling with. Arguments for the
harness itself go after `--`, as in
`wally opencode --cloud --model <model-id> -- --help`.

## 4. Call the API directly

Cloud usage bills against prepaid credits. The
[terms](https://runanywhere.ai/legal/terms) and the
[refund policy](https://runanywhere.ai/legal/refunds) are the commercial contract.

Create a Cloud key on the console's Cloud keys page. The plaintext shows once, so put it
straight into your secret manager, and never reuse an on-device `runa_prod_` SDK key here.

Ask the API which models the key can call:

```bash theme={null}
export RUNA_CLOUD_KEY='sk-runa-…'

curl https://inference.runanywhere.ai/v1/models \
  -H "Authorization: Bearer $RUNA_CLOUD_KEY"
```

That response is the authoritative list. Take an id from it for `<model-id>` below and in
step 3:

```bash theme={null}
curl -N https://inference.runanywhere.ai/v1/chat/completions \
  -H "Authorization: Bearer $RUNA_CLOUD_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"model":"<model-id>","stream":true,"messages":[{"role":"user","content":"Say hello in one sentence."}]}'
```

The response is OpenAI-compatible SSE and ends with `data: [DONE]`. See the
[API reference](/wally-cloud/api) for request fields and error behaviour.

## Troubleshooting

| Status | What it means                                                                                                                                              |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `401`  | The Cloud key is missing, expired, revoked, or is a device SDK key                                                                                         |
| `403`  | The key is valid but that model or route is not entitled, or the account is out of credit (`insufficient_credit`)                                          |
| `429`  | Capacity or rate limit. Wait the number of seconds in `Retry-After` when the response carries one, and back off exponentially with jitter when it does not |

No console URL on `wally account login` usually means the installed release is stale. Update from the
releases page rather than copying an old localhost command.
