Browser lifecycle
| Limit | Value | Source |
|---|---|---|
| Default browser max duration | 86400000 ms, or 24 hours | BrowserCreateOptions.maxDuration |
| Browser engine | Chrome | Current managed runtime |
Playwright execution
| Limit | Value |
|---|---|
| Default execution timeout | 30000 ms |
| Maximum execution timeout | 120000 ms |
| Maximum Playwright code body | 256 KiB UTF-8 |
| Runtime action max body size | 128 KiB |
| Default runtime evaluate timeout | 30000 ms |
| Default navigation timeout | 30000 ms |
| Default PDF timeout | 30000 ms |
| Maximum runtime action timeout | 60000 ms for direct runtime actions that use the runtime action limiter |
page is already in scope. Returning very large values can still make responses hard to use even when execution succeeds.
Observations and capture
| Limit | Value |
|---|---|
| Default Playwright observation characters | 20000 |
| Maximum Playwright observation characters | 50000 |
| Maximum observation depth | 8 |
| Maximum observation timeout | 10000 ms |
| Maximum observation locator length | 2000 characters |
| MCP default observation kind | aria |
| MCP default observation depth | 5 |
| MCP default observation timeout | 8000 ms |
| MCP default observation characters | 20000 |
| Limit | Default | Maximum |
|---|---|---|
| Pages | 20 | 50 |
| Navigations per page | 5 | 20 |
Agent variables
| Limit | Value |
|---|---|
| Maximum variables | 50 |
| Maximum variable name length | 120 characters |
| Maximum variable value size | 16 KiB UTF-8 |
| Maximum scoped allowed domains per variable | 20 |
| Maximum scoped domain length | 255 characters |
Agent runs
| Surface | Limit |
|---|---|
MCP run_web_agent.maxTurns | Maximum 50 |
MCP run_web_agent.maxToolCalls | Maximum 50 |
MCP run_web_agent.toolTimeoutMs | Maximum 120000 ms |
MCP run_web_agent.outputSchema | Maximum serialized size 64 KiB; external refs are rejected. |
CLI web agent | Exposes --max-turns, --max-tool-calls, --timeout-ms, and --tool-timeout-ms; values must be positive integers. |
SDK web.agent() | Exposes maxTurns, maxToolCalls, timeoutMs, toolTimeoutMs, and maxOutputTokens. |
Quick actions
| Action | Limit or default |
|---|---|
| Scrape timeout | Default 30000 ms |
Scrape waitFor timeout in session-scoped scrape | Default 5000 ms |
| Scrape content cap | Default 20000 characters, maximum 50000 |
| Scrape tree extraction | Bounded at 200 nodes and depth 10 when extract: "tree" is used on session-scoped scrape. |
| Screenshot timeout | Default 30000 ms |
| PDF timeout | Default 30000 ms |
| PDF bytes | Runtime maximum 100 MiB |
Browser resources and events
| Limit | Value |
|---|---|
| Browser event product payload | 16 KiB |
| Browser event diagnostic payload | 64 KiB |
| Browser event string field | 4 KiB |
| Browser event array items | 50 |
| Browser event list items | 100 |
| Browser event list payload | 1 MiB |
MCP manage_browsers.limit | Maximum 100 |
| CAPTCHA resolve timeout in MCP | Maximum 120000 ms |
SDK retries
Default SDK retry config:| Field | Default |
|---|---|
maxRetries | 3 |
initialIntervalMs | 500 |
maxIntervalMs | 30000 |
exponent | 1.5 |
jitter | true |
retryableStatusCodes | 429, 500, 502, 503, 504 |
retryConnectionErrors | true |
Practical guidance
When you approach a limit:- Split long browser work into smaller observed steps.
- Write bulky output to files or downloads instead of returning it from Playwright.
- Keep observations scoped with locators.
- Use
maxChars,limit,cursor, and pagination fields instead of requesting everything. - Move multi-step, stateful flows to managed browsers or SDK agent sessions.