WI 1 (SPIKE, gates the rest) — hypervisor pick + refraction-forger rootfs with sccache inside #433
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
toasterson/Anima!433
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/wi-019f9079-wi-1-spike-gates-the-rest-hypervisor-pic"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Anima work item
019f9079-6122-7273-9898-255d99a43ba2.De-risk the whole plan before committing. Pick the hypervisor and prove the base mechanics on archibald. This is a SPIKE — the deliverable is a decision + a working demo, not production code.
UPDATE 2026-07-27 — the hypervisor question is largely answered; re-scope this spike
Till surfaced AgentENV (https://github.com/kvcache-ai/AgentEnv, MIT, Rust) — kvcache-ai's production sandbox platform for Kimi K3 agentic RL training. It is this exact design, already built and running at scale: Firecracker microVMs, snapshot-backed resume under 50 ms, pause under 100 ms, incremental snapshot under 100 ms, and native fork of a running VM into N independent sandboxes — which is precisely the "warm AND isolated" combination this plan has been chasing.
Harvest analysis:
docs/design/2026-07-27-microvm-harvest-agentenv.md(branchclaude/microvm-architecture-harvest-c5698c). Read it before starting this spike.The split decided there: vm-manager owns the host layer, Anima owns policy only. The hypervisor machinery is now filed as work in the vm-manager project — plan
019fa4aa-96db-7e93-95e3-106e09de824f"Snapshot-native VM lifecycle (AgentENV harvest)": Firecracker backend (WI 2),snapshot/restoreon theHypervisortrait + local POSIX snapshot store (WI 3), tap/slot networking (WI 4), warm pools (WI 5),fork()(WI 6). Solstice CI consumes the same layer via its own plan019fa4aa-cfce-7c12-bc96-ef1ee31121ab.So this spike no longer has to answer "Firecracker vs cloud-hypervisor" or "is vm-manager the orchestration layer" from scratch. The verdict, unless this spike disproves it on our hardware, is: Firecracker, via vm-manager. Two consumers now need the same thing, and building it twice is the failure mode to avoid.
Also settled by Till 2026-07-27, so do not re-open:
ssh2STAYS. AgentENV replaces SSH with an in-guestenvddaemon; we are NOT taking that. Snapshot resume already removes the boot-and-wait-for-sshd cost without touching the transport.NET_ADMINis accepted — tap/slot networking is faster than user-mode SLIRP and the capability is a smaller cost than the latency.What remains for this spike, on archibald, with our hardware: the rootless-KVM privilege question, the refraction-forger rootfs (now Firecracker-shaped: kernel + raw/ext4 rootfs, not QCOW2), sccache-in-guest reachability, vsock, memory caps, and the warm-build number. Everything below stands.
ROOTFS: CloudNebulaProject/refraction-forger is the client-OS image builder (https://code.aopc.cloud/CloudNebulaProject/refraction-forger) — use it to build the guest image, do not roll a bespoke one. It already produced the arm64 VM image whose opencode config the container runner mirrors. Note the shape change: Firecracker needs a kernel image plus a raw/ext4 rootfs, not a QCOW2 — coordinate with vm-manager WI 2, which has the same dependency.
Prove (deliverable = a reproducible demo on archibald)
Files to read (Anima repo)
docs/design/2026-07-27-microvm-harvest-agentenv.md— the harvest analysis and the three-project split. Start here.Dockerfile.runner— what the current executor environment contains (toolchain, sccache install, ACP CLIs) — the guest image must match this capability set.docker-compose.runner.yml— thex-runner-commonenv block is the authoritative list of SCCACHE_* / AWS_* / RUSTC_WRAPPER vars to reproduce in-guest, plus OPENCODE_MODEL / OLLAMA_API_KEY.deploy/runner/opencode.jsonanddeploy/runner/anima-opencode-acp— the baked opencode provider config + the wrapper the runner spawns. The guest needs the equivalent.docs/design/2026-06-11-acp-runner-architecture.md§4.2, §7.Tools
mcp__anima__findto locate the sccache/executor wiring;mcp__anima__get_documentfor the design doc;mcp__anima__post_messageto report the numbers to the WI thread. Bash/SSH to archibald for the actual boot tests.Output
A short decision doc (hypervisor choice + rationale, vm-manager verdict, rootless-KVM privilege caveat, boot/mem/warm-build/restore numbers) committed to
docs/design/, plus the refraction-forger image recipe committed reproducibly. Everything downstream (WI 2-7) assumes this choice — post the decision to the thread before those are released.Host constraint: a VM host must be Linux/KVM. archibald (amd64) works now; the future arm64 Linux Solstice host is the arm64 VM host. armini is macOS and can NEVER host guests.
WIP: WI 1 (SPIKE, gates the rest) — hypervisor pick + refraction-forger rootfs with sccache insideto WI 1 (SPIKE, gates the rest) — hypervisor pick + refraction-forger rootfs with sccache inside