|
|
5 месяцев назад | |
|---|---|---|
| __tests__ | 5 месяцев назад | |
| src | 5 месяцев назад | |
| .gitignore | 5 месяцев назад | |
| CLAUDE.md | 5 месяцев назад | |
| IMPLEMENTATION_PLAN.md | 5 месяцев назад | |
| README.md | 5 месяцев назад | |
| package-lock.json | 5 месяцев назад | |
| package.json | 5 месяцев назад | |
| tsconfig.json | 5 месяцев назад | |
| vitest.config.ts | 5 месяцев назад |
Without CodeGraph, Claude Code spawns expensive exploration agents that make dozens of API calls to understand your codebase. CodeGraph changes that.
| ### ❌ Without CodeGraph ``` Exploring codebase... ↳ 21 tool calls ↳ 37,700 tokens consumed ↳ 70 seconds ↳ ~$0.50-2.00 per exploration ``` | ### ✅ With CodeGraph ``` Building context... ↳ 1-3 tool calls ↳ Local MCP (0 tokens) ↳ 35 seconds ↳ $0.00 for exploration ``` |
| Metric | Without CodeGraph | With CodeGraph | Improvement |
|---|---|---|---|
| Speed | 70s | 35s | 2x faster |
| Tokens per task | ~40,000 | ~0 (local) | 40,000 saved |
| Cost per exploration | $0.50-2.00 | $0.00 | Free |
| ### 🧠 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. |
| ### 🌍 15+ Languages TypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Swift, Kotlin—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 Git hooks automatically sync the index on every commit. Your code intelligence is always up to date. |
npm install -g @colbymchenry/codegraph
Add to your ~/.claude.json in the mcpServers section:
{
"mcpServers": {
"codegraph": {
"type": "stdio",
"command": "codegraph",
"args": ["serve", "--mcp"]
}
}
}
Create or append to ~/.claude/CLAUDE.md:
## CodeGraph
CodeGraph builds a semantic knowledge graph of codebases for better code exploration.
### If `.codegraph/` exists in the project
Use the codegraph MCP tools instead of manually searching:
- `codegraph_search` - Find symbols by name
- `codegraph_context` - Get context for a task/issue
- `codegraph_callers` - Find what calls a function
- `codegraph_callees` - Find what a function calls
- `codegraph_impact` - See what's affected by changing a symbol
- `codegraph_node` - Get details about a specific symbol
- `codegraph_status` - Check index status
Use these tools when:
- Exploring unfamiliar code
- Finding where a function is used
- Understanding dependencies before making changes
- Building context for bug fixes or features
The index auto-updates via git post-commit hook, so no manual sync needed.
### If `.codegraph/` does NOT exist
At the start of a session, ask the user if they'd like to initialize CodeGraph for better code intelligence:
"I notice this project doesn't have CodeGraph initialized. Would you like me to run `codegraph init -i` to build a code knowledge graph? This enables smarter code exploration, caller/callee analysis, and impact detection."
If they agree, run:
codegraph init -i
cd your-project
codegraph init -i # Initialize and index
Restart Claude Code for the MCP server to load. The tools will be available in any project with a .codegraph/ directory.
codegraph init [path] # Initialize in a project
codegraph index [path] # Full index
codegraph sync [path] # Incremental update
codegraph status [path] # Show statistics
codegraph query <search> # Search symbols
codegraph context <task> # Build context for AI
codegraph hooks install # Install git auto-sync hook
codegraph serve --mcp # Start MCP server
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 init --no-hooks # Skip git hook installation
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 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 hooksManage git hooks for automatic syncing.
codegraph hooks install # Install post-commit hook
codegraph hooks remove # Remove hook
codegraph hooks status # Check if hook is installed
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
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();
npm test # Run all tests
npm run test:watch # Run tests in watch mode
npm run build # Compile TypeScript and copy assets
npm run clean # Remove build artifacts
codegraph/
├── src/
│ ├── index.ts # Main CodeGraph class
│ ├── types.ts # TypeScript interfaces
│ ├── config.ts # Configuration handling
│ ├── directory.ts # .codegraph/ management
│ ├── errors.ts # Custom error classes
│ ├── utils.ts # Utilities (Mutex, batching, etc.)
│ │
│ ├── bin/
│ │ └── codegraph.ts # CLI entry point
│ │
│ ├── db/
│ │ ├── index.ts # Database connection
│ │ ├── schema.sql # SQLite schema
│ │ ├── migrations.ts # Schema versioning
│ │ └── queries.ts # Prepared statements
│ │
│ ├── extraction/
│ │ ├── index.ts # Extraction orchestrator
│ │ ├── tree-sitter.ts # Parser wrapper
│ │ ├── grammars.ts # Grammar loading
│ │ └── queries/ # Tree-sitter queries (.scm)
│ │
│ ├── resolution/
│ │ ├── index.ts # Reference resolver
│ │ └── frameworks/ # Framework-specific patterns
│ │
│ ├── graph/
│ │ ├── index.ts # Graph query interface
│ │ ├── traversal.ts # BFS/DFS, impact radius
│ │ └── queries.ts # Graph queries
│ │
│ ├── vectors/
│ │ ├── index.ts # Vector operations
│ │ └── search.ts # Similarity search
│ │
│ ├── sync/
│ │ ├── index.ts # Sync orchestrator
│ │ └── git-hooks.ts # Hook installation
│ │
│ ├── context/
│ │ ├── index.ts # Context builder
│ │ └── formatter.ts # Output formatting
│ │
│ └── mcp/
│ ├── index.ts # MCP server
│ ├── transport.ts # Stdio transport
│ └── tools.ts # Tool definitions
│
└── __tests__/ # Test files
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,
"projectName": "my-project",
"languages": ["typescript", "javascript"],
"exclude": [
"node_modules/**",
"dist/**",
"build/**",
"*.min.js"
],
"frameworks": ["express", "react"],
"maxFileSize": 1048576,
"gitHooksEnabled": true
}
| 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) |
gitHooksEnabled |
Enable git hook installation | true |
| 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 |
Basic support |
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 changesMIT