# TaskCloud > Persistent cloud computers for AI agents. Each sandbox is a Firecracker microVM (own kernel, Ubuntu 24.04, root, systemd, Docker) with a persistent disk, pause/resume with a RAM snapshot (resume target p95 < 800 ms), auto-pause after idle (default 300 s) with wake on request, fork with memory, exec, files, public HTTPS ports, SSH, and a desktop with a computer-use API. Billed per second while running; paused = $0 compute. EU only. Private beta. Key facts for agents: - REST API base: https://api.task.cloud/v1 ; auth header `Authorization: Bearer taskcloud_sk_...` ; JSON fields are snake_case. - OpenAPI 3.1 spec: https://api.task.cloud/v1/openapi.yaml - SDKs: npm `@taskcloud/sdk` (`new Client()`), pip `taskcloud` (`Client()`); both read env `TASKCLOUD_API_KEY`. CLI: `taskcloud`. MCP: `npx -y @taskcloud/mcp` (stdio) or `npx -y @taskcloud/mcp --http` (self-hosted Streamable HTTP at /mcp, `Authorization: Bearer ` per request); hosted https://mcp.task.cloud/mcp coming soon. - Create: `POST /sandboxes {"template":"base","size":"default"}` → Sandbox (`id` like `sbx_...`, `state`). Sizes: small (2 vCPU/4 GB) $0.015/h, default (4/8) $0.030/h, large (8/16) $0.060/h. - Run: `POST /sandboxes/{id}/exec {"command":"..."}` → `{exit_code, stdout, stderr}`. `background: true` → 202 Command; `stream: true` → SSE. - Files: `GET|PUT /sandboxes/{id}/files/content?path=...` (raw bytes), `GET /sandboxes/{id}/files?path=...` (list). - Port URL: `POST /sandboxes/{id}/ports {"port":3000,"visibility":"public"}` → `https://-3000.taskhost.cloud`. - Lifecycle: `POST /sandboxes/{id}/pause|resume|fork`, `PATCH /sandboxes/{id}` (auto_pause, always_on), `DELETE /sandboxes/{id}`. Any exec/files/port/SSH request wakes a paused sandbox. Bulk fork: `count` 1–50 per fork call, all or nothing; `count` > 1 returns a `data` array of sandboxes. - Computer use: `GET /sandboxes/{id}/screenshot`, `POST /sandboxes/{id}/input {"actions":[{"action":"left_click","coordinate":[640,412]}]}`. - Errors: `{"error":{"code","message","retryable","status","request_id"}}`; retry only if `retryable`. ## Docs - [Overview](https://task.cloud/docs/index.md): what a sandbox is and what it can do - [Quickstart](https://task.cloud/docs/quickstart.md): first sandbox and command in TypeScript, Python, CLI, curl - [Sandboxes](https://task.cloud/docs/concepts/sandboxes.md): VM, sizes, sources, labels, environment inside - [Lifecycle](https://task.cloud/docs/concepts/lifecycle.md): states, auto-pause, wake on request, always-on, batch, billing per state - [Snapshots and fork](https://task.cloud/docs/concepts/snapshots-and-fork.md): RAM+disk snapshots, fork with memory - [Templates](https://task.cloud/docs/concepts/templates.md): built-in base/desktop, from OCI image or snapshot, versions - [Exec and files](https://task.cloud/docs/guides/exec-and-files.md): sync/background/SSE exec, PTY WebSocket, file API, watch - [Networking](https://task.cloud/docs/guides/networking.md): public/private port URLs, access tokens, SSH - [Desktop and computer use](https://task.cloud/docs/guides/desktop-and-computer-use.md): stream URLs, screenshot, input, agent loop with Claude - [Webhooks](https://task.cloud/docs/guides/webhooks.md): events, payload, HMAC verification - [API reference](https://task.cloud/docs/api-reference.md): conventions, errors, all endpoints ## SDKs and tools - [TypeScript SDK](https://task.cloud/docs/sdk/typescript.md) - [Python SDK](https://task.cloud/docs/sdk/python.md) - [CLI](https://task.cloud/docs/cli.md) - [MCP server](https://task.cloud/docs/mcp.md) ## Optional - [Billing](https://task.cloud/docs/billing.md): prices, plans (Starter/Team credit expires monthly), batch −50%, always-on $19.90/month - [Limits](https://task.cloud/docs/limits.md): rate limits, quotas, timeouts - [Security](https://task.cloud/docs/security.md): isolation, scopes, data location - [Migrate from E2B](https://task.cloud/docs/guides/migrate-from-e2b.md) - [Migrate from boat.dev](https://task.cloud/docs/guides/migrate-from-boat.md)