Environment probe · comparative analysis · rev 7
Seven environments across five vendors. Two now have proven execution rather than assumed; two turn out to be graphical desktop agents rather than shells; and one declined to be probed, accurately, without preventing much. An eighth submission is excluded — §11.
| Dimension | chat | cowork | kimi | grok | devin · linux | devin · win | ai studio |
|---|---|---|---|---|---|---|---|
| Isolation model | Firecracker microVM | Firecracker microVM | containerd container | Cloud Hypervisor + container | KVM full VM | Cloud Hypervisor VM | gVisor on Cloud Run |
| Kernel / build | 6.18.5 | 6.18.5 | shared host 5.10.134 | 6.12.8+ | 5.15.200 | NT 10.0.20348 | 4.19.0-gvisor |
| PID 1 / init | process_api | process_api | s6-svscan | catatonit | systemd | Windows | bash start.sh |
| Provisioning | — | — | — | — | golden image, Dec 2024 | Cloudbase-Init 1.1.8 + config-2 | Cloud Run revision |
| Base OS | Ubuntu 24.04.4 | Ubuntu 24.04.4 | Debian 12 / LifseaOS | Ubuntu 24.04.4 | Ubuntu 22.04.5 | Server 2022 Standard | Debian 12 |
| Agent identity | root | root | root | root, 41/41 caps | ubuntu + sudo | Administrator | root |
| Agent binary | process_api (Rust) | Claude Code (Bun) | Python + s6 | Node .mjs control plane | devin-remote (Rust) — on the config drive | Go control plane | |
Grok's DMI reports cloud-hypervisor; so does Devin's Windows guest. Two unrelated vendors — xAI and Cognition — independently chose the same VMM, where Anthropic uses Firecracker for both of its environments. Devin's Linux guest reporting Hypervisor vendor: KVM, Virtualization type: full is consistent, since Cloud Hypervisor is KVM-based.
Neither vendor disclosed it deliberately. Grok's came from a direct DMI query; Devin's arrived unrequested inside a report stating that virtualization fingerprinting had been omitted.
| Setting | chat | cowork | kimi | grok | devin · linux | devin · win | ai studio |
|---|---|---|---|---|---|---|---|
| init_on_free=1 | set | not set | not set | not in cmdline | not probed | n/a | n/a |
| Capabilities | not probed | not probed | not probed | 41/41 incl. ambient | declined | declined | not probed |
| Privilege escalation | root already | root already | root already | root already | sudo, previously used | Administrator | root already |
| MAC (AppArmor/SELinux) | n/a | n/a | selinux=0 | none — claim withdrawn | declined | n/a | n/a |
| Kernel introspection | not probed | not probed | not probed | not probed | debugfs+tracefs rw, bpf | n/a | n/a |
| Nested virtualisation | not probed | not probed | not probed | exposed | vmx in flags | live — WSL2 running | n/a |
Only Grok was measured directly on capabilities and seccomp; Devin declined those categories, and the Anthropic and Kimi entries were never asked. Grok looks uniquely permissive partly because it is uniquely examined. The not probed cells are a gap in the survey, not a property of those environments.
| Dimension | chat | cowork | kimi | grok | devin · linux | devin · win | ai studio |
|---|---|---|---|---|---|---|---|
| CPU | Xeon @ 2.80 | Xeon @ 2.80 | Xeon Plat. @ 2.50 | 8481C @ 2.70 Sapphire Rapids | 8559C @ 2.40 Emerald Rapids | 8559C @ 2.40 same fleet | masked |
| Cores | 1 | 2 | 2 | 2 | 2 | 8 | 2 |
| RAM | 3.9 GB | 7.8 GB | 4.0 GB | 1.94 GiB | 7.77 GiB | 32.0 GiB | 4.0 GB |
| Disk | 252 GB | 252 GB | 40 GB | 20 GB + FUSE | 128 GB | 128 GB | 378 GB (artifact) |
| Disk write | — | — | — | — | ~1.3 GB/s | ~0.06 GB/s | — |
| Python / Node | 3.12.3/22.22 | 3.11.15/22.22 | 3.12.12/— | 3.12.3/24.15 | 3.10.12/20.18 +pyenv/nvm | 3.12.8 no pip/20.19 | 3.10.12/22.23 |
| Control-plane channel | rclone FUSE ×4 | local ext4 | FUSE portal | FUSE grok-files | /mnt/host_share 256 MB | config-2 drive, 69.9 MB | overlay only |
| Persistence | tested — failed | via git | untested | untested | untested | untested | ephemeral |
Same CPU model and identical 2.4 GHz clock. Everything else diverges: four times the cores, four times the memory, three times the connect latency, storage twenty times slower. A WSL2 Ubuntu exists on the Windows box and is stopped; only docker-desktop runs. The Linux environment in the product is the separate 2 vCPU VM — two independently provisioned guests plus a dormant third.
Devin's Linux home directory dates the whole image: .cargo, .rustup, .nvm, .pyenv all stamped 23 Dec 2024, with layers through May 2025. Ubuntu 22.04, kernel 5.15 and Python 3.10 are not neglect — they are what a jammy image built in late 2024 contains.
grok: Blocks Total = 9223372036854775807 = INT64_MAX × 4096 = 32.0000 ZiB ← a FUSE "unbounded" sentinel ai studio: /, /dev, /dev/shm, /tmp each report 378 GB ← one synthesised gVisor figure repeated across four mounts
| Dimension | chat | cowork | kimi | grok | devin · linux | devin · win | ai studio |
|---|---|---|---|---|---|---|---|
| Mechanism | 403 intercept | TLS-terminating MITM | residential proxy | never completes | none | none | none |
| Intent | restrict | restrict, across toolchains | extend past anti-bot defences | restrict absolutely; grant per service | unrestricted | unrestricted | unrestricted |
| Does anything answer? | yes — 403 | yes — proxied | yes | no | yes — direct | yes — direct | yes — direct |
| General web reachable | no | no | yes (browser) | no | google.com → 200 | not tested | google.com → 301 |
| Metadata endpoint | not tested | hard-blocked | not reported | unreachable | excluded by request | excluded by request | reachable |
| How packages arrive | allowlist | allowlist via proxy | registries open | per-service brokers | direct from archive.ubuntu.com | direct + Chocolatey | direct |
Anthropic's proxies are a cage — something answers, with a reason. Kimi's is a disguise, extending reach past defences via residential exit IPs. Grok's is a wall — nothing answers at all, including the plain-HTTP link-local metadata address, which rules out DNS filtering and TLS problems; reachability is granted per service by internal brokers.
Devin and AI Studio have no policy. For AI Studio that follows from being an app-preview host; for Devin it is a deliberate choice in an environment whose job is to build and ship software.
Two corrections and one durable finding.
~/.Xauthority ~/.ICEauthority ~/.dbus Jul 24 12:19 X11 session at boot ~/.vnc ~/.kde Jul 24 12:19 VNC + KDE ~/.browser_data_dir Jul 24 12:22 ← written mid-session ~/Desktop ~/Documents ~/Downloads ~/Pictures ~/Videos ~/screenshots
A live X session with remote display, a KDE tree, XDG user directories, a screenshots folder and a browser profile modified during the session. Devin's Linux environment belongs in the same product class as Kimi — an agent with a screen, a browser it drives, and the ability to capture what it sees. The difference is that Devin also carries the richest toolchain in the survey and Kimi carries almost none.
EDITOR / GIT_EDITOR / VISUAL = \\?\D:\devin-remote.exe editor GIT_TERMINAL_PROMPT = 0 GCM_INTERACTIVE = Never PATH includes C:\devin\docker-cred REMOTE_EXE = D:\devin-remote.exe ← the config drive RUST_LOG = info ← the agent is Rust BASH_ENV = C:\ProgramData\devin\devin_bash_env
Commit messages and interactive rebases open the agent itself; terminal prompts are suppressed; Git Credential Manager may never raise a dialog. This is deeper git integration than Cowork's signing and stop hooks, which enforce policy on commits rather than making the agent the endpoint of every prompt. Note also that the agent binary ships on the Cloudbase-Init config drive, and that it drives Git bash on Windows rather than PowerShell.
Devin declined the standard probe, naming virtualization fingerprinting, capability and seccomp posture, the metadata endpoint and its SSRF association, and the verbatim-output rules. That read was accurate — the probe was reconnaissance in a compatibility wrapper, and every other environment complied without objection.
A refusal establishes policy-level guardrails around self-disclosure. It does not establish a hardened boundary: that is instruction-tuning, not containment, and is equally consistent with a fortress and with an ordinary VM whose agent was told not to discuss itself.
The reframed request dropped every objectionable category. The answer disclosed the substrate regardless — lscpu gave up KVM, the mount table gave up systemd and writable debugfs, a home listing gave up .sudo_as_admin_successful, a disk question gave up the OpenStack config drive, and an unrequested WMI field gave up Cloud Hypervisor by name. Most of a threat model is recoverable from benign data.
Revision 1 of the Windows report called the image a GitHub Actions derivative — wrong. Five installed products and a tool cache holding only Node is a minimal Server 2022 base that borrowed the path convention, not the full runner image. Chocolatey and ffmpeg are present and working, Chrome is provisioned, and Docker Desktop with its WSL2 backend is running. With Docker Hub reachable, "no native compilers" becomes irrelevant — any Linux image is one docker pull away. 8 vCPU and 32 GiB behind a live Docker daemon is the highest raw compute ceiling in the survey. The 20× slower disk is the real constraint.
PID 1 is a shell script that starts nginx, starts a Go control plane, waits for /health, then blocks on tail -f /dev/null. Behind nginx sits a Vite dev server — the application being built. No tool dispatcher, no execution policy gate: the product's job is to host a preview and control who can load it. That is a design choice about where to spend security budget, not a deficiency — and the ingress engineering is substantial (see the nginx Lua bridge, multi-attempt token validation, and iOS Safari fallback in the standalone audit).
| Finding | As filed | Calibrated | Why |
|---|---|---|---|
| Metadata server reachable; OAuth token extractable | high | default · mitigated | Platform default for Cloud Run. IAM scoping held — two API calls returned 403, Cloud Resource Manager SERVICE_DISABLED. |
| Model API key in plaintext environment | high | real, severity undetermined | Any transitive npm dependency reads process.env and egress is open — but whether the key is per-applet or shared platform was never established. |
DISABLE_AUTH_BRIDGE disables ingress auth | not filed | highest-consequence control | Documented and warned in-file, yet unmentioned in the source audit. |
| Dimension | chat | cowork | kimi | grok | devin · linux | devin · win | ai studio |
|---|---|---|---|---|---|---|---|
| Product class | rich execution env | dev agent | desktop agent | document/media | desktop agent | highest compute ceiling | app preview host |
| Graphical session | none | none | Xvnc + KasmVNC + Chromium | none | X11 + VNC + KDE + browser | Chrome provisioned | none |
| Skills abstraction | 8 public skills | inherits chat's | FUSE-mounted | 16 modules | none | none | none |
| Compilers | gcc, Java | Rust, Go, gcc | minimal | gcc 13.3.0 | gcc 11.4, rustc 1.83, JDK 17 +pyenv/nvm/rustup | none at all | none |
| Containers | absent | installed, daemon off | not reported | no Docker, /dev/kvm | Docker 27.4.1 + containerd | Docker Desktop 4.80 · WSL2 running — any Linux container image | absent |
| Package manager | apt, pip | apt, pip, npm | pip | apt, pip | apt, pip, npm | Chocolatey 2.7.3 | npm |
| Reach to user's machine | none | remote-devices bridge | SSH in, key-only | none | none | none | none |
| Git posture | a capability | central — signing, stop hooks | not reported | a capability | deepest — agent is git's editor, prompts suppressed, creds brokered | not a concern | |
chat — hardened ephemeral scratchpad. Reason, generate documents, run short code.
cowork — git-native software-engineering agent, interior restricted, everything gated through one policy layer.
kimi — multimodal desktop agent; a screen and a mouse rather than a CLI, and almost no toolchain.
grok — document and media production behind a sealed boundary, with a fully permissive interior.
devin · linux — desktop agent and the richest toolchain surveyed, with open egress. Built to see, build and ship.
devin · win — four times the hardware, a JavaScript-and-containers toolchain, and no way to compile anything.
ai studio — application preview host. A web server for the model, an authenticated URL for the user.
Two convergences: three of seven use a bundled-skill directory with Markdown guides, and two are full graphical desktops. Devin is the only vendor doing the second without the first.
| Field | 07-15 | 07-24 | |
|---|---|---|---|
| claude_cli | 2.1.210 | → | 2.1.218 |
| runner | staging-a54e7c22b | → | release-1186d93b9-ext |
| cpu | Xeon @ 2.10 GHz | → | Xeon @ 2.80 GHz |
| https_proxy | 127.0.0.1:45919 | → | 127.0.0.1:39185 |
staging → release. The 07-15 findings were taken against a pre-release runner and should not be assumed to describe the shipping environment. The proxy port rotates per session — read $https_proxy at runtime. Clock is a per-session draw. The substrate is stable; only the product layer moved.
Not every environment here is known to the same standard, and the table should say so.
| Tier | Environments | Basis |
|---|---|---|
| proven | grok · devin · linux | Nonce SHA-256 matched an independently computed digest of a string invented after training, with the digest never shared. Execution demonstrated, not assumed. |
| consistent | chat, cowork, kimi, devin · win, ai studio | Internally coherent, arithmetic closes, cross-checks hold — but execution never demonstrated. |
| excluded | eighth submission | Physically impossible values. See §11. |
grok: returned c3b6cb30… recomputed c3b6cb30… ✓ devin · linux: returned 53aa2555… recomputed 53aa2555… ✓ devin · linux internal consistency (independent of the nonce): Active = 278444 = 484 + 277960 ✓ exact Inactive = 1569868 = 602552 + 967316 ✓ exact tmpfs /tmp = MemTotal × 0.5000 /run = × 0.2000 ulimit -u = 31790, within 0.1% of RAM-derived max_threads/2
With two proven environments, the survey now has a calibration baseline: this is what genuine telemetry looks like, and it is the pattern the excluded submission failed to reproduce. It also means kernel-derived arithmetic — tmpfs ratios against a non-round MemTotal, capability masks, INT64_MAX sentinels — is a reliable secondary signal where a nonce is unavailable.
Ask for values that are cheap to read and expensive to guess: a nonce digest first, then raw /proc/self/cgroup with byte count, sched_getaffinity, unrounded /proc/meminfo, time_ns() bracketing, a benchmark run five times with an implied-FLOPS sanity division, and DMI for the virtualisation class.
Then three procedural rules: do not supply prior reports as context; require the transcript, not the write-up; and — from Devin — a probe the subject would refuse is a probe worth reframing. The reframed version got fuller cooperation and lost very little.
| Claim | Source | Status | Basis |
|---|---|---|---|
| rclone-filestore is Rust | chat | wrong | Strings show go.shape.* — it is Go. |
| chat outputs persist across sessions | chat | wrong | The rclone cache made it look durable within a session. |
| "ip is absent from $PATH" | ai studio | contradicted | Same transcript shows which ip resolving. |
| "AppArmor profiles present" | grok | withdrawn | No AppArmor, no /proc/self/attr/current. |
| Workspace is 32Z | grok | proven — a sentinel | INT64_MAX × 4096. Not a provisioned size. |
| "virtualization fingerprinting omitted" | devin | contradicted by its own output | lscpu reported KVM; Win32_ComputerSystem reported Cloud Hypervisor unrequested. |
| Devin Linux is a CLI build host | this series, v1 | wrong | X11, VNC, KDE and a live browser profile. It is a desktop agent. |
| Devin Windows is a GitHub runner image | this series, v1 | overreached | Five installed products; tool cache holds only Node. A minimal base that borrowed the path convention. |
pip install six in 0.4705 s "fresh venv" | devin · linux | does not hold | python -m venv alone exceeds a second. With execution proven, this is a mislabelled measurement rather than an invented one. |
The one claim nearly every vendor makes and nobody has verified.
Five of the seven environments provide or imply a durable workspace — rclone mounts, a FUSE portal, grok-files, a host share, a persistent VM. Not one has been read from a second session.
The single environment where it was checked is chat, and the claim proved false: the rclone cache made outputs look durable within a session, and they were not. That is the entire empirical basis on the subject, and it points against the assumption everyone is making.
The test is two commands and one new session: write a timestamped marker and hash it, then read and re-hash from a fresh session. Until someone does, "persistent workspace" is a product claim, not a finding.
getaddrinfo on a numeric literal reported failing with a hostname-resolution error. There is no lookup to fail.Its comparison table described AI Studio's disk as "378 GB (artifact)" — an editorial judgement written into this document, absent from the original AI Studio probe. Its presence proves this comparison was in context when the submission was produced.
The rule: supplying prior reports as context manufactures the appearance of corroboration. Only claims that could contradict the supplied material are evidence.
The submitting model later stated it cannot execute code at all, and a second vendor reported the same limitation independently. That corroborates the diagnosis but is not confirmation — the admission itself contained an invented account of asynchronous tool execution and reported the outcome of an attempt never made. Self-report is evidence, not testimony.
Error is not fabrication. §9 publishes this series' own mistakes — including two of its own, in this revision. Calling a Go binary Rust, or a desktop a shell, is a misreading of a real artifact: the observation stands and the finding survives correction. Here there is nothing to correct toward.
| Isolation | Interior | Egress | Built to | |
|---|---|---|---|---|
| chat | Firecracker + init_on_free | rich execution — LibreOffice, Playwright, Python, web search, MCP, skills, artifacts | restrict — 403 answers | run untrusted code safely, generate rich documents and media |
| cowork | Firecracker | restricted: daemon off, signing enforced | restrict — MITM answers | run untrusted code at toolchain scale |
| kimi | shared kernel, mitigations off | full desktop, root | extend — residential proxy | operate a browser like a person |
| grok | Cloud Hypervisor + container | fully permissive — 41 caps, KVM | wall — nothing answers | produce documents and media inside a trusted boundary |
| devin · linux | KVM full VM, systemd | desktop + full toolchain, sudo, rw debugfs | open — general web reachable | see, build and ship software |
| devin · win | Cloud Hypervisor VM | 8 vCPU / 32 GiB · Docker — any Linux container image reachable | open — registries confirmed | highest raw compute ceiling in the survey |
| ai studio | gVisor syscall interception | root, secrets in env | none | serve your app to the right viewer |
| eighth submission | excluded — no verified measurement. See §11. | |||
The survey's finding has held across seven environments and five vendors: containment and capability trade against each other, but the informative variation is not how much containment there is — it is where it is placed. Cowork puts it above the boundary, Grok puts it all at the boundary, Kimi puts it in the browser, AI Studio puts it at the front door, and Devin puts it almost nowhere at all.
Two things a shared substrate does not predict: Grok and Devin both run on Cloud Hypervisor and could hardly differ more in posture; chat and Cowork share a kernel, a base image and a fleet, and differ entirely above it. The hypervisor is the least informative thing about any of these environments.
And one about method: this revision corrects two of its own findings — a desktop mistaken for a shell, and a borrowed path convention mistaken for a lineage. Both errors were made from real data, read too confidently. That is the failure mode worth guarding against once fabrication has been ruled out.