De omgeving waarin een agent draait

Uiteindelijk is dit gunstig voor de klant, omdat de bedrijven achter deze agents nu VM's (Virtual Machines) leveren waarin de agents kunnen draaien. Hieronder volgen enkele aantekeningen over hoe de grote platforms werken, gebaseerd op onderzoek via ws-term.

Claude Code op je telefoon

De omgeving van Claude Code is een eigen Firecracker microVM; een KVM-guest met een eigen kernel die direct opstart in een in Rust geschreven init:

$ cat /proc/cmdline
... rdinit=/process_api ... --listen-vsock-port 2024
$ uname -r
6.18.5-fc-v20                 # -fc- staat voor Firecracker; een custom-built guest kernel
$ ps -o comm -p 1
process_api                   # PID 1 is geen systemd, maar een Rust/Tokio binary

processapi is PID 1 en fungeert als de control agent van de host binnen de VM: het mount de schijven en luistert vervolgens op vsock-poort 2024, zodat de host de sessie van buitenaf kan aansturen. Dit is het kenmerkende eigenschap van het platform: de operator bevindt zich in de tenant-ruimte van de gebruiker. Er is veel engineering gedaan om dit af te schermen (PID 1 is non-dumpable, /proc/1/mem wordt geweigerd, zelfs met CAPSYSPTRACE, en de shell mist CAPSYS_RESOURCE).

De schijven zijn strikt gescheiden in gebruikersschijven (beschrijfbaar, persistent) en platformschijven (alleen-lezen, gedeeld):

$ lsblk -o NAME,SIZE,RO,MOUNTPOINT
vda   256G  0  /                    # van de gebruiker: beschrijfbaar, blijft behouden na reclaim
vdc   341M  1  /opt/claude-code     # van het platform: de 324 MB `claude` harness (Bun)
vdd  45.6M  1  /opt/env-runner      # van het platform: de task launcher
vde/vdf ... 1  /mnt/skills/...      # van het platform: skills

De harness is het onderdeel dat de tool-aanroepen uitvoert; dit is een gecompileerd Bun-binair bestand van 324 MB op een schijf die alleen gelezen kan worden. Het model zelf draait elders. De inferentie verloopt via Server-Sent Events (SSE) over HTTPS/2 (geen WebSocket) naar /v1/messages, via een egress gateway die alleen poort 443 toestaat en gebruikmaakt van MITM (CN = Egress Gateway ... (production)), waarbij api.anthropic.com is vastgelegd in /etc/hosts. Er is geen inkomend verkeer mogelijk (gebruikmakend van 192.0.2.2, een RFC-5737 testadres). Authenticatie gebeurt via een door de host gegenereerd OAuth-token, dat root-only op de schijf is gecached en bij elke boot wordt geroteerd.

De levenscyclus wordt door de host aangestuurd en is van binnenuit meetbaar: circa 430 ms voor de init en 6,4 s voor het harness-proces. De spin-up wordt getriggerd door een inkomend bericht (de host wekt de VM via vsock en voert --session-mode resume uit); de spin-down is een idle reclaim die door de host wordt beslist. Wanneer de VM wordt teruggevorderd, sterven de processen, maar vda blijft intact en wordt bij de volgende koude start opnieuw gekoppeld. Hierdoor voelt het gesprek continu aan, ook al is de compute-omgeving vernietigd.

Instinct

Instinct is een onlangs gelanceerde startup die interessante oplossingen biedt voor het geheugenbeheer, waardoor het aanvoelt als een echte assistent in plaats van een chatbot.

$ hostname
e2b.local
$ cat /.e2b
n038afjvewg7jnc9pwdz

e2b.local geeft aan dat Instinct geen eigen VM-vloot beheert, maar E2B-sandboxes huurt ("sandbox-as-a-service"). Dit is een tijdelijke Ubuntu-box die aan een agent wordt toegewezen:

  • Specificaties: Ubuntu 22.04.5, 2 vCPU, 1,9 GB RAM, 29 GB schijfruimte, uptime ~30 min, gebruiker sandbox (uid 1001).

Kijken we onder de motorkap:

$ systemd-detect-virt                  →  kvm
$ cat /proc/cmdline
pci=off  virtio_mmio.device=4K@...  i8042.noaux i8042.nokbd  reboot=k  panic=1
clocksource=kvm-clock  root=/dev/vda  ip=169.254.0.21::...:eth0:off:tap0
$ cat /sys/class/dmi/id/product_name   →  (empty)      # geen SMBIOS aanwezig
$ ps -o comm -p 1                      →  systemd       # init=/sbin/init, geen custom PID 1

Ook hier wordt Firecracker gebruikt. De combinatie van pci=off, virtio-over-MMIO, een lege DMI en tap0-netwerking is het kenmerk van Firecracker: geen PCI-bus, geen SMBIOS en minimale apparaten. Beide applicaties draaien dus op dezelfde microVM; het verschil zit in wie de vloot beheert en wat erin opstart. Waar Claude Code een gestripte custom init opstart (process_api als PID 1), start E2B een volledige Ubuntu met systemd en een XFCE-desktop:

$ systemd-analyze
Startup finished in 265ms (kernel) + 992ms (userspace) = 1.258s
graphical.target reached after 977ms

Het duurt ongeveer 1,26 s om volledig koud te starten tot aan een grafische desktop. Ook hier is er een operator in de guest, maar dit is simpelweg E2B's envd die draait als een gewone systemd-service, en niet als een afgeschermde PID 1. E2B-sandboxes zijn configureerbaar (vCPU, RAM, schijfruimte, idle-timeout en de optie om te pauzeren en te hervatten vanuit een memory snapshot in plaats van een koude start). Instinct gebruikt een bescheiden template van 2 vCPU / 1,9 GB desktop.

