Semantic recall over local Claude Code, Codex, and Cursor history — one shared index, searchable by meaning
session-recall has 9 tools with complete input schemas and descriptions. Naming is verb-forward (search, create, edit, delete, recall_search, expand_around, step, grep, recent_sessions). Descriptions are detailed and context-rich (avg ~180 chars), explaining WHEN to use each tool and what it returns. However, output schemas are not formally documented in the code, responses are described in prose but lack JSON Schema definitions. Error handling is present (e.g., 'search before create' enforcement, secret scanning) but recovery guidance is minimal. Parameters are well-described with types and constraints (e.g., nullable fields, enums for direction/source). The metadocs tools (search, create, edit, delete) include domain-specific logic (dedup enforcement, secret scanning) that is well-integrated. recall_search and grep tools accept rich filtering (date ranges, timezone, scope_cwd) but lack explicit pagination limits in descriptions. Overall: solid definitions with good naming and descriptions, but missing formal output schemas and some pagination/limit guidance.
Create a new entry. category: bugs | actions | decisions | user. Only for a genuinely NEW story — update an existing entry via edit() when the story continues. prs: related pull requests / issues.
Remove an entry that is provably wrong or obsolete. Requires a real reason — it lands in the run log, and the removal is git-revertible.
Update an existing entry: replace body/title, append a paragraph, or attach PRs. Use this instead of create when the story already has an entry.
Return the raw turns around an anchor (tool calls, outputs, thinking).
On-demand substring scan over raw session transcripts.
Semantically search past Claude Code, Codex and Cursor sessions. Returns {"anchors": [...ranked anchors...], "degraded": null | str}. degraded is non-null when the embedding provider was unreachable and the search fell back to literal keyword matching: semantic ranking is OFF, so a thin result set means "not phrased this way in the transcript", NOT "not in the history". Retry with the exact identifiers you expect (error strings, symbols, file names), tell the user the search is degraded, and treat a miss as inconclusive.
Output schemas not formally documented. Descriptions mention return structure (e.g., 'Returns {"anchors": [...], "degraded": ...}') but no JSON Schema definitions are visible in code. LLMs cannot reliably parse unstructured prose responses.
Pagination limits not enforced or documented in tool descriptions. recall_search defaults k=10, grep defaults limit=100, recent_sessions defaults limit=10, but no explicit cap or guidance on max values. Large result sets risk context window exhaustion.
expand_around and step descriptions are terse (60-65 chars). 'Return the raw turns around an anchor' and 'Walk to an adjacent turn' lack context on when to use these tools vs recall_search, what 'turns' means, or what data structure is returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List the most recently active past sessions, freshest first — use to see the current state of work and how fresh the index is (the top entry's last_activity_human is the effective freshness). Also surfaces the sessions of a thread split across resume-created session_ids so you can reassemble the arc. Each entry: source, session_id, project, turns, last_activity (epoch), last_activity_human, label (the session's first user prompt).
Find existing entries before creating new ones. Searches this project's bugs/actions/decisions and the global user map. ALWAYS search before create — create() refuses otherwise.
Walk to an adjacent turn ('next' or 'prev').
Error handling in metadocs tools (create, edit, delete) returns dict with 'error' key, but recovery guidance is minimal. E.g., 'search() first' is stated, but no hint on how to recover from a failed edit due to missing entry_id.
recall_search 'degraded' mode (fallback to keyword matching when embedding provider unreachable) is documented in prose but no structured error classification. LLM cannot programmatically detect degradation without parsing the description.