An Electron-based desktop application integrating local LLMs (via node-llama-cpp), browser automation (Puppeteer), chat history management, and MCP server capabilities with Express backend
PromptPulse defines 7 Puppeteer-based tools with basic schemas and minimal descriptions. All tools have input schemas with type definitions and descriptions, which meets the floor requirement. However, descriptions are consistently generic and lack LLM-optimization guidance. No output schemas are documented, and error handling is absent. Tool naming follows verb_noun convention correctly (puppeteer_navigate, puppeteer_screenshot), which is a positive. The core issue is that descriptions are too brief to guide LLM tool selection effectively, they state WHAT the tool does but not WHEN to use it, any prerequisites, or what the agent should expect in return. Parameter descriptions exist but are minimal. No pagination, batching, or composition guidance. The tools are individually functional but do not follow the 54 Agentic Tool Patterns comprehensively.
Click an element on the page
Execute JavaScript in the browser console
Fill out an input field
Hover an element on the page
Navigate to a URL
Take a screenshot of the current page or a specific element
Select an element on the page with Select tag
Missing output schemas. No documentation of what each tool returns, LLMs cannot plan downstream operations or extract expected fields. E.g., puppeteer_screenshot should document return type (image data, Base64 string, file path, dimensions).
Insufficient tool descriptions. All descriptions are under 50 characters and lack context for LLM tool selection. E.g., 'Take a screenshot of the current page or a specific element' does not explain WHEN to use it (e.g., 'after navigation to capture page state') or what the agent receives back. Descriptions should be 50 - 200 characters and answer: WHAT, WHEN, and output type.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 35 | - | v1 |
No error recovery guidance. Tool descriptions do not tell the LLM what to do on failure. E.g., if puppeteer_navigate times out, should the agent retry? Pass a different URL? There is no error classification (retryable vs. user-fixable vs. fatal) to guide the agent's next step.
puppeteer_evaluate (execute JavaScript) is a high-risk tool with minimal constraints. The description does not explain security implications, sandbox limitations, or error handling. Input should include timeout, error handling strategy, and clear warnings about injection risks.
No idempotency or confirmation pattern for write operations. puppeteer_click, puppeteer_fill, puppeteer_select, and puppeteer_evaluate can modify state. No dry-run mode or confirmation step is documented. An agent could accidentally submit a form or delete data on retry.
Parameter descriptions are minimal. E.g., 'selector' parameter says 'CSS selector for element to click' but does not explain what happens if multiple elements match, or if the selector matches nothing. 'width' and 'height' in puppeteer_screenshot lack units or range constraints (e.g., 'Width in pixels (800-2560, default 800)').
No tool chaining support documented. If puppeteer_navigate returns a URL string and puppeteer_screenshot accepts no URL parameter (assumes current page), the agent must reason that they belong together. Returned IDs or references should match what downstream tools accept.