Personal AI Agent Platform — a multi-agent system with workspace management, design tools, browser automation, connections, and forge capabilities
EYAS defines 17 tools with generally clear naming (verb_noun pattern) and reasonable descriptions (avg ~150 chars). However, critical gaps emerge: (1) Input schemas are visible but many lack complete type definitions and constraints; (2) Output schemas are NOT documented anywhere, LLMs cannot predict return structure; (3) Error handling is absent, no recovery guidance or categorization; (4) Several tools expose internal complexity (Python code, CLI args) that should be abstracted; (5) Parameter descriptions often lack format/range constraints (e.g., 'max 8000 chars' stated but no validation rules). Tools like browser_use_exec and agent_browser_run accept raw code/argv with minimal guardrails. Design tools (design_read, design_write) lack output schema documentation. Workspace tools accept file paths with minimal validation. Overall: solid naming and basic structure, but insufficient for production LLM agents without output schema docs and error guidance.
Mark a contact as internal (team-member). Owner must confirm before the change applies.
Run the Vercel agent-browser CLI (argv or batch JSON). Snapshot refs are @e1. Use state save/load for auth. EYAS-owned --profile, never the daily Chrome profile. Not chat, not an LLM SDK. Call agent_browser_status first. Prefer this over browser_use_exec when Ready. Public pages: browser_*.
Check the optional Vercel agent-browser CLI (Apache-2.0). Missing binary returns a remedy. Does not need Python. Prefer this sidecar over browser_use_exec when Ready. Headless browser_* do not need this. Never agent-browser chat — EYAS owns the model.
Run Python against the Browser Use CLI 3.0 (piped on stdin) to control the user's real Chrome via CDP. Helpers: new_tab(url), goto_url(url), page_info(), click_at_xy(x,y), type_text(text), fill_input(selector, text), js(code), capture_screenshot(). Not for LLM calls — EYAS already has a model. Prefer agent_browser_run (or browser_* for public pages) when that sidecar is Ready. Call browser_use_status first.
Check whether the Browser Use CLI sidecar can drive a real Chrome via CDP. Missing Python/CLI return a remedy. Headless Playwright tools (browser_*) do not need this. Prefer agent_browser_status when that doctor is Ready.
Output schemas completely undocumented. LLMs cannot predict return structure for any tool. design_read, design_write, browser_use_exec, agent_browser_run, connections_list all lack documented return types. This violates pattern:tool and forces LLMs to guess downstream field names.
No error handling or recovery guidance. Tools like browser_use_exec, agent_browser_run, and workspace_edit provide no error categorization (retryable vs fatal) or actionable recovery steps. Violates pattern:recovery-guide and pattern:error-classification.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
List known external system types that can be registered as connections (fields, adapters, setup hints). Use before proposing a new connection.
List external system connections EYAS may use (Odoo, GitHub, MCP, etc.). Filter by systemType or status. Does not return secrets — only names, status, and config metadata.
Propose a new external system connection for human approval. Creates a pending inventory entry; the owner must approve under Settings → Connections (and optionally Autonomy). Do NOT put secret values in chat logs — pass them only in the secrets map so they go to the vault. Prefer proposing over inventing ad-hoc credentials.
Run a health check on an existing connection (Odoo auth, GitHub /user, MCP status, etc.). Updates stored status.
Create a new design canvas from a complete files record. The same validation applies as for design_write.
List stored design canvases: id, title, kind and version. Use it to find a design before reading or editing it.
Read a design. Give `part` (tokens, typography, components, patterns, page) for the derived values of that part — small, and usually all you need. Give `file` for one artboard's full markup. Give neither only when you really need the whole canvas.
Replace the files of a design canvas. Send every file the canvas should contain afterwards — an omitted file is deleted. The canvas is validated before it is stored; an invalid canvas is rejected and the previous version is kept.
Propose a change to your own SOUL voice profile. Goes to user for approval.
Append content to your own workspace file (AGENTS.md, TOOLS.md, MEMORY.md, or memory/YYYY-MM-DD.md).
Edit existing content in your own workspace file by exact string replacement.
Update your own IDENTITY.md (mission, proactive duties, escalation rules). User will be notified with a diff.
Parameter constraints missing or underspecified. workspace_append accepts 'max 8000 chars' in description but no validation rule in schema. browser_use_exec accepts raw Python code with no length limit or injection guards. forge_propose_soul_change has 'unknown' type for currentValue/proposedValue. Violates pattern:constrained-input.
Destructive tools lack confirmation/dry-run pattern. workspace_edit, design_write, browser_use_exec, and agent_browser_run are DESTRUCTIVE but offer no confirmation step or dry-run mode. Agents can cause irreversible damage without safeguards. Violates pattern:confirmation-request.
Browser tools expose implementation complexity. browser_use_exec requires raw Python code; agent_browser_run requires CLI argv/batch JSON. These leak internal tool details and require LLMs to understand Python/CLI syntax. Should abstract to higher-level actions (click, type, navigate). Violates pattern:tool and mxe:chat-data-model.