🧭 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會員