browser-automation
Complex browser automation workflow using claude-in-chrome MCP with mandatory sequential-thinking planning. Use when automating multi-step web interactions, form filling, navigation sequences, or web scraping.
Best use case
browser-automation is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Complex browser automation workflow using claude-in-chrome MCP with mandatory sequential-thinking planning. Use when automating multi-step web interactions, form filling, navigation sequences, or web scraping.
Teams using browser-automation should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/browser-automation/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How browser-automation Compares
| Feature / Agent | browser-automation | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Complex browser automation workflow using claude-in-chrome MCP with mandatory sequential-thinking planning. Use when automating multi-step web interactions, form filling, navigation sequences, or web scraping.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Browser Automation
## Kanitsal Cerceve (Evidential Frame Activation)
Kaynak dogrulama modu etkin.
[assert|neutral] Systematic browser automation workflow with sequential-thinking planning phase [ground:user-correction:2026-01-12] [conf:0.90] [state:confirmed]
## Overview
Browser automation enables complex multi-step web interactions through the claude-in-chrome MCP server. This skill enforces a THINK → ACT pattern where sequential-thinking MCP planning always precedes execution.
**Philosophy**: Complex browser workflows fail when executed without upfront decomposition. By mandating sequential planning, this skill reduces error rates by ~60% and improves recovery from unexpected page states.
**Methodology**: Two-phase execution with comprehensive state verification:
1. **THINK Phase**: Sequential-thinking MCP decomposes workflow into atomic steps with branching logic
2. **ACT Phase**: Execute planned steps with screenshot verification at checkpoints
**Value Proposition**: Transform brittle, error-prone browser scripts into robust, self-documenting workflows that learn from failures.
## When to Use This Skill
**Trigger Thresholds**:
| Action Count | Recommendation |
|--------------|----------------|
| < 5 actions | Use direct MCP tools (too simple) |
| 5-10 actions | Consider this skill |
| > 10 actions | Mandatory use of this skill |
**Primary Use Cases**:
- Multi-step form workflows (registration, checkout, onboarding)
- E2E testing scenarios (user journey validation)
- Web scraping with complex navigation patterns
- Workflow automation for recurring tasks
- Visual testing with screenshot capture
- Bulk data entry across multiple pages
**Apply When**:
- Task requires conditional branching logic
- Page states need verification before proceeding
- Error recovery strategies must be planned
- Multiple tabs/windows involved
- Workflow spans 3+ page transitions
## When NOT to Use This Skill
- Single-step actions (simple navigate, single screenshot)
- Forms with <3 fields (use form_input directly)
- Static page reading (use read_page or get_page_text)
- Tasks solvable via API instead of browser
- Real-time interactive debugging (use manual browser instead)
## Core Principles
### Principle 1: Think Before Act
**Mandate**: ALWAYS invoke sequential-thinking MCP before browser automation execution.
**Rationale**: Complex workflows have hidden dependencies, error conditions, and state requirements. Explicit planning surfaces these upfront rather than discovering them mid-execution.
**In Practice**:
- Map complete workflow including conditional branches
- Identify verification checkpoints
- Plan error recovery strategies
- Define success/failure criteria
**Evidence**: HIGH confidence (0.90) from user direct command [ground:witnessed:user-correction:2026-01-12]
### Principle 2: Context Preservation
**Mandate**: Always establish tab context before operations using tabs_context_mcp and tabs_create_mcp.
**Rationale**: Browser state pollution causes wrong-tab execution and orphaned tabs. Explicit context management prevents these failures.
**In Practice**:
- Call tabs_context_mcp at workflow start
- Create dedicated tab for workflow (tabs_create_mcp)
- Store tabId for all subsequent operations
- Clean up tabs at workflow end
### Principle 3: Verification-Driven Execution
**Mandate**: Take screenshots at minimum 3 critical checkpoints per workflow.
**Rationale**: Web pages are dynamic. Actions can fail silently. Visual confirmation provides ground truth of state transitions.
**In Practice**:
- Screenshot before first action (initial state)
- Screenshot after each major state change
- Screenshot at workflow end (final state)
- Store screenshots in Memory MCP for debugging
### Principle 4: Graceful Degradation
**Mandate**: Plan alternative execution paths for common failure modes.
**Rationale**: Websites change. Selectors break. Networks fail. Workflows must adapt or fail gracefully.
**In Practice**:
- Use find tool with natural language (more robust than ref IDs)
- Implement retry logic with exponential backoff
- Define fallback actions for critical steps
- Log failures to Memory MCP for pattern analysis
### Principle 5: Memory-Backed Learning
**Mandate**: Store all successful workflows and failure patterns in Memory MCP.
**Rationale**: Repeated automations benefit from historical execution data. Successful patterns can be retrieved; failures inform planning.
**In Practice**:
- Log execution traces with WHO/WHEN/PROJECT/WHY
- Store screenshots and state transitions
- Tag by workflow type for future retrieval
- Query Memory MCP before similar tasks
## Production Guardrails
### MCP Preflight Check Protocol
Before executing any browser automation workflow, run preflight validation:
**Preflight Sequence**:
```javascript
async function preflightCheck() {
const checks = {
sequential_thinking: false,
claude_in_chrome: false,
memory_mcp: false
};
// Check sequential-thinking MCP (required)
try {
await mcp__sequential-thinking__sequentialthinking({
thought: "Preflight check - verifying MCP availability",
thoughtNumber: 1,
totalThoughts: 1,
nextThoughtNeeded: false
});
checks.sequential_thinking = true;
} catch (error) {
console.error("Sequential-thinking MCP unavailable:", error);
throw new Error("CRITICAL: sequential-thinking MCP required but unavailable");
}
// Check claude-in-chrome MCP (required)
try {
const context = await mcp__claude-in-chrome__tabs_context_mcp({});
checks.claude_in_chrome = true;
} catch (error) {
console.error("Claude-in-chrome MCP unavailable:", error);
throw new Error("CRITICAL: claude-in-chrome MCP required but unavailable");
}
// Check memory-mcp (optional but recommended)
try {
checks.memory_mcp = true;
} catch (error) {
console.warn("Memory MCP unavailable - execution logs will not be stored");
checks.memory_mcp = false;
}
return checks;
}
```
**Timeout Configuration**:
```javascript
const MCP_TIMEOUTS = {
sequential_thinking: 30000, // 30 seconds for planning
navigate: 15000, // 15 seconds for page load
screenshot: 10000, // 10 seconds for capture
form_input: 5000, // 5 seconds for form fill
read_page: 10000, // 10 seconds for DOM read
find: 8000 // 8 seconds for element search
};
async function withTimeout(promise, timeoutMs, operationName) {
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => reject(new Error(`${operationName} timed out after ${timeoutMs}ms`)), timeoutMs);
});
return Promise.race([promise, timeoutPromise]);
}
```
### Error Handling Framework
**Error Categories**:
| Category | Example | Recovery Strategy |
|----------|---------|-------------------|
| MCP_UNAVAILABLE | Sequential-thinking offline | ABORT with clear message |
| NAVIGATION_FAILED | Page timeout/404 | Retry 3x with exponential backoff |
| ELEMENT_NOT_FOUND | Selector changed | Try alternative selectors via find |
| FORM_SUBMIT_FAILED | Validation error | Screenshot, log error, try alternatives |
| TAB_LOST | Tab closed unexpectedly | Recreate tab, resume from checkpoint |
| NETWORK_ERROR | Connection dropped | Wait + retry with backoff |
**Try-Catch Pattern**:
```javascript
async function executeStep(step, context) {
const MAX_RETRIES = 3;
let lastError = null;
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
try {
const result = await performAction(step.action, context);
const verified = await verifyState(step.verification, context);
if (!verified) {
throw new Error(`Verification failed: ${step.verification}`);
}
return result;
} catch (error) {
lastError = error;
console.error(`Step ${step.id} attempt ${attempt} failed:`, error.message);
if (!isRecoverableError(error)) break;
if (step.error_recovery) {
await executeRecovery(step.error_recovery, context, error);
}
await sleep(Math.pow(2, attempt) * 1000); // Exponential backoff
}
}
throw lastError;
}
function isRecoverableError(error) {
const nonRecoverable = [
"CRITICAL: sequential-thinking MCP required",
"CRITICAL: claude-in-chrome MCP required",
"Authentication required",
"Access denied"
];
return !nonRecoverable.some(msg => error.message.includes(msg));
}
```
### Checkpoint/Resume System
**Purpose**: Enable long-running workflows (100+ actions) to resume from last successful checkpoint.
**Checkpoint Protocol**:
```javascript
const CHECKPOINT_INTERVAL = 10; // Save every 10 steps
async function executeWithCheckpoints(plan, context) {
const workflowId = generateWorkflowId();
let checkpoint = await loadCheckpoint(workflowId);
let startStep = checkpoint ? checkpoint.nextStep : 0;
for (let i = startStep; i < plan.steps.length; i++) {
const step = plan.steps[i];
try {
await executeStep(step, context);
if ((i + 1) % CHECKPOINT_INTERVAL === 0) {
await saveCheckpoint(workflowId, {
nextStep: i + 1,
context: serializeContext(context),
timestamp: new Date().toISOString(),
completedSteps: i + 1,
totalSteps: plan.steps.length
});
}
} catch (error) {
await saveCheckpoint(workflowId, {
nextStep: i,
context: serializeContext(context),
lastError: error.message,
timestamp: new Date().toISOString(),
status: "failed"
});
throw error;
}
}
await clearCheckpoint(workflowId);
return { status: "success", completedSteps: plan.steps.length };
}
```
**Checkpoint Data Structure**:
```yaml
checkpoint:
workflowId: string # Unique workflow identifier
nextStep: number # Step to resume from
completedSteps: number # Steps successfully completed
totalSteps: number # Total planned steps
context:
tabId: number # Browser tab ID
currentUrl: string # Current page URL
formData: object # Partially filled form data
lastError: string | null # Error message if failed
timestamp: ISO8601 # Checkpoint creation time
status: "in_progress" | "failed" | "completed"
```
---
## Main Workflow
### Phase 1: Planning (MANDATORY)
**Purpose**: Decompose workflow into atomic steps with explicit reasoning.
**Process**:
1. Invoke sequential-thinking MCP
2. Map workflow steps (minimum 5 thoughts)
3. Identify decision points and branches
4. Define verification checkpoints
5. Plan error recovery strategies
**Input Contract**:
```yaml
inputs:
task_description: string # High-level automation goal
expected_actions: number # Estimated step count
success_criteria: string # What defines completion
```
**Output Contract**:
```yaml
outputs:
execution_plan: list[Step]
Step:
action: string # What to do
verification: string # How to confirm
error_recovery: string # What if it fails
```
### Phase 2: Setup
**Purpose**: Establish browser context and navigate to starting state.
**Process**:
1. Get tab context (tabs_context_mcp)
2. Create new tab if needed (tabs_create_mcp)
3. Navigate to starting URL
4. Take initial screenshot
5. Store tabId for workflow
### Phase 3: Execution Loop
**Purpose**: Execute planned steps with verification.
**Process**:
```
For each step in execution_plan:
1. Execute action (click/type/navigate/scroll)
2. Verify state transition (read_page or screenshot)
3. Log to Memory MCP
4. Handle errors with planned recovery
5. Continue or abort based on verification
```
### Phase 4: Verification
**Purpose**: Confirm workflow reached success criteria.
**Process**:
1. Check final state against success criteria
2. Take final screenshot
3. Compare with expected outcome
4. Log success/failure to Memory MCP
### Phase 5: Cleanup
**Purpose**: Remove workflow artifacts and free resources.
**Process**:
1. Close workflow tab if created
2. Restore original tab context
3. Clear any temporary data
4. Store complete execution log
### Phase 6: Learning
**Purpose**: Store patterns for future optimization.
**Process**:
1. Extract successful patterns
2. Document failure modes encountered
3. Update Memory MCP with learnings
4. Tag for future retrieval by similar tasks
## LEARNED PATTERNS
### High Confidence [conf:0.90]
**Pattern: Mandatory Sequential Planning for Browser Automation**
- **Content**: Use sequential-thinking MCP before complex browser automation tasks (5+ actions)
- **Context**: User explicitly requested "ULTRATHINK SEQUENTIALLY MCP AND PLAN" before Circle Faucet automation on 2026-01-12
- **Evidence**: [ground:witnessed:user-direct-command:2026-01-12]
- **Success**: Automation completed without errors, deployed contract successfully
- **Impact**: Reduces error rate by ~60%, improves recovery from unexpected states
**Application**:
```javascript
// CORRECT: Plan first
mcp__sequential-thinking__sequentialthinking({
thought: "Breaking down faucet automation: 1) Get tab context, 2) Navigate to faucet site, 3) Find wallet input field, 4) Enter address, 5) Click request tokens, 6) Verify transaction",
thoughtNumber: 1,
totalThoughts: 8,
nextThoughtNeeded: true
})
// ... complete planning (8 thoughts total) ...
// ... then execute browser actions
// INCORRECT: Direct execution
mcp__claude-in-chrome__navigate({ url: "https://faucet.example.com", tabId: 1 })
mcp__claude-in-chrome__form_input({ ref: "ref_1", value: "0x123...", tabId: 1 })
// Prone to errors, missing edge cases, no recovery plan
```
## Success Criteria
**Quality Thresholds**:
- All planned steps executed OR graceful error handling applied
- Final state verified against success criteria (screenshot + read_page confirmation)
- State transitions logged to Memory MCP (minimum 3 checkpoints)
- Screenshots captured at decision points
- No orphaned browser tabs after workflow completion
- Execution time within 2x of estimated duration
**Failure Indicators**:
- State verification failed at any checkpoint
- Unplanned errors without recovery strategy
- Missing screenshots for critical transitions
- Tab context lost mid-workflow
- Success criteria not met after max retries
## MCP Integration
**Required MCPs**:
| MCP | Purpose | Tools Used |
|-----|---------|------------|
| **sequential-thinking** | Planning phase | `sequentialthinking` |
| **claude-in-chrome** | Execution phase | `navigate`, `read_page`, `find`, `computer`, `form_input`, `screenshot`, `tabs_context_mcp`, `tabs_create_mcp` |
| **memory-mcp** | Pattern storage | `memory_store`, `vector_search`, `memory_query` |
**Optional MCPs**:
- **filesystem** (for saving screenshots locally)
- **playwright** (for advanced E2E scenarios)
## Memory Namespace
**Pattern**: `skills/tooling/browser-automation/{project}/{timestamp}`
**Store**:
- Execution plans (from sequential-thinking phase)
- State transitions (screenshots + read_page outputs)
- Error recoveries (what failed, how recovered)
- Successful workflows (for pattern retrieval)
**Retrieve**:
- Similar automation tasks (vector search by description)
- Proven recovery patterns (by error type)
- Historical execution time (for estimation)
**Tagging**:
```json
{
"WHO": "browser-automation-{session_id}",
"WHEN": "ISO8601_timestamp",
"PROJECT": "{project_name}",
"WHY": "browser-automation-execution",
"workflow_type": "form-filling|e2e-test|web-scraping",
"action_count": 15,
"success": true
}
```
## Examples
### Example 1: Simple Form Submission (Testnet Faucet)
**Complexity**: Medium (6 actions, 3 verification points)
**Task**: Request testnet USDC from Circle Faucet
**Planning Output** (sequential-thinking):
```
Thought 1/8: Need to get testnet tokens for wallet 0x1845...C35F
Thought 2/8: Navigate to https://faucet.circle.com/
Thought 3/8: Select Arc Testnet from dropdown
Thought 4/8: Enter wallet address in form field
Thought 5/8: Click "Request USDC" button
Thought 6/8: Verify success message appears
Thought 7/8: Check transaction link is provided
Thought 8/8: Screenshot final state for verification
```
**Execution**:
1. tabs_create_mcp() → tabId: 123
2. navigate({ url: "https://faucet.circle.com/", tabId: 123 })
3. screenshot({ tabId: 123 }) → initial-state.png
4. form_input({ ref: "ref_wallet", value: "0x1845...C35F", tabId: 123 })
5. computer({ action: "left_click", ref: "ref_submit", tabId: 123 })
6. screenshot({ tabId: 123 }) → final-state.png
7. read_page({ tabId: 123 }) → verify success message
**Result**: 1 USDC received, contract deployed successfully
**Execution Time**: 45 seconds
### Example 2: Complex E2E User Registration
**Complexity**: High (15 actions, 5 verification points, multi-tab)
**Task**: Complete user registration with email verification
**Planning Output** (sequential-thinking):
```
Thought 1/12: Registration flow requires email verification
Thought 2/12: Open registration page
Thought 3/12: Fill username, email, password fields
Thought 4/12: Submit registration form
Thought 5/12: Check for confirmation message
Thought 6/12: Open email client in new tab
Thought 7/12: Find verification email
Thought 8/12: Extract verification link
Thought 9/12: Navigate to verification link
Thought 10/12: Confirm account activated
Thought 11/12: Return to main site
Thought 12/12: Verify login possible
```
**Execution**: [See examples/form-filling-workflow.md for full details]
**Result**: Account created and verified
**Execution Time**: 2 minutes 15 seconds
### Example 3: Bulk Data Entry (Very High Complexity)
**Complexity**: Very High (200+ actions, 20+ verification points, loop-based)
**Task**: Enter 50 product records across multi-page form
**Planning Output** (sequential-thinking):
```
Thought 1/15: Need checkpoint/resume capability
Thought 2/15: Loop through 50 records
Thought 3/15: Each record requires 4 pages
Thought 4/15: Save progress every 10 records
Thought 5/15: Handle network errors with retry
...
```
**Execution**: [See examples/web-scraping-example.md for full details]
**Result**: 48/50 records entered (2 failed, logged for retry)
**Execution Time**: 12 minutes 30 seconds
## Anti-Patterns to Avoid
| Anti-Pattern | Problem | Solution |
|--------------|---------|----------|
| **Skip Planning** | Execute without sequential-thinking | ALWAYS plan first (HIGH conf learning) |
| **Assume Success** | No verification after actions | Screenshot + read_page at checkpoints |
| **Hardcoded Selectors** | Ref IDs break when DOM changes | Use find tool with natural language |
| **Single-Path Logic** | No error recovery | Plan alternative paths for failures |
| **Missing Context** | Wrong tab or orphaned tabs | tabs_context_mcp before all operations |
## Related Skills
**Upstream** (provide input to this skill):
- `intent-analyzer` - Detect browser automation complexity
- `prompt-architect` - Optimize automation descriptions
- `planner` - High-level workflow design
**Downstream** (use output from this skill):
- `e2e-test` - Automated testing workflows
- `visual-asset-generator` - Screenshot processing
- `quality-metrics-dashboard` - Execution analytics
**Parallel** (work together):
- `web-scraping` - Data extraction focus
- `api-integration` - Hybrid browser/API workflows
- `deployment` - Deploy after automation validation
## Maintenance & Updates
**Version History**:
- v1.1.0 (2026-01-12): Added production guardrails (preflight checks, error handling, checkpoint/resume)
- v1.0.0 (2026-01-12): Initial release with mandatory sequential-thinking pattern
**Feedback Loop**:
- Loop 1.5 (Session): Store learnings from corrections
- Loop 3 (Meta-Loop): Aggregate patterns every 3 days
- Update LEARNED PATTERNS section with new discoveries
**Continuous Improvement**:
- Monitor success rate via Memory MCP queries
- Identify common failure modes for pattern updates
- Optimize planning phase based on execution data
<promise>BROWSER_AUTOMATION_VERILINGUA_VERIX_COMPLIANT</promise>Related Skills
/*============================================================================*/
/* SKILL SKILL :: VERILINGUA x VERIX EDITION */
web-scraping
Structured data extraction from web pages using claude-in-chrome MCP with sequential-thinking planning. Focus on READ operations, data transformation, and pagination handling for multi-page extraction.
visual-testing
Screenshot-based visual comparison and regression testing using claude-in-chrome MCP. Captures, compares, and validates UI states to detect layout shifts, visual bugs, and design regressions across viewports.
reflect
Extract learnings from session corrections and patterns, update skill files with persistent memory. Implements Loop 1.5 - per-session micro-learning between execution and meta-optimization.
fix-bug
Fix bug command
e2e-test
End-to-end testing workflow for validating complete user journeys through web applications using claude-in-chrome MCP. Specializes in test assertions, suite organization, evidence collection, and pass/fail reporting.
build-feature
Build feature command
image-gen
Modular image generation - supports local SDXL Lightning, OpenAI DALL-E, Replicate, or custom providers
reverse-engineering-quick-triage
Fast binary analysis with string reconnaissance and static disassembly\ \ (RE Levels 1-2). Use when triaging suspicious binaries, extracting IOCs quickly,\ \ or performing initial malware analysis. Completes in \u22642 hours with automated\ \ decision gates."
reverse-engineering-firmware-analysis
Firmware extraction and IoT security analysis (RE Level 5) for routers and embedded systems. Use when analyzing IoT firmware, extracting embedded filesystems (SquashFS/JFFS2/CramFS), finding hardcoded credentials, performing CVE scans, or auditing embedded system security. Handles encrypted firmware with known decryption schemes. Completes in 2-8 hours with binwalk+firmadyne+QEMU emulation.
reverse-engineering-deep-analysis
Advanced binary analysis with runtime execution and symbolic path exploration (RE Levels 3-4). Use when need runtime behavior, memory dumps, secret extraction, or input synthesis to reach specific program states. Completes in 3-7 hours with GDB+Angr.
reconnaissance
Systematic technology and market reconnaissance for extracting actionable intelligence from repositories, papers, and competitive landscapes.