🚀 Announcing Agent Sandbox v1.0.11!
We're excited to announce the release of Agent Sandbox v1.0.11! This release introduces browser path prefix routing in the sandbox router, expanded file operation capabilities and router-tunnel connection support across SDKs, critical controller stability and claim lifecycle fixes, hardened daemon security checks, and new examples for AWS Nitro Sandboxes on EKS and multi-cluster sandbox fleets.
⚠️ Breaking Changes / Action Required
- Sandbox Router Path-Routing Response Rewriting (#2203): Path-routed requests now automatically rewrite upstream
Set-Cookiepaths and redirectLocationheaders under the routing prefix by default. Set--path-routing-rewrite-responses=falseif your deployment requires legacy pass-through behavior. - Python SDK Signal Timeout Error (
TimeoutError) (#2216): Process signaling in the Python SDK now enforces a configurable default timeout of 5 seconds and raisesTimeoutErrorinstead ofRuntimeErrorwhen a deadline is exceeded. - Metrics Metric Label Addition (
operating_mode) (#2174): Theagent_sandboxesgauge metric now includes anoperating_modelabel (RunningorSuspended). Raw unaggregated PromQL queries may see split series and should be updated to usesum by (...).
Key Highlights
Core Controller & Extensions
- Pod Termination Status Precision (#2021): Fixed an issue where
Sandboxresources reportedReady=Truewhile their backing Pod was terminating. The controller now marks the SandboxReady=Falsewith reasonPodTerminatinguntil the Pod is fully removed. - Retained Warm Assignment Cleanup (#2182): Ensured expired
SandboxClaimsconfigured with theRetainshutdown policy clean up their owned warmSandboxeven if controller interruption occurred before claim status was persisted.
Networking & Sandbox Router
- Browser Path Prefix Routing & Prefix Preservation (#2203): Added support for serving browser-based applications (like JupyterLab) through the router under a
/<prefix>/<namespace>/<id>/<port>/path. Added--path-routing-preserve-prefixfor applications configured with their own base URL and automatic response header/cookie path rewriting. - Request Body Preservation on Dial Retries (#2202): Fixed an issue where retrying dial connections to starting sandboxes caused requests with payloads (such as file writes or process execution) to fail with
502 Bad Gatewaydue to closed request bodies. - Preserve Escaped Paths for Header Routing (#2210): The router now forwards the original
RawPathon header-routed requests, preventing percent-encoded slashes (%2F) from triggering HTTP307 Temporary Redirectresponses fromsandboxd. - gRPC-Web Mid-Stream Deadlines (#2196): Mapped mid-stream RPC timeouts in gRPC-Web responses to
DeadlineExceeded(grpc-status: 4) instead ofUnavailable(14).
Daemon & Runtime (sandboxd)
- PTY Stdin EOF Rejection (#2225):
sandboxdnow rejects EOF on PTY stdin streams withFAILED_PRECONDITIONrather than closing the master terminal descriptor, preventing SIGHUP drops. Clients should send0x04(Ctrl-D) to signal end of input. - Named Pipe and Special File Protection (#2222): File transfer endpoints (
GET,HEAD,append) now open descriptors withO_NONBLOCKand reject named pipes (FIFOs) and device files withINVALID_ARGUMENT, preventing indefinite handler hangs. - Safe Symlink Deletion (#2218):
DELETE /v1/files/{path}now removes the symlink itself rather than following it and deleting the target file or root directory. - Router Token Header Authentication (#2164):
sandboxdnow accepts authentication tokens via theX-Sandboxd-Tokenheader, enabling authenticated communication through proxies that strip standardAuthorizationheaders.
SDKs & Client Libraries
- Python SDK Enhancements & Fixes:
- Added
mkdir,move, andcopyoperations tofilesfor both sync and async clients (#2177). - Added
appendandcreate_onlyoptions tofiles.write()(#2219). - Added
SandboxdRouterTunnelConnectionConfigfor tunneling REST and gRPC calls tosandboxdviasandbox-routerover port-forward (#2169), withauth_tokensent asX-Sandboxd-Token(#2200). - Fixed
get_sandbox()handle management to prevent closing shared handles during transient lookup errors or leaking handles during async races (#2229), and replaced stale handles when claims rebind (#2187). - Updated claim adoption in
create_sandbox(adopt_existing=True)to only adopt onAlreadyExistserrors (#2190). - Updated claim readiness watches to ignore stale failure conditions reported for older claim generations (#2205).
- Added client discovery latency recording (
sandbox_client_discovery_latency_ms) to the async connector (#2226).
- Added
- Go SDK Updates:
- Added
WithRecursiveandWithMaxDepthoptions toFiles.Listfor recursive directory listing onsandboxd(#2240). - Added
WithAppendandWithCreateOnlyoptions toFiles.WriteandFiles.WriteReader(#2228). - Added
Options.SandboxdAuthTokento send bearer tokens directly or viaX-Sandboxd-Tokenthrough the router (#2206). - Applied
RequestTimeouttoRunonsandboxdwhen no context deadline is set (#2221). - Ensured
ErrSandboxDeletedis only returned when a claim lookup returnsNotFound, preventing transient errors from falsely reporting sandbox deletion (#2223).
- Added
- TypeScript SDK Parity (#2241):
- Updated
files.writeandfiles.writeStreamto validate and reject combiningappendandcreateOnlyoptions before connecting.
- Updated
- Path Normalization Across SDKs (#2211):
- Updated Go, Python, and TypeScript SDKs to send literal
/separators tosandboxdand reject invalid..path traversals.
- Updated Go, Python, and TypeScript SDKs to send literal
Examples & Integrations
- AWS Nitro Sandbox on Amazon EKS (#2239): Added an end-to-end example demonstrating browser-based VS Code (
code-server) isolated with AWS Nitro Enclaves and kernel isolation on Amazon EKS Auto Mode. - Scoped-Token MCP Server Sandbox (#2207): Added an end-to-end example running a Model Context Protocol (MCP) server reached securely via
sandbox-routerusing--authz-mode=scoped-token. - Multi-Cluster Multi-Tenant RL Example (#2170): Expanded the multi-tenant reinforcement learning sandbox example to manage quotas, placement, and pre-pulling across multiple Kubernetes clusters simultaneously.
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.11/sandbox-with-extensions.yamlSelective Install
Install components separately:
# Core only:
kubectl apply -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v1.0.11/sandbox.yaml
# Extensions (opt-in):
kubectl apply -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v1.0.11/extensions.yamlPython SDK
pip install k8s-agent-sandbox==1.0.11Contributors
We extend our sincere thanks to all contributors to this release:
@Oneimu, @Sean-790761, @aditya-shantanu, @costajohnt, @csantanapr, @dongjiang1989, @ericcurtin, @hsinhoyeh, @janetkuo, @jonyhy96, @karimad, @lbarrosby, @lilong555, @lunarwhite, @pbxqdown, @thuongvu, @tomergee
New Contributors
- @jonyhy96 made their first contribution in #2021
- @costajohnt made their first contribution in #2187
- @lbarrosby made their first contribution in #2202
- @thuongvu made their first contribution in #2216
- @csantanapr made their first contribution in #2239
Full Changelog: v1.0.10...v1.0.11