Graphify
Graphify converts a folder of code, docs, PDFs, images, and videos into a queryable knowledge graph. It extracts symbols and relationships locally with tree-sitter (no code leaves the machine for AST extraction), writes the graph to graphify-out/graph.json plus an interactive graph.html, and answers questions by traversing the graph instead of re-reading files.
PyPI package: graphifyy (double-y). CLI command: graphify. License: MIT. Requires Python >= 3.10.
For using graphify to reduce agent token usage during research and decomposition, load graphify-agents.
Installation
Using mise (recommended for this project)
Copy templates/mise.toml from this skill into the project's mise.toml, then run mise install. graphify is a PyPI package, so mise installs it through its pipx backend; the template pins uv as the backend installer and enables uvx mode so one mise install resolves uv then graphifyy:
[settings.pipx]
uvx = true
[tools]
python = "3.12"
uv = "latest"
"pipx:graphifyy" = "0.8.36"
mise trust && mise install # installs python, uv, then graphifyy
graphify --version # → graphify 0.8.36
Verify the backend sees the package before pinning a different version:
mise ls-remote pipx:graphifyy | tail -5
Alternative installation (upstream)
The project's own documented install (outside mise):
pip install graphifyy && graphify install
pip install graphifyy also accepts extras, e.g. pip install "graphifyy[all]". Available extras: pdf, office, google, video, mcp, neo4j, svg, leiden, ollama, openai, gemini, anthropic, bedrock, azure, sql, postgres, dm, terraform, chinese, all.
How Graphify Works
- Scan + extract — walks the target path, classifies files (code, docs, papers, images), and runs tree-sitter AST extraction locally. AST extraction needs no LLM and no network.
- Infer relationships — semantic edge inference uses a configured LLM backend (
gemini|kimi|claude|openai|deepseek|ollama, auto-detected from available API keys). Skippable with--no-cluster/update. - Cluster + label — community detection groups related nodes; an LLM names the communities (skippable with
--no-label). - Write outputs —
graphify-out/graph.json(NetworkX node-link JSON),graph.html(interactive viz), and a markdown report. - Query —
query/path/explain/affectedtraversegraph.jsonwith no LLM call for the traversal itself.
Default output directory: graphify-out/. Default graph path: graphify-out/graph.json.
Building a Graph
graphify . # build the graph for the current directory
graphify ./raw # build for a specific path
graphify ./raw --mode deep # aggressive INFERRED-edge semantic extraction
graphify update . # re-extract code via AST only — no LLM, no API key
graphify cluster-only . # rerun clustering/report on an existing graph.json
graphify add https://arxiv.org/abs/1706.03762 # fetch a URL into ./raw, then update
update is the offline path: it rebuilds the graph from code with no LLM backend, which is what runs without any API key configured.
Exporting
Export flags run on a build invocation:
graphify . --graphml # GraphML (Gephi, yEd)
graphify . --svg # SVG vector graph
graphify . --neo4j # Neo4j/Cypher MERGE statements
graphify . --wiki # Wikipedia-style markdown
graphify . --mcp # start the MCP stdio server
graphify export callflow-html # Mermaid-based architecture / call-flow HTML
graphify tree # D3 collapsible-tree HTML of the module hierarchy
Querying
graphify query "what connects attention to the optimizer?" # BFS traversal, default 2000-token budget
graphify query "..." --budget 1500 # cap output at N tokens
graphify query "..." --dfs # depth-first instead of breadth-first
graphify path "DigestAuth" "Response" # shortest path between two nodes
graphify explain "SwinTransformer" # plain-language explanation of a node + neighbors
graphify affected "add" # reverse traversal: nodes impacted by a change to "add"
query, path, and explain work on a raw AST-extracted graph.json. affected and community labels need a full clustered build (it errors with could not load graph: 'links' on an unclustered raw extraction).
Continuous Updates
graphify watch . # watch a folder, rebuild on code changes
graphify hook install # install post-commit/post-checkout git hooks
graphify hook status # check whether hooks are installed
graphify check-update . # cron-safe check of the needs_update flag
Excluding Files
graphify honors a .graphifyignore file (gitignore syntax) in the target directory to skip dependencies, build output, caches, and secrets. Keep generated graphs and secrets out of the corpus.
CLI Reference
For the full command and flag surface (extraction backends, global cross-repo graphs, merge-graphs, per-platform install targets, and every flag captured from graphify --help), see references/cli.md.
Anti-Fabrication Requirements
- Run
graphify --versionbefore stating the installed version. - Run
graphify --help(or readreferences/cli.md) before documenting a command or flag — do not infer flags from blog posts. - Run
mise ls-remote pipx:graphifyybefore pinning a version. - Build a real graph and run an actual
querybefore claiming a graph answers a given question. - Report token-reduction numbers only from
graphify benchmarkoutput or the project's own published figures, attributed as such — never as independent measurement.