代码智能分析服务

CodeGraph是一款为AI编程代理提供代码库语义分析的服务,通过构建代码库的语义图来实现快速索引和上下文感知。

  • by suatkocar
  • Rust
  • 本地部署
  • 18 星标
  • 更新于
在 GitHub 查看 suatkocar/codegraph

使用说明

CodeGraph

作为MCP服务器的代码库智能。原生锈。次秒级索引。零运行时依赖关系。


这是什么?

CodeGraph构建代码库的完整语义图——跨代码库的每个函数、类、导入和调用关系 32种编程语言 --并通过 模型上下文协议 (MCP)。

当Claude Code、Codex或任何与MCP兼容的代理进入您的项目时,CodeGraph会让它立即深入了解您的整个代码库:什么叫什么,什么取决于什么,如果您更改了什么,什么会中断。不是文件级grep-- 图感知、语义排序、令牌预算上下文.

v0.2.5 添加了git集成、安全扫描(OWASP/CWE)、调用图分析、数据流分析、YAML配置系统、结构化日志记录和强大的多字节字符处理。

入门指南

两个步骤。就这样

步骤1:安装二进制文件

选择一个:

curl -fsSL https://raw.githubusercontent.com/suatkocar/codegraph/main/install.sh | bash
brew tap suatkocar/codegraph && brew install codegraph
npx @suatkocar/codegraph init
cargo build --release --no-default-features

步骤2:初始化项目

codegraph init

这个命令为您的代码库建立索引,注册MCP服务器,安装生命周期挂钩,生成CLAUDE.md,并设置git挂钩。

打开Claude Code,您的项目已经具有图形感知能力。

init之后会发生什么?

每次会话开始时

SessionStart钩子触发增量重新索引(当没有任何变化时约为12ms)。你的图表总是很新鲜。

在您发送的每一个提示中

UserPromptSubmit钩子在图中搜索与您的消息相关的上下文,并自动注入。代理甚至在开始思考之前就看到了正确的代码。

每次工具调用前

PreToolUse钩子在Edit、Write、Read、Grep、Glob和Bash调用之前注入相关的代码库上下文。代理在打开文件之前就知道文件中有哪些符号。

克劳德编辑的每个文件

PostToolUse钩子会立即重新索引修改后的文件。图表在变化发生时保持同步。

当工具出现故障时

PostToolUseFailure钩子提供了纠正上下文-如果函数被重命名或移动,CodeGraph会告诉代理现在在哪里找到它。

当子代理产卵时

SubgentStart钩子将紧凑的项目概述(顶部符号、框架、文件计数)注入到每个子代理中。他们从一开始就全面了解代码库。

在压缩对话之前

PreCompact挂钩保存最重要符号的PageRank摘要。即使对话历史被压缩,结构意识仍然存在。

在代理停止之前

Stop挂钩检查图不一致(未解决的引用率高),并建议代理在停止之前继续解决这些问题。

当任务完成时

TaskCompleted挂钩运行一个质量门——重新索引项目,并报告任务期间引入的任何新的死代码或未解决的引用。

会话结束时

SessionEnd钩子运行最终的增量重新索引并记录会话级诊断(文件计数、节点计数、边计数、未解析的引用)。

演出

度量 无CodeGraph 有CodeGraph 改进
每个任务的令牌 ~5000 ~1550 减少68%
检查的文件 11(全部) 3个平均值 减少73%
索引54个文件 不适用 230毫秒 亚秒级
增量无操作 N/A 13毫秒 即时
CPU利用率 N/A 600%+ 通过人造丝进行并行解析

代币减少基准

在一个真实的11文件TypeScript项目上进行测量,并进行真实性评估:

任务查询 基线令牌 CodeGraph令牌 缩减
身份验证登录 4962 1997 59.8%
数据库连接 4962 1305 73.7%
用户存储库 4962 2108 57.5%
API路由处理程序 4962 935 81.2%
密码哈希 4962 1522 69.3%
平均 68.3%

质量指标(评估框架)

类别 精确度 召回率 F1得分
呼叫者检测 1.00 1.00 1.00
死码检测 0.75 1.00 0.86
搜索相关性 0.27 0.58 0.37

呼叫者检测实现了完美的精确度和召回率——CodeGraph从不错过呼叫者,也从不产生幻觉。

支持的语言(32)

语言 扩展 语言 扩展
TypeScript .ts 哈斯克尔 .hs .lhs
TSX .tsx 灵丹妙药 .ex .exs
JavaScript .js .mjs .cjs Groovy .groovy .gradle
JSX .jsx PowerShell .ps1 .psm1
python .py Perl .pl .pm
去吧 .go Clojure .clj .cljs
生锈 .rs 朱莉娅 .jl
Java .java R .R .r
C .c .h 二郎 .erl .hrl
C .cpp .cc .hpp 榆树 .elm
C .cs Fortran .f90 .f95
PHP .php 尼克斯 .nix
红宝石 .rb Bash .sh .bash
Swift .swift Scala .scala .sc
Kotlin .kt .kts 飞镖 .dart
Verilog .v .sv 齐格 .zig
Lua .lua

