@GitHub_Daily: 用 Claude Code 开发项目,代码库一大,每次探索代码结构都要扫一堆文件,工具调用多、速度慢,token 也跟着烧。 于是找到 CodeGraph 这个开源工具,给代码库预建一张语义知识图谱,让 Claude Code 直接查图而…

X AI KOLs Timeline 工具

摘要

CodeGraph 是一个开源工具,为代码库预建语义知识图谱,让 Claude Code 直接查图而不是逐文件扫描,从而大幅减少工具调用次数(减少 92%)并提升探索速度(提升 71%),支持 19 种编程语言和 13 个框架。

用 Claude Code 开发项目,代码库一大,每次探索代码结构都要扫一堆文件,工具调用多、速度慢,token 也跟着烧。 于是找到 CodeGraph 这个开源工具,给代码库预建一张语义知识图谱,让 Claude Code 直接查图而不是逐文件扫描。 效果颇为明显,工具调用减少 92%,探索速度提升 71%,像 VS Code 这种大型项目也能在十几秒内完成代码溯源。 GitHub:http://github.com/colbymchenry/codegraph… 它能自动识别函数调用链、类继承、模块引用等关系,还能在修改代码前分析影响范围,避免改一处坏一片。 支持 19 种编程语言,还能识别 Django、Express、Spring 等 13 个框架的路由映射。 所有数据存在本地,不需要任何外部服务。一条命令安装,文件保存后自动同步图谱,基本不用额外操心。 如果你的项目代码量不小,又经常用 Claude Code 做代码探索和重构,装上能省不少时间和 token。
查看原文
查看缓存全文

缓存时间: 2026/05/14 16:40

用 Claude Code 开发项目,代码库一大,每次探索代码结构都要扫一堆文件,工具调用多、速度慢,token 也跟着烧。 于是找到 CodeGraph 这个开源工具,给代码库预建一张语义知识图谱,让 Claude Code 直接查图而不是逐文件扫描。 效果颇为明显,工具调用减少 92%,探索速度提升 71%,像 VS Code 这种大型项目也能在十几秒内完成代码溯源。 GitHub:http://github.com/colbymchenry/codegraph… 它能自动识别函数调用链、类继承、模块引用等关系,还能在修改代码前分析影响范围,避免改一处坏一片。 支持 19 种编程语言,还能识别 Django、Express、Spring 等 13 个框架的路由映射。 所有数据存在本地,不需要任何外部服务。一条命令安装,文件保存后自动同步图谱,基本不用额外操心。 如果你的项目代码量不小,又经常用 Claude Code 做代码探索和重构,装上能省不少时间和 token。


colbymchenry/codegraph

Source: https://github.com/colbymchenry/codegraph

CodeGraph

Supercharge Claude Code with Semantic Code Intelligence

94% fewer tool calls · 77% faster exploration · 100% local

npm version License: MIT Node.js

Windows macOS Linux


Get Started

npx @colbymchenry/codegraph

Interactive installer configures Claude Code automatically

Initialize Projects

cd your-project
codegraph init -i

1_C_VYnhpys0UHrOuOgpgoyw


Why CodeGraph?

When Claude Code explores a codebase, it spawns Explore agents that scan files with grep, glob, and Read — consuming tokens on every tool call.

CodeGraph gives those agents a pre-indexed knowledge graph — symbol relationships, call graphs, and code structure. Agents query the graph instantly instead of scanning files.

Benchmark Results

Tested across 6 real-world codebases comparing Claude Code’s Explore agent with and without CodeGraph:

Average: 92% fewer tool calls · 71% faster

CodebaseWith CGWithout CGImprovement
VS Code · TypeScript3 calls, 17s52 calls, 1m 37s94% fewer · 82% faster
Excalidraw · TypeScript3 calls, 29s47 calls, 1m 45s94% fewer · 72% faster
Claude Code · Python + Rust3 calls, 39s40 calls, 1m 8s93% fewer · 43% faster
Claude Code · Java1 call, 19s26 calls, 1m 22s96% fewer · 77% faster
Alamofire · Swift3 calls, 22s32 calls, 1m 39s91% fewer · 78% faster
Swift Compiler · Swift/C++6 calls, 35s37 calls, 2m 8s84% fewer · 73% faster
Full benchmark details

All tests used Claude Opus 4.6 (1M context) with Claude Code v2.1.91. Each test spawned a single Explore agent with the same question.

Queries used:

CodebaseQuery
VS Code“How does the extension host communicate with the main process?”
Excalidraw“How does collaborative editing and real-time sync work?”
Claude Code (Python+Rust)“How does tool execution work end to end?”
Claude Code (Java)“How does tool execution work end to end?”
Alamofire“Trace how a request flows from Session.request() through to the URLSession layer”
Swift Compiler“How does the Swift compiler handle error diagnostics?”

