Corrections that outlive the session. memory-pulse surfaces a correction first in every session and blocks the edit that writes the old value back. Four MCP tools, ~900 tokens. Claude Code, Codex, Cursor, GitHub Actions.
memory-pulse defines 4 tools with complete input schemas and descriptions. Naming is clear and verb-driven (remember, pulse, recall, execute). Descriptions are adequate (60-180 chars) but lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameters are well-typed with enums where appropriate (kind, tier, scope). However, output schemas are not documented, LLMs cannot predict what pulse() or recall() return, forcing blind invocation. Error handling is minimal; no recovery guidance. Security is strong (no secrets in params, offline-first design). Composition is sound: each tool has one responsibility, and tools chain naturally (recall → execute → remember). Baseline: 549 production tools average 194-char descriptions and 100% document return types; memory-pulse lacks both.
Check if a proposed edit or text violates any active corrections in the ledger. Blocks edits that reintroduce withdrawn values.
Send the ledger to the hosted engine for processing and receive a corrections-first brief. Computes answers from ledger events and forgets the request.
Query the ledger for events matching a pattern or scope. Returns matching events from the local ledger.
Record a correction or event to the ledger. Writes directly to .memory-pulse/events.jsonl offline.
Output schemas undocumented for pulse, recall, execute. LLMs cannot predict return structure, forcing blind invocation and downstream parsing errors.
Tool descriptions lack WHEN-to-use guidance. 'Send the ledger to the hosted engine' does not explain when pulse() is preferable to recall(), or what 'brief' vs 'full' tier means for agent planning.
No error handling guidance. If pulse() fails (network, API error, invalid key), the description does not tell the LLM whether to retry, ask the user, or fall back to recall().
Parameter 'key' in pulse() is optional but undocumented. Description should explain: 'Optional license key for premium features. If omitted, free tier applies. Retry with key if rate-limited.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No pagination or result-limit guidance. If recall() returns 1000+ events, LLM context explodes. Description should state: 'Returns up to 100 matching events; use pattern to narrow scope.'