🧭 gograph
别再为 grep 烧 token 了,给你的 AI Agent 一张调用图。
gograph 会为你的 Go 仓库构建一个本地、AST 感知的调用图,并通过 CLI 和 MCP 暴露 50+ 查询工具,让编码 Agent 无需读取原始文件,即可导航包、符号、调用链、路由、SQL、环境变量和测试。
零网络。零执行。零密钥读取。
gograph是纯静态分析 —— 它从不运行你的代码、发起 API 调用,也不会打开任何非.go文件。
🚀 快速开始
# 安装
brew install ozgurcd/tap/gograph
# 构建调用图
gograph build . --precise
# 试用一下 —— 谁调用了 ValidateToken?
gograph callers "ValidateToken"
# 一次调用获得完整上下文(节点 + 源码 + 调用方 + 被调用方 + 测试)
gograph context "ValidateToken"
# 编辑前的变更计划(调用方、测试、路由、SQL、环境风险)
gograph plan "ValidateToken"
💡 为什么选择 gograph?
基于 gograph 自身代码库的基准测试(70 个文件、518 个符号、16 个包):
| 任务 | grep -rn |
gograph |
节省效果 |
|---|---|---|---|
查找 loadGraph 的调用方 |
158 行噪声(注释、文档、变量) | 56 个精确的结构化调用点 | 减少约 65% 噪声 |
| 定位符号定义 | 842 行匹配 "Symbol" | 83 个真实的类型/方法声明 | 减少约 90% 噪声 |
| 读取单个函数体 | cat 转储整个文件 180+ 行 |
source 精确提取 12 行函数 |
减少约 93% token |
| 完整理解一个符号 | 4–5 次独立工具调用 | 1 次调用:context 打包所有内容 |
工具调用减少 80% |
✨ 主要特性
-
🔍 50+ 查询工具 ——
callers、callees、impact、context、plan、review、errorflow、orphans、hotspot、coupling等等。查看完整的命令参考 → -
🔌 原生 MCP 服务器 —— 所有工具都以 MCP 端点的形式提供,兼容 Claude、Cursor、Copilot 以及任何支持 MCP 的 Agent。一条命令完成配置:
gograph add-claude-plugin -
🪙 省 Token 的组合命令 ——
context可替代 5 次调用,plan可替代 8 次,explain可综合架构叙事。专为最大限度减少 Agent 往返而构建。 -
🛡️ 设计上安全 —— 无网络、无代码执行、无密钥、不读取
.env文件。AI 工作树目录(.claude/、.cursor/、.agents/)自动排除。 -
🏛️ 架构约束 —— 边界规则、API 漂移检测、复杂度门禁、死代码清扫、上帝对象检测、耦合分析。可通过
gograph gate在 CI 中运行。 -
📋 Agent 合规审计 —— 会话遥测会追踪 Agent 是否在编辑前运行
plan、编辑后运行review,并以 A–F 等级评估 Agent 行为,附带可操作的建议。
📖 命令参考
所有命令都支持 --json(机器可读输出)和 --files-only(扁平文件列表)。
| 分类 | 命令 | 功能说明 |
|---|---|---|
| 索引 | build . [--precise]、stale、stats |
解析 AST、写入调用图、检查新鲜度、索引健康度。 |
| 导航 | query、callers [--depth N]、callees [--depth N]、path、source、node |
查找符号、追踪调用链、提取源码。 |
| 上下文 | context、explain、focus、endpoint |
一次调用打包结构化数据。省 Token 利器。 |
| 变更分析 | plan、review、risk、impact [--uncommitted|--since]、changes [--git]、api --since |
编辑前规划、编辑后审查、风险分析、爆炸半径、漂移检测。 |
| 架构 | boundaries、coupling、complexity、godobj、orphans、arity |
质量门禁、死代码、耦合、上帝对象。 |
| 类型与结构体 | fields、implementers [--test-only]、interfaces、embeds、constructors、literals、usages、mutate、schema |
结构体字段、接口实现、类型使用。 |
| 基础设施 | routes、sql、envs、errors、concurrency、globals、httpcalls、deps [--transitive]、dependents、imports |
HTTP 路由、SQL、环境变量、并发、出站 HTTP 调用、导入。 |
| 测试 | tests、fixtures、mocks |
测试覆盖映射、辅助函数、Mock 实现。 |
| 错误追踪 | errorflow [--no-tests]、trace |
从错误字符串到 HTTP 入口点的反向 BFS。 |
| 诊断 | hotspot、returnusage、skeleton、diagram、changes、public |
热点、返回值用法、API 签名、Mermaid 图表。 |
| CI/CD | check [--since|--uncommitted]、gate、snapshot save|diff|list|drop |
策略检查、阈值强制、指标快照。 |
| 遥测 | session create|end|audit|cleanup |
Agent 合规追踪与评级(A–F)。 |
| LLM-Wiki | wiki [--output dir] |
生成 llm-wiki/ —— 面向机器的 markdown 页面,零成本完成 Agent 定向(概览、架构、热点、路由、环境变量、错误、并发、逐包文档、API 表面)。 |
| 摘要 | summary [--json] |
单次调用的代码库简报:Top 3 热点、最不稳定包、最高复杂度函数、孤立符号数、上帝对象数。替代 5 次独立调用。 |
| 未测试 | untested [--pkg name] [--top N] [--json] |
有调用方但无测试边的函数 —— 这类覆盖缺口在孤立符号或逐符号测试查询中不可见。一次扫描替代 N 次 tests <sym> 调用。 |
| 文档 | doc <pkg[.Symbol]> [--json] |
go doc 的封装 —— 为任何标准库或第三方符号输出签名 + 文档注释。无需调用图。补齐调用链离开项目时的空缺。 |
带示例的完整命令参考:gograph.identuum.ai/docs/command-reference
架构边界约束
在 .gograph/boundaries.json 中定义边界:
{
"layers": [
{ "name": "domain", "packages": ["internal/domain/**"], "may_import": [] },
{ "name": "handler", "packages": ["internal/handler/**"], "may_import": ["internal/service/**", "internal/domain/**"] }
]
}
运行 gograph boundaries —— 一旦违反即退出码 1。适用于 CI/CD。
🤖 AI Agent 集成
一条命令完成配置(Claude Desktop + Claude Code):
gograph add-claude-plugin
它会注册 MCP 服务器、注入 CLAUDE.md 引导规则,并安装一个 PreToolUse 钩子,将对 Go 符号的 grep 重定向到 gograph 工具。
替代方案 —— 通过 Claude Code 插件市场安装:
/plugin marketplace add ozgurcd/gograph
/plugin install gograph@gograph
通过 Claude Code 的插件市场发现 gograph,并附带一个在 Go 工作中自动激活的 SKILL.md,教导 Agent 执行强制工作流(capabilities → build → plan → context → review),并明确 grep/rg/find 不得用于 Go 符号搜索。
你仍需先安装 gograph 二进制文件(brew install ozgurcd/tap/gograph 或 go install github.com/ozgurcd/gograph@latest)。使用上面的 gograph add-claude-plugin 可获得完整的一键引导(MCP 接线 + CLAUDE.md 规则 + PreToolUse 钩子)。当你更希望在 Claude Code 插件界面内部发现并安装 gograph 时,请使用插件市场。
其他 Agent(Cursor、Copilot、Antigravity 等):
gograph mcp . # 以 stdio 方式作为 MCP 服务器运行
添加到你的 .cursorrules 或 AI 系统提示词中:
在回答架构或仓库相关问题之前,先检查可用的
gograph_*MCP 工具并使用它们,而不是 grep/find。先运行gograph capabilities。
所有命令都支持 --json 以输出机器可读结果:
gograph callers "ValidateToken" --json
# → {"schema_version": "1", "command": "callers", "status": "ok", "count": 2, "results": [...]}
完整的集成指南,请参见 docs/coding-agent-usage.md。
用 llm-wiki/ 实现零成本定向: 每个会话运行一次 gograph wiki,即可生成一个面向机器的 markdown 页面目录 —— 概览、架构图、热点、路由、环境变量、错误位置、并发、逐包文档,以及完整的 API 表面。Agent 阅读这些页面,而无需发起数十次独立工具调用:
gograph build . --precise
gograph wiki # 写入 ./llm-wiki/
# 然后读取:llm-wiki/README.md → project.md → rules.md → agent-contract.md → overview.md
将 llm-wiki/ 加入 .gitignore —— 这些文件每次会话都会重新生成。
📊 输出示例
当你运行 gograph build . 时,生成的 GRAPH_REPORT.md 会为你的 AI 提供一份精简的上下文地图:
外部依赖(技术栈)
| 模块 | 版本 |
|---|---|
github.com/gin-gonic/gin |
v1.9.1 |
github.com/jackc/pgx/v5 |
v5.5.5 |
重要符号(按出向调用排序)
| 符号 | 类型 | 文件 | 行号 | 出向调用数 |
|---|---|---|---|---|
(Server).Start |
method | server.go |
42 | 18 |
ValidateAuth |
function | auth.go |
12 | 14 |
🆚 为什么不使用语言服务器(gopls)?
gopls 是为人类 IDE 优化的,而 gograph 是为基于终端的 LLM 优化的:
-
协议不匹配 ——
gopls返回file:line:col坐标。Agent 随后必须消耗 token 运行cat/sed来读取实际代码。gograph则直接提取精确的结构化切片,并将其格式化为 Markdown。 -
图级诊断 ——
gopls提供悬停提示和跳转到定义。gograph则在整个调用图上进行反向 BFS 错误追踪、完整爆炸半径分析和 PR 级变更规划。 -
可组合的智能 ——
gopls一次回答一个问题。gograph context在单次调用中打包节点 + 源码 + 调用方 + 被调用方 + 测试;gograph plan将影响、路由、SQL、环境变量和测试风险聚合为一份清单。
正确性模型
- 默认模式 使用 Go AST 解析和尽力而为的启发式规则。可容忍不完整或无法编译的仓库。
- 精确模式 使用类型检查增强,要求包可编译。
- 启发式提取器(路由、SQL、测试、错误映射)是导航辅助手段,而非权威的程序分析。
非目标
- 不做多语言解析
- 不调用 AI/模型 API
- 无嵌入(embeddings)或 SaaS 后端
- 无遥测
- 不替代编译器/类型检查器的正确性
🤝 参与贡献
欢迎提交 Pull Request!构建、测试和贡献指南请参见 CONTRIBUTING.md。
语言支持:
gograph目前仅解析 Go。其架构是可扩展的 —— 如果你想添加 Python、TypeScript、Rust 等语言支持,请先开一个 issue 讨论。
📄 许可证
MIT —— 详见 LICENSE。








VIP会员