How Graphify works.
What the parser can prove is parsed, the rest is labelled as guessed, and the output is yours.
Two stages.
One is deterministic. The other says so when it is not.
Code is parsed
Thirty-three tree-sitter grammars walk every source file locally, SQL schemas and Terraform included. Functions, imports and calls become edges because a parser found them.
Everything else is read
Docs, PDFs and images go through an optional pass with the model backend you configure, which marks a link it is unsure of AMBIGUOUS.
Three files, all yours.
In graphify-out, in your repo: one to open, one to read, one for a machine.
graphify-out/graph.html an interactive graph
graphify-out/GRAPH_REPORT.md god nodes, communities, surprises
graphify-out/graph.json the graph itselfAn edge is a claim.
Every claim carries a tag saying how it was arrived at, which a similarity score cannot offer.
- EXTRACTED
- Straight from the syntax tree. Parse it again and the parser finds it again.
- INFERRED
- Worked out by Graphify, with or without a model, and given a confidence score.
- AMBIGUOUS
- Flagged by the model pass as uncertain. The parser leaves out a call it cannot pin to one target.
What neither of them finds.
Neither finds connections, and connections are what the hard questions about code are made of. What breaks if I change this is a question about the caller of a caller of a caller. Chunking cuts the links before retrieval begins; grep answers only the hop you can phrase as a string.
The retrieval literature has reached the same diagnosis. GraphRAG (Edge et al., 2024) puts a knowledge graph on top of chunk retrieval to recover the structure chunking threw away. Graphify starts from the graph, so an answer arrives as a path through your real code.
The honest limit: for fuzzy search over large volumes of prose, embeddings are still the better tool.
Three verbs.
Each one answers with a path you can open.
$ graphify query AuthService # everything joined to a symbol
$ graphify path AuthService Db # the route between two of them
$ graphify explain <edge> # why this edge exists at all