Source of truth for work state — tasks, the work hierarchy, and frozen artifacts. Local-first, agent-driven; the Norn markdown vault is the substrate.
Mimir has 34 tools with consistent naming (verb_noun pattern: create, get, list, update, etc.) and complete input schemas with typed parameters. However, descriptions are uniformly terse (10-40 chars), well below the 50-200 char LLM-optimized baseline. Most parameter descriptions are minimal (e.g., 'Node identifier' for id). No output schemas are documented. Error handling is present but generic. The server follows basic structure but lacks the depth needed for confident LLM tool selection and recovery guidance.
Add or update an annotation on a node
Query artifacts
Attach an artifact to a node
Create a new node
Create a dependency between nodes
Get a node by identifier
Get a seed by identifier
List nodes with optional filtering
Descriptions uniformly terse (10-40 chars). LLM-optimized descriptions should be 50-200 chars, explaining WHAT the tool does, WHEN to use it, and any prerequisites. Current descriptions like 'Add or update an annotation on a node' lack context for tool selection.
No output schemas documented. Tools return structured JSON but LLMs cannot plan downstream calls or extract fields without knowing the response structure. Document return types for all 34 tools.
Parameter descriptions are minimal (e.g., 'Node identifier', 'Seed identifier'). Should include format hints, constraints, and examples. E.g., 'Node identifier (UUID format, e.g., 550e8400-e29b-41d4-a716-446655440000)'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Move a node to a new parent
Get next tasks
Get an overview of the work state
Promote a seed to a node
Reject a seed
Reorder nodes
Resolve an entity token
Add an agenda item to a scratchpad
Mark an agenda item as complete
Supersede an agenda item
Checkpoint a scratchpad
Create a scratchpad
Discard a scratchpad
Freeze a scratchpad into an artifact
Get a scratchpad by identifier
List scratchpads
Update a scratchpad
Create a seed
List seeds
Get node status
Tag entities
Triage seeds
Remove a dependency between nodes
Apply a uniform verb to a node
Remove tags from entities
Update a node
Destructive operations (scratch_discard, reject) lack confirmation or dry-run support. Agents should be able to preview consequences before irreversible actions.
Error handling is present but generic. No recovery guidance in tool descriptions. E.g., 'If node not found, call list() to discover available nodes' would guide LLM recovery.