Bidirectional bridge between Claude Code CLI and Chrome extension via WebSocket for browser automation and control
Critical gaps across naming, descriptions, and schemas. 14 of 21 tools lack visible input schemas in source code. Descriptions vary widely: some are detailed (browser_load_dynamic: 380 chars), others are vague (connect_status: 60 chars). Tool names are inconsistent: browser_* prefix is clear, but council_* and connect_status lack verb-noun structure. No output schemas documented. Error handling guidance absent. Parameter descriptions present but inconsistent in detail. Security concerns: browser_evaluate allows arbitrary JS execution without sandboxing notes.
Type text using Chrome DevTools Protocol with character-by-character delay
Close the browser session and clean up resources
Close specific browser tabs by ID
Retrieve console messages (log, warning, error, info) from the current tab
Execute JavaScript in the browser context and return the result
Execute a DOM action in the browser (click, type, etc.)
Fill multiple form fields in one call
Missing output schemas: 21 tools lack documented return types. LLMs cannot plan downstream calls or extract required fields (e.g., what does browser_get_context return? What fields?). Violates pattern:tool and mxe:include-chaining-ids.
Inconsistent naming: council_* and connect_status lack verb-noun structure. 'council_query' is vague (query what? run what?). 'connect_status' is not a verb. Should be 'run_council_query', 'get_minecraft_connection_status'. Violates pattern:tool naming.
Dangerous tool without safeguards: browser_evaluate executes arbitrary JavaScript with no sandboxing, timeout, or result size limits documented. No mention of injection risks or output truncation. Violates pattern:secret-injection and pattern:tool-gateway.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | <=2025-11-25 | v2 |
Get the current page context (URL, title, selected text, meta)
Handle browser dialogs (alert, confirm, prompt)
Insert text into a form field or contenteditable element
Load viewport-gated infinite-scroll / lazy content (e.g. Facebook friends lists, feeds, search results) that will NOT render in a background tab. Briefly foregrounds the target tab, auto-scrolls until the list stops growing, then restores your previously-active tab/window. Optionally navigates first (pass url). After this returns, use browser_extract_data to read the hydrated content. CAUTION: on logged-in personal accounts, sites like Facebook detect automated traversal behaviorally — repeated/rapid list scraping risks security checkpoints or account lockout; use deliberately and sparingly.
Navigate the browser to a URL
Press a keyboard key with optional modifiers
Capture a screenshot of the current visible tab, a specific element, or the full scrollable page
Sync conversation context between CLI and browser
Wait for a DOM element to appear (MutationObserver-based)
Wait for an element to become stable (stop changing) for a specified duration
Report whether a Minecraft Bedrock client is connected to the listener.
Get metrics and status of council automation subprocess
Run a Perplexity research query via council automation (long-running async subprocess)
Read the result of a completed council query from disk
Vague descriptions: browser_sync_context (40 chars), browser_close_session (40 chars), council_metrics (40 chars), connect_status (60 chars) lack context for LLM selection. Baseline is 194 chars. Violates pattern:tool-description.
No error handling guidance: tools lack recovery hints. E.g., browser_navigate fails silently? browser_wait_for_element times out, what should LLM do? No actionable error messages documented. Violates pattern:recovery-guide.