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
2 changes: 1 addition & 1 deletion packages/coding-agent/skills/prime-intellect/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Prime Intellect is an open superintelligence lab building open-source AGI infras
| Hosted Evaluations | Run evals on Prime-managed infra (`prime eval run --hosted`) | [environments.md](references/environments.md) |
| Hosted Training | Post-train models against environments (`prime train`, Lab) | [environments.md](references/environments.md) |
| prime-rl | Large-scale async RL framework for self-managed training | [environments.md](references/environments.md) |
| Sandboxes | Secure disposable Docker environments for AI-generated code | [sandboxes.md](references/sandboxes.md) |
| Sandboxes | Secure disposable VM sandboxes for AI-generated code | [sandboxes.md](references/sandboxes.md) |
| Tunnels | Public HTTPS URLs for local/sandboxed services | [sandboxes.md](references/sandboxes.md) |
| Inference | OpenAI-compatible API for frontier models | [inference.md](references/inference.md) |
| Compute | Rent single GPU pods or multi-node clusters | [compute.md](references/compute.md) |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sandboxes & Tunnels

Prime Sandboxes are disposable Docker environments for running AI-generated or untrusted code in the cloud: isolated, fast to create, billed only while running (CPU $0.05/core/hr, memory $0.01/GB/hr, disk $0.001/GB/hr).
Prime Sandboxes are disposable VM environments for running AI-generated or untrusted code in the cloud: isolated, fast to create, billed only while running (CPU $0.05/core/hr, memory $0.01/GB/hr, disk $0.001/GB/hr).

Live docs: `sandboxes/overview.md`, `sandboxes/cli.md`, `sandboxes/sdk.md`, `sandboxes/images.md`, `sandboxes/tunnel.md` under https://docs.primeintellect.ai/

Expand All @@ -24,14 +24,13 @@ prime sandbox create python:3.11-slim \
--idle-timeout-minutes 15 \
--env APP_ENV=staging \
--secret API_KEY=sk-abc123 \
--start-command "python serve.py --port 8000" \
--yes
```

- `--timeout-minutes` caps total lifetime; `--idle-timeout-minutes` reaps the sandbox early when no exec/upload/download/file-read arrives (1 ≤ idle ≤ timeout ≤ 1440; not supported with `--vm`).
- `--env` values are plain text; `--secret` values are encrypted at rest and obfuscated in output. Both become environment variables inside the container.
- Default start command is `tail -f /dev/null` (idle, ready for `prime sandbox run`); `--start-command` replaces the image ENTRYPOINT.
- Outbound internet is on by default; use `--no-network-access` for isolation when running untrusted code.
- `--timeout-minutes` caps total lifetime; `--idle-timeout-minutes` reaps the sandbox early when no exec/upload/download/file-read arrives (1 ≤ idle ≤ timeout ≤ 1440; for VM sandboxes, `timeout_minutes` may be negative to disable the lifetime deadline).
- `--env` values are plain text; `--secret` values are encrypted at rest and obfuscated in output. Both become environment variables inside the sandbox.
- Default start command keeps the sandbox idle, ready for `prime sandbox run`. To run your own process at boot, pass the command after `--` as separate tokens (no shell): `prime sandbox create python:3.11-slim -- python serve.py --port 8000`.
- Outbound internet is on by default; restrict egress with network allow/deny lists (`prime sandbox network`, or `network_allowlist`/`network_denylist` in the SDK).
- `--team-id` bills a team; `--yes` skips confirmation in automation.

Custom images: build and push your own via Prime Images (`sandboxes/images.md`).
Expand All @@ -55,7 +54,6 @@ client.wait_for_creation(sandbox.id)
result = client.execute_command(sandbox.id, "python -c 'print(42)'")
client.upload_file(sandbox.id, "/workspace/data.csv", "./data.csv")
client.download_file(sandbox.id, "/workspace/output.csv", "./output.csv")
exposed = client.expose(sandbox.id, port=8000, name="web") # public URL
client.delete(sandbox.id)
```

Expand Down
2 changes: 1 addition & 1 deletion scripts/benchmarks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ The existing Vouch gate controls who can trigger compute usage.

## Measurements

The default configuration uses two Linux x64 containers, each with 4 vCPU, 8 GB RAM, and 20 GB disk.
The default configuration uses two Linux x64 VM sandboxes, each with 4 vCPU, 8 GB RAM, and 20 GB disk.
`config.json` pins the image and sampling policy. Harness dependencies are locked with a seven-day
release cutoff. Provisioning, harness setup, and source compilation have separate recorded durations
outside the timed installation interval. Interactive runs use the same small committed Git fixture.
Expand Down
1 change: 0 additions & 1 deletion scripts/benchmarks/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ def start(self, role: str) -> Sandbox:
cpu_cores=config.cpu_cores,
memory_gb=config.memory_gb,
disk_size_gb=config.disk_gb,
vm=False,
region=config.region,
timeout_minutes=config.ttl_minutes,
labels=labels(self.report.repository, self.report.run_id, self.report.attempt)
Expand Down
3 changes: 2 additions & 1 deletion scripts/benchmarks/tests/test_benchmarks.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ def test_newer_comment_is_not_overwritten(self):


class LifecycleTests(unittest.TestCase):
def test_sandbox_creation_does_not_inject_credentials(self):
def test_sandbox_creation_does_not_inject_credentials_or_pin_vm(self):
with (
tempfile.TemporaryDirectory() as directory,
patch.dict(os.environ, {"PRIME_SANDBOX_API_KEY": "fake", "PINFERENCE_API_KEY": "must-not-use"}),
Expand All @@ -441,6 +441,7 @@ def test_sandbox_creation_does_not_inject_credentials(self):
request = controller.client.create.call_args.args[0]
self.assertIsNone(request.secrets)
self.assertIsNone(request.environment_vars)
self.assertNotIn("vm", request.model_fields_set)

def test_invalid_results_get_a_failure_notice_and_missing_results_preserve_pending_trust(self):
with tempfile.TemporaryDirectory() as directory:
Expand Down
1 change: 0 additions & 1 deletion scripts/evals/short_swe/build_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ def build(
cpu_cores=config["cpu_cores"],
memory_gb=config["memory_gb"],
disk_size_gb=config["disk_gb"],
vm=False,
region=config["region"],
timeout_minutes=BUILD_SANDBOX_TIMEOUT_MINUTES,
team_id=os.environ.get("PRIME_TEAM_ID") or None,
Expand Down
Loading