CodeGraph 是什麼?用本地程式碼知識圖譜讓 AI agent 少走幾次冤枉路
CodeGraph 把程式碼解析成可查詢的本地知識圖譜,透過 MCP 的 codegraph_explore 回傳符號、呼叫路徑與影響範圍,讓 AI coding agent 少用一輪 grep、glob 和逐檔閱讀。
作者
Seer
日期
2026-08-07
先講 CodeGraph 的定位
CodeGraph 是一款本地端運作的語意代碼分析(semantic code intelligence)工具。它能將 codebase 解析為包含 symbols、imports、calls、inheritance 及 framework routes 的知識圖譜,並透過 CLI 或 MCP 讓 AI coding agent 進行查詢。
在 agent 真正理解程式碼前,通常得花很多時間摸索結構。CodeGraph 處理的就是這段前置探索:釐清函式定義位置、呼叫來源、Request 導向資料庫的路由,以及修改特定 symbol 會波及哪些檔案和測試。
CodeGraph 本身並不扮演 coding agent,也不負責規劃需求、修改程式、跑測試或部署。它的定位是專門回答程式結構問題的本地資料層,理解需求、決定修改方式與驗證結果等工作,依然交給 agent 處理。
目前最新 Release 與官方 Repo 的 package.json 版本為 1.5.0;本文查核時 main 分支的 HEAD 為 c6aaa20。本文內容整理自官方 Repo、README、package.json、安裝腳本以及現行的 MCP/CLI 說明;Benchmark 數據則採用官方 README 揭露的結果,未於本機重新測試。
它解決哪一段工作?
當 AI agent 面對大型 codebase 時,常見流程是先找出檔案、搜尋關鍵字、打開好幾個檔案,再憑人腦拼湊呼叫關係。這套傳統流程不僅浪費工具呼叫次數,也極度消耗 Context 空間。一旦碰上跨檔案引用、動態 dispatch、Framework 路由或跨語言呼叫,還很容易遺漏關鍵線索。
CodeGraph 透過預先建立的索引,讓 agent 可以直接從結構化結果切入查詢:
| 問題 | CodeGraph 提供的結果 | 仍需要其他工具處理的部分 |
|---|---|---|
| 某個 symbol 在哪裡? | symbol 定義、檔案與行號 | 閱讀產品需求與上下文 |
| 誰呼叫這個函式? | callers、callees 與關係邊 | 判斷哪些呼叫是業務上重要的 |
| 一條流程怎麼走? | 相關 symbols、呼叫路徑與來源片段 | 驗證 runtime 條件與外部服務行為 |
| 改某個 symbol 會影響什麼? | impact radius、依賴與受影響範圍 | 執行測試、檢查資料與部署風險 |
| 哪些測試可能受影響? | codegraph affected 找依賴的測試檔案 | 實際執行測試並解讀失敗原因 |
| 最近檔案有沒有跟上? | watcher、auto-sync、pending sync 狀態 | 對仍在 debounce 期間的檔案直接讀取 |
它把「重新探索 Repo 結構」這類重複性的臨時工作,轉化為持續更新的本地索引,省去每次對話重新摸索的成本。
從安裝到 agent 使用
官方工作流可以歸納為三個動作:安裝 CLI、對接 agent、初始化專案。
1. 安裝 CLI
macOS 與 Linux 可直接執行官方 Shell 安裝指令:
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh
Windows 使用者請執行 PowerShell 安裝腳本。若開發環境已有 Node.js,亦可透過 npm 安裝:
npm i -g @colbymchenry/codegraph
官方的獨立 standalone bundle 已內建 Node runtime,免去額外配置 Node.js 或編譯工具的麻煩。npm 套件則為另一種安裝途徑,適合習慣將 Node 工具整合進既有工作流的團隊。
2. 對接 AI coding agent
codegraph install
執行此指令會自動偵測並配置相容的 agent,包含 Claude Code、Cursor、Codex CLI、opencode、Hermes Agent、Gemini CLI、Antigravity IDE 及 Kiro。安裝程式支援全域設定或套用至單一專案,也能搭配 --target、--location、--yes 或 --print-config 進行自動化非互動配置。
此步驟專注於打通 Agent 與工具間的連線,並未開始掃描專案或建立索引。
3. 初始化專案
cd your-project
codegraph init
在專案目錄下執行 codegraph init,會在目錄下建立 .codegraph/ 資料夾並完成首次 Graph 建置。此時 agent 才有資料底層可供查詢。
簡單來說,流程就是:
安裝 CLI → 用 codegraph install 對接 agent → 至各專案執行 codegraph init 建立索引
若誤將 codegraph install 當作專案初始化,雖然 agent 能識別 MCP server,但實際查詢時仍會因為缺少專案的 Graph 數據而無法運作。
實際使用需要啟動什麼?
答案可以先講白:使用者不用手動開一個長駐的 MCP server,但不能只裝 MCP 設定就結束。 正式工作流仍有三個前置步驟:安裝 CLI、把 MCP 接到 agent、在每個要查詢的專案執行一次 codegraph init。
安裝 CLI
→ codegraph install:寫入 agent 的 MCP 設定與 instruction guidance
→ codegraph init:建立該專案的 .codegraph/ 索引
→ agent 啟動 codegraph serve --mcp:透過 stdio 提供查詢
codegraph install 寫入的 MCP 入口是 codegraph serve --mcp。這個命令是給 MCP host 透過管線啟動的,不是要開發者在另一個 Terminal 裡手動執行;官方 CLI 原始碼也特別把它標成 agent 自己啟動的 stdio entrypoint。現行程式還有依專案共用的 detached daemon 路徑,讓多個 MCP session 共用 watcher、SQLite 連線與 WAL writer,但這仍是 CodeGraph 自己管理的背景程序,不是使用者要另外部署的服務。
每個專案仍要有自己的 .codegraph/。codegraph install 只負責接線,不會掃描 codebase;codegraph init 才會建立初始 graph。完成設定後通常要重啟或 reload agent,讓新的 MCP 設定生效。之後檔案 watcher 預設會自動同步;只有關閉 watcher、檔案系統不適合監聽,或腳本需要 pre-flight 時,才需要手動執行 codegraph sync。
所以實際上有三種使用方式:
| 方式 | 需要什麼 | 適合情境 |
|---|---|---|
| MCP | CLI、agent 設定、該專案 .codegraph/ | 日常讓 agent 自動查結構 |
| CLI | CLI、該專案 .codegraph/ | 手動查詢、Subagent fallback、CI 或 Git hook |
| Library | 自己的 Node 程式與 CodeGraph API | 將索引查詢嵌入 Electron 或其他工具;需另外符合 README 的 Node runtime 條件 |
如果只有 MCP 設定、沒有 codegraph init,agent 可以看到工具,但沒有可查的專案 graph;CodeGraph 會提示回到一般的 Read、grep 或其他工具。這不是安裝失敗,而是「全域接線」和「專案索引」本來就是兩個不同階段。
MCP 的核心是單一探索工具
目前 CodeGraph 預設只提供一個 MCP tool:codegraph_explore。
codegraph_explore
→ relevant symbols
→ grouped source snippets
→ call paths
→ blast-radius summary
這個設計專門用來解答以下情境:
- 「這個功能是怎麼運作的?」
- 「Request 是如何一路進到資料庫?」
- 「這個 Class 的 Callers 與 Callees 有哪些?」
- 「如果修改這個 Symbol,會波及哪些檔案?」
- 「幫我找出這個檔案或 Symbol 目前的原始碼片段。」
官方 MCP 規範強烈建議 agent 直接呼叫 codegraph_explore,省去啟動子代理(sub-agent)進行 grep 搜尋或逐檔開啟的冗長過程。一次查詢就能直接帶回相關程式碼片段,並在關聯圖中整理好呼叫路徑與受影響範疇。
其餘查詢功能如 node、search、callers、callees、impact、files 和 status 依然存在,僅在預設狀態下隱藏於 MCP 選單外。若團隊需要更細粒度的工具調用,可藉由設定 CODEGRAPH_MCP_TOOLS 重新開啟,或在終端機直接執行對應的 CLI 指令。
Agent 實際運作機制
釐清角色:Skill、MCP Tool 還是 CLI?
CodeGraph 與 coding agent 的核心整合管道為 MCP。透過 codegraph install 會將 CodeGraph MCP server 設定寫入指定的 agent 設定檔中,後續再由 agent 透過 codegraph serve --mcp 喚起該服務。對接完畢並重啟 agent 後,主 agent 便會在 MCP 的 initialize 階段接收到對應的使用指引(guidance)。
我們可以將各層級的分工梳理如下:
| 層級 | 實際角色 | 什麼時候用 |
|---|---|---|
| MCP server | 把 CodeGraph 接進主 agent 的 tool surface | 一般 agent 對話,讓 agent 自動呼叫 codegraph_explore |
codegraph_explore | 預設唯一列出的 MCP tool,回傳來源、關係與影響範圍 | 問架構、流程、呼叫者、被呼叫者或變更影響時 |
| instruction/skill guidance | 告訴 agent 何時優先使用 CodeGraph,以及 subagent 的 CLI fallback | subagent、非 MCP harness、團隊共用 agent 指令 |
| CLI | codegraph explore、node、impact、affected 等命令 | 手動查詢、CI、腳本、MCP 尚未接通的 agent |
使用者無須在每次對話中手動輸入複雜的 skill 規則。MCP tool 本身即是實際執行查詢的介面,而 instruction 檔案或 skill 規則僅作為提示層,負責引導 agent 在正確時機呼叫工具。這些規則並不會自動建構圖譜,更無法取代 MCP server。
codegraph install 做了什麼?
官方安裝程式會依據您的選擇處理以下事項:
- 自動偵測 Claude Code、Cursor、Codex CLI、opencode、Hermes Agent、Gemini CLI、Antigravity IDE 及 Kiro。
- 將
codegraphMCP server 設定寫入對應的 agent 設定檔。 - 針對 Claude Code,可選擇性寫入 CodeGraph MCP tools 的自動允許權限(auto-allow permission)。
- 在
CLAUDE.md、AGENTS.md或GEMINI.md寫入以 marker 框選的 CodeGraph 指引,確保 Subagent 以及無法讀取 MCPinitialize訊息的 harness 能得知codegraph explore的 CLI 同等入口。
此階段純粹完成對接,尚未對專案進行索引。設定完成後請重啟 agent,並前往個別專案目錄執行:
cd your-project
codegraph init
全域對接只需執行一次;而 codegraph init 則需在各專案分別執行。只要專案底下存有 .codegraph/ 目錄,agent 就能在同個對話 Session 中發起查詢。此外,查詢時亦可傳入 projectPath 來讀取 Monorepo 下某個已初始化的 service,或是其他已完成圖譜建置的 Repo。
Agent 如何進行呼叫?
在日常對話中,您不需要手動撰寫 MCP JSON。只要明確描述結構問題,agent 就會根據 MCP server 的指引自動呼叫 codegraph_explore:
請先用 CodeGraph 查詢:
request 從 API route 進入後,如何一路走到資料庫?
請回傳相關檔案、主要 symbols、呼叫路徑,以及這條流程可能受影響的測試。
主 agent 接收到這類結構性問題時,典型工作路徑如下:
使用者提問
→ 觸發 codegraph_explore
→ 獲取相關 symbols 的原始碼片段
→ grouped files
→ call paths
→ blast-radius summary
→ agent 評估修改範疇、讀取必要的最新檔案、執行對應測試
官方 MCP 指引建議 agent 優先檢索 CodeGraph,並將返回的程式碼內容當作已讀取的結構化 Context。此舉能有效防止 agent 啟動一個專門負責探索的 Sub-agent 去重複執行 grep、glob 或逐一讀檔。
Agent 不會將所有問題都交給 CodeGraph。面對業務需求說明、外部 API 回應、執行結果或尚未儲存的即時異動,依然需要仰賴內建的 Read、Bash、測試工具或其他 MCP。CodeGraph 的專長在於釐清「程式碼結構如何交互關聯」。
遇到未經 codegraph init 的專案(缺少 .codegraph/),CodeGraph 會向 agent 提供清晰的 fallback 指引以切換回傳統工具,確保使用者能彈性決定要對哪些專案建立索引。
手動進行 MCP 設定
多數情境下,執行 codegraph install 即可自動完成配置。若您希望手動管理,官方 README 提供了 Claude Code 的 stdio MCP 配置範例:
{
"mcpServers": {
"codegraph": {
"type": "stdio",
"command": "codegraph",
"args": ["serve", "--mcp"]
}
}
}
若想讓 Claude Code 自動允許 CodeGraph 工具調用,可追加以下權限設定:
{
"permissions": {
"allow": [
"mcp__codegraph__*"
]
}
}
該 Wildcard 規則除了涵蓋當前預設的 codegraph_explore 外,後續透過 CODEGRAPH_MCP_TOOLS 重新啟用的工具也同樣適用。是否啟用 auto-allow,建置時應視團隊的安全與權限規範而定。
Subagent 的對接方式
主 Agent 能在 MCP server 的 initialize 階段取得引導訊息,但 Subagent 未必能共享同一份脈絡。為了解決這個問題,CodeGraph 安裝程式會將簡短指引寫入 Agent 的 Instruction 檔案,使 Subagent 能得知並呼叫對應指令:
codegraph explore "how does a request reach the database?"
此處的 codegraph explore 命令是 MCP codegraph_explore 工具在 CLI 的等同入口。這種設計非常適合以下情境:
- Subagent 無法直接存取 MCP tool surface;
- Agent framework 僅能讀取
AGENTS.md、CLAUDE.md等 instruction 規則文件; - 需在 CI 流程或自動化腳本中輸出結構化查詢結果;
- 開發者希望主動控制查詢行為,避免交由 agent 自行決定工具。
當 Subagent 具備直接連線同一個 MCP server 的能力時,呼叫 codegraph_explore 依舊是首選。多個代理共用同一個索引時,請務必留意 project path 的設定、併發修改的衝突以及各別 Agent 的權限邊界。
提升 Agent 效率的實戰建議
CodeGraph 能顯著提速,關鍵在於減少「重新摸索結構」的往返對話,無須將所有開發工作都交給圖譜。設計 Prompt 與工作流時,建議遵循以下脈絡:
| 階段 | 建議做法 | 提速原因 |
|---|---|---|
| 架構探索 | 一次把功能、入口、目標和想看的關係寫進 codegraph_explore 問題 | 讓結果直接帶回 symbols、source、call paths 和 blast radius |
| 來源確認 | 先採用 graph 回傳的來源;只有 staleness banner 或需要最新內容時再用 Read | 避免 grep/Read 重複查同一批檔案 |
| 修改前評估 | 先查 impact 或讓 codegraph_explore 回傳影響範圍 | 先知道可能影響哪些 callers、routes 和 tests |
| 修改後測試 | 用 codegraph affected 從 Git diff 篩選測試,再交給測試 runner | 減少不必要的測試範圍,但不跳過測試本身 |
| 日常同步 | 依賴 auto-sync;只有 sandbox、watcher 關閉或腳本 pre-flight 才手動 sync | 增量同步只處理變更檔案,不重建整棵 graph |
| 大型專案索引 | 使用預設排除規則,必要時在 codegraph.json 設定 exclude | 避免把 node_modules、build、cache、vendor 等雜訊放進 graph |
撰寫 Agent Prompt 時,若能將探索需求拆解為「入口 → 流程 → 影響範圍」,成效會更顯著:
請先用 codegraph_explore 查詢以下資訊:
1. /api/orders 的 route handler;
2. 它呼叫的 service、repository 與外部 payment client;
3. 修改折扣計算邏輯後,可能波及的 callers 與測試檔案。
請先用查詢結果確認變更範圍,再讀取需修改的最新檔案,接著執行 affected tests。
相較於模糊的「幫我看看訂單系統」,這種具體結構的指令能引導 Agent 一次帶回完整且可用的上下文。
根據官方 README 在 2026-08-05 重新測量的 Benchmark,測試環境採用 Claude Opus 4.8,針對 7 個開源專案分別進行 4 次測試並取中位數(Median)。測試中利用 Hook 阻擋雙方的 codegraph CLI,避免控制組私下呼叫 CodeGraph。結果顯示:呼叫工具次數平均減少 88%、速度提升 53%、Token 消耗減少 62%、開發成本降低 44%;在有 CodeGraph 輔助的組別中,7 個專案均達到零檔案讀取(Zero file reads)。
要注意的是,這些數據由官方 Repo 維護者提供,本文並未在本機實地驗證。該測試主要評估解答特定架構問題時的 Throughput。README 同時指出,在多輪對話中,CodeGraph 的高密度資訊回傳會使殘留上下文(Residual retrieval context)增加約 80%;以 VS Code 專案為例,兩組的 Token 佔用分別約為 67k 對 18k。短期任務能換取極速探索,但面臨長對話或小 Context window 的 Agent 時,仍需額外監控 Context 的大小。
CodeGraph、Agent Skill 與 CLI 的職責分工
核心架構與分工可以簡單用這張圖來理解:
codegraph install
→ MCP server config + agent instruction guidance
codegraph init
→ 各專案的 .codegraph/codegraph.db
Agent 結構問題
→ codegraph_explore (MCP)
→ 獲取 source + call paths + blast radius
Subagent / CI / 非 MCP harness
→ codegraph explore (CLI)
修改與驗證
→ Read 最新檔案 + 編輯工具 + codegraph affected + test runner
Skill 與 Instruction 的主要作用在於提示 Agent 何時該求助 CodeGraph;MCP tool 扮演著實際的查詢通道;CLI 則是手動操作或 Subagent fallback 的安全備案。當三者協同運作,Agent 便能利用圖譜在短時間內理清代碼脈絡,隨後使用標準的讀檔、修改和測試工具完成後續開發。
CLI 不僅用於配置 MCP
CodeGraph CLI 本身就是強大的輔助工具,能直接應用在 Code Review、除錯與測試範圍篩選:
| 指令 | 用途 |
|---|---|
codegraph status | 查看檔案、nodes、edges、資料庫大小與索引狀態 |
codegraph query <search> | 搜尋 symbols,可限制 kind、數量或輸出 JSON |
codegraph explore <query> | 取得和 MCP codegraph_explore 相同方向的結構查詢 |
| `codegraph node <symbol\ | file>` |
codegraph callers <symbol> | 找呼叫者 |
codegraph callees <symbol> | 找被呼叫的函式 |
codegraph impact <symbol> | 分析 symbol 的影響範圍 |
codegraph files [path] | 查看檔案結構 |
codegraph affected [files...] | 找出可能受變更影響的測試檔案 |
codegraph sync [path] | 手動執行增量同步 |
codegraph upgrade [version] | 更新或固定版本 |
| `codegraph telemetry [on\ | off]` |
其中 affected 指令特別適合搭配 Git diff:
git diff --name-only HEAD | codegraph affected --stdin --quiet
如此一來,便能將受波及的清單直接餵給測試 Runner,優先執行受影響的測試項目。這是 CodeGraph 提供的依賴關係分析功能,而實際測試依然交給 CI 或本地端的 Test runner 來執行。
如何保持索引即時更新?
為避免每次對話都要重新建構圖譜,CodeGraph 善用了作業系統底層的檔案監聽機制(例如 macOS 的 FSEvents、Linux 的 inotify,以及 Windows 的 ReadDirectoryChangesW)。偵測到檔案異動時,會先經過 Debounce 機制過濾。官方預設的 Debounce 時間為 2000ms,開發者可視需求透過 CODEGRAPH_WATCH_DEBOUNCE_MS 將其調整於 100ms 至 60s 之間。
官方 README 介紹了確保一致性的三項防護設計:
- 監聽器(Watcher)會在檔案新增、編輯或刪除時,自動觸發增量同步。若有大量檔案連續異動,則會進行批次合併處理。
- 在 Debounce 期間,若查詢範圍觸及尚未同步完畢的檔案,MCP 的回應中會加上 Staleness banner,提示 Agent 應改用
Read讀取硬碟上的最新程式碼;其餘未被引入的 pending 變更檔案,則會列於 Footer。 - 當 MCP server 斷線重啟,會以檔案大小、修改時間(mtime)及 Content hash 重新檢視 Working tree,進行 Reconciliation 以補齊離線期間發生的所有變更。
README 中也附上維護者的增量同步測量:在一個包含 4,400 個檔案的專案中,增量耗時約 0.3 秒;而在擁有 27,000 個檔案的 Swift 編譯器專案中,也僅需約 0.4 秒。這些數據為官方 Repo 提供的效能參考,沒有在本機實際跑過;其反映的是增量更新的工作量,不可直接視為所有專案的固定延遲。
在 Watcher 被關閉、Sandbox 限制了檔案監聽事件,或是自動化腳本需要 Pre-flight sync 的情況下,手動執行 codegraph sync 依然有其必要。正常的 Agent session 僅需依賴 auto-sync 機制,並可配合 codegraph status 確認 Pending sync 及檔案的同步狀態。
使用成本怎麼算?
CodeGraph 的費用不能只看「有沒有 API key」。目前本地 CLI/MCP 不需要外部模型,也沒有已公開的 hosted 方案價格;實際成本要拆成四層:
| 成本層 | 會付出什麼 | 目前能確認的邊界 |
|---|---|---|
| 安裝下載 | 網路流量與本機安裝空間 | 最新 v1.5.0 Release 的 macOS arm64 壓縮包約 54.0 MiB、macOS x64 約 55.1 MiB;standalone bundle 已含 Node runtime,不必另裝 Node |
| 首次建索引 | CPU、記憶體、磁碟 I/O 與等待時間 | 會解析檔案、建立 nodes/edges/FTS5;官方沒有提供固定的最低 CPU、RAM、索引時間或每千檔案價格,不能用單一數字保證所有 repo |
| 日常同步 | watcher 常駐、變更檔案的增量解析與 SQLite 寫入 | 預設 watcher 依賴作業系統檔案事件與 debounce;只處理變更範圍,關閉 watcher 才需要手動 sync |
| Agent 使用 | agent 模型讀取 MCP 回傳、判斷下一步、修改與測試 | CodeGraph 本身不收模型費,但回傳內容會進 agent context;provider 的 token/時間/請求費用仍照原本模型方案計算 |
本機資源方面,官方 SQLite 連線設定包含 64 MiB page cache 與 256 MiB memory-mapped I/O 上限。這些是資料庫連線的設定值,不是「CodeGraph 最低需要 320 MiB RAM」的硬體需求;實際 resident memory 仍會受 repo 大小、同時索引檔案、語言 grammar、Node/Rust runtime 和 agent session 影響。.codegraph/ 也可能包含 WAL sidecar,索引期間或非正常中止後的暫存大小不應直接當成永久資料庫大小。
最容易被忽略的是 agent 側成本:CodeGraph 能減少 grep、glob、Read 的探索輪次,官方 benchmark 也把 token 與美元支出列為結果;但同一份官方 README 同時指出,高密度 retrieval 會讓多輪對話殘留在 context 的內容變多。也就是說,單題探索的模型成本可能下降,長對話的 context 壓力卻可能上升,兩者不能只用「少幾次 tool call」互相替代。
至於 hosted CodeGraph Platform,官方 README 目前仍是 coming/beta waitlist;本輪沒有查到公開價格、用量單位或 SLA。因此現階段能做的是估本地 CPU、磁碟和 agent provider token,不能替 hosted 產品填一個看似精確的月費。
解析與圖譜建構原理
根據官方 README,程式碼轉換為圖譜的流程可以概括為四個階段:
source files
→ Rust / tree-sitter extraction
→ symbols + edges
→ local SQLite + FTS5
→ MCP / CLI query
這不是內建小模型,而是確定性的靜態分析管線
CodeGraph 名稱裡的 semantic 容易讓人聯想到 embedding 或小型語言模型,但目前查核到的官方實作不是這條路。官方文件直接把 extraction 描述為 deterministic:結果來自 AST,不是由 LLM 摘要。package.json 的 runtime dependencies 也集中在 tree-sitter-wasms、web-tree-sitter、SQLite/CLI 與設定處理,沒有 embedding model、向量資料庫、ONNX runtime 或外部模型 API。
它的「語意」主要是把語法結構和可解析的關係命名出來,而不是理解自然語言意義:
flowchart TB
S["Source files"] --> K{"Rust kernel 支援且解析成功?"}
K -->|yes| R["Rust / Tree-sitter extraction"]
K -->|no / parse error| W["WASM Tree-sitter fallback"]
R --> G["Symbols, routes, unresolved references"]
W --> G
G --> E["Resolve calls, imports, inheritance, routes"]
E --> D["SQLite graph + FTS5"]
D --> Q["MCP / CLI query"]
現行版本的解析器有兩條實作路徑。通過等價性 gate 的語言會優先走 Rust native extraction kernel;其他語言、kernel 尚未支援的檔案,或解析結果含錯誤的檔案,會走內建的 WASM Tree-sitter extractor。原始碼中的 per-file fallback 是為了保留正確性,不是把錯誤交給模型猜測。Rust kernel 的角色比較接近「把 parse + extract 做得更快」,不是一個會自行推理程式碼的 AI 模型。
此外,CodeGraph 也不是把整份原始碼先轉成向量再做相似度搜尋。SQLite schema 裡的核心資料是 nodes、edges、files 和 unresolved_refs;FTS5 索引的欄位是 symbol name、qualified_name、docstring 與 signature。查詢回傳的 source range 則依 indexed node 的行號,從磁碟上的原始檔案讀出來。因此它的主要查找能力是「名稱/結構/關係/行號」的組合,不是自然語言 embedding 搜尋。
1. 語意提取(Extraction)
CodeGraph 採用 Tree-sitter grammar 解析原始碼;現行版本對部分語言使用 Rust 核心加速,並保留 WASM Tree-sitter 路徑作為支援與 fallback。圖譜節點(Nodes)類型涵蓋 Functions、Classes、Methods、Files 以及 Framework routes;節點之間的關聯(Edges)則用來表達 Calls、Imports、Extends、Implements、References 及特定框架路由的對應關係。
README 提及的支援名單涵蓋 TypeScript、JavaScript、ArkTS、Python、Go、Rust、Java、C#、PHP、Ruby、C/C++、Objective-C、Metal、CUDA、Swift、Kotlin、Scala、Dart、Svelte、Vue、Astro、Lua、R、Terraform/OpenTofu 等多種語言與開發框架。
2. 本地儲存(Storage)
所有的圖譜索引資料都會存入專案目錄底下的 .codegraph/codegraph.db。資料庫選用 SQLite,並搭配 FTS5 索引 symbol 名稱、qualified name、docstring 和 signature;它不是把整個 source body 複製進全文索引。查詢需要展示程式碼時,再依節點的檔案路徑與行號讀取本機檔案。這套設計讓 graph、索引與程式碼都留在本機範圍內;但 agent 本身仍可能把查詢結果送進它所使用的模型 provider,這是 CodeGraph 與 agent 權限邊界要分開看的地方。
3. 關聯解析(Resolution)
完成語意提取後,CodeGraph 會開始連結 References 與 Definitions,並處理 Imports、Class inheritance 以及框架特有的 Pattern。官方甚至為 Swift 與 Objective-C、React Native、Expo 等混寫情境維護了跨語言的 Bridging 規則,讓呼叫關係鏈有機會跨越單一語言編譯器的限制。
需要留意的是,靜態分析的精準度高度取決於特定語言的語法特性、框架慣例、Reflection 依賴注入、動態 Dispatch 與程式寫法。圖譜雖然能接手大量的探索盲區,但無法將所有的 Runtime 執行期行為全數轉換為靜態結果。
Framework-aware routes 的實用價值
傳統的代碼結構圖譜多半僅能識別函式與類別。但在 Web 開發中,常面臨另一種挑戰:URL Pattern 究竟對應到哪一個 Handler?
CodeGraph 的 Framework-aware routes 功能,會自動將部分的 Framework route 解析為 Route nodes,並將其與 Handler 進行串接。README 中列出的支援框架相當廣泛,包含 Django、Flask、FastAPI、Express、NestJS、Laravel、Rails、Spring、Gin、Axum、Rocket、ASP.NET、Vapor、React Router、SvelteKit、Vue Router、Nuxt 以及 Astro 等。
這使得「哪一個 API Endpoint 會觸發這個 Controller?」這類常見疑惑,能直接與 Callers、Impact analysis 合併在同一張關係圖上檢視。相較於大海撈針般搜尋函式名稱,這項設計無疑更貼近 Web 開發者的實際除錯需求。
如何解讀官方 Benchmark 數據?
CodeGraph README 最新的效能評測於 2026-08-05 進行,測試環境使用 Claude Code headless 搭配 Claude Opus 4.8,共測試 7 個不同語言的知名開源專案。每個專案在啟用與未啟用的對照組下各執行 4 次,並以中位數(Median)作為指標。為求公平,測試過程中使用 Hook 阻擋了兩組的 codegraph CLI 呼叫,以免控制組透過 Bash 偷吃步。
官方提供的評測摘要顯示:平均減少 88% 的工具呼叫次數、執行速度快 53%、消耗 Token 減少 62%、開發成本降低 44%,且啟用 CodeGraph 的組別在 7 個專案中的檔案讀取數皆為 0(Zero file reads)。要注意的是,這些數據由官方 Repo 維護者提供,本文並未在本機實地驗證。
| Codebase | Language | Tool calls | Time | File reads | Tokens | Cost |
|---|---|---|---|---|---|---|
| VS Code | TypeScript · 約 11k files | 2 / 28 | 2.2× faster | 0 / 12 | 少 77% | 低 71% |
| Excalidraw | TypeScript · 約 640 files | 2 / 43 | 3.6× faster | 0 / 18 | 少 84% | 低 78% |
| Django | Python · 約 3k files | 3 / 14 | 快 35% | 0 / 8.5 | 少 41% | 低 13% |
| Tokio | Rust · 約 790 files | 3 / 29 | 2.6× faster | 0 / 19 | 少 65% | 低 64% |
| OkHttp | Java · 約 645 files | 1 / 6 | 快 43% | 0 / 2 | 少 54% | 低 21% |
| Gin | Go · 約 110 files | 1 / 7 | 快 39% | 0 / 4 | 少 52% | 約略相同 |
| Alamofire | Swift · 約 110 files | 4 / 33 | 2.6× faster | 0 / 16.5 | 少 59% | 低 57% |
這項結果清楚展示了 CodeGraph 的優化邏輯:引導 Agent 進行精準的結構查詢,來取代傳統繁複的 find、grep、檔案閱讀與人工串接步驟。然而,這並不代表所有的開發任務都能達到相同的節省比例,亦無法保證取得圖譜資料後就能寫出完全無誤的程式碼。
此外,README 指出一個 Context 邊界限制:此測試測量的是解決特定問題所需的 throughput,並未將「後續殘留在 Context Window 中的歷史對話」納入同一評估指標。在多輪對話測試中,CodeGraph 帶來的高密度回傳資料會使殘留上下文(Residual retrieval context)增加約 80%;以 VS Code 為例,兩者分別佔用約 67k 與 18k tokens。如何在獲取快速結構檢索的優勢下,針對小 Context 的 Agent 或長對話妥善控制 Context 膨脹,是實務上需權衡的考量。
本地安全與 Telemetry 政策
CodeGraph 將資料庫與代碼索引全數存放於本機的 .codegraph/ 目錄中,並以 100% 本地運行(100% local)為特色,無須 API 金鑰或聯網存取即可建構圖譜。對於嚴格禁止代碼外流至第三方伺服器的開發團隊而言,這是相當具吸引力的優勢。
即便如此,「本地運行」仍受限於 Agent 自身的權限配置。一旦 Agent 擁有專案的讀取權限,CodeGraph 便會將關聯的原始碼反饋給它。因此,針對 MCP wildcard auto-allow、共享 Workspace 以及跨 Agent 運作的 Instruction 規則,皆需遵循組織內部安全政策進行審查。
在遙測方面,CodeGraph 預設收集匿名的工具調用、指令與開發語言統計。官方聲明不會收集任何代碼、路徑、檔案名稱、Symbol 名稱、查詢語句或 IP 位址,且所有數據均會在本地聚合成每日摘要後才傳送。若有隱私疑慮,可透過以下方式關閉:
codegraph telemetry off
# 或設定 CODEGRAPH_TELEMETRY=0
# 或設定 DO_NOT_TRACK=1
在企業級部署前,建議先閱讀官方 Repo 底下的 TELEMETRY.md,以配合組織內部的遙測與合規政策。
授權與產品發展邊界
| 項目 | 截至目前的狀態 | 影響 |
|---|---|---|
| CLI / local index | 開源 repository,MIT | 可以自行安裝與管理本地 graph |
| standalone 安裝 | GitHub release bundle,內含 Node runtime | CLI/MCP 不需要額外安裝 Node |
| npm 套件 | @colbymchenry/codegraph,目前 package.json 為 1.5.0 | 適合已有 Node 工具鏈的環境 |
| hosted CodeGraph Platform | README 寫為 coming、提供 beta waitlist | 目前不能依 README 推出 hosted 價格或 SLA |
| CLI/MCP runtime | 使用 bundled runtime | 與 library embedding 的 Node 條件不同 |
| library embedding | README 要求 Node 22.5+ 以使用 node:sqlite | Electron 或自有 Node 程式需另外核對 runtime |
另外,README 中提到 CodeGraph Platform 目前仍在 Beta 籌備階段,僅提供 Waitlist 登記。這項雲端服務與現行可自由下載的本地端 CLI/MCP 屬不同產品線,請避免將 Waitlist 預告誤讀為已對外開放的正式服務。
適合引進 CodeGraph 的工作流場景
1. 大型 Repository 的架構維護
在 Agent 需要爬梳跨檔案架構時,先透過 codegraph_explore 找出相關 Symbols、呼叫路徑與原始碼片段,隨後由 Agent 決定該讀取哪些特定檔案。此做法能大幅減少盲目摸索的對話往返,但在進行程式碼修改前,仍需讀取最新變更並完整理解業務需求。
2. 異動後的自動化測試範圍篩選
將 git diff --name-only 的結果導向 codegraph affected 指令,藉此找出與異動檔案高度關聯的測試項目,再交付測試 Runner 執行。這套做法適合作為縮小測試範圍的過濾器,無法直接當作測試成功的保證。
3. Web Route 與 Handler 的關聯追蹤
處理 API Endpoint、Controller、Middleware 或 Service 的呼叫依賴時,結合 Framework-aware route、Callers、Callees 以及 Impact analysis 能提供極大幫助。對於極度仰賴約定路由(Convention over configuration)的 Web 框架,這項功能比單純進行字串搜尋更能精確定位入口與下游節點。
4. 多代理共用專案索引
官方安裝程式允許多個 Agent 對接。由於 .codegraph/ 屬於專案層級的索引,多個 Agent 可同步共享同一個圖譜,但開發時需特別留意同時編輯衝突、監聽器 Debounce 延遲、個別 MCP session 以及對應的權限範圍。
使用限制與注意事項
- 靜態圖譜與 Runtime 真實行為存在落差:諸如 Reflection、依賴注入、動態字串生成的 Symbol、遠端配置以及資料庫即時狀態,仍需透過其他方式驗證。
- 圖譜結構與代碼修改的正確性無直接關聯:Agent 依然必須深入閱讀需求、編寫邏輯、執行測試並進行人工 Diff 審查。
- 自動同步(Auto-sync)存在短暫的時間落差:待同步的 pending 檔案雖有提示標記,但關鍵異動仍建議直接調用讀檔工具。
- MCP 預設工具過於集中:對於習慣將工具拆解得更細緻的團隊,需自行微調
CODEGRAPH_MCP_TOOLS或多加利用 CLI 指令。 - 高密度資訊回傳(Dense retrieval)會加重 Context 負擔:即便工具呼叫次數減少,長對話中殘留的 Context 體積並不一定會等比例縮小。
- Node Library 與 CLI Standalone 運作環境有所區別:程式庫內嵌所要求的 Node 版本規範,並不適用於獨立發行版。
- 難以透過 README 推估 Hosted 雲端版本計費:目前 CodeGraph Platform 依然處於預告與等待名單(Waitlist)階段。
- Moving branch 特性將隨時間持續更迭:核心版本、語言支援矩陣、MCP Surface 與效能指標,在正式導入前均應以最新狀態重新核對。
總結:AI Agent 的代碼結構指南針
CodeGraph 的核心價值是將 codebase 結構整理為可供快速檢索的本地端資料層,它不負責代替 Agent 完成所有的代碼編寫。藉由 codegraph_explore 整合回傳 Symbol、原始碼、呼叫路徑與受波及範疇,配合 auto-sync 與檔案變更即時同步,並透過 codegraph affected 將依賴關聯引入測試階段。
若您的 Agent 經常陷入頻繁的 grep、glob 搜尋與逐檔閱讀的效能漩渦,CodeGraph 會是優化工作流的實用工具。導入時,建議先挑選單一大型專案做試點,重點觀察三項指標:Agent 能否順暢調用 codegraph_explore、查詢結果是否能有效收斂探索行為,以及 Dense context 對於長對話帶來的記憶體負擔。
完成這三項指標評估後,再決定是否將 MCP 配置推廣至團隊的其他開發代理中。結構圖譜能縮短定位代碼的時間,但需求的完整解讀、邏輯修改的正確性,乃至後續的測試與部署,依然是成熟工程流程中不可或缺的環節。
官方來源與查核範圍
- CodeGraph 官方 repository:README、CLI、MCP、語言支援、benchmark 與限制。
- CodeGraph
package.json:目前1.5.0、Node engines、npm scripts、MIT license。 - CodeGraph
install.sh:standalone bundle、平台偵測、版本解析與安裝路徑。 - CodeGraph
CLAUDE.md:repository layout、CLI、MCP server 與測試指令。 - CodeGraph
TELEMETRY.md:匿名統計欄位與關閉方式。 - CodeGraph 官方文件站:使用指南與 indexing 說明。
- 官方 Quickstart:CLI、
codegraph install、codegraph init與 agent 啟動邊界。 - 官方 Introduction:deterministic AST extraction、SQLite graph 與 100% local 定位。
src/db/schema.sql:nodes、edges、files、unresolved refs 與 FTS5 欄位。src/mcp/tools.ts:MCP tool surface、source range 讀取與projectPath。src/bin/codegraph.ts:serve --mcp、init、sync與 CLI fallback。src/extraction/kernel/index.ts:Rust kernel 路由與 WASM fallback。
本文查核日期:2026-08-09。main 為持續更新的分支;版本號、Release、語言支援度、Benchmark 數據及 MCP 支援工具可能隨時更迭。
Signals
Visits
--
Waiting for Cloudflare metrics.