Cloud Computer API belongs under AI, not the low-level Cloud deployment API. Web, Mobile, the community desktop, and SDKs use cloud computer objects to access files, terminal, browser, desktop, Buddies, workspace mounts, and backups.
A cloud computer may reuse Cloud deployments, namespaces, PVCs, exposures, backups, and cloud workers behind the scenes. Clients should not handle those infrastructure objects directly; Pod details, logs, pause/resume operations, and deployment internals stay in Cloud developer options.
A cloud computer represents one deployed cloud runtime environment. It is not a Buddy list item. A Buddy is the Shadow AI identity; when a Buddy is added to a cloud computer, the platform wires the internal runner runtime, connector binding, and Buddy identity into the same environment.
Clients should treat cloud computers as community objects, not raw deployments. Developer options can drill into deployments, Pods, logs, template snapshots, and costs.
Use this page when you are integrating cloud computers in a community surface. If you only need lower-level deployment primitives, use Cloud SaaS Runtime instead.
For local development:
Then open:
/app/cloud-computers/app/space, then open the built-in Cloud Computers app/(main)/cloud-computersGET /api/cloud-computers?limit=100&offset=0Cloud computer development needs the normal Shadow space plus the Cloud worker/Kubernetes capability configured for your environment. In a lightweight dev environment without a working cluster, the UI should still render list, empty, loading, error, and repair states; runtime actions such as terminal, desktop, browser, backups, and workspace mounts will return configuration or pod errors until Cloud is available.
Common development environment knobs:
| Variable | Purpose |
|---|---|
CLOUD_COMPUTER_FILE_ROOT | Preferred root path for file APIs inside the runtime container. |
CLOUD_COMPUTER_FILE_MAX_BYTES | Max text/file preview size for file reads. |
CLOUD_COMPUTER_FILE_MAX_NODES | Max nodes returned by tree traversal. |
CLOUD_COMPUTER_FILE_MAX_DEPTH | Max folder depth traversed by the tree API. |
CLOUD_COMPUTER_DESKTOP_IMAGE | Image used when repairing or attaching desktop/VNC support. |
CLOUD_COMPUTER_BROWSER_IMAGE | Image used when repairing or attaching browser/CDP support. |
CLOUD_COMPUTER_DESKTOP_WIDTH / CLOUD_COMPUTER_DESKTOP_HEIGHT | Default desktop session resolution. |
The TypeScript SDK exposes the AI cloud computer routes directly:
Browser, desktop, workspace mount, backup, and Cloud Buddy helpers are also available through client.*CloudComputer* methods. Prefer these methods in clients instead of calling /api/cloud-saas/deployments/* directly.
Cloud computer cards should be written defensively because a single card summarizes several underlying resources: deployment row, Kubernetes namespace, pod, PVC, optional browser, optional desktop, optional Cloud Buddy runner, and backups.
| Status | Product meaning | Client behavior |
|---|---|---|
pending / deploying | Deployment exists but the runtime is not ready. | Show progress and disable terminal/browser/desktop actions. |
deployed / running | Runtime is available. | Enable files, terminal, browser, desktop, Buddies, backups, and workspace mounts based on capabilities. |
paused / stopped | Runtime state is retained but compute is not active. | Show resume/repair actions and keep backups visible. |
failed | Deployment or runtime repair failed. | Show the latest error and a repair action. |
destroyed | Historical record only. | Hide by default unless includeHistory=1 is requested. |
Do not infer capabilities from status alone. Always read the capabilities object in the list/detail response.
Every route requires Shadow authentication and resolves an explicit Actor through the standard auth middleware.
| Route | Actor | Resource | Action | Data class |
|---|---|---|---|---|
GET /api/cloud-computers | user/pat/oauth | cloud_computer:* | read | server-private |
POST /api/cloud-computers | user/pat/oauth | cloud_computer:* | deploy | cloud-secret |
GET /api/cloud-computers/:id | user/pat/oauth | cloud_computer:{id} | read | server-private |
PATCH /api/cloud-computers/:id | user/pat/oauth | cloud_computer:{id} | manage | server-private |
/api/cloud-computers/:id/files/* | user/pat/oauth | cloud_computer:{id}/files | read/write | secret |
Socket.IO cloud-computer:terminal:* | user session | cloud_computer:{id}/pod:{pod} | manage | cloud-secret |
POST /api/cloud-computers/:id/browser/session | user session | cloud_computer:{id}/browser | manage | cloud-secret |
POST /api/cloud-computers/:id/desktop/session | user session | cloud_computer:{id}/desktop | manage | cloud-secret |
POST /api/cloud-computers/:id/workspace-mounts | user session | cloud_computer:{id}/workspace-mounts | manage | cloud-secret |
GET/POST /api/cloud-computers/:id/buddies | user/pat/oauth | cloud_computer:{id}/buddies | read/deploy | server-private |
GET/POST /api/cloud-computers/:id/backups | user/pat/oauth | cloud_computer:{id}/backups | read/write | cloud-secret |
POST /api/cloud-computers/:id/restore | user/pat/oauth | cloud_computer:{id}/restore | manage | cloud-secret |
OAuth/PAT scope is not sufficient on its own. The space also checks deployment owner access, space membership, Buddy ownership, workspace mount policy, backup ownership, and root path policy.
Response:
Use includeHistory=1 to include destroyed or historical deployments.
Create selects a deployable cloud computer template and runs the same validated Cloud SaaS deployment pipeline. Template, namespace, and resource tier are internal details.
Update currently changes the display name. It updates the underlying Cloud deployment row and does not create a separate Cloud Computer record.
Rules:
CLOUD_COMPUTER_FILE_ROOT when configured, otherwise the first available path from /workspace, /workspaces, /home/shadow, /state, and /tmp.cf_... values; clients must not parse them..., control characters, root deletion, and names containing / are rejected.Terminal uses the authenticated Socket.IO connection:
cloud-computer:terminal:startcloud-computer:terminal:inputcloud-computer:terminal:resizecloud-computer:terminal:stopcloud-computer:terminal:data, cloud-computer:terminal:exitThe backend wraps kubectl exec -it with node-pty, so TUI programs, resize, Ctrl+C/Ctrl+D, and normal shell behavior work. Interactive terminal access requires a user session; agent tokens cannot open a shell as the user.
The browser is a browser-native CDP surface. The user operates a real Chrome/Chromium profile through screenshot, navigation, click, text, and key APIs. It is for manual login, MFA, and human verification, not CAPTCHA solving or bypassing third-party controls.
The web client uses noVNC. The space verifies the short-lived session token and bridges to the namespace-local VNC service through kubectl port-forward. The VNC service must stay ClusterIP/internal-only.
Mounts use the shadowob workspace webdav runtime, keeping authorization behind Shadow workspace APIs and avoiding direct object-storage mounts. Responses never return a full user token; the runtime receives only a Kubernetes Secret reference.
These routes manage only Cloud Buddies in the selected cloud computer. Creating a Buddy appends the Buddy identity, internal runner runtime, and connector binding to the underlying deployment config, then runs Cloud SaaS redeploy. It does not create a second cloud computer.
Cloud computer UI should use these routes. /api/cloud-saas/deployments/* remains for Cloud developer options. Backups may use CSI VolumeSnapshot or object archive fallback depending on cluster capability and configuration.
Product documentation screenshots should be generated from a stable, business-realistic seed instead of hand-maintained throwaway data.
The seed flow creates an independent docs scenario with stable users, avatars, space branding, wallpaper, channels, workspace files, Buddies, Buddy Inbox, shop data, cloud computers, and desktop layout. The Playwright pass refreshes community desktop screenshots:
docs-desktop-travel-home.pngdocs-desktop-gaming-channel.pngdocs-desktop-family-file.pngdocs-desktop-art-cloud-computer.pngdocs-desktop-music-buddy-inbox.pngWhen cloud computer UI changes, update the faker scenario in scripts/e2e/docs-screenshot-faker.mjs and regenerate the screenshots instead of editing the PNGs manually.