Skip to content

feat(sandbox): add CoreWeave Sandbox (cwsandbox) provider - #1

Closed
brandonrjacobs wants to merge 1 commit into
mainfrom
feat/cwsandbox-provider
Closed

feat(sandbox): add CoreWeave Sandbox (cwsandbox) provider#1
brandonrjacobs wants to merge 1 commit into
mainfrom
feat/cwsandbox-provider

Conversation

@brandonrjacobs

@brandonrjacobs brandonrjacobs commented Jun 14, 2026

Copy link
Copy Markdown
Owner

Summary

Adds CoreWeave Sandbox (https://www.cwsandbox.com) as a sandbox provider,
alongside Modal and Daytona. CWSandboxLauncher wraps the official
cwsandbox Python SDK as an
optional, lazily-imported extra (omnigent[cwsandbox]) — same posture as the
existing modal/daytona launchers.

Supports both server-managed hosts (sandbox.provider: cwsandbox) and the
CLI bootstrap (omnigent sandbox create --provider cwsandbox). The only
unsupported primitive is forward_local_port (CW Sandbox has no local→sandbox
path), which is irrelevant here — managed hosts authenticate with a
server-minted launch token, not the Databricks App OAuth flow.

Changes

  • omnigent/onboarding/sandboxes/cwsandbox.py — the launcher (provision / run /
    put / terminate + streaming exec/foreground).
  • Register cwsandbox in the provider table and the server managed-host YAML
    config (SUPPORTED_SANDBOX_PROVIDERS, PROVIDERS_WITH_MANAGED_LAUNCH,
    factory + config parsers + token TTL).
  • pyproject.toml: cwsandbox extra + mypy override.
  • Unit tests (httpx-free, fake SDK via sys.modules).
  • deploy/cwsandbox/: README, a zero-dependency API smoke test, and a managed
    e2e driver.

Validation

Exercised end-to-end against production api.cwsandbox.com:

  • API smoke test — provision → exec → AddFile → public egress → detach →
    terminate, all pass.
  • Managed-host e2e — ran the Omnigent server inside a CW sandbox (public
    ingress), created a managed session, and the server provisioned a child CW
    sandbox running omnigent host that dialed back and registered.
  • Real agent workload — the agent ran an LLM turn (via the openai-agents
    harness against an OpenAI-compatible CoreWeave inference endpoint) inside the
    managed sandbox and returned a correct answer.

Unit tests + ruff + mypy all green.

Notes for reviewers

Testing

pip install -e '.[cwsandbox,dev]'
pytest tests/onboarding/sandboxes/test_cwsandbox.py
# live API check:
CWSANDBOX_API_KEY=... python deploy/cwsandbox/smoke_test.py

@brandonrjacobs
brandonrjacobs force-pushed the feat/cwsandbox-provider branch 4 times, most recently from 8de3224 to bc83afc Compare June 14, 2026 22:50
Add CoreWeave Sandbox (aviato) as a sandbox provider alongside Modal and
Daytona. CWSandboxLauncher wraps the official `cwsandbox` Python SDK as an
optional, lazily-imported extra (`omnigent[cwsandbox]`), supporting both
server-managed hosts (`sandbox.provider: cwsandbox`) and the CLI bootstrap.

- omnigent/onboarding/sandboxes/cwsandbox.py: the launcher
- register in the provider table + server managed-host YAML config
- pyproject: `cwsandbox` extra + mypy override; uv.lock pins cwsandbox 0.26.0
  (per-package cooldown exemption in uv.toml, since the SDK is first-party)
- tests + deploy/cwsandbox/{README,smoke_test,e2e_managed}

The managed launch-token TTL is derived from OMNIGENT_CWSANDBOX_MAX_LIFETIME_S
so it always outlives the (operator-overridable) sandbox lifetime. The e2e
driver runs a real agent LLM turn inside a managed sandbox; it can target an
existing server (--server) or spin one up in a CW sandbox with a public
service, and only tears down the child sandboxes it created. Validated
end-to-end against api.cwsandbox.com.
@brandonrjacobs
brandonrjacobs force-pushed the feat/cwsandbox-provider branch from bc83afc to 3000d5f Compare June 14, 2026 23:29
@brandonrjacobs

Copy link
Copy Markdown
Owner Author

Superseded by the upstream PR omnigent-ai#76 (same branch). Closing this fork-internal review PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant