# Custom Claude alias proof

AI-assisted; verified with the tests and tools listed above.

The replay provider cannot reproduce Claude Code's own alias expansion. This proof uses the real web client, real T3 server, and Claude Code CLI 2.1.322 with a synthetic local Anthropic endpoint. No model service is involved in the recorded responses.

## Setup used on both sides

1. Create a separate checkout of each commit and run `vp i`.
2. Run the attached `proxy.py` with Python 3. It listens on loopback port 18826, records only request path/model/time in `requests.jsonl`, and returns a streamed diagnostic reply based on the request's model.
3. Create an isolated Claude configuration directory with `settings.json` containing an `env` object with `ANTHROPIC_BASE_URL` set to `http://127.0.0.1:18826`, `ANTHROPIC_API_KEY` set to any dummy value, and `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` set to `1`. Set that directory in Settings > Providers > Claude > CLAUDE_CONFIG_DIR path. This isolates the endpoint from existing user settings; shell environment alone was overridden by those settings.
4. Start each checkout with `T3CODE_DEV_SEED=0 vp run dev`; use its own fresh database. Pair the web browser. Browser viewport: 1280 x 800 CSS pixels, device scale 2, light theme.

## Same UI flow on both commits

1. Settings > Providers > Claude > Models > Add custom model: enter `opus`, click Add.
2. Open a new thread in the server project.
3. Open the model picker, select the Claude provider tab, search `opus`, select the exact custom `opus` entry.
4. Close the thread details panel to keep machine details out of captures.
5. Type `Say hi`, start recording, and click Submit message.
6. Wait for the endpoint's response to appear and the turn to finish.

Base: the endpoint receives an expanded built-in identifier and replies `ALIAS COLLISION: endpoint received a built-in model instead of the custom route opus.`

Head: the endpoint receives exactly `opus` and replies `Endpoint received the exact custom route: opus.`

Captures crop the 256 CSS pixel sidebar from both sides and downsample to 1024 x 800. Response text is the endpoint's real streamed response, not a page overlay. No model identifiers were inserted into the UI after the run. Final stills were checked for stability with two captures separated by at least 500 ms; the displayed conversation regions matched exactly. Videos were inspected through frame contact sheets.

The original endpoint logs contain runtime identifiers and are deliberately not uploaded; the sanitized transcript describes the observed comparison.
