npx skills add ...
npx skills add howell5/willhong-skills --skill graphify
Use when exploring unfamiliar codebases, before searching for code, or after editing files. Builds a structural AST index (classes, functions, imports, call graph) from 12 languages via tree-sitter. Trigger: /graphify
npx skills add howell5/willhong-skills --skill graphify
Structural index of the codebase. Know what exists, where, and how it connects — before you grep.
Requires CLI: npm i -g graphify-ts (uses Bun runtime).
Manual updates only. The graph does not refresh on its own — you (or the user) run graphify update or graphify build when you want a fresh index. This avoids write conflicts in git worktrees and other multi-session setups.
Then, once per project:
After that, refresh manually whenever the index drifts from the code (see graphify update below).
/graphify build — Build index (first time, or full rebuild)Scans all source files, extracts AST structure, saves to graphify-out/graph.json.
Report: "Indexed {files} files, {nodes} symbols, {edges} relationships"
/graphify query <name> — Search for symbolsCase-insensitive search. Returns matching symbols with file locations.
/graphify update <files...> — Incremental update after editsRe-extract only the specified files. Run this after editing code if you plan to query the graph again in the same session.
/graphify auto-update — Bulk update from git diffComputes changed code files via git diff + untracked files, then calls updateIndex. Silent when there's nothing to do. Convenient for refreshing after a batch of edits without naming each file.
Before searching code: If graphify-out/graph.json exists, query it before Glob or Grep. The graph tells you which files contain which symbols. This is the main value — replace blind keyword search with structured lookup.
After editing: If you'll query the graph again in the same session, run graphify update <edited-files> (or graphify auto-update for a bulk refresh). Otherwise leave it — the next graphify build or update will catch up.
Exploring unfamiliar code: Run /graphify query <concept> to find entry points without guessing filenames.
Python, JavaScript, TypeScript (JSX/TSX), Go, Rust, Java, C, C++, Ruby, C#, Kotlin, Scala, PHP
Saved as graphify-out/graph.json:
Edge relations: contains, method, imports, imports_from, calls (INFERRED), inherits
graphify update graphify-out/graph.json <file1> [file2...]graphify auto-update [dir]{
"nodes": [{ "id": "main::app", "label": "App", "sourceFile": "main.py", "sourceLocation": "main.py:5" }],
"edges": [{ "source": "file::main", "target": "main::app", "relation": "contains", "confidence": "EXTRACTED" }],
"metadata": { "files": 10, "nodes": 45, "edges": 62 }
}