| name | agent-browser |
| description | Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, test web applications, or extract information from web pages. |
| allowed-tools | Bash(agent-browser:*) |
Browser Automation with agent-browser
Quick start
agent-browser open <url>
agent-browser snapshot -i
agent-browser click @e1
agent-browser fill @e2 "text"
agent-browser close
Core workflow
- Navigate:
agent-browser open <url>
- Snapshot:
agent-browser snapshot -i (returns elements with refs like @e1, @e2)
- Interact using refs from the snapshot
- Re-snapshot after navigation or significant DOM changes
Commands
Navigation
agent-browser open <url>
agent-browser back
agent-browser forward
agent-browser reload
agent-browser close
agent-browser connect 9222
Snapshot (page analysis)
agent-browser snapshot
agent-browser snapshot -i
agent-browser snapshot -c
agent-browser snapshot -d 3
agent-browser snapshot -s "#main"
Interactions (use @refs from snapshot)
agent-browser click @e1
agent-browser dblclick @e1
agent-browser focus @e1
agent-browser fill @e2 "text"
agent-browser type @e2 "text"
agent-browser press Enter
agent-browser press Control+a
agent-browser keydown Shift
agent-browser keyup Shift
agent-browser hover @e1
agent-browser check @e1
agent-browser uncheck @e1
agent-browser select @e1 "value"
agent-browser select @e1 "a" "b"
agent-browser scroll down 500
agent-browser scrollintoview @e1
agent-browser drag @e1 @e2
agent-browser upload @e1 file.pdf
Get information
agent-browser get text @e1
agent-browser get html @e1
agent-browser get value @e1
agent-browser get attr @e1 href
agent-browser get title
agent-browser get url
agent-browser get count ".item"
agent-browser get box @e1
agent-browser get styles @e1
Check state
agent-browser is visible @e1
agent-browser is enabled @e1
agent-browser is checked @e1
Screenshots & PDF
CRITICAL: ALL screenshots MUST be saved to the screenshots/ folder. Saving screenshots to the project root is FORBIDDEN.
Before capturing screenshots:
- Load the
screenshot-handling skill: load_skill("screenshot-handling")
- Create the
screenshots/ folder: mkdir -p screenshots/
- Always include
screenshots/ in the screenshot path
mkdir -p screenshots/
agent-browser screenshot
agent-browser screenshot screenshots/verification.png
agent-browser screenshot screenshots/mainmenu-test.png
agent-browser screenshot screenshots/ui-validation.png
agent-browser screenshot --full screenshots/full-page.png
agent-browser pdf output.pdf
❌ FORBIDDEN - Never save to project root:
agent-browser screenshot verification.png
agent-browser screenshot test.png
✅ CORRECT - Always include screenshots/ in path:
mkdir -p screenshots/
agent-browser screenshot screenshots/verification.png
Reference: See screenshot-handling skill for complete screenshot handling requirements and best practices.
Screenshot path: Use project root or absolute path for the screenshot directory so CWD does not cause wrong locations (e.g. ensure CWD is project root when saving to screenshots/).
Pre-completion (web tasks)
For frontend/web tasks: Do not skip browser verification. If you load agent-browser, you must use it for at least one flow that matches the task (open, navigate, submit, or capture) before the task can be marked complete, unless explicitly documented as impossible (e.g. backend down) with fallback. For scaffold-only tasks, at least open the app URL and capture one screenshot to confirm the shell renders.
Video recording
agent-browser record start ./demo.webm
agent-browser click @e1
agent-browser record stop
agent-browser record restart ./take2.webm
Recording creates a fresh context but preserves cookies/storage from your session. If no URL is provided, it
automatically returns to your current page. For smooth demos, explore first, then start recording.
Wait
agent-browser wait @e1
agent-browser wait 2000
agent-browser wait --text "Success"
agent-browser wait --url "**/dashboard"
agent-browser wait --load networkidle
agent-browser wait --fn "window.ready"
Mouse control
agent-browser mouse move 100 200
agent-browser mouse down left
agent-browser mouse up left
agent-browser mouse wheel 100
Semantic locators (alternative to refs)
agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find text "Sign In" click --exact
agent-browser find label "Email" fill "user@test.com"
agent-browser find placeholder "Search" type "query"
agent-browser find alt "Logo" click
agent-browser find title "Close" click
agent-browser find testid "submit-btn" click
agent-browser find first ".item" click
agent-browser find last ".item" click
agent-browser find nth 2 "a" hover
Browser settings
agent-browser set viewport 1920 1080
agent-browser set device "iPhone 14"
agent-browser set geo 37.7749 -122.4194
agent-browser set offline on
agent-browser set headers '{"X-Key":"v"}'
agent-browser set credentials user pass
agent-browser set media dark
agent-browser set media light reduced-motion
Cookies & Storage
agent-browser cookies
agent-browser cookies set name value
agent-browser cookies clear
agent-browser storage local
agent-browser storage local key
agent-browser storage local set k v
agent-browser storage local clear
Network
agent-browser network route <url>
agent-browser network route <url> --abort
agent-browser network route <url> --body '{}'
agent-browser network unroute [url]
agent-browser network requests
agent-browser network requests --filter api
Tabs & Windows
agent-browser tab
agent-browser tab new [url]
agent-browser tab 2
agent-browser tab close
agent-browser tab close 2
agent-browser window new
Frames
agent-browser frame "#iframe"
agent-browser frame main
Dialogs
agent-browser dialog accept [text]
agent-browser dialog dismiss
JavaScript
agent-browser eval "document.title"
Global options
agent-browser --session <name> ...
agent-browser --json ...
agent-browser --headed ...
agent-browser --full ...
agent-browser --cdp <port> ...
agent-browser --proxy <url> ...
agent-browser --headers <json> ...
agent-browser --executable-path <p>
agent-browser --extension <path> ...
agent-browser --help
agent-browser --version
agent-browser <command> --help
Proxy support
agent-browser --proxy http://proxy.com:8080 open example.com
agent-browser --proxy http://user:pass@proxy.com:8080 open example.com
agent-browser --proxy socks5://proxy.com:1080 open example.com
Environment variables
AGENT_BROWSER_SESSION="mysession"
AGENT_BROWSER_EXECUTABLE_PATH="/path/chrome"
AGENT_BROWSER_EXTENSIONS="/ext1,/ext2"
AGENT_BROWSER_STREAM_PORT="9223"
AGENT_BROWSER_HOME="/path/to/agent-browser"
Example: Form submission
agent-browser open https://example.com/form
agent-browser snapshot -i
agent-browser fill @e1 "user@example.com"
agent-browser fill @e2 "password123"
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser snapshot -i
Example: Authentication with saved state
agent-browser open https://app.example.com/login
agent-browser snapshot -i
agent-browser fill @e1 "username"
agent-browser fill @e2 "password"
agent-browser click @e3
agent-browser wait --url "**/dashboard"
agent-browser state save auth.json
agent-browser state load auth.json
agent-browser open https://app.example.com/dashboard
Sessions (parallel browsers)
agent-browser --session test1 open site-a.com
agent-browser --session test2 open site-b.com
agent-browser session list
JSON output (for parsing)
Add --json for machine-readable output:
agent-browser snapshot -i --json
agent-browser get text @e1 --json
Debugging
agent-browser --headed open example.com
agent-browser --cdp 9222 snapshot
agent-browser connect 9222
agent-browser console
agent-browser console --clear
agent-browser errors
agent-browser errors --clear
agent-browser highlight @e1
agent-browser trace start
agent-browser trace stop trace.zip
agent-browser record start ./debug.webm
agent-browser record stop
Deep-dive documentation
For detailed patterns and best practices, see:
Ready-to-use templates
Executable workflow scripts for common patterns:
Usage:
./templates/form-automation.sh https://example.com/form
./templates/authenticated-session.sh https://app.example.com/login
./templates/capture-workflow.sh https://example.com ./output
Command Batching Patterns
Pattern 1: Batch Multiple Eval Commands
Group related eval commands into single browser calls:
agent-browser eval "window.__TEST__.commands.gameState()"
agent-browser eval "window.__TEST__.commands.setLevel(2)"
agent-browser eval "window.__TEST__.commands.setScore(100)"
agent-browser eval "
const state = window.__TEST__.commands.gameState();
window.__TEST__.commands.setLevel(2);
window.__TEST__.commands.setScore(100);
return state;
"
Pattern 2: URL Handling
Always quote URLs in shell commands:
agent-browser open http://localhost:5173?scene=GameScene
agent-browser open "http://localhost:5173?scene=GameScene"
Test Seam Discovery Patterns
Pattern 1: Standard Readiness Check
Check for test seam availability with exponential backoff:
wait_for_test_seam() {
for i in {1..5}; do
if agent-browser eval "typeof window.__TEST__ !== 'undefined' && typeof window.__TEST__.commands !== 'undefined'"; then
echo "Test seam ready"
return 0
fi
sleep $((2 ** $i))
done
return 1
}
Pattern 2: Test Seam Command Discovery
Discover available test seam commands:
agent-browser eval "
if (window.__TEST__ && window.__TEST__.commands) {
Object.keys(window.__TEST__.commands).join(', ')
} else {
'Test seam not available'
}
"
Viewport Testing Strategies
Pattern 1: Minimum and Maximum First
Test minimum and maximum viewport sizes first, intermediate only if issues found:
agent-browser open "http://localhost:5173?scene=GameScene"
agent-browser viewport 500 400
agent-browser snapshot
agent-browser viewport 1920 1080
agent-browser snapshot
if [ "$issues_found" = "true" ]; then
agent-browser viewport 1024 768
agent-browser snapshot
fi
Pattern 2: Single Session for Multiple Viewports
Reuse single browser session for multiple viewport tests:
agent-browser open "http://localhost:5173?scene=GameScene"
agent-browser viewport 500 400
agent-browser snapshot
agent-browser viewport 1024 768
agent-browser snapshot
agent-browser viewport 1920 1080
agent-browser snapshot
agent-browser close
Connection Resilience Patterns
Pattern 1: Health Check Before Operations
Verify server health before browser operations:
curl -f http://localhost:5173 > /dev/null 2>&1
if [ $? -eq 0 ]; then
agent-browser open "http://localhost:5173?scene=GameScene"
else
echo "Server not ready, waiting..."
sleep 2
fi
Pattern 2: Retry on Connection Failure
Retry browser operations on connection failure:
max_retries=3
attempt=0
while [ $attempt -lt $max_retries ]; do
if agent-browser open "http://localhost:5173?scene=GameScene"; then
break
fi
attempt=$((attempt + 1))
sleep $((2 ** $attempt))
done
Phaser Game Testing
PRIMARY METHOD: Use test seam commands (window.__TEST__.commands)
For Phaser games:
- DOM text search doesn't work with canvas-rendered text
- Keyboard events may not register with canvas focus
- Always check for test seam availability first
- Test seams are the ONLY reliable way to interact with Phaser canvas games
Pattern:
agent-browser eval "window.__TEST__ && window.__TEST__.commands"
agent-browser eval "window.__TEST__.commands.clickStartGame()"
agent-browser eval "window.__TEST__.commands.setTimer(5)"
If test seam sceneKey doesn't update on transitions, use console logs as fallback verification.
Command Batching Examples:
agent-browser eval "
window.__TEST__.commands.setTimer(5);
window.__TEST__.commands.collectAnyCoin();
window.__TEST__.gameState();
"
agent-browser eval "window.__TEST__.commands.clickStartGame()"
agent-browser wait 500
agent-browser eval "window.__TEST__.commands.setTimer(5)"
agent-browser eval "window.__TEST__.gameState()"
Efficient Waiting Strategies:
- Avoid fixed sleeps: Use polling with timeout instead
- Poll for readiness:
agent-browser eval "new Promise(r => { const c = () => window.__TEST__?.ready ? r(true) : setTimeout(c, 100); c(); })"
- Wait for specific state:
agent-browser eval "new Promise(r => { const c = () => window.__TEST__?.gameState().scene === 'GameScene' ? r(true) : setTimeout(c, 100); c(); })"
- Use minimal waits: 500ms for scene transitions, 100ms for state checks
Port Detection Helpers:
- Reference
dev-server-port-detection skill for port discovery patterns
- Check
vite.config.ts for server.port before opening browser
- Use discovered port in browser URL:
http://localhost:${PORT}
Common Test Workflow Templates:
Template 1: Scene Navigation
agent-browser eval "window.__TEST__.commands.goToScene('GameScene')"
agent-browser wait 500
agent-browser eval "window.__TEST__.gameState()"
Template 2: Game State Verification
agent-browser eval "const state = window.__TEST__.gameState(); JSON.stringify(state)"
agent-browser eval "window.__TEST__.commands.collectAnyCoin()"
agent-browser eval "const newState = window.__TEST__.gameState(); JSON.stringify(newState)"
Template 3: Timer Testing
agent-browser eval "window.__TEST__.commands.setTimer(3)"
agent-browser eval "window.__TEST__.commands.fastForwardTimer(5)"
agent-browser eval "window.__TEST__.gameState().gameOver"
See references/phaser-testing.md for detailed test seam patterns.
See phaser-test-seam-patterns skill for complete command reference by scene.
Phaser Drag Simulation
PREFERRED METHOD: Use test seam drag commands when available.
agent-browser eval "window.__TEST__.commands.simulateDragSlider('music', 0, 1, 10)"
Alternative: Use mouse commands when test seam unavailable.
Mouse Command Pattern for Slider Dragging:
HANDLE_POS=$(agent-browser eval "window.__TEST__.commands.getMusicSliderHandlePosition()" --json)
START_X=$(echo $HANDLE_POS | jq -r '.x')
START_Y=$(echo $HANDLE_POS | jq -r '.y')
END_X=$((START_X + 100))
agent-browser mouse move $START_X $START_Y
agent-browser mouse down left
agent-browser mouse move $((START_X + 25)) $START_Y
agent-browser mouse move $((START_X + 50)) $START_Y
agent-browser mouse move $((START_X + 75)) $START_Y
agent-browser mouse move $END_X $START_Y
agent-browser mouse up left
Coordinate Conversion Considerations:
- Phaser uses scene coordinates, browser uses screen coordinates
- Canvas may be scaled/positioned (Phaser.Scale.FIT mode)
- Account for canvas offset and scale when converting
- Test seam commands handle conversion automatically
Best Practices:
- Prefer test seam commands - No coordinate conversion needed
- Use appropriate step count - 5-10 steps for most cases
- Test edge cases - 0% to 100%, reverse drags, rapid drags
- Verify during drag - Check intermediate values and UI updates
Example: Testing Slider Drag:
agent-browser eval "window.__TEST__.commands.clickSettings()"
agent-browser wait 500
agent-browser eval "window.__TEST__.commands.simulateDragSlider('music', 0, 1, 10)"
agent-browser eval "window.__TEST__.commands.getMusicVolume()"
See phaser-test-seam-patterns/references/drag-simulation.md for comprehensive guide.
Connection Health Checks
Verify Connection Before Operations
Always verify browser connection before critical operations:
check_browser_connection() {
if ! pgrep -f "agent-browser" > /dev/null; then
echo "Browser not running, starting..."
fi
if ! agent-browser get url > /dev/null 2>&1; then
echo "Browser not responding, reconnecting..."
agent-browser connect 9222
fi
}
Connection Verification Patterns
Pattern 1: Pre-Operation Health Check
if agent-browser get url > /dev/null 2>&1; then
echo "Connection healthy"
agent-browser open "http://localhost:5173"
else
echo "Connection lost, reconnecting..."
agent-browser connect 9222
agent-browser open "http://localhost:5173"
fi
Pattern 2: Retry on Connection Failure
connect_with_retry() {
local max_retries=3
local attempt=0
while [ $attempt -lt $max_retries ]; do
if agent-browser open "http://localhost:5173"; then
echo "Connected successfully"
return 0
fi
attempt=$((attempt + 1))
local delay=$((2 ** $attempt))
echo "Retry $attempt after $delay seconds"
sleep $delay
done
echo "Connection failed after $max_retries attempts"
return 1
}
Connection Recovery Strategies
Strategy 1: Automatic Reconnection
ensure_connection() {
if ! agent-browser get url > /dev/null 2>&1; then
echo "Reconnecting..."
agent-browser connect 9222
sleep 2
fi
}
Strategy 2: Connection State Tracking
CONNECTION_STATE="unknown"
check_connection() {
if agent-browser get url > /dev/null 2>&1; then
CONNECTION_STATE="connected"
else
CONNECTION_STATE="disconnected"
fi
}
Timeout Handling
Default timeout: 10 seconds for all commands
Configurable timeout per command type:
- Text search: 10s
- Element interaction: 10s
- Navigation: 15s
- Test seam commands: 5s
Expected wait times for different operations:
- Simple page load: 10-30 seconds
- Complex page load with assets: 30-60 seconds
- Scene initialization (Phaser): 5-15 seconds
- Test seam readiness: 5-10 seconds
- Complex interactions: 15-45 seconds
- Screenshot capture: 2-5 seconds
- Form submission: 10-30 seconds
- Navigation transitions: 5-20 seconds
Timeout Configuration Examples
For Complex Operations (60-90 seconds):
agent-browser wait 90000
agent-browser eval "window.__TEST__.commands.complexOperation()"
For Standard Operations (30-60 seconds):
agent-browser wait 60000
agent-browser eval "window.__TEST__.commands.standardOperation()"
For Quick Operations (10-30 seconds):
agent-browser wait 30000
agent-browser eval "window.__TEST__.commands.quickOperation()"
Progress Indicators for Long-Running Operations
Log progress during long operations:
echo "Starting complex operation (may take 60-90 seconds)..."
agent-browser eval "
new Promise((resolve) => {
const maxWait = 90000;
const start = Date.now();
const logInterval = 10000; // Log every 10 seconds
const check = () => {
const elapsed = Date.now() - start;
// Log progress every 10 seconds
if (elapsed % logInterval < 1000) {
console.log(`Progress: ${Math.floor(elapsed / 1000)}s / ${maxWait / 1000}s`);
}
if (window.__TEST__?.ready) {
resolve(true);
} else if (elapsed > maxWait) {
resolve(false);
} else {
setTimeout(check, 1000);
}
};
check();
})
"
Set explicit timeout for commands to prevent hanging:
agent-browser wait 10000
Hot Module Replacement (HMR) Verification
Verify HMR Has Applied Changes
After code changes, verify HMR has applied changes before testing:
agent-browser eval "
const lastReload = window.__HMR_LAST_RELOAD__ || 0;
const now = Date.now();
const timeSinceReload = now - lastReload;
timeSinceReload < 5000 ? 'Recently reloaded' : 'Stale state'
"
agent-browser eval "
window.__TEST__?.ready ? 'Ready' : 'Not ready'
"
agent-browser screenshot screenshots/verification.png
HMR Verification Patterns
Pattern 1: Check HMR Status
agent-browser eval "
if (import.meta.hot) {
'HMR available'
} else {
'HMR not available'
}
"
Pattern 2: Wait for HMR Completion
wait_for_hmr() {
local max_wait=20
local elapsed=0
while [ $elapsed -lt $max_wait ]; do
if agent-browser eval "window.__HMR_LAST_RELOAD__ && (Date.now() - window.__HMR_LAST_RELOAD__) < 5000"; then
echo "HMR applied"
return 0
fi
sleep 1
elapsed=$((elapsed + 1))
done
echo "HMR timeout"
return 1
}
Pattern 3: Force Refresh if HMR Not Working
if ! agent-browser eval "import.meta.hot"; then
echo "HMR not available, forcing refresh"
agent-browser reload
agent-browser wait 5000
fi
Fallback When HMR Isn't Available
If HMR isn't working:
-
Force browser refresh:
agent-browser reload
agent-browser wait 5000
-
Restart dev server if needed:
pkill -f "vite\|npm.*dev"
npm run dev &
sleep 5
-
Verify changes are in codebase:
grep -r "expected change" src/
Browser Lifecycle Management
When to Reload vs Restart Browser
Reload browser when:
- HMR didn't apply changes
- Page state is stale
- Need fresh page load
- Cache issues suspected
Restart browser when:
- Browser crashes or hangs
- Connection lost
- Multiple reload attempts failed
- Browser state is corrupted
Detect Stale Browser State
Check for stale browser state:
check_browser_state() {
local last_reload=$(agent-browser eval "window.__HMR_LAST_RELOAD__ || 0")
local now=$(date +%s)000
local age=$((now - last_reload))
if [ $age -gt 30000 ]; then
echo "Browser state may be stale (last reload: ${age}ms ago)"
return 1
fi
return 0
}
Cleanup Patterns for Browser Sessions
Pattern 1: Clean Session Before Testing
clean_browser_session() {
agent-browser storage local clear
agent-browser cookies clear
agent-browser reload
agent-browser wait 2000
}
Pattern 2: Save and Restore State
save_browser_state() {
agent-browser storage local > browser-state.json
agent-browser cookies > browser-cookies.json
}
restore_browser_state() {
while IFS= read -r cookie; do
agent-browser cookies set $(echo $cookie | cut -d'=' -f1) $(echo $cookie | cut -d'=' -f2)
done < browser-cookies.json
}
Pattern 3: Session Cleanup After Testing
cleanup_after_test() {
agent-browser close
agent-browser storage local clear
agent-browser cookies clear
}
Retry Logic
Retry failed commands up to 3 times with exponential backoff:
- First retry: 1 second delay
- Second retry: 2 second delay
- Third retry: 4 second delay
Pattern:
agent-browser click @e1 || sleep 1 && agent-browser click @e1 || sleep 2 && agent-browser click @e1
Fallback Strategies
When primary method fails, use fallback methods in order:
- Primary: Test seam commands (for Phaser games)
- Secondary: Console log verification
- Tertiary: Screenshot comparison
- Last resort: Code review + TypeScript compilation
Don't abandon testing on first failure - try alternative methods.
Cache Management
Always use hard refresh in development:
agent-browser open http://localhost:3000
agent-browser reload
Clear cache before testing code changes:
agent-browser storage local clear
agent-browser cookies clear
agent-browser reload
Use cache-busting URL parameters when needed:
agent-browser open "http://localhost:3000?v=$(date +%s)"
Document Vite caching behavior:
# Vite Development Server Caching
- Vite caches modules in development
- Use hard refresh (Cmd+Shift+R / Ctrl+Shift+R) to clear cache
- Or add ?v=timestamp to URL for cache-busting
Viewport Testing Patterns
Test at minimum 3 viewport sizes:
agent-browser set viewport 1920 1080
agent-browser set viewport 1366 768
agent-browser set viewport 375 667
Use window.innerWidth/innerHeight for viewport detection:
agent-browser eval "window.innerWidth"
agent-browser eval "window.innerHeight"
Distinguish between canvas dimensions and viewport size:
agent-browser eval "window.__TEST__?.gameState().canvasWidth"
agent-browser eval "window.innerWidth"
Document Phaser-specific viewport patterns:
# Phaser Viewport Patterns
- Canvas size: Game world dimensions (e.g., 800x600)
- Viewport size: Browser window size (e.g., 1920x1080)
- Use window.innerWidth/innerHeight for viewport
- Use camera dimensions for canvas size
Wait Strategy Optimization
Use simple property checks instead of Promise polling:
agent-browser eval "
new Promise((resolve) => {
const check = () => {
if (window.__TEST__?.ready) {
resolve(true);
} else {
setTimeout(check, 100);
}
};
check();
})
"
agent-browser eval "window.__TEST__?.ready || false"
Implement timeout-based checks (max 5 seconds):
agent-browser eval "
(() => {
const maxWait = 5000;
const start = Date.now();
while (Date.now() - start < maxWait) {
if (window.__TEST__?.ready) return true;
}
return false;
})()
"
Avoid complex Promise chains in eval:
agent-browser eval "
new Promise((resolve) => {
// Complex chain...
}).then(...).catch(...)
"
agent-browser eval "window.__TEST__?.sceneKey === 'GameScene'"
Document efficient test seam interaction:
# Efficient Test Seam Interaction
- Use direct property checks: window.__TEST__?.sceneKey
- Avoid Promise polling for readiness
- Use Object.keys() for command verification
- Minimal waits: 500ms for transitions, 100ms for checks
Fallback Testing Methods
Manual browser verification checklists:
# Manual Browser Verification Checklist
1. Open browser manually
2. Navigate to http://localhost:3000
3. Open console (F12)
4. Verify window.__TEST__ exists
5. Test commands manually
6. Document results
Console log verification patterns:
agent-browser console
agent-browser console | grep -i "error\|warn"
Screenshot comparison utilities:
mkdir -p screenshots/
agent-browser screenshot screenshots/before.png
agent-browser screenshot screenshots/after.png
Error detection workflows:
agent-browser errors
agent-browser errors --clear
agent-browser reload
agent-browser errors