With CodeGraph — the agent uses codegraph_explore and stops:

CodebaseFiles IndexedNodesTool UsesTokensTimeFile Reads
VS Code (TypeScript)4,00259,377356.6k17s0
Excalidraw (TypeScript)6269,859357.1k29s0
Claude Code (Python+Rust)1153,080367.1k39s0
Claude Code (Java)140.8k19s0
Alamofire (Swift)1022,624357.3k22s0
Swift Compiler (Swift/C++)25,874272,898677.4k35s0

Without CodeGraph — the agent uses grep, find, ls, and Read extensively:

CodebaseTool UsesTokensTimeFile Reads
VS Code (TypeScript)5289.4k1m 37s~15
Excalidraw (TypeScript)4777.9k1m 45s~20
Claude Code (Python+Rust)4069.3k1m 8s~15
Claude Code (Java)2673.3k1m 22s~15
Alamofire (Swift)3252.4k1m 39s~10
Swift Compiler (Swift/C++)3799.1k2m 8s~20

Key observations:

  • With CodeGraph, the agent never fell back to reading files — it trusted the codegraph_explore results completely
  • Without CodeGraph, agents spent most of their time on discovery (find, ls, grep) before they could even start reading relevant code
  • The Java codebase needed only 1 codegraph_explore call to answer the entire question
  • Cross-language queries (Python+Rust) worked seamlessly — CodeGraph’s graph traversal found connections across language boundaries
  • The Swift benchmark (Alamofire) traced a 9-step call chain from Session.request() to URLSession.dataTask() — CodeGraph’s graph traversal at depth 3 captured the full chain in one explore call
  • The Swift Compiler benchmark is the largest codebase tested (25,874 files, 272,898 nodes) — CodeGraph indexed it in under 4 minutes and the agent answered a complex cross-cutting question with 6 explore calls and zero file reads in 35 seconds

Key Features

Smart Context BuildingOne tool call returns entry points, related symbols, and code snippets — no expensive exploration agents
Full-Text SearchFind code by name instantly across your entire codebase, powered by FTS5
Impact AnalysisTrace callers, callees, and the full impact radius of any symbol before making changes
Always FreshFile watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config
19+ LanguagesTypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Swift, Kotlin, Dart, Svelte, Liquid, Pascal/Delphi
Framework-aware RoutesRecognizes web-framework routing files and links URL patterns to their handlers across 13 frameworks
100% LocalNo data leaves your machine. No API keys. No external services. SQLite database only

Framework-aware Routes

CodeGraph detects web-framework routing files and emits route nodes linked by references edges to their handler classes or functions. Querying callers of a view/controller now surfaces the URL pattern that binds it.

FrameworkShapes recognized
Djangopath(), re_path(), url(), include() in urls.py (CBV .as_view(), dotted paths)
Flask@app.route('/path', methods=[...]), blueprint routes
FastAPI@app.get(...), @router.post(...), all standard methods
Expressapp.get(...), router.post(...) with middleware chains
LaravelRoute::get(), Route::resource(), Controller@action, tuple syntax
Railsget '/x', to: 'users#index', hash-rocket => syntax
Spring@GetMapping, @PostMapping, @RequestMapping on methods
Gin / chi / gorilla / muxr.GET(...), router.HandleFunc(...)
Axum / actix / Rocket.route("/x", get(handler))
ASP.NET[HttpGet("/x")] attributes on action methods
Vaporapp.get("x", use: handler)
React Router / SvelteKitRoute component nodes

Quick Start

1. Run the Installer

npx @colbymchenry/codegraph

The installer will:

  • Prompt to install codegraph globally (needed for the MCP server)
  • Configure the MCP server in ~/.claude.json
  • Set up auto-allow permissions for CodeGraph tools
  • Add global instructions to ~/.claude/CLAUDE.md
  • Optionally initialize your current project

2. Restart Claude Code

Restart Claude Code for the MCP server to load.

3. Initialize Projects

cd your-project
codegraph init -i

That’s it! Claude Code will use CodeGraph tools automatically when a .codegraph/ directory exists.

Manual Setup (Alternative)

Install globally:

npm install -g @colbymchenry/codegraph

Add to ~/.claude.json:

{
  "mcpServers": {
    "codegraph": {
      "type": "stdio",
      "command": "codegraph",
      "args": ["serve", "--mcp"]
    }
  }
}

Add to ~/.claude/settings.json (optional, for auto-allow):

{
  "permissions": {
    "allow": [
      "mcp__codegraph__codegraph_search",
      "mcp__codegraph__codegraph_context",
      "mcp__codegraph__codegraph_callers",
      "mcp__codegraph__codegraph_callees",
      "mcp__codegraph__codegraph_impact",
      "mcp__codegraph__codegraph_node",
      "mcp__codegraph__codegraph_status",
      "mcp__codegraph__codegraph_files"
    ]
  }
}
Global Instructions Reference

