Browse and Verify
Dispatch to the browser specialist agent (.kiro/agents/browser.json) for URL validation, section extraction, and heading discovery. The browser agent has the Playwright MCP configured — the default agent does NOT load Playwright (40+ tools would degrade tool selection).
Setup
The browser agent is at .kiro/agents/browser.json with @playwright/mcp configured headless. Dispatch to it for any browsing task rather than loading Playwright in the main context.
If the browser agent is unavailable, fall back to the web_fetch tool (built-in, no MCP needed).
When to use
- Before adding a quiz source link: navigate to the URL, verify the page loads and the content exists
- When finding the right section to link: browse the page and look for heading IDs/anchors
- When writing explanations: read the relevant section to ground your explanation in the source
- When a learner questions a source: re-read the section to confirm accuracy
Workflow: Validate and find the right section
- Navigate to the page URL
- Check the snapshot — does the page load? Is the content relevant?
- Find headings — look for section IDs in the accessibility snapshot to construct
#anchorlinks - Read the section — confirm the content actually answers/addresses the quiz question
- Write the source entry with the specific URL#anchor, label, and section description
Quality rules for quiz source links
- Always browse before committing — dead links and irrelevant pages erode trust
- Link to the most specific section — use
#anchorIDs from headings - Read the section to confirm it actually helps answer the question
- Write the
sectionfield based on what you read, not assumptions - If no good anchor exists, link to the page and describe which paragraph is relevant
- Never link to generic overviews — the linked page must significantly help answer the specific question
- Multiple targeted links > one vague link — e.g., both the spec section AND the AWS implementation docs
Fallback: web_fetch
When Playwright MCP is not configured or the page is simple (static HTML, no JS rendering needed):
web_fetch url="https://iceberg.apache.org/spec/" search_terms="manifest lists" mode="selective"
This returns ~10 lines around matches. Sufficient for validation but won't find heading IDs as reliably.
Escalation Decision Tree
Default to web_fetch first — it's faster (no browser startup) and sufficient for most documentation pages:
- Try
web_fetchwithsearch_terms(selective mode) - If content is empty or minimal (JS-rendered page): escalate to Playwright
- If you need heading IDs / anchor discovery: escalate to Playwright
- If the page requires interaction (login, cookie consent, expand sections): Playwright required
| Page type | Tool | Why |
|---|---|---|
| Static docs (most sources) | web_fetch |
Fast, sufficient |
| AWS docs (some JS-rendered) | Playwright | Content loads dynamically |
Pages needing #anchor discovery |
Playwright | Accessibility snapshot shows heading refs |
| Any page where fetch returns empty | Playwright | JS rendering needed |
When NOT to use Playwright
- Page is static HTML and you only need to check if it loads → use
web_fetchintruncatedmode - You need a HEAD request (just check HTTP status) →
web_fetchis lighter - Content is already in your context from a prior fetch → don't re-browse