所有语法在编译时都通过原生树保姆0.25静态链接。无WASM,无运行时下载,无初始化延迟。

MCP工具(44)

核心(13)

工具 目的
codegraph_query 混合关键字+语义搜索(FTS5+sqlite-vec+RRF)
codegraph_dependencies 前向依赖遍历(递归CTE)
codegraph_callers 反向调用图
codegraph_callees 正向调用图
codegraph_impact 爆炸半径分析及风险分类
codegraph_structure PageRank排名符号的项目概述
codegraph_tests 测试覆盖率发现
codegraph_context LLM上下文组装(4层令牌预算)
codegraph_node 使用关系进行直接符号查找
codegraph_diagram 美人鱼图生成
codegraph_dead_code 查找未使用的符号
codegraph_frameworks 检测项目框架(18+)
codegraph_languages 语言细分统计

Git集成(9)

工具 目的
codegraph_blame 逐行git责备
codegraph_file_history 文件提交历史记录
codegraph_recent_changes 最近的存储库提交
codegraph_commit_diff 提交差异细节
codegraph_symbol_history 符号修改历史
codegraph_branch_info 分行状态和跟踪信息
codegraph_modified_files 工作树更改(阶段性/非阶段性)
codegraph_hotspots 基于切换的热点检测
codegraph_contributors 贡献者统计

安全(9)

工具 目的
codegraph_scan_security 基于YAML规则的漏洞扫描
codegraph_check_owasp 2021年OWASP Top 10扫描
codegraph_check_cwe CWE Top 25扫描
codegraph_explain_vulnerability CWE解释+补救指导
codegraph_suggest_fix 修正对调查结果的建议
codegraph_find_injections 通过污点分析进行SQL/XSS/命令注入
codegraph_taint_sources 识别代码中的污染源
codegraph_security_summary 综合风险评估
codegraph_trace_taint 从源到汇的数据流跟踪

存储库与分析(7)

工具 目的
codegraph_stats 索引统计(节点、边、文件)
codegraph_circular_imports 循环检测(Tarjan SCC)
codegraph_project_tree 带有符号计数的目录树
codegraph_find_references 交叉引用搜索
codegraph_export_map 模块导出列表
codegraph_import_graph 导入图形可视化
codegraph_file 文件符号列表

调用图和数据流(6)

工具 目的
codegraph_find_path 两个函数之间的最短调用路径(BFS)
codegraph_complexity 每个函数的圈动+认知复杂性
codegraph_data_flow 变量定义使用链
codegraph_dead_stores 作业从不阅读
codegraph_find_uninitialized 初始化前使用的变量
codegraph_reaching_defs 达成定义分析

安全扫描

CodeGraph包括一个内置的安全扫描程序,其中包含基于YAML的规则:

  • 4个捆绑规则集:OWASP Top 10、CWE Top 25、加密弱点、秘密检测
  • 50+条规则 涵盖SQL注入、XSS、命令注入、硬编码秘密、弱加密等
  • 污点分析:注入漏洞的源到汇数据流跟踪
  • 自定义规则:使用正则表达式模式、严重性、CWE/OWASP映射编写自己的YAML规则
codegraph scan-security        # Full scan with all rules
codegraph check-owasp          # OWASP Top 10 only
codegraph check-cwe            # CWE Top 25 only

配置

CodeGraph支持分层YAML配置:

# .codegraph.yaml (project-level) or ~/.config/codegraph/config.yaml (user-level)
version: "1.0"
preset: balanced  # minimal | balanced | full | security-focused

tools:
  overrides:
    codegraph_dead_code:
      enabled: false
      reason: "Too noisy for this project"

performance:
  exclude_tests: true

4个预设: minimal (15个工具), balanced (30个工具), full (全部44个), security-focused

自动编辑器检测:克劳德代码→ 完整,VS代码→ 平衡,Zed→ 最小

环境覆盖: CODEGRAPH_PRESET, CODEGRAPH_DISABLED_TOOLS

建筑

Source Files ──→ tree-sitter ──→ Extractor ──→ SQLite DB
  (32 langs)     (native parse)   (nodes+edges)   ├── FTS5 (keyword index)
                                                   ├── sqlite-vec (vector index)
                                                   └── edges (graph structure)
                                       ↓
                               Query Engine
                         ├── Hybrid Search (BM25 + cosine + RRF)
                         ├── Graph Traversal (recursive CTEs)
                         ├── PageRank (symbol importance)
                         └── Context Assembly (4-tier budget)
                                       ↓
                              MCP Server (stdio)
                         ├── 44 tools via rmcp
                         └── 10 Claude Code hooks

模块布局