Het geheugenmodel van Instinct

Als de box wegwerpbaar is, waar leeft het geheugen van de agent dan? In een directory genaamd /memory. Dit is het kernidee van het platform:

$ cat /memory/README.md
Persistent memory for [[rohan-adwankar]]
$ ls /memory
entities/  comms/  timeline/  workstreams/  knowledge/
$ git -C /memory log --format='%an <%ae>' -1
Instinct Agent <agent@instinct.com>

Het geheugen van de agent is een git-repository van Markdown-bestanden met [[wiki-links]], die doorzocht worden met grep. De timeline/ wordt na verloop van tijd grover (ruw → per uur → per dag → per week, vergelijkbaar met het menselijk geheugen). De agent is letterlijk de git-auteur: hij roept geen memory-API aan, maar schrijft Markdown en commit dit onder eigen naam.

De duurzame laag is deze repository, die naar S3 wordt gepusht, gekoppeld aan een per-gebruiker ID. Deze wordt niet als losse bestanden opgeslagen, maar als één enkel git-bundle:

$ git -C /memory remote -v
origin  s3://instinct-prod-agent-memory/filesystem-memory/user-01M1VW7...
$ aws s3 ls s3://.../user-01M1VW7.../ --recursive
HEAD
refs/heads/main/<sha>.bundle     # De gehele vault, gepakt

Authenticatie gebeurt via kortstondige STS-credentials in plaats van permanente keys, waardoor een gelekte sandbox zichzelf "herstelt" zodra het token verloopt:

$ cat /etc/instinct-aws-creds
export AWS_ACCESS_KEY_ID='ASIA…'     # ASIA prefix + session token = tijdelijke STS

De structuur van de vault ziet er als volgt uit:

  • comms/: chat, e-mail, meetings (één bestand per thread).
  • entities/: mensen, projecten (de 'zelfstandige naamwoorden' van de wereld van de gebruiker).
  • knowledge/: feiten, procedures, voorkeuren, beslissingen.
  • timeline/: chronologisch verslag (ruw → uur → dag → week → maand).
  • workstreams/: actieve, voltooide en toekomstige taken.

Uitvoering en Tools

Terwijl de harness van Claude Code in de VM open source is, werkt Instinct anders. Er zijn geen inferentie-aanroepen op de box zelf:

$ ps -eo args | grep -E 'agent-exec|tools'
agent-exec-server --port 8080                    # Go, voert de bash/code uit die het ontvangt
tools __internal_daemon --socket /tmp/.tools/bridge.sock \
--base-url https://api.instinct.com/-/api/graphql/tool-execute   # Rust

Er zijn geen modellen vermeld in de binary's. Claude Code sluit de operator op in de guest; Instinct plaatst het "brein" helemaal niet in de guest. De sandbox is een puur uitvoeringsvlak: agent-exec-server voert de bash uit die de backend aanlevert, en elke tool-aanroep (Gmail, cloudbrowser, betaling) vertrekt als een GraphQL-verzoek naar api.instinct.com en wordt server-side uitgevoerd.

Voor de tool-interface gebruikt Instinct een CLI in plaats van MCP's. De tools --help output onthult dat dit geen coding sandbox is, maar een tool-interface met circa 50 namespaces (Gmail, Notion, Slack, Stripe, etc.).

Het meest onthullende onderdeel is de cloud_browser:

$ tools --help | grep -iE 'cloud_browser|vault'
cloud_browser            (27)  Drive a cloud-hosted Chrome lease with the user's saved logins.
cloud_browser_scheduler  (4)   acquire, list, release, extend leases
vault                    (7)   Manage, fill, and import the user's stored credentials

Wanneer Instinct voedsel bestelt of een vlucht boekt, opent hij geen browser in de sandbox. Hij huurt een browser uit een aparte pool van cloudbrowsers, elk met het opgeslagen profiel van de gebruiker (cookies en logins), en bestuurt deze via de api.instinct.com bridge.

De browser-identiteit is hiermee het derde duurzame onderdeel (naast de S3-vault en de observatie-index). Dit stelt de wegwerpbare box in staat om een browser te lenen voor één taak en deze daarna terug te geven. Twee details zorgen ervoor dat er nooit geheimen op de box terechtkomen:

  1. Scouting: tools browser_guidance search geeft gecureerde per-site notities en eerdere resultaten per profiel terug.
  2. The Vault: Geheimen gaan via de Vault, nooit via de chat. tools vault fill typt een opgeslagen inloggegeven direct in de pagina.

Samenvatting

KenmerkClaude CodeInstinct
Isolatie-primitiefFirecracker microVM (KVM)Firecracker microVM (KVM)
Beheer vlootAnthropic (eigen)E2B (gehuurd, derde partij)
Guest in VMGestripte custom init (process_api)Volledige Ubuntu + systemd + XFCE desktop
Koude start~430 ms init, ~6,4 s naar harness~1,26 s naar grafische desktop
Wat is duurzaamDe machine (vda block volume)Een git-repo in S3
GeheugenmodelConversatie-status op schijfMarkdown vault, git-versioned, agent-authored
CredentialsHost-minted OAuth, op schijf, geroteerdKortstondige STS, role-scoped
Backing storeLocal virtio-blockS3, gekoppeld aan per-gebruiker id
Locatie harnessOp de box (324 MB Bun binary)Buiten de box; box bevat twee execution shims
Toegang modelSSE naar /v1/messages via egress gatewayNooit vanaf de box; GraphQL naar api.instinct.com (server-side)