claw-ea has 11 tools with schemas and descriptions, but significant gaps limit production readiness. Most tools have descriptions (194-char baseline met for several), but parameter descriptions are inconsistent. Schema definitions exist in TypeScript but lack JSON Schema rigor (no explicit type constraints, enums, or validation rules). Error handling is minimal, no recovery guidance or actionable error messages. Tool composition is reasonable (separate create/delete tools), but several tools lack clear parameter constraints (e.g., priority 1-9 in create_reminder is documented but not schema-enforced). The save_attachment and create_obsidian_note tools have complex interdependencies (raw_body_path must come from convert_to_markdown) that are documented in descriptions but not enforced by schema validation. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, DESTRUCTIVE, READ_ONLY). Overall: functional definitions with domain-specific logic, but lacking the rigor and LLM-optimization patterns expected of production tools.
Convert a file to Markdown and save as a temp file. IMPORTANT: MUST be called for ALL files before creating Obsidian notes. Uses MinerU as the default converter with automatic fallback to docling. Supports: PDF, Word, Excel, PowerPoint, CSV, HTML, images, plaintext. For PPT: read the converted MD, summarize it, pass summary to create_note via content_data (not raw_body_path). Returns a temp file path — pass it to create_obsidian_note's raw_body_path parameter.
Create an event in Apple Calendar. Default duration: 1 hour. For surgery schedules: this is the primary action (no note, no reminder).
Create a Capture-First v2 Obsidian note with §4 YAML frontmatter. Deduplicates by raw body content hash. Categories (claw-ea business subtype): surgery, meeting, task, document, raw_thought, review. Types (qp namespace, auto-derived from category if omitted): meeting_minutes, document, idea, review, writing. IMPORTANT: raw_body_path MUST come from convert_to_markdown for file-based messages. Do NOT create notes for surgery category — use create_calendar_event only.
Create a reminder in Apple Reminders. Supports due date and priority (1-9). Do NOT use for surgery schedules — use create_calendar_event instead.
Delete an event from Apple Calendar by event ID. Agent should confirm with user before calling this tool.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels declared. delete_calendar_event and delete_reminder are DESTRUCTIVE but lack schema hints to warn LLMs.
Parameter constraints not schema-enforced. create_reminder priority is documented as 1-9 but no enum or min/max in schema. create_obsidian_note category has 6 valid values but no enum constraint.
Tool interdependencies documented in descriptions but not enforced. create_obsidian_note requires raw_body_path from convert_to_markdown; no schema validation prevents misuse.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Delete a reminder from Apple Reminders by reminder ID. Agent should confirm with user before calling this tool.
Scan common locations for Obsidian vaults. Returns a list of absolute paths to directories containing .obsidian/.
List available Apple Calendar calendars and Reminder lists. Returns: calendars: List of calendar names, reminder_lists: List of reminder list names
Extract text from an image using local OCR (macOS Vision). Use only when the LLM cannot see images directly.
Save a file to the attachments directory, organized by date. Two modes: file_path (local path, preferred) or file_content (base64). Skips duplicates. Handles Chinese filenames.
Validate and save configuration to ~/.claw-ea/config.yaml. Args: config_data: Configuration dictionary with sections: user, obsidian, attachments, apple. Returns: saved: True if saved successfully, path: Absolute path to the saved config file
Error handling absent. No recovery guidance, no actionable error messages. Tools return raw results without error classification (retryable vs fatal).
Output schemas not documented. Tools return structured data (e.g., create_calendar_event returns event_id, create_reminder returns reminder_id) but no schema definition for LLM planning.