src/
  main.rs                 CLI entry point (16 commands, clap derive)
  mcp/server.rs           MCP server — 44 tools via rmcp #[tool] macros
  db/schema.rs            SQLite schema — FTS5 + sqlite-vec + unresolved_refs
  indexer/
    parser.rs             32 tree-sitter grammars, statically linked
    extractor.rs          AST → nodes, edges, qualified names for all languages
    pipeline.rs           Parallel indexing with rayon + incremental SHA-256 hashing
    embedder.rs           Jina v2 Base Code embeddings (768-dim, ONNX)
  graph/
    store.rs              CRUD operations with prepare_cached
    traversal.rs          Dependency/caller/callee traversal via recursive CTEs
    ranking.rs            PageRank, personalized PageRank, blast radius
    search.rs             Hybrid FTS5 + vector search, RRF fusion (k=60)
    complexity.rs         Cyclomatic + cognitive complexity analysis
    dataflow.rs           Def-use chains, reaching definitions, dead stores
  context/
    assembler.rs          4-tier token-budgeted LLM context assembly
    budget.rs             Token estimation, truncation, signature extraction
  resolution/
    imports.rs            Cross-file import resolution + path alias support
    routes.rs             Framework-specific route/component resolvers
    frameworks.rs         Framework detection (18+ frameworks from manifests)
    dead_code.rs          Unused symbol detection via edge analysis
  git/
    blame.rs              Git blame integration
    history.rs            File/symbol history, commit diffs
    analysis.rs           Hotspots, contributors, branch info
  security/
    scanner.rs            Directory/file scanning engine
    rules.rs              YAML rule parser + bundled rule loader
    taint.rs              Source-to-sink taint analysis
  config/
    schema.rs             Configuration data model + validation
    loader.rs             Layered config loading (user → project → env → CLI)
    preset.rs             4 presets with tool/category filtering
  observability/
    mod.rs                Structured logging (tracing), path validation, secret redaction
  eval/
    harness.rs            Evaluation framework (precision/recall/F1)
    token_benchmark.rs    Token reduction measurement vs baseline
  cli/
    installer.rs          Interactive installer with ASCII banner + progress bars
  hooks/
    install.rs            .mcp.json + .claude/settings.json + shell scripts
    handlers.rs           10 runtime handlers with catch_unwind safety
    git_hooks.rs          Git post-commit hook (idempotent, marker-based)
    claude_template.rs    CLAUDE.md generation with tool instructions

CLI参考

codegraph init <dir>              Full interactive setup (banner, prompts, progress bars)
codegraph init <dir> --yes        Non-interactive setup (CI/scripting)
codegraph index <dir>             Index a codebase (incremental by default)
codegraph index <dir> --force     Force full re-index
codegraph serve                   Start MCP server (stdio transport)
codegraph query <text>            Search the code graph
codegraph impact <target>         Blast radius analysis
codegraph stats                   Show index statistics
codegraph dead-code               Find potentially unused symbols
codegraph frameworks <dir>        Detect frameworks and libraries
codegraph languages               Language breakdown
codegraph install-hooks <dir>     Install Claude Code hooks
codegraph git-hooks install       Install git post-commit hook
codegraph git-hooks uninstall     Remove git post-commit hook

从源头构建

# Prerequisites: Rust 1.75+, C compiler (for tree-sitter + SQLite)

# Full build with embeddings
cargo build --release

# Without embeddings (keyword-only search, leaner binary)
cargo build --release --no-default-features

# Run the test suite (2065 tests)
cargo test

卸载

# Remove the binary
rm ~/.local/bin/codegraph

# Remove project data (run inside each project you initialized)
rm -rf .codegraph/
codegraph git-hooks uninstall

# Remove Claude Code integration files (optional, check before deleting)
rm .mcp.json
rm -rf .claude/

设计决策

  • 同步核心,仅在MCP边界异步。 树保姆和rusqlite是同步的。Tokio仅用于rmcp stdio传输。
  • 当地的树保姆,不是WASM。 32个语法静态链接。无初始化延迟,无运行时下载。
  • 代码特定嵌入。 Jina v2基础代码(768 dim)理解编程语言语义,而不仅仅是自然语言。
  • 特征门控嵌入。 构建于 --no-default-features 对于只进行关键字搜索的更精简的二进制文件。
  • 胡克从不惊慌。 每个处理程序都使用 catch_unwind 并且总是返回有效的JSON。CodeGraph永远不会阻止您的代理。
  • 我放弃一切。 跑步 init 两次产生相同的结果。钩子是基于标记的。配置合并是累加的。
  • 按遏制措施列出的合格名称。 Class.method 名称来源于行范围外壳,适用于所有32种语言,无需特定语言的逻辑。
  • 结构化日志记录。 使用 tracing 板条箱 RUST_LOG 支持。所有MCP工具输入/输出上的路径遍历保护和秘密编校。

许可证

麻省理工学院


使用原生Rust、树保姆构建,并坚信AI编码代理应该比grep有更好的上下文。