A lightweight CDP browser automation framework with first-class AI workflow support. Enables automation of browser tabs, AI chat interactions (ChatGPT, Gemini, Claude, Grok), and inter-AI communication via Chrome DevTools Protocol.
Parley defines 14 browser automation tools with complete input schemas and descriptions. Naming is consistent (browser_* prefix) and action-oriented. Descriptions are detailed and context-aware (50-200 chars, well above the 10-char minimum). However, output schemas are entirely undocumented, no tool declares what it returns, forcing LLMs to guess at response structure. Parameter descriptions are present but lack constraints (enums, ranges, formats). Error handling is absent from tool definitions. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Security concerns: browser_cookies returns sensitive session data without warning; browser_eval accepts arbitrary JavaScript without sanitization guidance.
Bridge a conversation between two browser tabs. Reads the latest response from tab_from and sends it to tab_to. Repeat for multiple rounds. Use to make ChatGPT talk to Gemini, etc.
Click an element in a browser tab by CSS selector.
List cookies for a tab via CDP, INCLUDING HttpOnly session cookies that JavaScript cannot read. Optionally filter by domain. Treat returned values as secrets.
Evaluate JavaScript in a browser tab and return the result. Use for custom DOM queries, extracting structured data, or complex interactions.
Extract text (or an attribute like href) from ALL elements matching a CSS selector. Great for scraping lists, tables, and links. Returns {count, items}.
List all open browser tabs (Brave/Chrome via CDP). Returns tab IDs, titles, and URLs. Use this to find the tab ID for ChatGPT, Gemini, Claude, or any other web app.
No output schemas documented. Tools return results but LLMs cannot predict structure (fields, types, pagination). Forces agents to guess at response format and risks parsing failures.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). browser_send, browser_click, browser_navigate, browser_eval are clearly destructive/write operations but unmarked. Agents cannot distinguish safe reads from risky writes.
Parameter constraints missing. timeout_ms, interval_ms, rounds lack min/max bounds. CSS selectors have no format guidance. LLMs can pass invalid values (negative timeouts, malformed selectors) without validation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Navigate a browser tab to a URL.
Wait for a browser tab's chat response to finish streaming, then return the text. Use after browser_send to wait for the AI to finish responding.
Read text content from a browser tab. Without selector, auto-detects the latest AI chat response (works with ChatGPT, Gemini, Claude). With CSS selector, reads that element. Returns text only (no images).
Read the visible text of a whole page, or of a CSS selector. Generic - works on ANY website (news, docs, dashboards), not just AI chats.
Type text and press Enter in a browser tab. Use this to send a message to ChatGPT, Gemini, Claude, or any web chat. Automatically finds the input field.
Send a message to an AI chat tab AND wait for the full streamed response before returning it. Recommended over browser_send when you need the reply - it will not return a half-written answer.
Type text into a browser tab WITHOUT pressing Enter. Use for filling forms or composing messages before sending.
Wait until an element matching a CSS selector appears in a tab.
Security: browser_cookies returns HttpOnly session tokens without explicit secret warning. browser_eval accepts arbitrary JavaScript without injection guidance. No sanitization or validation documented.
No error handling guidance. Tools have no documented recovery paths, retryability, or error categories. LLMs cannot distinguish transient failures (retry) from user errors (ask for clarification).