馃殌 Announcing Agent Sandbox v1.0.0!
We're excited to announce the release of Agent Sandbox v1.0.0! This major milestone marks the transition of the core and extension APIs to v1beta1, removing legacy v1alpha1 support and webhook conversion infrastructure. This release also introduces browser-facing path-based routing with session-cookie authentication in sandbox-router, support for the next-generation sandboxd runtime across client SDKs, official integrations with NVIDIA NeMo Gym and Gymnasium for Reinforcement Learning (RL), streaming uploads in the Go SDK, and significant performance and scaling enhancements.
鈿狅笍 Breaking Changes / Action Required
- Removal of
v1alpha1APIs & Conversion Webhooks (#1470):- The deprecated
v1alpha1API version has been completely removed acrossagents.x-k8s.ioandextensions.agents.x-k8s.io. All CRDs now exclusively servev1beta1. - The conversion webhook server, TLS certificates, and manager webhook CLI flags (
--webhook-*) have been removed. - Performance & Reliability Improvements: Eliminating the conversion webhook removes extraneous API server conversion round-trips and CPU load during informer cache syncs (which previously occurred even when only
v1beta1was requested). It also removes webhook latency on writes and eliminates webhook failure modes (e.g., certificate rotation and private-cluster webhook firewall blocks). - Action Required (Upgrade Procedure for All Users; Fresh Installs Can Skip): Direct upgrades from
< v0.5.0tov1.0.0are not supported. Existing clusters must follow this 4-step sequence:- Upgrade to
v0.5.x& run storage migration: If running< v0.5.0, upgrade tov0.5.2+first. Rewrite all stored resources tov1beta1and prunev1alpha1fromstoredVersionsfollowing the v0.5.x API Migration Guide. - Verify stored versions: Confirm that all four CRDs report only
v1beta1instatus.storedVersions. Ifv1alpha1remains, the Kubernetes API server will reject the upgrade:kubectl get crd sandboxes.agents.x-k8s.io \ sandboxclaims.extensions.agents.x-k8s.io \ sandboxtemplates.extensions.agents.x-k8s.io \ sandboxwarmpools.extensions.agents.x-k8s.io \ -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.storedVersions}{"\n"}{end}' - Upgrade to
v1.0.0: Follow the v1.0.0 API Migration Guide. Helm users must runkubectl apply -f helm/crds/beforehelm upgrade(thewebhookServiceNamechart value was removed). OLM users should approve thev1.0.0InstallPlan. (Note: TheInstallPlanwill fail if Step 2 was not completed). - Post-Upgrade Cleanup: Remove orphaned webhook resources by running:
kubectl delete -n agent-sandbox-system \ svc/agent-sandbox-webhook-service \ secret/agent-sandbox-webhook-certs \ role/agent-sandbox-controller \ rolebinding/agent-sandbox-controller \ --ignore-not-found
- Upgrade to
- The deprecated
- Removal of
pod-nameAnnotation Writing (#1417):- Controllers no longer write the
agents.x-k8s.io/pod-nameannotation to newly createdSandboxresources, as Sandbox names and backing Pod names are guaranteed to be identical. - Performance Improvement: Eliminating the separate metadata patch alongside status updates removes an extra reconciliation loop per Sandbox. In benchmarks, this reduced average Sandbox reconcile latency by 55% (2.2x speedup) and eliminated tens of thousands of redundant API server
PATCHrequests under load. - Action Required: Update any external scripts, monitoring, or tooling that reads
metadata.annotations["agents.x-k8s.io/pod-name"]to use.metadata.namedirectly. Existing resources with the legacy annotation will still be read until cleared.
- Controllers no longer write the
- SDK
FileEntrySchema Update (#1347):- In the Go SDK,
FileEntry.ModTimeis nowtime.Time(previouslyfloat64), and aModefield has been added. - In the Python SDK,
FileEntry.mod_timehas been renamed toFileEntry.modified(datetime), and amodefield has been added.
- In the Go SDK,
Key Highlights
Core Controller & Lifecycle Management
- Instant Claim Reconciliation on Template Creation (#1315): Creating a previously missing
SandboxTemplatenow triggers immediate reconciliation for waitingSandboxClaimresources instead of waiting for fallback timer intervals. - Accurate Claim Generation Tracking (#1317): Fixed
SandboxClaimReadyconditions to report the claim's ownobservedGenerationrather than the backing Sandbox's generation. - SandboxClaim UID Label Propagation (#1423): Fixed an issue where
agents.x-k8s.io/claim-uidlabels were filtered out before propagating to backing Pods for claim-owned sandboxes. - Expose
serviceFQDNon SandboxClaims (#1325): The bound Sandbox's in-cluster DNS service name is now surfaced directly onSandboxClaim.status.sandbox.serviceFQDN. - Burst Scaling & Claim Latency Optimizations (#1454, #1417): Reduced p99 claim startup latency during large burst allocations by eliminating redundant reconcile writes and tuning warm candidate poll intervals from 500ms to 100ms.
Sandbox Router & Networking
- Browser Path-Based Routing (#1413, #1441): Added an opt-in
--path-routing-prefixmode, enabling browser sessions, iframes, and WebSockets (e.g., web IDE terminals or dev server HMR clients) to route traffic using URL paths (<prefix>/<namespace>/<id>/<port>/...) without requiring custom HTTP headers. - Browser-Session Authentication & CSWSH Protection (#1446): Added session cookie bootstrapping via query parameter exchanges, SameSite configuration, and mandatory Origin validation (
--authz-cookie-allowed-origins) to guard against Cross-Site WebSocket Hijacking (CSWSH). Added--authz-trust-forwarded-protofor deployments behind TLS-terminating ingress proxies. - Official Go Router Promotion (#1448, #1415): Standardized documentation around the high-performance Go
sandbox-routerand addedsandbox-router-goto official image promotion pipelines.
SDKs & Runtime Support
sandboxdDaemon Integration (#1347): Added opt-in support across Go and Python SDKs for the unifiedsandboxdruntime (REST filesystem on:8080+ gRPCProcessServiceon:9090) via pod port-forwarding. Updatedsandboxdto bind0.0.0.0by default.- Streaming File Uploads in Go SDK (#1419): Added
Files.WriteReaderandSandbox.WriteReaderto stream data fromio.Readerwithout buffering entire payloads in memory. - Environment Variable Injection (#1003): Go and Python SDKs now support injecting runtime environment variables into
SandboxClaimspecifications during creation. - Non-Idempotent POST Retry Prevention (#1353): Fixed an issue in the Python SDK where failed
POST /executecommands were retried on 5xx errors, preventing accidental duplicate execution of shell commands. - Disable Pod IP Routing Option (#932): Added
DisablePodIPRoutingto Go SDK options for environments where direct pod-to-pod routing is restricted by network policies or service meshes. - Configurable Base Directory in Python Runtime (#1408): Added
SANDBOX_BASE_DIRenvironment variable support (default/app) to allow sandboxes to run withreadOnlyRootFilesystem: true.
Integrations & Ecosystem
- NVIDIA NeMo Gym Integration (#1374): Added
clients/integrations/nemo-gym(nemo-gym-k8s-agent-sandbox), registering Agent Sandbox warm pools as anagent_sandboxprovider for NVIDIA NeMo Gym RL training environments. - Gymnasium Integration (#1350): Added
clients/integrations/gymnasiumoffering a standard Gymnasium environment interface with configurable reward and termination hooks. - MCP Server
get_sandbox_statusTool (#1362): Added a tool to the Model Context Protocol (MCP) server for querying sandbox readiness and status. - Sandboxed Tools Enhancements (#1428, #1459): Added a configurable per-tool execution timeout (
-tool-timeout) and introduced a deterministic fake LLM (fake-eliza) for testing agent tool pipelines offline. - Agent Client Protocol (ACP) Example (#1450): Added a lightweight client implementation for testing ACP interactions.
Installation
Standard Install (Core + Extensions)
Recommended for most users and GitOps engines (Argo CD, Config Sync, kustomize):
kubectl apply -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v1.0.0/sandbox-with-extensions.yamlSelective Install
Install components separately:
# Core only:
kubectl apply -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v1.0.0/sandbox.yaml
# Extensions (opt-in):
kubectl apply -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v1.0.0/extensions.yamlPython SDK
pip install k8s-agent-sandbox==1.0.0Contributors
We extend our sincere thanks to all contributors to this release:
@HasonoCell, @Oneimu, @aditya-shantanu, @alanhuangch, @app/dependabot, @briankhoi, @daktari, @dlanov, @drogovozDP, @esposem, @ferponse, @futuretea, @gruebel, @janetkuo, @justinsb, @lunarwhite, @moficodes, @pbxqdown, @sairajp-rewind, @shrutiyam-glitch, @tanish-wisdom, @tomergee, @vicentefb, @wjun29
New Contributors
- @futuretea made their first contribution in #1317
- @daktari made their first contribution in #1408
- @ferponse made their first contribution in #1413
- @tanish-wisdom made their first contribution in #1423
- @dlanov made their first contribution in #1428
- @wjun29 made their first contribution in #1362
- @pbxqdown made their first contribution in #1353
- @briankhoi made their first contribution in #1417
Full Changelog: v0.5.6...v1.0.0