When you ask Claude Code to work on a complex task, it spawns Explore agents that scan your codebase using grep, glob, and file reads. These agents consume tokens with every tool call.
CodeGraph gives those agents a semantic knowledge graph โ pre-indexed symbol relationships, call graphs, and code structure. Instead of scanning files, agents query the graph instantly.
We ran the same complex task 3 times with and without CodeGraph:
| Metric | Without CodeGraph | With CodeGraph | Improvement |
|---|---|---|---|
| Explore tokens | 157.8k | 111.7k | 29% fewer |
| Per-agent tokens | 74.0k | 46.4k | 37% fewer |
| Tool calls | 60 | 45 | 25% fewer |
| Main context usage | 28.7% | 24.0% | 4.7% less |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Claude Code โ
โ โ
โ "Implement user authentication" โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ Explore Agent โ โโโโ โ Explore Agent โ โ
โ โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ
โโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CodeGraph MCP Server โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Search โ โ Callers โ โ Context โ โ
โ โ "auth" โ โ "login()" โ โ for task โ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ SQLite Graph DB โ โ
โ โ โข 387 symbols โ โ
โ โ โข 1,204 edges โ โ
โ โ โข Instant lookups โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Without CodeGraph: Explore agents use grep, glob, and Read to scan files โ many API calls, high token usage
With CodeGraph: Explore agents query the graph via MCP tools โ instant results, local processing, fewer tokens
| ### ๐ง Smart Context Building One tool call returns everything Claude needsโentry points, related symbols, and code snippets. No more expensive exploration agents. | ### ๐ Semantic Search Find code by meaning, not just text. Search for "authentication" and find `login`, `validateToken`, `AuthService`โeven with different naming conventions. | ### ๐ Impact Analysis Know exactly what breaks before you change it. Trace callers, callees, and the full impact radius of any symbol. |
| ### ๐ 19+ Languages TypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Swift, Kotlin, Dart, Svelte, Liquid, Pascal/Delphiโall with the same API. | ### ๐ 100% Local No data leaves your machine. No API keys. No external services. Everything runs on your local SQLite database. | ### โก Always Fresh Claude Code hooks automatically sync the index as you work. Your code intelligence is always up to date. |
npx @colbymchenry/codegraph
The interactive installer will:
codegraph globally (needed for hooks & MCP server to work)~/.claude.json~/.claude/CLAUDE.md (teaches Claude how to use CodeGraph)Restart Claude Code for the MCP server to load.
For each project you want to use CodeGraph with:
cd your-project
codegraph init -i
That's it! Claude Code will now use CodeGraph tools automatically when a .codegraph/ directory exists.
codegraph # Run interactive installer
codegraph install # Run interactive installer (explicit)
codegraph init [path] # Initialize in a project
codegraph uninit [path] # Remove CodeGraph from a project
codegraph index [path] # Full index
codegraph sync [path] # Incremental update
codegraph status [path] # Show statistics
codegraph query <search> # Search symbols
codegraph files [path] # Show project file structure
codegraph context <task> # Build context for AI
codegraph affected [files] # Find test files affected by changes
codegraph serve --mcp # Start MCP server
codegraph / codegraph installRun the interactive installer for Claude Code integration. Configures MCP server and permissions automatically.
codegraph # Run installer (when no args)
codegraph install # Run installer (explicit)
npx @colbymchenry/codegraph # Run via npx (no global install needed)
The installer will:
codegraph globally (needed for hooks & MCP server)~/.claude or local ./.claude)claude.json~/.claude/CLAUDE.md (teaches Claude how to use CodeGraph)codegraph init [path]Initialize CodeGraph in a project directory. Creates a .codegraph/ directory with the database and configuration.
codegraph init # Initialize in current directory
codegraph init /path/to/project # Initialize in specific directory
codegraph init --index # Initialize and immediately index
codegraph uninit [path]Remove CodeGraph from a project. Deletes the .codegraph/ directory and all indexed data.
codegraph uninit # Remove from current directory
codegraph uninit --force # Skip confirmation prompt
codegraph index [path]Index all files in the project. Extracts functions, classes, methods, and their relationships.
codegraph index # Index current directory
codegraph index --force # Force full re-index
codegraph index --quiet # Suppress progress output
codegraph sync [path]Incrementally sync changes since the last index. Only processes added, modified, or removed files.
codegraph sync # Sync current directory
codegraph sync --quiet # Suppress output
codegraph status [path]Show index status and statistics.
codegraph status
Output includes:
codegraph query <search>Search for symbols in the codebase by name.
codegraph query "authenticate" # Search for symbols
codegraph query "User" --kind class # Filter by kind
codegraph query "process" --limit 20 # Limit results
codegraph query "validate" --json # Output as JSON
codegraph files [path]Show the project file structure from the index. Faster than filesystem scanning since it reads from the indexed data.
codegraph files # Show file tree
codegraph files --format flat # Simple list
codegraph files --format grouped # Group by language
codegraph files --filter src/components # Filter by directory
codegraph files --pattern "*.test.ts" # Filter by glob pattern
codegraph files --max-depth 2 # Limit tree depth
codegraph files --no-metadata # Hide language/symbol counts
codegraph files --json # Output as JSON
codegraph context <task>Build relevant code context for a task. Uses semantic search to find entry points, then expands through the graph to find related code.
codegraph context "fix checkout bug"
codegraph context "add user authentication" --format json
codegraph context "refactor payment service" --max-nodes 30
codegraph affected [files...]Find test files affected by changed source files. Traces import dependencies transitively through the graph to discover which test files depend on the code you changed. Works with any test framework and any language CodeGraph supports.
codegraph affected src/utils.ts src/api.ts # Pass files as arguments
git diff --name-only | codegraph affected --stdin # Pipe from git diff
codegraph affected --stdin --json < changed.txt # JSON output
codegraph affected src/auth.ts --filter "e2e/*" # Custom test file pattern
codegraph affected src/lib.ts --depth 3 --quiet # Shallow search, paths only
Options:
| Option | Description | Default |
|---|---|---|
--stdin |
Read file list from stdin (one per line) | false |
-d, --depth <n> |
Max dependency traversal depth | 5 |
-f, --filter <glob> |
Custom glob to identify test files | auto-detect |
-j, --json |
Output as JSON | false |
-q, --quiet |
Output file paths only, no decoration | false |
-p, --path <path> |
Project path | auto-detect |
How it works:
*.spec.*, *.test.*, e2e/, tests/, __tests__/) or a custom --filter globExample: CI/hook integration
#!/usr/bin/env bash
# In a pre-commit hook or CI step:
AFFECTED=$(git diff --name-only HEAD | codegraph affected --stdin --quiet)
if [ -n "$AFFECTED" ]; then
echo "Running affected tests..."
npx vitest run $AFFECTED
fi
codegraph serveStart CodeGraph as an MCP server for AI assistants.
codegraph serve # Show MCP configuration help
codegraph serve --mcp # Start MCP server (stdio)
codegraph serve --mcp --path /project # Specify project path
When running as an MCP server, CodeGraph exposes these tools to AI assistants. These tools are designed to be used by Claude's Explore agents for faster, more efficient codebase exploration.
codegraph_contextBuild context for a specific task. Good for focused queries.
codegraph_context(task: "fix checkout validation bug", maxNodes: 20)
codegraph_searchQuick symbol search by name. Returns locations only.
codegraph_search(query: "UserService", kind: "class", limit: 10)
codegraph_callers / codegraph_calleesFind what calls a function, or what a function calls.
codegraph_callers(symbol: "validatePayment", limit: 20)
codegraph_callees(symbol: "processOrder", limit: 20)
codegraph_impactAnalyze what code would be affected by changing a symbol.
codegraph_impact(symbol: "UserService", depth: 2)
codegraph_nodeGet details about a specific symbol. Use includeCode: true only when needed.
codegraph_node(symbol: "authenticate", includeCode: true)
codegraph_filesGet the project file structure from the index. Faster than filesystem scanning.
codegraph_files(path: "src/components", format: "tree", includeMetadata: true)
codegraph_statusCheck index health and statistics.
Claude's Explore agents use these tools instead of grep/glob/Read for faster exploration:
| Without CodeGraph | With CodeGraph | Benefit |
|---|---|---|
grep -r "auth" |
codegraph_search("auth") |
Instant symbol lookup |
Multiple Read calls |
codegraph_context(task) |
Related code in one call |
| Manual file tracing | codegraph_callers/callees |
Call graph traversal |
| Guessing impact | codegraph_impact(symbol) |
Know what breaks |
Glob/find scanning |
codegraph_files(path) |
Indexed file structure |
This hybrid approach gives you ~30% fewer tokens and ~25% fewer tool calls while letting Claude's native agents handle synthesis.
CodeGraph can also be used as a library in your Node.js applications:
import CodeGraph from '@colbymchenry/codegraph';
// Initialize a new project
const cg = await CodeGraph.init('/path/to/project');
// Or open an existing one
const cg = await CodeGraph.open('/path/to/project');
// Index with progress callback
await cg.indexAll({
onProgress: (progress) => {
console.log(`${progress.phase}: ${progress.current}/${progress.total}`);
}
});
// Search for symbols
const results = cg.searchNodes('UserService');
// Get callers of a function
const node = results[0].node;
const callers = cg.getCallers(node.id);
// Build context for a task
const context = await cg.buildContext('fix login bug', {
maxNodes: 20,
includeCode: true,
format: 'markdown'
});
// Get impact radius
const impact = cg.getImpactRadius(node.id, 2);
// Sync changes
const syncResult = await cg.sync();
// Clean up
cg.close();
CodeGraph uses tree-sitter to parse source code into ASTs. Language-specific queries (.scm files) extract:
Each node gets a unique ID based on its kind, file path, name, and line number.
All data is stored in a local SQLite database (.codegraph/codegraph.db):
After extraction, CodeGraph resolves references:
CodeGraph uses local embeddings (via @xenova/transformers) to enable semantic search:
The graph structure enables powerful queries:
When you request context for a task:
The .codegraph/config.json file controls indexing behavior:
{
"version": 1,
"languages": ["typescript", "javascript"],
"exclude": [
"node_modules/**",
"dist/**",
"build/**",
"*.min.js"
],
"frameworks": [],
"maxFileSize": 1048576,
"extractDocstrings": true,
"trackCallSites": true,
"enableEmbeddings": false
}
| Option | Description | Default |
|---|---|---|
languages |
Languages to index (auto-detected if empty) | [] |
exclude |
Glob patterns to ignore | ["node_modules/**", ...] |
frameworks |
Framework hints for better resolution | [] |
maxFileSize |
Skip files larger than this (bytes) | 1048576 (1MB) |
extractDocstrings |
Whether to extract docstrings from code | true |
trackCallSites |
Whether to track call site locations | true |
enableEmbeddings |
Enable semantic search embeddings | false |
| Language | Extension | Status |
|---|---|---|
| TypeScript | .ts, .tsx |
Full support |
| JavaScript | .js, .jsx, .mjs |
Full support |
| Python | .py |
Full support |
| Go | .go |
Full support |
| Rust | .rs |
Full support |
| Java | .java |
Full support |
| C# | .cs |
Full support |
| PHP | .php |
Full support |
| Ruby | .rb |
Full support |
| C | .c, .h |
Full support |
| C++ | .cpp, .hpp, .cc |
Full support |
| Swift | .swift |
Basic support |
| Kotlin | .kt, .kts |
Basic support |
| Dart | .dart |
Full support |
| Svelte | .svelte |
Full support (script extraction, Svelte 5 runes, SvelteKit routes) |
| Liquid | .liquid |
Full support |
| Pascal / Delphi | .pas, .dpr, .dpk, .lpr |
Full support (classes, records, interfaces, enums, DFM/FMX form files) |
Run codegraph init in your project directory first.
node_modules or other large directories are excluded--quiet flag to reduce console output overheadmaxFileSize if you have large files to skipcodegraph serve --mcp works from the command linecodegraph sync to pick up recent changesCodeGraph collects anonymous error reports via Sentry to help diagnose and fix bugs. This is enabled by default in production environments (disabled in development/test).
What is collected:
What is NOT collected:
To opt out, set the environment variable before running CodeGraph:
export CODEGRAPH_TELEMETRY=off
MIT