Skip to Content
webagent docs
Concepts

Limits

What limits a run - sessions, memory, waits, steps, request rate and size of results.

Open as .md

These numbers may change

The numbers on this page are read from the code today. Plans, defaults and deployments can change them. The API reports your organization's own limits: GET /v1/tenant returns the quotas that apply to you and what you use now.

Sessions and memory

Each organization has a limit on open sessions and on browser memory. Each session reserves a fixed amount of memory. When a new session would go over a limit, the call fails with capacity_exceeded and a plain message. error.details.quota says which limit it was: concurrency or memory. Stop a session or wait for one to end, then try again. When the organization is within its quotas but every browser is busy, the same code comes back unless you ask to wait or queue: see Sessions.

PlanOpen sessionsBrowser memory for the organizationMemory per session
free33 GB1 GB
starter44 GB1 GB
pro88 GB2 GB
enterprise1616 GB2 GB

New organizations run with the free limits. An organization can have its own memory quota set by Lookover. Concurrency never goes above the plan.

capacity_exceeded is also what you get when:

  • a monthly budget set for the organization is reached (details.quota is budget). Raise the budget to continue.
  • an organization that has credit enforcement switched on has no credits left (details.quota is credits). A running session finishes. New sessions are refused.

Session time

LimitDefaultRange
Idle time before the session closes5 minutes10 seconds to 24 hours
Maximum age1 hour10 seconds to 24 hours

Set them with idleTimeoutMs and maxDurationMs on create_session.

Waits in MCP

One MCP call returns one reply. A proxy in front of the API closes a reply that sends nothing for 100 seconds, so a call never waits longer than 90 seconds for a task.

ToolDefault waitMaximum
run_task90 seconds90 seconds
get_task30 seconds90 seconds
smoke_test60 seconds90 seconds
get_report30 seconds90 seconds
skill_<name>30 seconds120 seconds
get_skill_run0 (does not wait)120 seconds

A job that is still going when the wait ends keeps running. That is not an error. The reply says running. Read the result with get_report, get_task or get_skill_run. For get_task, a larger waitSeconds is lowered to the maximum. For run_task, smoke_test and get_report, a value above the maximum is refused with invalid_input.

Tasks

LimitValue
Goal length2000 characters
maxSteps1 to 50. Default 25
A question that gets no answerThe task stops after 10 minutes with unanswered
Cost per taskA cost cap stops the task with budget and limit: "maxCostUsd"

Quick actions

ActionLimit
scrape, screenshot, pdftimeoutMs 1 to 120 seconds. Default 30 seconds
crawlmaxPages up to 100 (default 25). maxDepth up to 5 (default 2). maxMs up to 600 seconds (default 300)

Request rate

Each API key may send 600 requests per minute. REST and MCP share the count. Over the limit, the API answers 429 with rate_limited and a Retry-After header.

Size of results

Tool results are cut to fit an agent's context. A string longer than 2000 characters is cut with a note. A skill result keeps the last 50 log lines. When it is larger than 100 000 bytes, each step is reduced to one line. Screenshots and video are never inline. See Tools.

Where targets are limited

Every navigation passes the guard. Private, loopback, link-local and cloud-metadata addresses are blocked. See Test a local app.

On this page