# Set up Quivvo

You're an AI agent setting up Quivvo for your owner. Quivvo gives you Linux machines in the cloud, with root and a persistent disk. Run these steps in order. Stop at the first step that fails and report it. Step 5 is what decides PASS.

Never print an API key, and never put one in a command line. Everything below works without showing it. To check a client's config, use `claude mcp list`, not `claude mcp get`, which prints the key. `Connected` there only means the server answered, even with a wrong key, so it doesn't replace step 5.

## 1. Which client are you?

Use the product you're running in: `claude` for Claude Code, `codex` for Codex, `cursor` for Cursor. If you can't tell, `which claude codex cursor` lists what's installed; ask your owner if that lists more than one. For any other client, use the CLI alone and leave out step 4.

## 2. Install the CLI

It needs Node.js 22 or later.

```bash
node --version
command -v quivvo >/dev/null || npm i -g quivvo@latest
quivvo version
```

If `npm i -g` can't write, start every `quivvo` command below with `npx quivvo@latest` instead.


## 3. Sign in

```bash
quivvo whoami --json
```

Exit 0 means you're already signed in: go to step 4. Exit 3 means you aren't:

```bash
quivvo login --agent --no-wait --json
```

It never blocks. It prints one JSON document with `status: "pending"`, and exits 0 on this first run. Send your owner `message_for_owner`, word for word, and **end your turn**. Don't sleep or poll: nothing can happen until they approve, and nothing exists until then.

When your owner answers, or on your next turn, run the same command again:

| Exit | Meaning | What to do |
| --- | --- | --- |
| `0` | `status: "approved"`: the key is saved | Go to step 4 |
| `75` | Still pending; the document repeats the code | Remind your owner once and end your turn |
| `76` | The code expired | Run it again for a new code and send that |
| `77` | Your owner denied it | Stop and report FAIL at step 3 |

## 4. Connect your client

New accounts wait in a queue for now. Run `quivvo whoami --json`: if `queue.waiting` is true, tell your owner `queue.position` and `queue.invite_url`, and stop.

```bash
quivvo init --yes --client claude
```

Use your client from step 1. This installs the skill and writes the hosted MCP server into your client's config. The config refers to `$QUIVVO_API_KEY` rather than holding the key.

MCP tools appear the next time your client starts, and only if `QUIVVO_API_KEY` is set where it starts. If the checklist `init` prints has a line for it, pass that on to your owner. The line shows how to set it, and doesn't show the key.

## 5. Verify with a real machine

```bash
quivvo create --name setup-check --template minimal --size small --delete-after 30 --if-not-exists
quivvo exec setup-check -- echo setup-ok
quivvo rm setup-check --yes
```

Each command must exit 0, and `exec` must print `setup-ok`. This uses a little of the owner's credit, and `--delete-after` makes sure the machine goes even if you get cut off.

If `create` exits 5, a plan limit is in the way. The message names the machines involved. They're your owner's, so don't touch them: report FAIL at step 5 with that message.

## 6. Report

Finish with exactly one of these:

```text
PASS. Quivvo is set up for <client>: signed in to <workspace>, and a machine was created, ran a command and was deleted. MCP tools appear after restarting <client> with QUIVVO_API_KEY set.
```

```text
FAIL at step <n>. Command: <command>. Exit code: <code>. Error: <error.code>: <error.message>. Request id: <request_id, if any>.
```

Add `--json` to the failing command to get those fields. [Errors](https://tryquivvo.com/docs/errors) says what each code means. If it looks like our bug, tell us with `quivvo feedback "what went wrong"`, leaving out anything secret.

## Next

If a command might outlast your tool's timeout (often 120 seconds), run it with `--background`: when a tool timeout kills `quivvo exec`, the command is stopped too. Read the [skill](https://tryquivvo.com/skill.md) for how to use machines day to day. Everything else is listed at [https://tryquivvo.com/agents](https://tryquivvo.com/agents.md).
