Python AST and tree-sitter. Extracts symbols, inheritance, composition, call graphs, and dependency resolution. Every edge in the graph traces to a line of source code. Zero hallucination by design.
contains, inheritsFrom, calls, dependsOn. Three swappable backends: Neo4j for scale, rdflib for zero-config local use, Jena Fuseki for SPARQL federation.
search finds symbols semantically. lookup, usages, details, and tree query structure with zero LLM latency.RDF is a W3C standard with decades of tooling. SPARQL gives us a declarative query language that can express graph patterns like "find all classes that inherit from X and override method Y" in a single query. The ontology can be composed with existing ontologies without schema migration.
Structure must be correct. A wrong inheritance edge or a phantom dependency will cascade into wrong answers everywhere downstream. AST parsing gives provably correct structural facts. The LLM layer adds understanding on top of verified structure. It can summarise, pattern-match, and reason, but it can never override what the parser found.
Methods are small enough for an LLM to summarise accurately from source. Classes are understood by composing method summaries, so the LLM never needs to hold an entire class in context. Modules from class summaries. Each level's summary is grounded in the verified summaries below it. The context window stays small while understanding scales.