Skip to content
Try out in chatDeveloper dashboardLogin

Limits and behaviors

Platform behaviors and constraints you'll hit in practice, grouped by area, each with a workaround.

This page collects platform behaviors that aren’t obvious from the API surface. Read it before debugging; most “why is it doing that?” moments are listed here.

BehaviorDetailsWhat to do
Google domains blockedNavigation to google.com and its subdomains is blocked (URLs merely containing google.com, like redirect params, are fine)Use a different search engine, e.g. Bing or DuckDuckGo
chrome:// URLs blockedInternal browser pages can’t be navigated toUse API endpoints for browser state (e.g. /tabs for tab info)
Max 5 tabsOpening a sixth tab fails; the last remaining tab can’t be closedClose tabs you’re done with; reuse a tab by navigating it
No right_clickRight-click is not supported in browser sessions and returns a not-supported errorUse keyboard shortcuts or in-page UI instead; or use a desktop session
Downloads disabledThe browser denies all file downloadsFetch the file’s URL with a shell curl on a desktop session, or extract content via html()
HTML is cached ~2 shtml() responses are cached for 2 seconds per URLWait 2 s (or navigate) before re-reading if you need fresh DOM
Typing is per-keystroketype() sends real keystrokes at ~100 characters/secondBudget ~1 s per 100 chars; don’t set tight timeout_ms on long text
Navigation waits for network idlenavigate() waits for network idle up to 5 s, then returns anywayFor slow SPAs, add a short wait() and screenshot to confirm rendering
BehaviorDetailsWhat to do
Scrolling is quantizedScroll deltas snap to ~50 px wheel clicksUse deltas that are multiples of 50; verify position with a screenshot
Uploads land in /workspace/uploadsFile uploads go there; max 512 MB per file, transferred in 8 MB chunksReference uploaded files by that path in shell commands and apps
No file-download actionThere’s no action that returns a file from the machineReturn small files via shell stdout (base64 file.bin); capture images via screenshots
Firefox may ignore navigateDesktop Firefox sometimes doesn’t react to the navigate actionFall back to hotkey(["ctrl", "l"]), type the URL, press Enter
Shell cwd is /workspaceexec commands run in /workspace unless you pass cwdPass cwd explicitly or use absolute paths
BehaviorDetailsWhat to do
Idle reapingSessions terminate after inactivity_timeout_seconds with no activity. Any executed action (screenshots included) or a keepalive call resets the clock, but if you pause between calls longer than the idle window, the session is reapedSet inactivity_timeout_seconds to 20+ minutes for interactive development; call keep_alive() during long pauses
Hard lifetime capmax_lifetime_seconds always applies, regardless of activitySet it to cover your longest expected run; save state with persistent=True if you need to resume
One action at a timeActions on a session are serialized; concurrent requests queue and can hit the timeoutAwait each action before sending the next; use batch for sequences
BehaviorDetailsWhat to do
Coordinates are screenshot pixelsx/y are pixel positions in the screenshot’s coordinate spaceTake a fresh screenshot before clicking; don’t hardcode coordinates
Per-action timeoutEach action accepts a timeout_msRaise it for slow operations (long typing, heavy pages)
Batch stops on first errorA batch executes in order, stops at the first failure, and returns the results so farCheck executed vs total in the response and resume from the failed action
BehaviorDetailsWhat to do
Presigned URLsScreenshot URLs are presigned and expire after ~7 daysDownload images you want to keep when you receive them
JPEG formatScreenshots are JPEG-compressedFine for vision models and review; don’t expect pixel-exact fidelity
BehaviorDetailsWhat to do
Concurrent computer limitThe number of simultaneously running computers is plan-dependent; exceeding it returns a 429 with “Concurrent limit reached”Delete computers when done, retry with backoff, or upgrade your plan in the dashboard