Semantic code search server that finds code by natural language descriptions using embeddings and tree-sitter AST parsing
Déjà Vu demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive parameter descriptions, and proper input validation via Pydantic models. All four tools have detailed descriptions (194 - 350 chars, within baseline 34 - 392 range). Parameters include type constraints (minLength, maxLength, ge/le bounds) and helpful context. Tool annotations are present (readOnlyHint, destructiveHint, idempotentHint). However, output schemas are not explicitly documented, responses are returned as plain strings rather than structured objects, forcing LLMs to parse unstructured text. Error handling is basic (try/catch with string messages, no recovery guidance). The destructive tool (dejavu_forget) lacks confirmation/dry-run pattern.
Remove a repository or directory from the index. Deletes all chunks and embeddings associated with the given path. This is permanent and cannot be undone.
Index or reindex code directories to make them searchable. Scans directories for code files, extracts functions/classes/components using AST parsing, generates semantic embeddings, and stores everything in a local SQLite database. Incremental: only processes files modified since the last scan.
Search your indexed codebase using natural language descriptions. Finds code you've written before even when you don't remember the filename, function name, or exact keywords. Describe what it did and Déjà Vu will find it using semantic vector search. Returns ranked results with file paths, code previews, and similarity scores.
Show the current state of the Déjà Vu index. Returns statistics about indexed repos, chunks, embeddings, and language distribution.
Output schemas not documented. All tools return plain strings; LLMs cannot parse structured results or chain downstream calls. dejavu_search should return {results: [{file, preview, score, language, modified}], total_count, next_cursor}.
Error handling lacks recovery guidance. Errors return raw strings ('Search failed: {e}') without actionable next steps. Should categorize as retryable vs user-fixable and suggest alternatives (e.g., 'Index empty, run dejavu_reindex first').
dejavu_forget (destructive) lacks confirmation/dry-run pattern. Permanent deletion without user confirmation risks accidental data loss. Should support a dry_run parameter or require explicit confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
dejavu_status returns unstructured text summary. Should return {repos: int, chunks: int, languages: {lang: count}, last_indexed: ISO8601, db_size_bytes: int} for LLM reasoning and downstream tool chaining.
dejavu_search result limit capped at 50 but no pagination support. Large result sets should include next_cursor and total_count to enable multi-page retrieval without context explosion.