What's New
Breaking changes
-
shareSkillsinsbxenv.yaml(experimental feature) has been replaced withskills,skillsmay be set tooff|readonly|readwrite. -
MCP OAuth client secrets are renamed to
mcp:<server>:client_secret(wasmcp:<server>.client_secret), matching the header-secret naming; a secret stored under the old name is no longer read and must be re-set withsbx secret set mcp:<server>:client_secret.
Environment files
- Environment files can reference
${{ env.projectDir }}and${{ env.fileDir }}, the user-level~/.sbxenv.yamlcan mount each project's own directory by declaringworkspace: ${{ env.projectDir }}, relative workspace paths now resolve against the file that declares them, and everysbx envsubcommand accepts--nameto override the sandbox name. sbx env run,sbx env create, andsbx env rmdetect name conflicts with sandboxes created outsidesbx envand provide guidance instead of treating them as environment-managed sandboxes.
Agents and models
- Formerly built-in agents that moved to public kits (kiro, copilot, droid) can be launched by name again —
sbx run kiroresolves the pinned replacement kit and its stored credentials work without extra approval steps. sbx run --providernow accepts hosted models.dev providers, served through llmman.sbx run --modelgains--overflow-provider/--overflow-modelto pair a local model with a hosted one for oversized requests;--providernow works with codex for providers lacking the Responses API; codex sandboxes no longer spend seconds retrying WebSocket connections to the local model server.- Claude Code sandboxes started with
sbx run --modelnow use the model you selected instead of the harness's own default model. - A slow first launch of the bundled llmman no longer fails
sbx run --model.
Kits and skills
sbx create/sbx runnow share skills read-only by default via a new tri-state--skills=off|readonly|readwriteflag; the retired--no-share-skillsflag still works as a deprecated alias for--skills=off. There is also a newskills.defaultModeto set the desired default behaviour.- Commit-pinned git kits now resolve offline from a local content-addressed cache, and every cache hit verifies the checkout against a per-file manifest, so a tampered cache entry is quarantined and refetched instead of being served.
- Signed git kits now verify on every host: a kit checkout is materialized from the commit's blobs alone, so smudge filters, line-ending conversion, LFS, hooks, and other host git configuration can no longer alter the checked-out bytes.
- Fixed kit-argument (
${{ kit.args.* }}) substitution silently not applying when a kit reference is a symlinked directory. - Kits can now be installed through registry mirrors configured with an explicit port.
- Hardened git kit cloning against command-line config injection (
GIT_CONFIG_PARAMETERSand its numbered counterparts) carried in the inherited environment.
Sandbox lifecycle and workspaces
- Add a last-used timestamp to
sbx ls --jsonand Docker-styleuntilfiltering tosbx prune. - Sandboxes created with
sbx createnow stop automatically after becoming idle. - The minimum memory for a sandbox has been decreased to 512 MiB. Note: This is only suitable for shell use cases.
- Sandbox names are now validated to reject names longer than 63 characters or ending in a hyphen or period.
daemon inspectandinspectwill now show mount information.- Clone-mode sandboxes now support shallow Git repositories.
- Fixed an issue where the
sbxCLI could select the wrong repository during Git-related setup tasks, such as loading kits or configuring workspaces, when Git environment variables were set on the host. - Fix UNC path resolution on Windows so that the same folder is identified correctly.
- SSH connections now remain bound to the original sandbox identity while preserving existing sandboxes during UUID migration.
- Windows clients can now connect to
sandboxdthrough filesystemAF_UNIXsockets. - The local daemon now verifies connecting operating-system users on Unix sockets and Windows named pipes.
Authentication and credentials
- Docker sign-in now explains how to recover when macOS Keychain denies access to stored credentials.
- Fixed a bug where a single Docker Hub sign-in timeout could permanently lock the daemon out of Docker Hub, requiring a manual sign-in to recover.
- Concurrent sandbox creates now reuse one Docker Hub authentication request.
- Private registries can use an explicitly trusted cross-host authentication endpoint for sandbox pulls.
sbx secret rm --sandboxnow immediately revokes the removed credential from the sandbox proxy.- Prevent
sbx execfrom synchronizing credentials that were not configured for the sandbox. - Credential-binding consent now defaults to decline and clearly identifies when API-key secrets will be sent to new domains.
- Fixed the OAuth credential gate so a third-party kit re-declaring a built-in agent's OAuth service can no longer inherit that agent's trust and receive a real token without an explicit binding; sandboxes created before this fix now self-heal on the next daemon restart or kit add instead of requiring a manual recreate.
- Unrelated credentials no longer switch Claude sandboxes into Anthropic API-key mode.
sbx secret importandsbx secret lsnow list copilot's GitHub credential correctly.
Networking and policy
- The CLI honors configured proxy settings for host-side HTTP requests, including login, diagnostic uploads, and update checks.
- Fix HTTP/2 upstream responses without bodies being incorrectly framed as chunked by the sandbox proxy.
- Hardened credential handling in the sandbox egress proxy so a client-supplied credential the proxy did not issue is not forwarded to managed provider hosts.
- Network allow rules for IP-literal targets (for example
sbx policy allow network [::1]:8080or CIDR rules such as10.0.0.0/8) are enforced correctly again; the proxy no longer blocks them with a default-deny after the governance approval-callback migration. - Fixed: agents no longer suggest
sbx policy allowfor a host blocked by an org-governed default-deny policy — it now reads asBlocked by org policy, same as an explicit org deny rule. - The
balancedpolicy preset now allows access to the NodeSource APT repository. - Claude sandboxes can now access the Claude Code documentation.
MCP
sbx mcp addcan now send custom request headers to remote MCP servers via--header, with header values substituted from the local secret vault.- MCP authorization supports private OAuth discovery with
--skip-ssrf-check, falls back to advertised common OIDC scopes, and honors--no-scopefor local OAuth registrations.
CLI, diagnostics, and updates
- Local
sbxcommands no longer wait on slow or unreachable update services before exiting. - Plain
sbx versioninvocations now return embedded version information without full CLI startup. sbx diagnosechecks whethermkfs.erofsis usable and warns if its default block size exceeds the sandbox kernel's page size.sbx diagnoseno longer reports a missing SSHProxyCommandin Git Bash when the Windows OpenSSH configuration is healthy.- The
tls.allowNegativeSerialsetting no longer prints an informational log line on everysbxcommand while remaining visible in daemon diagnostics. - Terminal output now uses default text colors when the background theme cannot be detected.
- Fix terminal cursor flickering issue on Windows.
- Nightly and development builds now report a version based on the latest stable release instead of a release-candidate tag.
sbx@rcbrew users on macOS will be updated to the latest stable build when it is released.