Reverse-Engineering Claude Web's MicroVM: Uncovering Anthropic's Hidden Antspace
TL;DR Highlight
Poking at a Claude Code web session exposed Anthropic's undisclosed deploy platform, Antspace
Who Should Read
Backend or infra developers designing sandboxes or deployment pipelines for AI coding agents
Core Mechanics
- The session runs on a Firecracker MicroVM
- dmesg ACPI tables carry the OEM ID FIRECK.
- Specs were 4 vCPUs, 16GB RAM, 252GB disk, Linux 6.18.5.
- PID 1 is a custom /process_api binary, not systemd.
- Sessions are snapshot restores, not boots
- A frozen template VM gets session-specific vda, vdb and vdc block devices swapped in.
- After restore it drops page caches, fixes the clock, reseeds the CRNG and drops CAP_SYS_RESOURCE.
- init_on_free=1 zeroes freed memory pages.
- An unstripped Go binary shipped in the VM
- environment-runner is a 27MB Go binary with debug symbols intact.
- go tool objdump and strings were enough to recover package layout and dependencies.
- Build metadata exposed the path into Anthropic's private monorepo.
- The deploy package has an Antspace client next to Vercel
- The flow is create deployment, upload dist.tar.gz, then an NDJSON status stream.
Community Reactions
- The title was called inaccurate
- One commenter said it is about Claude Code, not Claude web, and that it was already posted 3 times on HN.
- A question about how to actually use the platform
- A commenter asked whether you can tell Claude Code web to build and deploy, and whether you get a public URL.
- They also asked if the deployment survives after the session ends, which the article does not answer.
- A criticism of padding in the writing
- One commenter said the 'No systemd, no sshd' line can be cut since nobody would expect those here.
How to Apply
- Inspect your own sandbox first
- In a Claude Code session today, run dmesg, cat /proc/1/cmdline and ps -ef.
- Confirm the virtualization type and what PID 1 is.
- Check whether your Go release binaries are stripped
- Run file on the release binary and look for 'not stripped'.
- If you don't want internal paths exposed, add -ldflags "-s -w" to the build.
- Consider the snapshot-restore pattern for agent sandboxes
- If session start latency hurts, prebuild a template VM and attach per-session disks.
- Put cache drop, clock fix and RNG reseed in the post-restore init step.
- Add a stop hook to your agent's done criteria
- Write a script that checks git status, dev server logs and tsc --noEmit before exit.
- Block the agent from ending the session if any check fails.
Try It
# Paste into a Claude Code session terminal (reproduces steps 1-2 of the analysis)
dmesg | grep -i FIRECK | head -3
cat /proc/1/cmdline | tr '\0' ' '; echo
ps -ef | head
# Check whether your Go binary is stripped (replace {{binary}})
file {{binary}}
go version -m {{binary}} | head
# Next: rebuild with -ldflags "-s -w" and compare the file output and sizeTerminology
Related Papers
Same Simulation, Different Evidence: Where Retrieved Tool Output Costs LLM Agents Accuracy
Saving long tool output to files cut GPT-5.1 accuracy by 11.3 points; naming the authoritative file restored it.
Fake News, Real Crashes: Information Injection Attacks on LLM Financial Trading Agents
Fake headlines hijacked LLM trading agents 62% of the time versus 14% for prompt injection.
Harness Engineering 101: The LLM is the brain, the harness is the body
An agent is a loop managing a JSON array; 16 chapters build one from scratch
Harness2 by Google Research – Recursive Agent Harnessing
Recursively refining the harness with fixed model weights raised benchmark scores by up to 11.8 points.
Ousted Savannah police officer gave ICE agent husband access to Flock system
A police officer shared her Flock login with her ICE-agent husband; an audit found 983 searches and she was fired
Tmux and Claude Code: Sessions, Send-Keys, and the Ceiling
Running Claude Code agents in tmux works well, but limits appear around four agents.