CodeGraph使用指南

CodeGraph使用指南
salt-fish关于本笔记
本笔记用于沉淀 CodeGraph 的使用方法与适用场景,目标是把它当作 AI 编程助手的“代码地图”,而不是只记一组命令。
主要参考:
- 网络资料:
https://www.helpaio.com/guides/codegraph、https://juejin.cn/post/7641403640108007443#heading-4 - 官方仓库:https://github.com/colbymchenry/codegraph
- 官方文档:https://colbymchenry.github.io/codegraph/
目录
项目简介
CodeGraph 是一个面向 AI 编程助手的本地代码知识图谱工具。
它会提前把项目解析成可查询的结构化图谱:函数、类、变量、接口、导入关系、调用关系、继承关系、文件结构与部分框架路由关系,然后通过 CLI 与 MCP Server 暴露给 Claude Code、Cursor、Codex CLI、opencode 等 AI 工具。
一句话:让 AI 先查图谱,再读文件。
传统 AI 理解代码库时,经常会反复执行:
1 | glob -> grep -> read file -> 再 grep -> 再 read file |
CodeGraph 的思路是把这件事前置:
1 | 源码 -> Tree-sitter 解析 -> 符号/关系图谱 -> SQLite 本地数据库 -> MCP 查询工具 -> AI 助手 |
适合解决的问题:
- “这个函数在哪里定义?”
- “谁调用了这个接口?”
- “改这个 service 会影响哪些测试?”
- “这个路由背后走到哪个 handler?”
- “我接手一个大项目,先看哪里?”
工具特点
CodeGraph 的核心特点可以概括为五点:
- 本地优先:图谱保存在项目本地的
.codegraph/目录中,默认不依赖云端服务 - 结构化理解:关注符号、调用链、导入、继承、文件结构,而不是单纯文本搜索
- MCP 接入:可以作为 MCP Server 被 Claude Code、Cursor、Codex CLI、opencode 等工具调用
- 增量同步:通过文件监听和
sync机制让图谱跟随代码变化 - 查询成本低:让 AI 少做大范围文件扫描,减少工具调用和上下文浪费
它不是一个“替代 AI 的工具”,而是一个“给 AI 提供项目地图的工具”。
技术原理:
项目结构树
从公开资料与官方仓库信息看,CodeGraph 的能力可以理解为以下结构:
1 | codegraph/ |
注意:上面的结构树是理解模型,不是要求用户逐目录操作。日常只需要关心 CLI 命令、
.codegraph/config.json和 MCP 是否连通。
安装与初始化
方式一:一键安装脚本
macOS / Linux:
1 | curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh |
Windows PowerShell:
1 | irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex |
安装器会把 codegraph 放到 PATH 上。安装后如果当前终端识别不到命令,重新打开一个终端再试。
方式二:已有 Node 环境
1 | npm i -g @colbymchenry/codegraph |
也可以直接运行交互式安装器:
1 | npx @colbymchenry/codegraph |
配置 AI Agent
1 | codegraph install |
codegraph install 会自动检测并配置已安装的 AI 编程工具,例如 Claude Code、Cursor、Codex CLI、OpenCode、Gemini CLI 等。
非交互模式适合脚本或 CI:
1 | codegraph install --yes |
初始化项目
进入目标项目根目录:
1 | cd your-project |
init 会创建 .codegraph/ 目录;-i 或 --index 会在初始化后立即构建初始图谱。没有使用 -i 时,可以再执行:
1 | codegraph index |
验证安装
1 | codegraph status |
如果 AI 工具里看不到 CodeGraph MCP 工具,优先检查:
codegraph是否在PATH上- 当前项目是否执行过
codegraph init -i - AI 工具是否已重启
- MCP 配置中的命令是否为
codegraph serve --mcp
配置文件说明(重点)
项目级配置通常位于:
1 | .codegraph/config.json |
一个典型配置可以这样理解:
1 | { |
建议重点关注:
languages:只索引项目真正使用的语言,减少噪音exclude:一定排除node_modules/、dist/、build/、生成代码和压缩文件maxFileSize:避免超大文件拖慢索引extractDocstrings:需要文档注释上下文时开启trackCallSites:需要调用关系与影响分析时开启
MCP 工具与使用方式
CodeGraph 的价值主要通过 MCP 工具释放。常见工具可以按场景理解:
| 工具 | 用途 | 适合问题 |
|---|---|---|
codegraph_search |
搜索符号 | “UserService 在哪?” |
codegraph_explore |
综合探索入口 | “认证模块怎么运转?” |
codegraph_callers |
查调用者 | “谁调用了 createUser?” |
codegraph_callees |
查被调用者 | “checkout 内部调用了什么?” |
codegraph_impact |
影响分析 | “改这个函数会影响哪里?” |
codegraph_node |
查看节点详情 | “这个符号的定义和关系是什么?” |
codegraph_status |
查看图谱状态 | “索引是不是健康?” |
codegraph_files |
查看文件结构 | “项目大概有哪些模块?” |
使用原则:先结构查询,再局部读文件。
不要把 CodeGraph 当成万能问答机。它擅长回答结构问题,不擅长直接判断复杂业务语义。
推荐提示词:
1 | 先使用 CodeGraph 查询项目结构、符号定义、调用关系和影响范围; |
推荐工作流
- 新接手项目:
codegraph init -i->codegraph status-> 让 AI 用codegraph_files和codegraph_explore建立全局地图 - 找功能入口:先
codegraph_search找符号,再codegraph_callers/codegraph_callees看上下游 - 改代码前:用
codegraph_impact看影响半径,避免只改入口不看调用方 - 改代码后:等待文件监听同步,或手动执行
codegraph sync - 提交前:结合
codegraph affected推导可能受影响的测试范围
使用案例
案例 1:定位认证逻辑
问题:
1 | 这个项目的用户认证逻辑在哪里? |
低效做法:让 AI 全项目 grep auth、login、token,再读大量文件。
推荐做法:
1 | 请先用 CodeGraph 搜索 auth/login/token/session 相关符号, |
这样可以把“找文件”变成“查图谱”。
案例 2:改函数前看影响面
问题:
1 | 我要修改 calculatePrice,会影响哪些模块和测试? |
推荐做法:
1 | 请用 codegraph_impact 分析 calculatePrice 的调用方、下游依赖和测试覆盖, |
适合重构、改公共工具函数、改 service 层接口前使用。
案例 3:让 CI 只跑相关测试
1 | git diff –name-only HEAD | codegraph affected --stdin | xargs <language-specific-test-runner> |
这个思路不是替代完整 CI,而是在本地开发或大仓库中减少无意义的全量测试。
- git diff –name-only HEAD
列出当前工作目录与最新提交(HEAD)之间有差异的文件名
–name-only:只显示文件路径,不显示差异内容
输出示例:
1 | src/components/Button.tsx |
- codegraph affected –stdin
codegraph:代码依赖图分析工具(可能是内部工具或第三方库)
affected –stdin:从标准输入读取变更文件列表,分析受这些变更影响的文件(依赖传播分析)
输出受影响的文件(包括直接修改和间接依赖的文件)
- xargs
xargs:将上一步输出的文件列表作为参数传递给后续命令
各语言的具体实现
| 语言 | 测试框架 | 替换命令 | 示例 |
|---|---|---|---|
| Python | pytest | pytest |
git diff --name-only HEAD | codegraph affected --stdin | xargs pytest |
| Java | Maven (JUnit) | mvn test -Dtest=... |
需要脚本处理文件列表转换 |
| Java | Gradle (JUnit) | gradle test --tests ... |
需要脚本处理文件列表转换 |
| TypeScript/JS | Vitest/Jest | npx vitest run |
原命令已支持 |
| Go | go test | go test |
... | xargs go test |
| Rust | cargo test | cargo test --test |
... | xargs cargo test --test |
各语言完整命令示例
Python (pytest)
1 | # 基础版 |
配套工具:pytest-git-selector 是专门为此设计的 pytest 插件,可直接用 pytest --git-diff-args main... 实现类似效果。
Java (Maven + JUnit)
1 | # 需要转换文件路径 → 测试类名 |
Java (Gradle)
1 | git diff --name-only HEAD | codegraph affected --stdin | \ |
Go
1 | # Go 的测试文件通常命名为 *_test.go |
Rust
1 | # 需要提取测试模块名 |
核心结论:只需替换 xargs 后面的测试命令,codegraph 的 affected 功能可以跨语言使用,因为它基于抽象语法树(tree-sitter)进行依赖分析,与最终运行测试的工具无关。
刷新机制与维护
CodeGraph 的图谱不是一次性产物,需要保持更新。
三层刷新机制
| 场景 | 推荐方式 | 说明 |
|---|---|---|
| 第一次使用 | codegraph init -i |
初始化并建立初始图谱 |
| 日常开发 | 文件监听增量更新 | 保存文件后等待几秒再查 |
| 怀疑图谱过期 | codegraph sync 或 codegraph index --force |
前者增量,后者全量重建 |
日常维护命令
1 | codegraph status |
建议把 .codegraph/ 当作本地索引目录处理:
- 不提交数据库文件
- 不把它当作知识库源文件
- 不在不同机器之间强行同步
- 项目迁移后重新
codegraph init -i
与其它工具的对比与选择
CodeGraph vs grep / rg
| 维度 | CodeGraph | grep / rg |
|---|---|---|
| 查询对象 | 符号和关系 | 文本 |
| 优势 | 调用链、影响面、结构导航 | 快速字符串搜索 |
| 局限 | 依赖索引质量 | 不理解结构 |
| 适合 | 大项目、AI 上下文构建 | 小范围精确文本查找 |
选择建议:找“名字文本”用 rg,找“结构关系”用 CodeGraph。
CodeGraph vs ast-grep
| 维度 | CodeGraph | ast-grep |
|---|---|---|
| 核心能力 | 预索引代码图谱 | AST 模式匹配与批量改写 |
| 使用方式 | MCP / CLI 查询 | 规则搜索 / 重写 |
| 适合 | 理解项目结构、影响分析 | 精确查找语法模式、重构替换 |
选择建议:理解代码时先 CodeGraph,批量改代码时用 ast-grep。
CodeGraph vs Sourcegraph
| 维度 | CodeGraph | Sourcegraph |
|---|---|---|
| 部署 | 本地轻量 | 服务端/企业级平台 |
| 重点 | AI Agent 查询图谱 | 代码搜索、导航、企业协作 |
| 成本 | 本地工具成本低 | 更适合组织级代码平台 |
| 适合 | 个人/小团队 AI 编程提效 | 多仓库、大组织代码检索治理 |
CodeGraph vs repomix
| 维度 | CodeGraph | repomix |
|---|---|---|
| 核心思路 | 建图后按需查询 | 把仓库打包成 LLM 友好的文本 |
| 上下文策略 | 查询式、增量式 | 打包式、快照式 |
| 适合 | 持续开发中的项目 | 一次性把仓库交给模型分析 |
选择建议:持续开发用 CodeGraph;需要把仓库快照发给模型或他人时用 repomix。
CodeGraph vs ctags / cscope
| 维度 | CodeGraph | ctags / cscope |
|---|---|---|
| 面向对象 | AI Agent + 开发者 | 开发者导航 |
| 能力 | MCP、图谱、影响分析 | 跳定义、查引用、调用关系 |
| 现代集成 | Claude/Cursor/Codex 等 | 编辑器/终端工作流 |
选择建议:传统编辑器导航继续用 ctags/cscope;AI 代理工作流优先 CodeGraph。
CodeGraph vs Cursor / Claude Code 自带索引
| 维度 | CodeGraph | AI 工具自带索引 |
|---|---|---|
| 可迁移性 | 多工具共享 | 通常绑定某个产品 |
| 可控性 | 本地目录与配置可见 | 细节较黑盒 |
| 查询方式 | MCP 工具显式调用 | 产品内部自动调度 |
| 适合 | 想统一多 Agent 工作流 | 单一产品内的默认体验 |
选择建议:如果你长期只用一个 IDE,内置索引可能够用;如果你在 Claude Code、Cursor、Codex CLI、opencode 之间切换,CodeGraph 更适合做统一底座。
常见误区与修正
误区 1:装了 CLI 就等于 AI 会自动使用。
修正:安装 CLI 只是第一步,还要 codegraph install 写入 MCP 配置,并重启 AI 工具。
误区 2:项目没初始化就开始问。
修正:每个项目都需要执行一次 codegraph init -i。
误区 3:把 .codegraph/ 当成需要提交的源码。
修正:它是本地索引目录,通常应加入 .gitignore。
误区 4:让 CodeGraph 回答所有业务语义问题。
修正:CodeGraph 负责结构定位;业务语义仍需要 AI 结合源代码、测试、文档判断。
误区 5:索引范围过大。
修正:排除 node_modules/、构建产物、生成代码、压缩文件和日志目录。
我的最小实践模板
可复制到每个准备使用 AI 深度开发的项目:
1 | CodeGraph 初始化清单: |

