Universal agent-to-software runtime. Any AI agent controls any software through a single protocol. Auto-discovers and exposes capabilities as MCP tools for desktop apps, web browsers, and APIs.
AgentDOM provides 13 tools with mixed quality. Naming is generally verb-forward (scan_*, attach_*, dispatch_*, wallet_*), but descriptions vary widely in clarity and completeness. Most tools lack explicit input schemas in the visible source code, tool definitions appear to be inferred from function signatures rather than explicitly registered with JSON Schema. Output schemas are not documented. Error handling guidance is minimal. The server attempts ambitious automation (DOM synthesis, API scanning, wallet auth) but lacks the rigor expected of production-grade agent tools.
Attach to a running Electron app via Chrome DevTools Protocol and register DOM tools. Auto-detects --remote-debugging-port from ~/.agentdom/sessions.json (written by launch_electron) or the process list. Pass { port } to override.
Call a provider's API using an intent (e.g. 'create_contact', 'list_deals'). Looks up the provider in the wallet, reads its .well-known/agentdom.json manifest, and dispatches the intent to the right HTTP endpoint with the right auth header. Returns the API response.
Navigate to a specific URL.
Press a keyboard key (Enter, Tab, Escape, etc.).
Read the visible text content of the page or a specific section.
Load an OpenAPI 3.x spec and AUTO-GENERATE typed tools per operation. Call this once per API; tools/list_changed fires automatically.
Input schemas not explicitly visible in source code. Tool definitions appear inferred from function signatures rather than registered with formal JSON Schema. Cannot verify parameter types, constraints, or required/optional status for most tools.
Output schemas not documented. Tools like scan_app, dispatch_intent, and scan_api claim to auto-generate or return complex structures, but no schema is provided for what the LLM should expect. This forces LLMs to guess at response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Scan a running desktop app and AUTO-GENERATE typed tools (authenticate, click_*, navigate, …). Call this whenever the active app changes or the UI navigates. For Electron apps launched with --remote-debugging-port, DOM tools (dom_click_*, dom_*) are also registered. After it returns, call tools/list again to get the new tool list — or just call the tool by name; the server emits notifications/tools/list_changed.
Re-scan the current page to discover new tools and updated content.
Scroll the page up or down.
Capture a screenshot of the current page.
Authenticate to a provider so dispatch_intent can use its API. Reads .well-known/agentdom.json from the provider host, runs the right flow (oauth2 opens browser, api_key prompts paste, session_cookie reads from active browser). Token persisted in ~/.agentdom/wallet.json.
List every provider in the auth wallet (~/.agentdom/wallet.json) — provider host, auth method, scopes, expiry. Secrets are NOT returned. Use this BEFORE dispatch_intent to know which providers the agent can call without re-auth.
Remove a provider from the wallet. Does NOT call the provider's revocation endpoint; just deletes the local token. Pair with provider-side revocation if needed.
Descriptions lack actionable error recovery guidance. Tools like wallet_auth and dispatch_intent perform complex operations but do not explain what to do if auth fails, provider is unreachable, or intent is not found. Error responses should guide the LLM to recovery steps.
Parameter descriptions are generic or incomplete. 'app' in scan_app is described as 'App name (e.g. Slack, Visual Studio Code)' but does not specify format, case sensitivity, or how to discover valid app names. 'port' lacks min/max bounds. 'urlIncludes' lacks examples of valid substrings.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in source. wallet_auth, wallet_revoke, dispatch_intent, and press_key are write operations but lack explicit destructive/idempotent markers. LLMs cannot infer retry safety or side-effect scope.