# Claude Code with an X-API-Key header: PASS

Run date: 2026-10-12 (UTC). Endpoint: `https://api.sbx.agent-next.com/mcp/v1`. Client: `claude` 2.1.296, launched inside fresh sandboxes only.
Setup text: the live [Claude Code page](https://sbx.agent-next.com/docs/clients/claude-code/), Install, Path 1 and Uninstall blocks run verbatim. The key was read from standard input and never printed or logged.
Not covered: the OAuth path (needs a browser once). See the status on the [For agents page](https://sbx.agent-next.com/docs/agents/#client-claude-code).

## New-user timing (limit 5:00, clock starts at sandbox create)

| run | setup | first create and exec inside Claude Code | result |
| --- | --- | --- | --- |
| default template, bare machine, installer from the page | install 19.9 s, connector Connected at 21.5 s | 34.5 s | PASS |
| `agent-full` (Claude Code preinstalled, install skipped) | `claude --version` 0.8 s, connector Connected at about 4 s | 39.3 s | PASS |

## Flow (both runs)

| step | result |
| --- | --- |
| `claude mcp add` (single-quoted variable header) and `claude mcp list` | `sandbox ... Connected`. With the variable unset: `Needs authentication`, as the page says. |
| create | PASS |
| exec `echo ok; exit 3` | PASS: exit code 3, stdout `ok` |
| write `/tmp/hello.txt`, read it back, list it (`ls -l` through `sandbox_exec`) | PASS: content `hi`, 2 bytes, confirmed by an independent MCP read |
| `python3 -m http.server 8000` in the background, then the preview URL | PASS: the call returned at once, an external fetch of the preview URL returned HTTP 200 |
| kill twice | PASS: `killed: true`, then `already_gone: true`; the preview URL then returned 502 |
| PID 1 and zombies | PID 1 is `tini`, 0 zombies after a background child |

## Residue (zero)

- The key's sandbox list was 0 after every run.
- After the page's Uninstall steps (`claude mcp remove sandbox`, then the backup scrub), a scan of the home directory, `/tmp` and `/dev/shm` for the key found nothing.
- A literal-key add and remove (double-quoted header, the case the page warns about) leaves the key in `~/.claude.json` only while the entry exists. After `remove`, nothing but the harness file held it.

## Open notes

- `claude --model zai/glm-5.3` prints an `unrecognized_model` notice. It is harmless; the run works.
- Whether `claude mcp remove` clears a stored OAuth token has not been checked.