The installer automatically adds these instructions to ~/.claude/CLAUDE.md:

## CodeGraph

CodeGraph builds a semantic knowledge graph of codebases for faster, smarter code exploration.

### If `.codegraph/` exists in the project

**NEVER call `codegraph_explore` or `codegraph_context` directly in the main session.** These tools return large amounts of source code that fills up main session context. Instead, ALWAYS spawn an Explore agent for any exploration question (e.g., "how does X work?", "explain the Y system", "where is Z implemented?").

**When spawning Explore agents**, include this instruction in the prompt:

> This project has CodeGraph initialized (.codegraph/ exists). Use `codegraph_explore` as your PRIMARY tool — it returns full source code sections from all relevant files in one call.
>
> **Rules:**
> 1. Follow the explore call budget in the `codegraph_explore` tool description — it scales automatically based on project size.
> 2. Do NOT re-read files that codegraph_explore already returned source code for. The source sections are complete and authoritative.
> 3. Only fall back to grep/glob/read for files listed under "Additional relevant files" if you need more detail, or if codegraph returned no results.

**The main session may only use these lightweight tools directly** (for targeted lookups before making edits, not for exploration):

| Tool | Use For |
|------|---------|
| `codegraph_search` | Find symbols by name |
| `codegraph_callers` / `codegraph_callees` | Trace call flow |
| `codegraph_impact` | Check what's affected before editing |
| `codegraph_node` | Get a single symbol's details |

### If `.codegraph/` does NOT exist

At the start of a session, ask the user if they'd like to initialize CodeGraph:

"I notice this project doesn't have CodeGraph initialized. Would you like me to run `codegraph init -i` to build a code knowledge graph?"

How It Works

┌─────────────────────────────────────────────────────────────────┐
│                        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   │                            │
│              └───────────────────────┘                            │
└───────────────────────────────────────────────────────────────────┘
  1. Extractiontree-sitter parses source code into ASTs. Language-specific queries extract nodes (functions, classes, methods) and edges (calls, imports, extends, implements).

  2. Storage — Everything goes into a local SQLite database (.codegraph/codegraph.db) with FTS5 full-text search.

  3. Resolution — After extraction, references are resolved: function calls → definitions, imports → source files, class inheritance, and framework-specific patterns.

  4. Auto-Sync — The MCP server watches your project using native OS file events. Changes are debounced (2-second quiet window), filtered to source files only, and incrementally synced. The graph stays fresh as you code — no configuration needed.


CLI Reference

codegraph                         # Run interactive installer
codegraph install                 # Run installer (explicit)
codegraph init [path]             # Initialize in a project (--index to also index)
codegraph uninit [path]           # Remove CodeGraph from a project (--force to skip prompt)
codegraph index [path]            # Full index (--force to re-index, --quiet for less output)
codegraph sync [path]             # Incremental update
codegraph status [path]           # Show statistics
codegraph query <search>          # Search symbols (--kind, --limit, --json)
codegraph files [path]            # Show file structure (--format, --filter, --max-depth, --json)
codegraph context <task>          # Build context for AI (--format, --max-nodes)
codegraph affected [files...]     # Find test files affected by changes (see below)
codegraph serve --mcp             # Start MCP server

codegraph affected

Traces import dependencies transitively to find which test files are affected by changed source files.

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 src/auth.ts --filter "e2e/*"     # Custom test file pattern
OptionDescriptionDefault
--stdinRead file list from stdinfalse
-d, --depth <n>Max dependency traversal depth5
-f, --filter <glob>Custom glob to identify test filesauto-detect
-j, --jsonOutput as JSONfalse
-q, --quietOutput file paths onlyfalse

CI/hook example:

#!/usr/bin/env bash
AFFECTED=$(git diff --name-only HEAD | codegraph affected --stdin --quiet)
if [ -n "$AFFECTED" ]; then
  npx vitest run $AFFECTED
fi

MCP Tools

When running as an MCP server, CodeGraph exposes these tools to Claude Code:

ToolPurpose
codegraph_searchFind symbols by name across the codebase
codegraph_contextBuild relevant code context for a task
codegraph_callersFind what calls a function
codegraph_calleesFind what a function calls
codegraph_impactAnalyze what code is affected by changing a symbol
codegraph_nodeGet details about a specific symbol (optionally with source code)
codegraph_filesGet indexed file structure (faster than filesystem scanning)
codegraph_statusCheck index health and statistics

Library Usage

import CodeGraph from '@colbymchenry/codegraph';

const cg = await CodeGraph.init('/path/to/project');
// Or: const cg = await CodeGraph.open('/path/to/project');

await cg.indexAll({
  onProgress: (p) => console.log(`${p.phase}: ${p.current}/${p.total}`)
});

