Bicameral memory for AI-assisted development — CLI + MCP server bootstrapping persistent project context across sessions
Reverie is a data store + command execution MCP with 20 tools, most with reasonable parameter descriptions and clear intent. All tools have non-empty descriptions (10-150 chars typically) and defined input schemas using Zod. However, several critical issues prevent a higher score: (1) Tool names are inconsistently prefixed, most use reverie_* convention, but lack clarity about whether they operate on entries, aliases, or confirm keys (e.g., reverie_alias_set vs reverie_set create scope confusion). (2) Descriptions are brief but sometimes vague, e.g., reverie_run 'Execute a stored command' doesn't explain what happens if the command fails, whether it's async, or what the output contains. (3) Output schemas are not explicitly documented anywhere in the code provided, the code shows input validation via Zod but no declared return type structures. (4) Error handling guidance is minimal, most tools don't explain recovery paths or why a call might fail. (5) Several tools combine responsibilities (e.g., reverie_export handles all three export types in a single tool with a 'type' enum; could be split). (6) Parameters occasionally lack granularity, e.g., reverie_find's 'query' parameter doesn't specify whether it's regex, substring, or fuzzy matching.
List all aliases with their target keys
Remove an alias
Rename an alias
Create or update an alias for an entry key
Query the audit log for recorded operations with optional key or time filtering
Show relevant context entries with optional tier selection and interpolation
Copy an entry to a new key, optionally with value transformation
Output schemas not explicitly documented. Code shows input validation with Zod but does not declare what each tool returns. This forces LLMs to guess output structure, risking field access errors and wasted parse attempts.
reverie_run description lacks critical clarity: does not explain what output is returned, whether execution is synchronous, what happens if the command fails, or whether confirmation tokens are required for encrypted commands. Recovery path is unclear.
Tool names are insufficiently specific about the data type they operate on. reverie_set, reverie_get, reverie_remove could operate on entries, aliases, or confirm keys, but the name alone does not distinguish. The explicit alias_* and confirm_* prefixes for those tools are good, but core operations lack this clarity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Open an entry value in the system editor for interactive editing
Export entries, aliases, or confirm keys to a JSON file or envelope
Search entries by key or value pattern with optional filters
List keys or retrieve entries with optional decryption and formatting
Import entries, aliases, or confirm keys from a JSON file or envelope with preview/confirmation
Show server version, protocol compliance, and data store location
Remove an entry or entries matching a pattern
Rename an entry and cascade rename any aliases or child entries
Clear all entries, aliases, and/or confirm keys with optional scope
Execute a stored command with optional dry-run, decryption, and composition
Set an entry with optional encryption, aliases, and confirmation requirements
List entries not accessed in a specified number of days
Show telemetry statistics for operations and access patterns
reverie_find 'query' parameter does not specify matching strategy (substring, regex, fuzzy, exact). LLMs cannot infer whether 'proj' will match 'project' or only exact 'proj'.
reverie_export and reverie_import combine multiple types (all, entries, aliases, confirm) into a single tool with a 'type' enum. This violates single-responsibility, split into separate tools (export_entries, export_aliases, etc.) for clearer LLM intent.
Confirmation/dry-run semantics unclear. reverie_run accepts 'yes' to skip confirmation and 'dry' for preview, but the relationship between confirmation tokens (seen in code) and these parameters is not documented in the tool description.
reverie_get, reverie_context descriptions do not explain output format (JSON, tree structure, plaintext). LLMs need to know how to parse and present results to the user.
Error handling guidance missing. No tool description explains what causes failures, which are retryable, or recovery steps. E.g., reverie_run doesn't say 'if command fails, you can retry with a modified command' or 'if encrypted, call reverie_get with decrypt=true first'.