Making a repository legible to the machines editing it
Our own research: a Rust engine producing a structural graph of a codebase.
Key facts
Rust and TypeScript today: a proof of concept, not a product
Runs rust-analyzer, Rust’s language server, to resolve Rust references, so user and library code are distinguished; TypeScript imports are resolved with oxc_resolver, a module-resolution library
AI coding agents rediscover a repository from scratch every session. They lean on embeddings, which capture surface similarity and miss symbolic structure: an embedding cannot tell you that changing a retry threshold alters a business invariant three services away. And when a system does infer meaning, nothing distinguishes what the compiler proved from what a model guessed.
SCIE scans, parses with tree-sitter, extracts semantics per language, resolves symbols and lowers to a common intermediate representation. For Rust it spawns a real language server to resolve references rather than guessing from import paths; TypeScript imports are resolved with oxc_resolver, a module-resolution library. Output is served as JSON and rendered as an interactive graph.
This is a working proof of concept, not a product. Two languages, no persistence, single user. The framework it’s being built toward (SRIF) sets a strict hierarchy in which runtime behaviour outranks executable code, which outranks structure, which outranks inferred semantics. Every semantic claim carries provenance, and the system is designed to keep working when every AI component in it is switched off.
Building something
like this?
Thirty minutes with one of the engineers.
Book a call