Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 24 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 9 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ members = [
]

[workspace.package]
version = "0.1.1"
version = "0.1.5"
edition = "2024"
rust-version = "1.97.1"
authors = ["Sandbox contributors"]
Expand All @@ -37,6 +37,7 @@ http = "1.4.2"
openssl-sys = { version = "0.9.117", features = ["vendored"] }
pq-sys = { version = "0.7.5", features = ["bundled"] }
reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls", "stream"] }
rustls = { version = "0.23.42", default-features = false, features = ["aws_lc_rs", "std", "tls12"] }
secrecy = { version = "0.10.3", features = ["serde"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.150"
Expand All @@ -45,6 +46,7 @@ subtle = "2.6.1"
tempfile = "3.27.0"
thiserror = "2.0.18"
tokio = { version = "1.53.0", features = ["full"] }
tokio-tungstenite = { version = "0.29.0", features = ["rustls-tls-native-roots"] }
tokio-util = "0.7.18"
tower-http = { version = "0.7.0", features = ["catch-panic", "cors", "limit", "request-id", "timeout", "trace"] }
tracing = "0.1.44"
Expand All @@ -53,12 +55,12 @@ url = { version = "2.5.8", features = ["serde"] }
uuid = { version = "1.24.0", features = ["serde", "v7"] }
zeroize = { version = "1.8.2", features = ["derive"] }

sandbox-aegis = { version = "0.1.1", path = "crates/aegis" }
sandbox-client = { version = "0.1.1", path = "crates/client" }
sandbox-core = { version = "0.1.1", path = "crates/core" }
sandbox-events = { version = "0.1.1", path = "crates/events" }
sandbox-runtime = { version = "0.1.1", path = "crates/runtime" }
sandbox-storage = { version = "0.1.1", path = "crates/storage" }
sandbox-aegis = { version = "0.1.5", path = "crates/aegis" }
sandbox-client = { version = "0.1.5", path = "crates/client" }
sandbox-core = { version = "0.1.5", path = "crates/core" }
sandbox-events = { version = "0.1.5", path = "crates/events" }
sandbox-runtime = { version = "0.1.5", path = "crates/runtime" }
sandbox-storage = { version = "0.1.5", path = "crates/storage" }

[workspace.lints.rust]
unsafe_code = "forbid"
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,14 @@ sandbox create --tenant platform --image ubuntu:24.04 \
--network restricted --untrusted-repo --generated-code

sandbox exec 019f... -- cargo test --workspace
sandbox http 3000
sandbox tunnel create 019f... --port 3000
sandbox agent run codex --tenant platform
sandbox delete 019f... --wait
```

`sandbox http PORT` shares a service running on your current machine at a temporary `https://local-….tunnel.yshubham.com` URL through the hosted Sandbox relay. No third-party quick-tunnel domain or helper binary is involved. HTTP and WebSocket traffic—including Vite HMR—is carried over one outbound WebSocket and rewritten to the loopback origin, so development servers never need to allow a random public `Host`. Keep the command running and press Ctrl-C to revoke the exact-host route. Self-hosters can set `SANDBOX_HTTP_RELAY`; services inside a managed sandbox continue to use `sandbox tunnel create SANDBOX_ID --port PORT`.

## What is already real

| Capability | Status |
Expand All @@ -80,6 +83,7 @@ sandbox delete 019f... --wait
| CLI lifecycle, agent profiles, JSON output, bounded exec | Implemented |
| MCP 2025-11-25 stdio server with structured tool results | Implemented |
| Wildcard HTTP/WebSocket tunnels with per-sandbox edge networks | Implemented; custom HTTPS domains, direct edge, and Cloudflare ingress documented |
| Local HTTP/WebSocket sharing on the deployment wildcard | Implemented; ephemeral exact-host routes, bounded sessions/bodies, automatic revocation |
| Codex, Claude Code, OpenCode, Pi image builder | Implemented with pinned versions |
| Aider and Goose profiles | Implemented using their official images |
| OIDC/SAML, tenant RBAC, secret broker, interactive PTY, raw TCP tunnels | Design boundary; not implemented in v0.1 |
Expand Down
7 changes: 7 additions & 0 deletions cmd/sandbox/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,21 @@ path = "src/main.rs"

[dependencies]
anyhow.workspace = true
base64.workspace = true
clap.workspace = true
futures-util.workspace = true
http.workspace = true
reqwest.workspace = true
rustls.workspace = true
sandbox-client.workspace = true
sandbox-core.workspace = true
secrecy.workspace = true
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
tokio-tungstenite.workspace = true
url.workspace = true
uuid.workspace = true

[lints]
workspace = true
Loading