const results = cg.searchNodes('UserService');
const callers = cg.getCallers(results[0].node.id);
const context = await cg.buildContext('fix login bug', { maxNodes: 20, includeCode: true, format: 'markdown' });
const impact = cg.getImpactRadius(results[0].node.id, 2);

cg.watch();   // auto-sync on file changes
cg.unwatch(); // stop watching
cg.close();

Configuration

The .codegraph/config.json file controls indexing:

{
  "version": 1,
  "languages": ["typescript", "javascript"],
  "exclude": ["node_modules/**", "dist/**", "build/**", "*.min.js"],
  "frameworks": [],
  "maxFileSize": 1048576,
  "extractDocstrings": true,
  "trackCallSites": true
}
OptionDescriptionDefault
languagesLanguages to index (auto-detected if empty)[]
excludeGlob patterns to ignore["node_modules/**", ...]
frameworksFramework hints for better resolution[]
maxFileSizeSkip files larger than this (bytes)1048576 (1MB)
extractDocstringsExtract docstrings from codetrue
trackCallSitesTrack call site locationstrue

Supported Languages

LanguageExtensionStatus
TypeScript.ts, .tsxFull support
JavaScript.js, .jsx, .mjsFull support
Python.pyFull support
Go.goFull support
Rust.rsFull support
Java.javaFull support
C#.csFull support
PHP.phpFull support
Ruby.rbFull support
C.c, .hFull support
C++.cpp, .hpp, .ccFull support
Swift.swiftFull support
Kotlin.kt, .ktsFull support
Scala.scala, .scFull support (classes, traits, methods, type aliases, Scala 3 enums)
Dart.dartFull support
Svelte.svelteFull support (script extraction, Svelte 5 runes, SvelteKit routes)
Vue.vueFull support (script + script-setup extraction, Nuxt page/API/middleware routes)
Liquid.liquidFull support
Pascal / Delphi.pas, .dpr, .dpk, .lprFull support (classes, records, interfaces, enums, DFM/FMX form files)

Troubleshooting

“CodeGraph not initialized” — Run codegraph init in your project directory first.

Indexing is slow — Check that node_modules and other large directories are excluded. Use --quiet to reduce output overhead.

Indexing is slow / MCP database is locked / WASM fallback activecodegraph ships with a WASM SQLite fallback for environments where better-sqlite3 (a native module, declared as optionalDependencies) can’t install. The fallback is 5-10x slower than the native backend and uses a journal mode that lets writers block readers, so MCP queries can also hit database is locked while indexing runs. Run codegraph status and look at the Backend: line:

  • Backend: native — you’re on the fast path, nothing to do.

  • Backend: wasm — you’re on the slow fallback. Common causes: missing C build tools, prebuilt binary unavailable for your Node version, or your Node version changed after install. Fix:

    # macOS
    xcode-select --install                                  # installs the C compiler
    
    # Linux (Debian / Ubuntu)
    sudo apt install build-essential python3 make
    
    # Linux (RHEL / Fedora)
    sudo yum groupinstall "Development Tools"
    
    # Then rebuild on any platform:
    npm rebuild better-sqlite3
    
    # Or force-include as a hard dep:
    npm install better-sqlite3 --save
    

    After the fix, codegraph status should show Backend: native.

MCP server not connecting — Ensure the project is initialized/indexed, verify the path in your MCP config, and check that codegraph serve --mcp works from the command line.

Missing symbols — The MCP server auto-syncs on save (wait a couple seconds). Run codegraph sync manually if needed. Check that the file’s language is supported and isn’t excluded by config patterns.

License

MIT


Made for the Claude Code community

Report Bug · Request Feature

相似文章

@GitHub_Daily: 刚接手一个新项目,面对几十万行代码,光是理清文件之间的调用关系和整体架构,就得花上好几天,效率很低。 于是找到 Understand Anything 这个开源项目,把整个代码库生成一张可交互的知识图谱,直观地看清每个模块之间的关系。 通…

X AI KOLs Timeline

Understand Anything 是一个开源项目,通过多智能体流水线自动分析代码库,生成可交互的知识图谱,帮助开发者快速理清代码结构和模块关系,支持与 Claude Code、Cursor 等主流 AI 编程工具集成。

@Potatoloogs: 用 Claude Code、Cursor、Codex 理解大项目时,经常会遇到一个问题:每次提问,它都要重新读文件、找线索、拼上下文。 代码在 src,文档在 docs,设计说明、截图、论文、视频又散在别的目录里,资料很多,但关系没有沉淀…

X AI KOLs Timeline

Graphify 是一个面向 AI 编程助手的软件工程知识图谱工具,可以将代码、文档、图片等项目资料整理成可查询的关系图,帮助 AI 在理解大型项目时跳过反复读取文件的步骤。