Brain has 20 well-named tools with consistent verb_noun patterns (search_vault, read_vault, write_vault, etc.). Descriptions are present and moderately detailed (avg ~120 chars), explaining WHAT and WHEN. However, parameter descriptions are inconsistent, some are clear ('Search text or regex pattern'), others vague ('Comma-separated tags to filter'). Input schemas are visible and typed, but output schemas are entirely undocumented. Error handling is minimal; tools return plain strings without recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Calendar tools show good date-parsing logic but lack enum constraints for action/status fields. Telegram tools lack timeout/retry guidance. Overall: solid naming and basic structure, but incomplete schemas and missing error patterns prevent higher scores.
Add an event or deadline to the calendar.
Send a question to the user via Telegram and wait for their answer. Use this when you need user input and they may not be at the computer. The user can tap an inline button or reply with custom text.
Cancel a pending Telegram question (e.g. because user answered in VS Code). Edits the Telegram message to show the question was answered elsewhere.
Check if a Telegram question has been answered. Use after send_telegram_question to poll for the answer. Returns the answer if available, or 'pending' if not yet answered.
Get current date, day of week, week number, and weekly calendar with events. Call this BEFORE writing any dates in tasks, notes, or messages. Returns today's info + this week + next week with any scheduled events.
Transcribe an audio file with Whisper and save to the vault. Supports: mp3, wav, ogg, m4a, webm, flac.
Output schemas completely undocumented. No tool returns a documented schema, LLMs cannot predict response structure, forcing them to guess at field names and types for downstream tool chaining.
Missing tool annotations. Tools with clear risk levels (write_vault=WRITE, remove_calendar_event=DESTRUCTIVE) lack readOnlyHint/destructiveHint annotations. Agents cannot distinguish safe reads from dangerous writes without explicit hints.
Enum constraints missing for constrained parameters. 'action' in update_dashboard and queue_calendar_sync accepts free-form strings instead of enums (add|complete|remove, remove|update). LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Process a document and save to the vault (with chunking for large files). Supports: pdf, txt, md, rst, csv, json.
List calendar events in a date range.
List documents in the Obsidian vault.
Queue a sync action for a calendar event (processed by cron). Use this when updating a task status — queue removal or update of the linked calendar event.
Read a document from the Obsidian vault.
Remove a calendar event by ID or title substring.
Search the Obsidian vault for documents matching a query.
Search the vault using semantic similarity (meaning-based). Unlike search_vault (keyword/regex), this finds documents by meaning even if they don't contain the exact words.
Send a question to Telegram WITHOUT waiting for the answer. Returns a question_id that can be used with check_telegram_answer to poll for the answer later, or cancel_telegram_question to cancel. Use this for dual-channel asking (VS Code text + Telegram buttons).
Get the server map — what services exist, where data is stored. Returns content of _server-map.md from the vault.
Get current server resource usage. Returns formatted report: CPU, RAM, disk, PM2 processes.
Update an existing calendar event.
Safely update dashboard.md without overwriting existing data. Use this instead of write_vault for dashboard changes. Reads existing dashboard, applies the change, writes back.
Create or update a document in the Obsidian vault. Automatically adds YAML frontmatter. Triggers git sync.
Error handling lacks recovery guidance. Tools return plain strings ('No matching events found', 'Invalid input') without actionable next steps. LLMs cannot self-correct or know whether to retry, ask user, or abandon.
Telegram tools lack timeout and retry semantics. ask_via_telegram blocks indefinitely; send_telegram_question offers polling but no guidance on timeout, backoff, or max retries. Agents risk hanging.