Local code-context engine for AI coding agents: structural answers within a token budget.
Sonde provides three well-named, verb-prefixed tools (find_symbols, query_graph, get_impact_radius) with clear, domain-specific descriptions (avg 180 chars). All tools have input schemas with typed properties. However, parameter descriptions are sparse or missing entirely, 'query' and 'pattern' lack guidance on expected format/values; 'symbols' array has minimal context. Output schemas are not documented in the tool definitions. Error handling is present (NoIndexError, SchemaVersionError caught) but responses lack actionable recovery guidance. No parameter constraints (enums, ranges) visible. Tool composition is sound (each does one thing), but descriptions could better explain WHEN to use each tool vs alternatives.
Seed retrieval over the indexed symbol graph: exact qualified name, then exact short name, then full-text search. Returns signatures only, never source bodies.
Reverse-traverse calls, references, implementations, and inheritance from symbols or the current git diff to a token budget. Structural test edges indicate relatedness, never proof of coverage.
Structural traversal for callers, callees, imports, inheritance, tests, and containment, bucketed by evidence tier. Structural test edges indicate relatedness, never proof of coverage.
Parameter descriptions are minimal or absent. 'query' in find_symbols lacks guidance on format (exact name? regex? free-text?). 'pattern' in query_graph does not explain valid values (callers|callees|imports|inheritance|tests|containment). LLMs cannot infer constraints from names alone.
Output schemas are not documented in tool definitions. Callers cannot predict response structure (e.g., what fields does 'results' contain? Is it paginated?). This forces LLMs to guess and wastes tokens on trial-and-error.
No enum constraints on 'pattern' parameter. Valid values (callers, callees, imports, inheritance, tests, containment) should be declared as an enum, not left to free-form strings. Prevents hallucinated invalid patterns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Error responses (NoIndexError, SchemaVersionError) are caught but return generic 'unknown' envelope with message. No actionable recovery guidance (e.g., 'Index not found. Run `sonde index` to build it.').
Tool descriptions do not explain WHEN to use each tool or how they differ. 'find_symbols' vs 'query_graph' distinction is unclear to an LLM without domain knowledge. Add guidance like 'Use find_symbols to locate a specific function; use query_graph to explore its callers/callees.'