Releases
v0.3.0
Compare
Sorry, something went wrong.
No results found
0.3.0 (2026-06-14)
Features
AAAA/IPv6 answers in the name egress allowlist (314104c )
add --rootfs-cow-dir and --template-rootfs flags to husk-stub (d957c7e )
add forkd NDJSON exec-stream endpoint and aggregate one-shot exec on it (51a679d )
add host vsock ExecStream over a dedicated connection (1be44f1 )
add PatchDrive to the husk vmm interface (ea8a46a )
add per-pool claim-arrival demand tracker (0c8d1ff )
add pluggable KMS Wrapper with a local AES-256-GCM KEK provider (0c0709f )
add Python streaming exec callbacks and background process handle (bf7a185 )
add TypeScript streaming exec callbacks and background process handle (3150202 )
add vsock exec-stream frame protocol types (7beb8b9 )
add warm-pool autoscale metrics (size, in-use, desired, scale events, latency) (896d353 )
add warm-pool autoscaling fields to SandboxPool (fa5f9e2 )
add warm-pool desired-count formula with scale-down cooldown (6d7d4d1 )
agentrun CLI command tree and Backend interface (91a9dd8 )
agentrun dev up/down and cluster backend (86485fc )
agentrun-mcp binary with an HTTP sandbox backend (05b8369 )
agents.x-k8s.io facade controller maps Sandbox to our husk run path (cd3fa21 )
attach volume drives, placeholder at snapshot, rebind per fork (cf44c07 )
autoscale the husk warm pool from claim demand in the pool reconcile (c5f07c0 )
benchstat percentile summarization and result formatting (36c03b6 )
bind a sandbox to a workspace and hydrate/dehydrate its revisions (84aa350 )
bounded CAS cache with LRU eviction and manifest pinning (8d0aaaa )
bulk workspace tar transfer over vsock and CAS hydrate/dehydrate helpers (041a285 )
capacity-aware bin-packing node selection (6f0e3f6 )
carry the trace id in the revision.created feed event; docs (ced246f )
CAS transfer interface and HTTP transport for incremental snapshot pull (2f63ee9 )
claim activates a dormant husk pod in place via the mTLS control channel (1be9bb1 )
claims pend on no capacity and fail cleanly after a bounded wait (e1d6728 )
cli: cluster workspace backend (#21 ) (8dc7289 )
cli: mitos ws create|ls|log|diff|fork|revert|rm|bind (#21 ) (f0458d4 )
cli: workspace backend interface and fake (#21 ) (cf738dd )
clone per-activation rootfs at husk Prepare (328712c )
cmd/bench fork-exec and exec round-trip latency driver (f47453c )
complete epic W4 (durable, forkable agent workspaces) prod-grade (ffbcaef )
controller loads the KEK from --kek-file and injects it into the reconcilers (f2076a2 )
controller owns the per-template encryption key Secret and delivers it (bd9146a )
controller passes template NetworkPolicy to forkd (44c5703 )
controller wraps the DEK with the KMS and delivers the wrapped DEK over the RPCs (3723040 )
controller: add husk fork-snapshot and remove control clients (d0875c1 )
controller: build fork-child husk pods owned by the SandboxFork (020645f )
controller: live SandboxFork on the husk pod-native path with snapshot GC (9841e1e )
controller: mount fork snapshot dir and pin fork child husk pods (8d1ff8a )
controller: replicate husk PKI secrets into pool namespaces (30128b2 )
controller: replicate husk PKI secrets per pool namespace on reconcile (731982c )
controller: set husk pod memory limit with headroom (1283946 )
controller: wire husk fork config into the SandboxFork reconciler (11044e4 )
controller: wire memory-snapshot seams behind a flag (#21 ) (b1d3915 )
CoW-aware memory metering counts shared template memory once (9320294 )
daemon stashes the wrapped DEK and KEK id from the mTLS request (4cfb8b6 )
daemon: cap concurrent streams per sandbox (ae8383c )
daemon: LLM-legible error envelope with code and remediation (b8f4c02 )
deploy the pod-native default stack (controller husk mode, device plugin, husk-stub image) (5d13cc0 )
deploy: ship the ghcr-pull image pull secret manifest (7186314 )
deploy: stage the guest kernel on KVM nodes via a DaemonSet (ade4725 )
dev overlay deploys a mock control plane for agentrun dev up (a54c778 )
encrypt template snapshots at rest in per-scope LUKS containers (c3d910b )
engine builds templates from OCI images and runs init in the VM (1cad6a5 )
facade maps Sandbox pause/resume to warm-pool release and fast re-activation (8e1f92f )
facade maps SandboxClaim with warmpool policy to our fork-from-snapshot claim (e9b21d6 )
facade maps SandboxTemplate and SandboxWarmPool to our template and pool (d0d5fbc )
feed warm-pool autoscaler from claim arrivals and record claim-wait latency (cf8d4a0 )
fork: add on-disk sandbox journal for crash recovery (06869e0 )
fork: add procfs PID-recycle guard for crash reconcile (d7d37fc )
forkd loads the local KEK from --kek-file and fails closed without it (18ae8e9 )
forkd reports host memory total and per-template capacity estimates (bf23c94 )
forkd runs the DNS proxy and points guests at it for name egress (7b639fb )
forkd serves its CAS and pulls templates from a peer (1979c4e )
forkd takes the encryption key from the mTLS request, not the node (eaa341c )
forkd unwraps the wrapped DEK via the KMS and zeroizes the plaintext (a0f1b26 )
forkd: add POST /v1/run_code/stream NDJSON endpoint (b253ab9 )
forkd: add token-gated WebSocket /v1/pty endpoint (f71fe7f )
fork: enforce MaxSandboxes host-DoS ceiling at Fork (bfda01f )
fork: reap or re-adopt pre-crash VMs on forkd startup (86cfbf4 )
git rendezvous pushes workspace repo paths for fork-and-merge (1ba8931 )
Grafana dashboard and completed conditions catalogue (31eb208 )
guest mounts attached volume drives at their mount paths (df345e9 )
guest: add in-guest Jupyter kernel driver for run_code (b694527 )
guest: add kernel manager driving the in-guest run_code kernel (c48b60b )
guest: allocate PTY shell and pump bidirectional I/O over vsock (3aeebd0 )
guest: route TypeRunCode to a persistent per-sandbox kernel (072cb4d )
husk Activate runs the fork-correctness handshake, fail-closed (7cc4d1a )
husk mode builds the snapshot and is the default; raw-forkd behind a flag (d39b3bd )
husk pod PDB, self-heal on delete, claim re-pend on pod loss, drain policy (dea5f86 )
husk pod satisfies PSA restricted minus documented exceptions; networking reconciliation (778b09b )
husk pod spec and warm-pool lifecycle controller behind a flag (a421bbc )
husk stub mTLS network control server and controller activation client (c105902 )
husk-probe measures CoW page sharing across cgroup v2 memcgs (cac40ad )
husk-stub: add fork-snapshot control client mode for CI (78714c5 )
husk: add fork-snapshot control messages and codecs (4034e36 )
husk: dispatch fork-snapshot and remove ops over mTLS control (5d4cd34 )
husk: extend vmm interface with Pause and CreateSnapshot (f50074b )
husk: live SandboxFork on the husk pod-native default path (fffb2a4 )
husk: snapshot the running source VM in place (fork-snapshot op) (fada0b4 )
image: bake ipykernel and the run_code driver into the base image (1927dfa )
internal/cas content-addressed snapshot store with dedup (ef119ee )
internal/dnsproxy resolves allowlisted names and pins resolved IPs (a902f71 )
internal/husk dormant-VMM stub with in-place activation (83b7188 )
internal/mcp server, tool definitions, SandboxBackend interface (edb3c29 )
internal/network Linux tap and nftables egress manager (c227f5c )
internal/ociroot pulls and flattens OCI images into an ext4 rootfs (91d44ed )
internal/storecrypt per-scope LUKS containers with crypto-shred (b0dbb94 )
internal/volume node backend with Fresh and reflink Snapshot policies (785e7ef )
kubectl sandbox logs and exec; Box competitor positioning (7e7de26 )
kubectl sandbox plugin with ls and ps (d6f2e07 )
kubectl sandbox tree and top operator verbs (19a1b51 )
kvm device plugin advertises agentrun.dev/kvm and injects /dev/kvm (25ac7bb )
memory-snapshot pairing makes a workspace head resumable (543a537 )
metering endpoint, CoW disk accounting, corrected metrics (7702738 )
mount writable rootfs CoW dir and pass clone flags to husk pod (a3ead1c )
netconf identity allocator, nftables rendering, command builders (7d899be )
OpenTelemetry tracing across the claim and fork path (51651d7 )
pending-claims, orphan-sweep, and claim-error metrics (a400fa2 )
per-sandbox network identity and NIC attach wired into the engine (3834ec3 )
per-sandbox nftables dynamic allow set for resolved names (58c45dd )
plumb template volumes and fork policies through to forkd (f5331b9 )
pool reconciler builds a template once and distributes by pull (128222f )
production deploy manifests with RBAC and a kustomize base (1f13978 )
PrometheusRule alerts and runbooks for the exported metrics (20e4527 )
proto carries the wrapped DEK and its KEK id (ddaa12b )
rebind rootfs drive to per-activation clone at husk Activate (8f29a7e )
register per-sandbox stream path in forkd and sandbox-server fork paths (e60814a )
remove per-activation rootfs clone on husk teardown (eb43a79 )
rendezvous: authenticated git-http rendezvous server (#21 ) (2976086 )
sandbox-server: mount the PTY WebSocket route (9422834 )
SandboxServer and cluster AgentRun TypeScript clients (035c497 )
sdk-python: add async create_pty on AsyncSandbox (3057a97 )
sdk-python: add Execution/Result/ExecutionError types (f32e8f1 )
sdk-python: add run_code with streaming callbacks (729ef7d )
sdk-python: add sandbox.pty interactive terminal handle (sync + async) (075dc1a )
sdk-python: AsyncAgentRun and AsyncSandbox for the hot paths (9667bfc )
sdk-python: one-liner sandbox(image=...) with a lazy default pool (b7b312b )
sdk-python: structured AgentRunError parsed from the server envelope (a2b3999 )
sdk-python: wait_until_ready() and from_name() durable handles (313e762 )
sdk-python: Workspace handle and git verbs (#21 ) (be8bc85 )
sdk-ts: add Execution/Result/ExecutionError types (69d43d0 )
sdk-ts: add runCode with streaming callbacks (997dfb6 )
sdk-ts: add sandbox PTY interactive terminal client (b5fe0d5 )
sdk-ts: parse the server error envelope; sandbox(image) and fromName (cc1fddd )
sdk-ts: Workspace handle and git verbs (#21 ) (23e325c )
snapshot format version and compatibility contract (snapcompat) (3d99f8e )
stamp and enforce snapshot compatibility on load (43fcf81 )
stamp the reconcile trace id onto the workspace revision; dehydrate span (541c840 )
stream guest exec stdout/stderr over vsock with pgroup kill (34b5861 )
Talos machine configs for KVM-capable worker nodes (21ce7bb )
toggleable structured audit log of exec and file operations (3d0aad4 )
TypeScript SDK package, types, HTTP transport, Sandbox surface (00e7f01 )
verify-on-load snapshot integrity with digest in pool status (#9 ) (78f4ac9 )
vsock: add bidirectional PTY methods to StreamConn (0dabdc4 )
vsock: add host-side RunCode streaming client method (bd5ee8f )
vsock: add PTY request and frame protocol types (37ab5c0 )
vsock: add TypeRunCode and result/error stream frames (91a0395 )
wildcard suffix names in the egress allowlist with anchored matching (1f2fac5 )
Workspace and WorkspaceRevision CRD types (2113f67 )
Workspace controller with revision lineage, retention, and status (b89f77f )
workspace outputs extraction with path filter and revision diff (97d1c22 )
workspace revision change feed via CloudEvents and Kubernetes Events (b11d33c )
workspace: fork/revert verbs with LLM-legible rejection (#21 , #28 ) (a7253f0 )
workspace: per-workspace encryption key (#31 , #21 ) (b84e751 )
workspace: S3 object-store backend (#21 ) (10e2b18 )
workspace: Secret-backed git rendezvous credentials (#21 ) (3d610d5 )
workspace: wire live husk workspace hydrate/dehydrate transport (#21 ) (3316ace )
Bug Fixes
accurate NoCapacity condition per re-pend cause; document husk hard-node-loss latency (46c2fc2 )
agentrun help works without a kubeconfig (a46ef4a )
bench measures fork to first exec, teardown excluded (913ae5e )
CAS CI phase uses guaranteed real files; chmod kvm in snapshot step (ec6f687 )
CAS removes partial output on verify failure, single-pass PutSnapshot (71613f5 )
ci-runner: e2e namespace must be PSA enforce: privileged for husk hostPaths (995dffe )
ci-runner: e2e namespace PSA enforce privileged (husk hostPaths) (cd78401 )
ci-runner: grant runner daemonsets get/patch for forkd deploy-under-test (d40c082 )
ci-runner: grant runner workspaces/workspacerevisions for the W4 e2e (34c461e )
ci-runner: grant the runner daemonsets get/patch (forkd deploy-under-test) (48d6590 )
ci-runner: make the self-hosted runner + cluster-e2e actually work (verified live) (3daa57f )
ci-runner: registration entrypoint, runAsUser pin, ghcr pull secret (2b9fba4 )
conflict-tolerant facade test spec updates (67aa819 )
conflict-tolerant facade test spec updates (7dcb7b9 )
controller: clean up per-pool demand entry and metric labels on pool delete (3af993f )
controller: do not let GC node-loss fail a recoverable husk claim (6dfd6dd )
controller: enforce MaxSandboxes count ceiling at schedule time (6b63af6 )
controller: re-pend raw-forkd claim on ResourceExhausted/Unavailable (6e9e4ad )
controller: settle an unplaceable husk claim so it stops hot-looping (#130 ) (4b92e6c )
controller: tie node health to a forkd liveness probe (a5f6a1c )
cow: keep the template mount read-write so snapshot load opens the baked rootfs (646a15d )
default controller namespace to mitos (was mitos-system, inconsistent with the deploy namespace + namespace.yaml after the rename) (7529d7f )
deploy: enforce privileged PodSecurity on pool namespaces (56110f3 )
deploy: enforce privileged PodSecurity on the mitos namespace (4d7e2c7 )
deploy: forkd agent-bin, privileged, DOCKER_CONFIG, drop jailer args (ffe8592 )
deploy: grant leases to the dev mock controller for leader election (3ef03e4 )
deploy: wire ghcr-pull onto the controller serviceaccount (6db590d )
device-plugin e2e proves /dev/kvm injection on the kvm-capable runner (7f179b5 )
dnsproxy refuses when the source guest has no tap mapping (12dbc96 )
drop husk-pod reuse so an evicted claim recovers onto a fresh pod (c190523 )
drop husk-pod reuse so an evicted claim recovers onto a fresh pod (868f235 )
e2e: thread fork timeout in SDK; make husk-e2e PTY stage best-effort (a731016 )
e2e: thread fork timeout in SDK; make husk-e2e PTY stage best-effort (95bf424 )
emit phase.changed from an uncached read so the event is never dropped (617808d )
encryption cleanup on failed build, destroy in-memory key on shred, serialize container open (0fc2843 )
enforce run_code timeout so a runaway cell cannot wedge the kernel (95821bf )
error on truncated run_code stream in both SDKs (515562f )
facade warmpool status selector matches husk pod labels; document podTemplate metadata exceptions (2964cfd )
fork: close MaxSandboxes admission TOCTOU with an atomic slot reservation (bc5ec29 )
forkd: build the guest agent into the image at /usr/local/bin/agent (47a573d )
fork: re-verify pid before killing a re-adopted VM (TOCTOU) (0336421 )
grant the dev mock controller workspace RBAC (0508896 )
guest: thread dispatcher scanner into PTY handler to preserve coalesced input (c6336f1 )
husk stub verifies the snapshot (digest + snapcompat) on activate, fail-closed (d175d6b )
husk warm pool self-heals independent of the snapshot build (f37251e )
husk-stub keeps the activated VM alive until shutdown (183c99c )
husk: clone fork child rootfs from source, snapshot source once (5146bb3 )
husk: define the --forks-dir flag the controller emits to husk-stub (e1dbbd5 )
husk: gate husk-stub sandbox API on the token, not a fixed id (12f7273 )
husk: gate husk-stub sandbox API on the token, not a fixed id (ecc5be1 )
husk: make husk fork child creation idempotent fixed-slot set (c4379ae )
husk: mount husk PKI TLS Secrets on fork child pods (887a7ee )
kernel driver enforces timeout and reports kernel death (88a8020 )
kvm device plugin container starts under read-only /dev; e2e diagnostics (8a87301 )
leader election + warm-pool refill/recycle/reuse (f2dd2b6 )
make husk activation work on real KVM (bare-metal validation) (e322fb5 )
MCP server ctx-cancel shutdown, empty-file writes, id path safety, fork partial ids (9881e93 )
netconf: pin exact /30 block on crash re-adoption (c78e68b )
nolint the deprecated GetEventRecorderFor in the feed wiring (16b2728 )
optimistic-lock husk pod claim; serve token-gated sandbox API in the husk stub (de9ff7a )
per-pod husk VM id and read-only template mount (0ab3f5e )
per-sandbox nftables dispatch chains, ForkRunning fails closed on networking (87d7bca )
prevent git argument injection in workspace rendezvous (-- separator, ref + scheme guards) (183be91 )
re-assert the validateVMID barrier at TemplateManager entry points (fe0c003 )
rebind husk rootfs drive while paused, before resume (2c4416b )
refuse to deliver the encryption key over a non-mTLS channel (0c6e455 )
reliable phase.changed emit (uncached read) and conflict-tolerant test setup (870a93a )
safe-join archive extraction against parent symlink traversal (codeql) (b15b827 )
scope husk rootfs CoW clone to a per-pod VM id (4069942 )
sdk: kill() deterministically tears down the background stream (dac810b )
sdk: lazy-import optional async websockets; e2e tests the checked-out SDK (5672ed4 )
sdk: lazy-import the optional async websockets; e2e installs the checked-out SDK (81321f1 )
sdk: truncated stream, TS abort, Python background+kill scoping (1d1fd85 )
sdk: verify image on default-pool reuse and harden slug (f4df9e0 )
serve CAS on a separate TLS listener; peer token via env; traversal test (9db4d7b )
validate CAS digests to block path traversal (codeql) (07c67b6 )
validate volume names and bake read-only for Share volumes (c6013f1 )
validateVMID barrier at TemplateManager entry points (f6c3634 )
vol-smoke seeds the snapshot volume via mkfs -d, no host mount (fb5a2da )
wait for agent readiness before snapshot, plumb Spec.Init through the controller (0f2aca3 )
warm-pool refills per claim + claim release recycles the husk pod (12d5a5b )
workspace: allow cross-workspace fork lineage so forks commit + advance the head (1adb8a5 )
workspace: reject userinfo in git rendezvous remote URL (8f5f9af )
workspace: wire husk diff + best-effort git on dehydrate-on-terminate (b405f04 )
You can’t perform that action at this time.