Bounded Browser Subagent Execution (Loop & DOM Bounding)
Overview
Spawning an autonomous browser subagent with a vague prompt ("Go to the documentation website and find information on rate limits") is one of the most expensive failure modes in agentic systems.
Unbounded browser subagents click exploratory links, get trapped in cookie banners and CAPTCHAs, ingest raw 50,000-token HTML DOM trees, and take 30+ visual screenshots - burning 200,000+ tokens and stalling the parent agent for 5 minutes.
The Bounded Browser Subagent Protocol enforces strict Step Ceilings, Deterministic Stop Conditions, and Selector-Targeted DOM Extractions.
Unbounded Exploration vs. Bounded Surgical Execution
┌─────────────────────────────────────────────────────────────┐
│ Browser Subagent Execution │
│ │
│ Unbounded Browser Subagent (Anti-Pattern): │
│ • Prompt: "Find rate limits on Stripe docs" │
│ • Navigates 8 pages, clicks blog links, accepts cookies │
│ • Dumps entire HTML body (45,000 tokens) on each step │
│ • 28 Steps executed, $2.40 billed, 4 minutes elapsed │
│ │
│ Bounded Surgical Subagent Protocol: │
│ • Target URL: `https://docs.stripe.com/rate-limits` │
│ • Max Steps: 3 │
│ • Stop Condition: Read `#rate-limits-table` $\rightarrow$ Return TSV│
│ • 2 Steps executed, $0.04 billed, 6 seconds elapsed │
└─────────────────────────────────────────────────────────────┘
The 4 Bounding Pillars
Every invocation of browser_subagent must define these 4 explicit boundaries:
┌───────────────────────────────────────────────────────────────────────────┐
│ 1. DIRECT TARGET URL: Direct deep-link; never start on a generic homepage │
│ 2. HARD STEP CEILING: Maximum 5 to 8 actions before forced return │
│ 3. DETERMINISTIC STOP: "Stop immediately when element [X] is visible" │
│ 4. STRICT RETURN SCHEMA: Return only a compact JSON object or TSV table │
└───────────────────────────────────────────────────────────────────────────┘
Master Bounded Subagent Task Prompt Template
When calling browser_subagent, structure the Task parameter using this schema:
### 🎯 Objective:
Navigate to [EXACT DEEP LINK URL] and extract [SPECIFIC DATA].
### 🛑 Hard Stop Condition (RETURN IMMEDIATELY WHEN):
- Element `table.pricing-matrix` is visible OR
- Target text "Per-request rate limits" is located.
### ⚠️ Execution Constraints:
- **Maximum Step Limit**: 5 steps. If data is not found in 5 steps, return `[DATA_NOT_FOUND]`.
- Do NOT click navigation menus, footers, or external links.
- Do NOT return raw HTML. Extract text from the target selector only.
### 📋 Return Payload Schema:
Return a single JSON object:
{
"endpoint": string,
"requests_per_second": number,
"burst_allowance": number,
"verified_url": string
}
Production Tool Call Example
{
"TaskName": "Extracting Stripe API Rate Limits",
"TaskSummary": "Extracting rate limits table from Stripe documentation.",
"RecordingName": "stripe_rate_limits",
"Task": "1. Navigate directly to 'https://docs.stripe.com/rate-limits'. 2. Wait for '#limits' section. 3. Extract the RPS limits for read and write endpoints. 4. STOP and return JSON { 'read_rps': number, 'write_rps': number }.",
"toolAction": "Extracting rate limits table",
"toolSummary": "Browser rate limit extraction"
}
Turn & Token Benchmark Comparison
Extracting API pricing data from a SaaS documentation portal:
| Dimension | Unbounded Subagent | Bounded Subagent Protocol | Improvement |
|---|---|---|---|
| Total Steps | 24 steps | 2 steps | 91.6% Fewer Steps |
| DOM Tokens Ingested | 185,000 tokens | 4,200 tokens | 97.7% Token Reduction |
| Session Latency | 195 seconds | 8.5 seconds | 23x Faster |
| Trap Failure Rate | 35% (Stuck in popups) | 0% (Direct selector target) | 100% Deterministic |
Agent Operational Directive
MANDATORY: Autonomous agents must NEVER spawn a browser subagent without an explicit deep-link URL and a hard step ceiling ($\le 8$). Always specify the exact DOM selector to extract and forbid exploratory link hopping.