Claude Code Plugins

Community-maintained marketplace

Feedback

[INTERNAL TEMPLATE] E2E verification execution protocol. Called by agent-browser orchestrator.

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @OWENLEEzy/agent-browser-skill/agent-browser-e2e --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @OWENLEEzy/agent-browser-skill/agent-browser-e2e -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

name agent-browser-e2e
description [INTERNAL TEMPLATE] E2E verification execution protocol. Called by agent-browser orchestrator.

E2E Verification — Execution Protocol

Internal template. Entry point: agent-browser skill.


NEVER

NEVER assert state before `wait --load networkidle` — page may still be rendering
NEVER reuse refs after navigation — run `snapshot` again after every page change
NEVER leave `set offline on` after offline test — always restore with `set offline off`
NEVER skip `errors` check before test steps begin — pre-existing JS errors invalidate results

Execution Sequence

# 1. Open and wait for stable state
AGENT_BROWSER_NATIVE=1 agent-browser open <url>
AGENT_BROWSER_NATIVE=1 agent-browser wait --load networkidle

# 2. Check for errors before any interaction
AGENT_BROWSER_NATIVE=1 agent-browser errors          # → judgment gate if critical errors found
AGENT_BROWSER_NATIVE=1 agent-browser snapshot -i

# 3. Login — prefer Auth Vault over manual fill
#    First time: save credentials once
AGENT_BROWSER_NATIVE=1 agent-browser auth save myapp --url <login-url> --username admin --password secret
#    Every subsequent run: one command
AGENT_BROWSER_NATIVE=1 agent-browser auth login myapp
AGENT_BROWSER_NATIVE=1 agent-browser wait --load networkidle

# 4. Execute test steps (prefer semantic locators)
AGENT_BROWSER_NATIVE=1 agent-browser find label "Email" fill "test@example.com"
AGENT_BROWSER_NATIVE=1 agent-browser find role button click --name "Sign In"

# 5. After every navigation: re-snapshot + re-wait
AGENT_BROWSER_NATIVE=1 agent-browser wait --load networkidle
AGENT_BROWSER_NATIVE=1 agent-browser snapshot -i

# 6. Assert state
AGENT_BROWSER_NATIVE=1 agent-browser is visible @e3
AGENT_BROWSER_NATIVE=1 agent-browser is checked @e5
AGENT_BROWSER_NATIVE=1 agent-browser get text @e1

# 7. Capture evidence
AGENT_BROWSER_NATIVE=1 agent-browser screenshot --full result.png

Recovery Patterns

Failure Recovery
Element ref stale Re-run snapshot, relocate
Assertion content mismatch Screenshot + judgment gate
Page not loading wait --load networkidle + retry up to 3x
Staging cert error --ignore-https-errors (never in production)
Slow page AGENT_BROWSER_DEFAULT_TIMEOUT=60000
Output truncated on large pages --max-output <chars> to increase limit

Judgment Gates

Pause and ask user when:

  • JS errors found before test steps begin
  • Expected content ≠ actual (may be a bug)
  • Test step fails after all retries exhausted

Device & Environment Variants

# Mobile viewport
AGENT_BROWSER_NATIVE=1 agent-browser set device "iPhone 15 Pro"

# Offline / PWA
AGENT_BROWSER_NATIVE=1 agent-browser set offline
AGENT_BROWSER_NATIVE=1 agent-browser reload
# ... assert offline state ...
AGENT_BROWSER_NATIVE=1 agent-browser set offline off   # ALWAYS restore

# Geo-aware
AGENT_BROWSER_NATIVE=1 agent-browser set geo 31.2304 121.4737

Pitfalls

Mistake Fix
Assert before page loads wait --load networkidle first
Stale refs after navigation Re-run snapshot after every nav
set offline left on Always set offline off after offline test
Staging cert error --ignore-https-errors — never in production
find ref e3 fill "..." ref is NOT a valid find subcommand. Use @ref directly: fill @e3 "text" / click @e3
Ambiguous label in dialogs When a modal is open, find label "X" matches the first element on page — may hit background filters instead of the dialog field. Prefer find placeholder "..." or scope with snapshot -s ".dialog-class" first
App opens new tab (window.open) agent-browser stays on original tab. Detect with tab list, then switch: tab 1 (0-based index)
javascript "..." doesn't exist JS execution is eval "JS code" — not javascript
Dialog blocking click dialog status to confirm, then dialog dismiss or dialog accept
Waiting for download wait --download <path> after clicking the download trigger — don't rely on fixed wait 3000