Skip to main content
AI/MLjmagly

browser-doctor

Read-only health check on browser-control setup. Verifies browser binary, Playwright MCP Bridge extension presence, token file mode/contents, AIWG MCP registration, provider config injection, and optional workspace allow-list. Outputs pass/fail per check with remediation commands.

Stars
141
Source
jmagly/aiwg
Updated
2026-05-31
Slug
jmagly--aiwg--browser-doctor
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/jmagly/aiwg/HEAD/agentic/code/addons/browser-control/skills/browser-doctor/SKILL.md -o .claude/skills/browser-doctor.md

Drops the SKILL.md into .claude/skills/browser-doctor.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Browser Doctor Skill (DRAFT)

Status: DRAFT — scaffolded from PoC. Implementation pending Inception outputs.

Purpose

Diagnostic, read-only health check. Tells the user what's wired correctly and what needs browser-setup or browser-reset to fix.

When This Skill Applies

  • After browser-setup to verify the wizard's work
  • Before debugging "why isn't the agent driving my browser?"
  • In CI / smoke tests to detect drift (extension uninstalled, token rotated, provider config rewritten)

Checks (planned)

# Check Pass criteria On fail
1 Browser binary present Configured browser path exists and is executable aiwg run skill browser-setup to re-detect
2 Browser version <binary> --version returns a known-good version Update browser or document version mismatch
3 Extension installed <profile>/Extensions/mmlmfjhmonkocbjadbfplnigmagldckm/ exists Install from Web Store; rerun setup
4 Token file present ~/.config/playwright-mcp/token exists aiwg run skill browser-reset
5 Token file mode mode 600, owner-only chmod 600 ~/.config/playwright-mcp/token
6 Token file non-empty size > 16 bytes Re-capture token via reset
7 AIWG MCP registered aiwg mcp list includes playwright browser-setup
8 MCP args correct Args include --extension Re-register with correct args
9 MCP env block PLAYWRIGHT_MCP_EXTENSION_TOKEN in env Re-register with env block
10 Provider injected Active provider config contains playwright in mcpServers aiwg mcp inject --provider <p> --servers playwright
11 Provider env passthrough Provider config's playwright entry preserves env Re-inject
12 Probe connect Spawn MCP, list tools, find browser_tabs See diagnostics; likely token mismatch
13 Allow-list present (optional) .aiwg/browser-allowlist.yaml exists cp templates/browser-allowlist.yaml.tmpl .aiwg/browser-allowlist.yaml
14 Conflicting overrides No --mcp-config wrapper detected for the active provider Document precedence; remove wrapper or add playwright to it

Output

Structured JSON suitable for both human display and CI consumption:

{
  "summary": { "passed": 13, "failed": 1, "skipped": 0 },
  "checks": [
    {
      "id": 1,
      "name": "Browser binary present",
      "status": "pass",
      "detail": "/usr/bin/google-chrome (148.0.7778.167)"
    },
    {
      "id": 13,
      "name": "Allow-list present (optional)",
      "status": "warn",
      "detail": ".aiwg/browser-allowlist.yaml not found",
      "remediation": "cp $AIWG_ROOT/agentic/code/addons/browser-control/templates/browser-allowlist.yaml.tmpl .aiwg/browser-allowlist.yaml"
    }
  ]
}

Plain-text rendering for interactive use:

Browser Control — Health Check
==============================

[PASS] 1/14  Browser binary present       /usr/bin/google-chrome (148.0.7778.167)
[PASS] 2/14  Browser version              recent enough
[PASS] 3/14  Extension installed          mmlmfjhmonkocbjadbfplnigmagldckm
[PASS] 4/14  Token file present           ~/.config/playwright-mcp/token
…
[WARN] 13/14 Allow-list (optional)        not scaffolded; consider adding

13 PASS, 1 WARN, 0 FAIL

Constraints

  • Read-only — never writes, never modifies registry or configs
  • Never echoes token value (only checks existence + mode + length)
  • Probe check spawns + kills within a few seconds; no persistent side effects

Open implementation questions

  1. Should "probe connect" be opt-in (--probe) since it spawns a process?
  2. Should we cache last-known-good versions per browser to detect downgrades?
  3. How aggressively to flag #14 (conflicting overrides)? In some workspaces (e.g., this one with claude-role), the override is intentional.

References

  • .aiwg/architecture/adr-remote-browser-control.md
  • skills/browser-setup/SKILL.md (this addon)
  • skills/browser-reset/SKILL.md (this addon)