Code Review Graph
Build a persistent knowledge graph of your codebase so Claude reads only what matters — up to 49x fewer tokens on coding tasks.
- Skill ID
- reason-machines/trending-skills/code-review-graph
- Publisher
- reason-machines
- Repository
- trending-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
reason-machines/trending-skills/code-review-graphInstalls these files- SKILL.md
What this skill tells the agent
code-review-graph
Skill by ara.so — Daily 2026 Skills collection.
code-review-graph builds a persistent structural map of a codebase using Tree-sitter, stores it in a local SQLite graph, and exposes it to Claude via MCP. Instead of re-reading entire projects on every task, Claude queries the graph and reads only the files in the blast radius of a change — averaging 6.8× fewer tokens on code reviews and up to 49× on daily coding tasks in large monorepos.
Installation
Claude Code Plugin (recommended)
claude plugin marketplace add tirth8205/code-review-graph
claude plugin install code-review-graph@code-review-graphRestart Claude Code after installation.
pip
pip install code-review-graph
code-review-graph install # registers the MCP server with Claude CodeRequires Python 3.10+ and uv.
Optional: semantic search support
pip install code-review-graph[embeddings]Enables vector embeddings via sentence-transformers for semantic_search_nodes_tool.
Initial Setup
After installation, open your project in Claude Code and run:
Build the code review graph for this projectOr use the slash command:
/code-review-graph:build-graphThe first build parses the full codebase (~10 seconds for 500 files). After that, the graph updates incrementally on every file save and git commit (under 2 seconds for a 2,900-file project).
CLI Reference
# Register MCP server with Claude Code
code-review-graph install
# Parse entire codebase into the graph (first run)
code-review-graph build
# Re-parse only changed files (subsequent runs)
code-review-graph update
# Show graph statistics: node count, edge count, language breakdown
code-review-graph status
# Auto-update the graph as you save files (continuous watch mode)
code-review-graph watch
# Generate an interactive D3.js HTML visualisation of the graph
code-review-graph visualize
# Start the MCP server manually (Claude Code does this automatically)
code-review-graph serveSlash Commands in Claude Code
| Command | What it does |
|---|---|
/code-review-graph:build-graph | Build or rebuild the code graph from scratch |
/code-review-graph:review-delta | Review changes since the last commit |
/code-review-graph:review-pr | Full PR review with blast-radius analysis |
MCP Tools (used automatically by Claude)
Once the graph is built, Claude calls these tools without manual prompting:
| Tool | Purpose |
|---|---|
build_or_update_graph_tool | Build or incrementally update the graph |
get_impact_radius_tool | Find all files/functions affected by a change |
get_review_context_tool | Return a token-optimised structural summary for review |
query_graph_tool | Query callers, callees, tests, imports, inheritance |
semantic_search_nodes_tool | Search code entities by name or meaning |
embed_graph_tool | Compute vector embeddings for semantic search |
list_graph_stats_tool | Graph size and health statistics |
get_docs_section_tool | Retrieve documentation sections |
find_large_functions_tool | Find functions/classes over a line-count threshold |
Configuration: Ignoring Paths
Create .code-review-graphignore in the repository root:
generated/**
*.generated.ts
vendor/**
node_modules/**
dist/**
__pycache__/**
*.pyc
migrations/**The graph will skip these paths during build and update.
Python API
The graph can be queried programmatically for custom tooling or scripts.
Build and update the graph
from code_review_graph import GraphBuilder
builder = GraphBuilder(repo_path="/path/to/your/project")
# Full build (first time)
stats = builder.build()
print(f"Nodes: {stats['nodes']}, Edges: {stats['edges']}")
# Incremental update (subsequent runs — only parses changed files)
update_stats = builder.update()
print(f"Re-parsed: {update_stats['files_updated']} files")Query the graph
from code_review_graph import GraphQuery
query = GraphQuery(repo_path="/path/to/your/project")
# Find all callers of a function
callers = query.get_callers("authenticate_user")
print(callers)
# ['api/views.py::login_view', 'tests/test_auth.py::test_login']
# Find all callees (functions called by a function)
callees = query.get_callees("process_payment")
print(callees)
# Find tests that cover a file
tests = query.get_tests_for("payments/processor.py")
print(tests)
# Get inheritance chain for a class
parents = query.get_inheritance("AdminUser")
print(parents)
# ['BaseUser', 'PermissionMixin']Blast-radius analysis
from code_review_graph import ImpactAnalyzer
analyzer = ImpactAnalyzer(repo_path="/path/to/your/project")
# What is affected if this file changes?
impact = analyzer.get_impact_radius("auth/models.py")
print(impact)
# {
# "direct_callers": ["api/views.py", "middleware/auth.py"],
# "transitive_dependents": ["api/tests/test_views.py", "integration/test_flow.py"],
# "test_files": ["tests/test_auth.py"],
# "blast_radius_size": 7
# }
# Multiple changed files (e.g., from a git diff)
changed_files = ["auth/models.py", "payments/processor.py"]
combined_impact = analyzer.get_impact_radius(changed_files)Semantic search
from code_review_graph import SemanticSearch
# Requires: pip install code-review-graph[embeddings]
search = SemanticSearch(repo_path="/path/to/your/project")
# Embed the graph (one-time, cached)
search.embed()
# Search for code entities by concept
results = search.search("rate limiting middleware", top_k=5)
for r in results:
print(r["node"], r["file"], r["score"])Find large functions
from code_review_graph import GraphQuery
query = GraphQuery(repo_path="/path/to/your/project")
# Find functions/classes over 50 lines (good for refactoring targets)
large = query.find_large_functions(threshold=50)
for item in large:
print(f"{item['name']} in {item['file']}: {item['lines']} lines")Common Patterns
Pattern: Review only what changed in the current branch
# In Claude Code, after making changes:
/code-review-graph:review-deltaClaude will:
- Call
build_or_update_graph_toolto sync the graph with your edits - Call
get_impact_radius_toolon changed files - Call
get_review_context_toolto get a compact structural summary - Review only the relevant ~15 files instead of the full codebase
Pattern: Continuous watch during development
# Terminal 1: keep the graph fresh as you code
code-review-graph watch
# Terminal 2: your normal development workflowAny file save triggers an incremental re-parse of only that file and its dependents.
Pattern: Pre-commit hook
# .git/hooks/pre-commit
#!/bin/sh
code-review-graph updateMakes the graph always current before Claude sees a commit.
Pattern: Visualise the dependency graph
code-review-graph visualize
# Opens an interactive D3.js force-directed graph in your browser
# Toggle edge types: calls, imports, inheritance, test coverage
# Search nodes by namePattern: Check graph health
code-review-graph status
# Example output:
# Graph: .code-review-graph/graph.db
# Nodes: 4,821 (functions: 2,103 | classes: 487 | files: 312)
# Edges: 11,204 (calls: 7,891 | imports: 2,108 | inherits: 205 | tests: 1,000)
# Languages: Python (180), TypeScript (98), JavaScript (34)
# Last updated: 2026-03-26 01:22:11 (3 files changed)Supported Languages
Python, TypeScript, JavaScript, Vue, Go, Rust, Java, C#, Ruby, Kotlin, Swift, PHP, Solidity, C/C++
Each language has full Tree-sitter grammar support for: functions, classes, imports, call sites, inheritance chains, and test detection.
Adding a New Language
Edit code_review_graph/parser.py:
# 1. Add file extension mapping
EXTENSION_TO_LANGUAGE = {More from reason-machines
Use this skill in a project
Open any RiverX project, search the Skills panel for reason-machines/trending-skills/code-review-graph, and install it in one click.
