diff --git a/docs/api-reference/checkpoints/fork.mdx b/docs/api-reference/checkpoints/fork.mdx
index 69ffab92..abc10a7a 100644
--- a/docs/api-reference/checkpoints/fork.mdx
+++ b/docs/api-reference/checkpoints/fork.mdx
@@ -10,7 +10,7 @@ Create a new sandbox from a checkpoint.
- Idle timeout for the new sandbox (default: `300`)
+ Idle timeout for the new sandbox (default: `0` — persistent, never auto-hibernates)
diff --git a/docs/api-reference/sandboxes/create.mdx b/docs/api-reference/sandboxes/create.mdx
index bf24129f..df329295 100644
--- a/docs/api-reference/sandboxes/create.mdx
+++ b/docs/api-reference/sandboxes/create.mdx
@@ -10,7 +10,7 @@ Create a new sandbox.
- Idle timeout in seconds (default: `300`)
+ Idle timeout in seconds (default: `0` — persistent, never auto-hibernates)
diff --git a/docs/api-reference/sandboxes/wake.mdx b/docs/api-reference/sandboxes/wake.mdx
index e618ecc3..c83b4ead 100644
--- a/docs/api-reference/sandboxes/wake.mdx
+++ b/docs/api-reference/sandboxes/wake.mdx
@@ -10,7 +10,7 @@ Resume a hibernated sandbox. Control plane only.
- Idle timeout after wake (default: `300`)
+ Idle timeout after wake (default: `0` — persistent, never auto-hibernates)
diff --git a/docs/cli/sandbox.mdx b/docs/cli/sandbox.mdx
index c2b3e6ad..a80efe65 100644
--- a/docs/cli/sandbox.mdx
+++ b/docs/cli/sandbox.mdx
@@ -46,7 +46,7 @@ The sandbox keeps the same ID across hibernate/wake cycles. Preview URLs remain
## Adjusting Timeout
-The idle timeout resets on every operation (exec, file access, agent activity). Default: 300s.
+The idle timeout resets on every operation (exec, file access, agent activity). Default: `0` — persistent, never auto-hibernates. Set a positive value (or `0` to disable) with `oc sandbox set-timeout`.
```bash
oc sandbox set-timeout sb-abc123 3600 # 1 hour
diff --git a/docs/how-it-works.mdx b/docs/how-it-works.mdx
index 3a1a49a1..1599f5f7 100644
--- a/docs/how-it-works.mdx
+++ b/docs/how-it-works.mdx
@@ -26,7 +26,7 @@ Why not containers? Containers share a kernel. A kernel exploit in one container
`hibernate()` snapshots the VM's memory and disk state, then stops it. No compute costs while hibernated. `wake()` restores the sandbox — the platform attempts a fast snapshot-based resume and falls back to a cold boot from the saved disk state if needed.
-The sandbox keeps the same ID across hibernate/wake cycles. A rolling idle timeout (default 300s) auto-hibernates sandboxes that go unused.
+The sandbox keeps the same ID across hibernate/wake cycles. By default sandboxes are persistent and never auto-hibernate; set a positive `timeout` and a rolling idle timer auto-hibernates the sandbox once it goes unused for that long.
## Checkpoints & Forking
diff --git a/docs/reference/cli.mdx b/docs/reference/cli.mdx
index 7269d3b6..4202f2ce 100644
--- a/docs/reference/cli.mdx
+++ b/docs/reference/cli.mdx
@@ -25,7 +25,7 @@ Create a new sandbox. **Alias:** `oc create`
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
-| `--timeout` | int | `300` | Idle timeout in seconds |
+| `--timeout` | int | `0` | Idle timeout in seconds |
| `--cpu` | int | `0` | CPU cores (0 = platform default) |
| `--memory` | int | `0` | Memory in MB (0 = platform default) |
| `--env` | string | — | Environment variable `KEY=VALUE` (repeatable) |
@@ -66,7 +66,7 @@ Resume a hibernated sandbox.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
-| `--timeout` | int | `300` | Idle timeout in seconds after wake |
+| `--timeout` | int | `0` | Idle timeout in seconds after wake |
### `oc sandbox set-timeout `
@@ -175,7 +175,7 @@ Create a new sandbox from a checkpoint (fork).
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
-| `--timeout` | int | `300` | Idle timeout for the new sandbox |
+| `--timeout` | int | `0` | Idle timeout for the new sandbox |
```bash
ID=$(oc cp spawn cp-xyz --json | jq -r '.sandboxID')
diff --git a/docs/reference/cli/checkpoint.mdx b/docs/reference/cli/checkpoint.mdx
index 96bd283d..b364f42f 100644
--- a/docs/reference/cli/checkpoint.mdx
+++ b/docs/reference/cli/checkpoint.mdx
@@ -37,7 +37,7 @@ Revert a sandbox in-place to a checkpoint. All changes since the checkpoint are
Create a new sandbox from a checkpoint (fork). [HTTP API →](/api-reference/checkpoints/fork)
-
+
Idle timeout for the new sandbox
diff --git a/docs/reference/cli/sandbox.mdx b/docs/reference/cli/sandbox.mdx
index 6f675a9a..def7dae9 100644
--- a/docs/reference/cli/sandbox.mdx
+++ b/docs/reference/cli/sandbox.mdx
@@ -9,8 +9,8 @@ Create a new sandbox. **Alias:** `oc create`
[HTTP API →](/api-reference/sandboxes/create)
-
- Idle timeout in seconds
+
+ Idle timeout in seconds. `0` (the default) means never auto-hibernate.
@@ -84,7 +84,7 @@ Snapshot VM state and stop the sandbox. Displays snapshot size on success. [HTTP
Resume a hibernated sandbox. [HTTP API →](/api-reference/sandboxes/wake)
-
+
Idle timeout in seconds after wake
diff --git a/docs/reference/python-sdk.mdx b/docs/reference/python-sdk.mdx
index 01c397ae..3f6d3069 100644
--- a/docs/reference/python-sdk.mdx
+++ b/docs/reference/python-sdk.mdx
@@ -26,7 +26,7 @@ Create a new sandbox.
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `template` | str | `"base"` | Template name |
-| `timeout` | int | `300` | Idle timeout in seconds |
+| `timeout` | int | `0` | Idle timeout in seconds |
| `api_key` | str | env var | API key |
| `api_url` | str | env var | API URL |
| `envs` | dict[str, str] | None | Environment variables |
@@ -60,7 +60,7 @@ sandbox = await Sandbox.connect("sb-abc123")
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `checkpoint_id` | str | — | Checkpoint ID (**required**) |
-| `timeout` | int | `300` | Idle timeout |
+| `timeout` | int | `0` | Idle timeout |
| `api_key` | str | env var | API key |
| `api_url` | str | env var | API URL |
diff --git a/docs/reference/python-sdk/sandbox.mdx b/docs/reference/python-sdk/sandbox.mdx
index 7a0855da..1f312e4d 100644
--- a/docs/reference/python-sdk/sandbox.mdx
+++ b/docs/reference/python-sdk/sandbox.mdx
@@ -13,8 +13,8 @@ Create a new sandbox. [HTTP API →](/api-reference/sandboxes/create)
Template name
-
- Idle timeout in seconds
+
+ Idle timeout in seconds. `0` (the default) means persistent — the sandbox never auto-hibernates.
@@ -96,7 +96,7 @@ Create a new sandbox from a checkpoint. [HTTP API →](/api-reference/checkpoint
Checkpoint ID
-
+
Idle timeout
diff --git a/docs/reference/typescript-sdk.mdx b/docs/reference/typescript-sdk.mdx
index e5c2584a..5a60a861 100644
--- a/docs/reference/typescript-sdk.mdx
+++ b/docs/reference/typescript-sdk.mdx
@@ -28,7 +28,7 @@ Create a new sandbox.
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `template` | string | `"base"` | Template name |
-| `timeout` | number | `300` | Idle timeout in seconds |
+| `timeout` | number | `0` | Idle timeout in seconds |
| `apiKey` | string | env var | API key |
| `apiUrl` | string | env var | API URL |
| `envs` | Record\ | — | Environment variables |
@@ -64,7 +64,7 @@ Create a new sandbox from a checkpoint.
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `checkpointId` | string | — | Checkpoint ID (**required**) |
-| `timeout` | number | `300` | Idle timeout |
+| `timeout` | number | `0` | Idle timeout |
| `apiKey` | string | env var | API key |
| `apiUrl` | string | env var | API URL |
@@ -120,7 +120,7 @@ Resume a hibernated sandbox.
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
-| `timeout` | number | `300` | Idle timeout after wake |
+| `timeout` | number | `0` | Idle timeout after wake |
#### `sandbox.setTimeout(timeout): Promise`
diff --git a/docs/reference/typescript-sdk/sandbox.mdx b/docs/reference/typescript-sdk/sandbox.mdx
index ef130807..61441656 100644
--- a/docs/reference/typescript-sdk/sandbox.mdx
+++ b/docs/reference/typescript-sdk/sandbox.mdx
@@ -13,8 +13,8 @@ Create a new sandbox. [HTTP API →](/api-reference/sandboxes/create)
Template name
-
- Idle timeout in seconds
+
+ Idle timeout in seconds. `0` (the default) means persistent — the sandbox never auto-hibernates.
@@ -116,7 +116,7 @@ Create a new sandbox from a checkpoint. [HTTP API →](/api-reference/checkpoint
Checkpoint ID
-
+
Idle timeout
@@ -192,7 +192,7 @@ Snapshot VM state and stop. No compute cost while hibernated. [HTTP API →](/ap
Resume a hibernated sandbox. [HTTP API →](/api-reference/sandboxes/wake)
-
+
Idle timeout after wake
diff --git a/docs/sandboxes/overview.mdx b/docs/sandboxes/overview.mdx
index ebf34c41..5e5459f0 100644
--- a/docs/sandboxes/overview.mdx
+++ b/docs/sandboxes/overview.mdx
@@ -75,7 +75,7 @@ curl -X POST https://app.opencomputer.dev/api/sandboxes \
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `template` | string | `"base"` | Template for the VM root filesystem |
-| `timeout` | number | `300` | Idle timeout in seconds (resets on every operation) |
+| `timeout` | number | `0` | Idle timeout in seconds, resets on every operation. `0` (default) = persistent, never auto-hibernates |
| `envs` | object | — | Environment variables set inside the VM |
| `metadata` | object | — | Arbitrary key-value pairs stored with the sandbox |
| `cpuCount` | number | — | CPU cores. TypeScript and HTTP API only |
@@ -125,7 +125,7 @@ Sandboxes have four states:
| `stopped` | Terminated |
| `error` | Failed |
-A rolling idle timeout (default 300s) resets on every operation — exec, file access, agent activity. When the timeout expires, the sandbox auto-hibernates if possible, otherwise stops.
+By default a sandbox is persistent (`timeout` `0`) and never auto-hibernates. When you set a positive `timeout`, a rolling idle timer resets on every operation — exec, file access, agent activity. When the timer expires, the sandbox auto-hibernates if possible, otherwise stops.
## Hibernation & Wake
diff --git a/docs/troubleshooting.mdx b/docs/troubleshooting.mdx
index 527a78f7..18b9cbe5 100644
--- a/docs/troubleshooting.mdx
+++ b/docs/troubleshooting.mdx
@@ -39,7 +39,7 @@ The sandbox is still starting up, or it's hibernated and hasn't finished waking.
**Command timeout:** Increase the `timeout` parameter on `exec.run()` or use `--timeout` with `oc exec`. Default is 60s for SDK `exec.run()`, unlimited for CLI without `--wait`.
-**Idle timeout:** Sandboxes auto-hibernate after 300s of inactivity. Increase with `sandbox.setTimeout()` or `oc sandbox set-timeout`. The timeout resets on every operation.
+**Idle timeout:** By default sandboxes are persistent (`timeout` `0`) and do not auto-hibernate. If you created the sandbox with a positive `timeout`, it auto-hibernates after that many seconds of inactivity. Adjust with `sandbox.setTimeout()` or `oc sandbox set-timeout` (`0` disables auto-hibernate). The timeout resets on every operation.
### Agent exits immediately