Verified, self-healing knowledge layer for AI coding agents: cross-repo memory with trust verdicts, zero-token CPU-only indexing, hybrid retrieval
Heimdall exposes 3 tools with reasonable naming (kb_search, kb_insert, kb_sync) and descriptions that explain purpose and context. However, schema quality is inconsistent: kb_search and kb_insert have proper TypeBox schemas with typed parameters and descriptions, but kb_sync has an empty schema object. Parameter descriptions are present but sometimes lack actionable constraints (e.g., kb_search 'query' lacks guidance on format or length). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal: the run() helper returns {ok, text} but provides no recovery guidance or error classification. kb_insert's keywords parameter changed from comma-separated string to array between definition and implementation, creating a mismatch. No tool declares permissions, audit requirements, or idempotency guarantees.
Record reusable work into Heimdall memory (title anchor + body path/what/why + keywords). Mandatory after completing reusable work so future sessions reuse it.
Heimdall memory search: ranked, verified hits across ALL repos on this machine (lexical code graph + semantic embeddings). Use BEFORE any implementation/fix/research and INSTEAD of ls/grep/find chains. Hits carry trust verdicts (STRONG/WEAK) verified against disk.
Converge Heimdall indexes with the filesystem (incremental): re-anchors moved files, prunes dead paths.
kb_sync has empty input schema (Type.Object({})), LLMs cannot infer parameters or constraints. Even no-param tools should document this explicitly.
No output schemas documented for any tool. LLMs cannot predict response structure (fields, types, pagination). Responses are free-text 'text' fields requiring unstructured parsing.
kb_insert parameter mismatch: schema declares keywords as Type.Array(Type.String(...)) but description says 'comma-separated keywords'. Implementation loops over array, not string split.
Error handling returns {ok: boolean, text: string} with no recovery guidance. Errors like 'ERROR: aborted' or 'ERROR: <message>' give LLMs no actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
kb_search 'query' parameter lacks format/length constraints. No guidance on whether to pass natural language, code snippets, or keywords. Baseline rubric expects 'format, range, and allowed values' in descriptions.