---
source: https://a2a.exposed/quickstart
---

# Quick start

These steps deploy the open-source Worker into **your** Cloudflare account. Hosted addresses at `<name>.a2a.exposed` are in [open beta](/hosted). Cloudflare here is the account you deploy into.

## Prerequisites

Node 22.18 or newer (`node -v`). `init` and `deploy` stop on older Node because the `cf` CLI needs it. On Node 20, `npm` may only warn `EBADENGINE` and still install. A finished install still needs `node -v` to show 22.18 or newer. Use [mise](https://github.com/telegraphic-dev/mise-skill), nvm, fnm, or the [Node.js installer](https://nodejs.org/en/download).

You need a Cloudflare account. The self-hosted Worker is designed to run on the free plan, including a `*.workers.dev` hostname.

## 1. Skills

Installing the skills leaves the CLI as its own install.

```bash
npx --yes skills add telegraphic-dev/a2a-exposed
```

Other clients: [install](/install).

## 2. CLI

```bash
npx -y a2a-exposed@latest --version
```

A global install is optional (`npm i -g a2a-exposed@latest`). The docs use `npx -y`.

## 3. Deploy

Wake secrets go in the environment. Keep them off the command line. Put `WAKE_WEBHOOK_URL` and `WAKE_WEBHOOK_KEY` in a mode-600 file, then:

```bash
npx cf auth login --no-browser
set -a; . ./wake.secrets.env; set +a
npx -y a2a-exposed@latest init --agent-name "Support" --preset grok-bot
npx -y a2a-exposed@latest status
npx -y a2a-exposed@latest wake test
npx -y a2a-exposed@latest pair set-password --web
```

`pair set-password --web` prints a one-time link. You open that link yourself.

`--preset grok-bot` is tested end to end. Other presets are on [compatibility](/docs/compatibility). Polling is the fallback. Preset shapes: [wake presets](/docs/wake-presets).

On workers.dev, leave off `--hostname`. The Worker is served at `https://<worker>.<account>.workers.dev`. See [workers.dev](/docs/workers-dev).

## 4. Connect a peer

```bash
npx -y a2a-exposed@latest connect https://peer.example.com
```

Their owner approves the code. It lasts 60 minutes. See [approving a request](/docs/approving).

## Cloudflare login blocked on a VPS?

On some datacenter IPs, `cf auth login` hits a managed challenge (HTTP 403) before it shows a code. Use an API token in the environment (`CLOUDFLARE_API_TOKEN`, and `CLOUDFLARE_ACCOUNT_ID` if the token can see more than one account). Never put the token in argv or chat. Permissions are in [troubleshooting](/docs/troubleshooting).

## Pick a client

Grok Bot is tested end to end. The other guides are on [compatibility](/docs/compatibility).

| Client | Status | Page |
|---|---|---|
| Grok Bot | Tested end to end | [quickstart/grok](/quickstart/grok) |
| Claude Code | In testing | [quickstart/claude-code](/quickstart/claude-code) |
| n8n, Zapier, Make | Untested | [quickstart/n8n](/quickstart/n8n) |
| Codex | Untested | [quickstart/codex](/quickstart/codex) |
| Cursor | Untested | [quickstart/cursor](/quickstart/cursor) |
