代码库索引与知识维基工具

indxr是一个为AI代理设计的快速代码库索引器和知识维基工具,提供代码结构索引和自动更新的知识维基功能,适用于代码库维护和团队知识管理。

  • by bahdotsh
  • Rust
  • 本地部署
  • 73 星标
  • 更新于
在 GitHub 查看 bahdotsh/indxr

使用说明

indxr

用于AI代理的快速代码库索引器和知识维基。

indxr为AI代理提供了一个持久的、自我更新的wiki,该wiki由快速的结构索引支持,可以查看您的代码库。架构决策、模块责任、故障模式——通常存在于人们脑海中的东西——被写下来并保持最新状态。


特性

  • 代码库知识维基 --具有架构页面、模块概述、故障模式记录、矛盾跟踪和知识复合的持久wiki。代理查询它,从中学习,并写回它
  • 9个wiki MCP工具 — wiki_generate, wiki_search, wiki_read, wiki_contribute, wiki_update, wiki_compound, wiki_suggest_contribution, wiki_record_failure, wiki_status
  • 自我更新 --wiki通过以下方式自动与代码更改保持同步 indxr serve --watch --wiki-auto-update
  • 26工具MCP服务器 (3个复合默认值+23个粒度过孔 --all-tools)--符号查找、文件摘要、调用者跟踪、签名搜索、复杂性热点、类型流跟踪、工作区支持
  • 27种语言 --树型AST解析8种语言,正则表达式提取19种以上
  • 令牌感知 --渐进式截断以适应上下文窗口
  • Git结构差异 --声明级别差异(+ 补充, - 远离的, ~ 更改)针对任何git ref或GitHub PR
  • 依赖图 --文件和符号依赖关系可视化为DOT、Mermaid或JSON
  • 文件监视 --编辑时通过以下方式不断重新索引 indxr watch 或 indxr serve --watch
  • Monrepo/工作空间支持 --Cargo、npm、Go工作空间; --member 针对特定成员
  • 一个命令代理设置 — indxr init 配置克劳德代码、游标、Windsurf、Codex CLI
  • 增量缓存 --mtime+xxh3内容哈希
  • 复杂性热点 --每个函数的圈复杂度、嵌套深度、参数计数;代码库健康报告
  • 可组合过滤器 --路径、种类、符号名称、可见性、语言

安装

cargo install indxr --features wiki

这将在完整的wiki系统中安装indxr。对于其他运输:

cargo install indxr --features wiki,http   # + Streamable HTTP transport

或者从源代码构建:

git clone https://github.com/bahdotsh/indxr.git
cd indxr && cargo build --release --features wiki

您也可以在没有wiki功能的情况下安装(cargo install indxr)如果你只需要结构索引。

用法

# Wiki — the core workflow
indxr wiki generate                          # generate codebase knowledge wiki
indxr wiki update                            # update wiki after code changes
indxr wiki status                            # check wiki health
indxr wiki compound notes.txt                # compound knowledge from file

# MCP server — live queries + wiki tools for AI agents
indxr serve ./my-project --watch --wiki-auto-update  # recommended: full setup
indxr serve ./my-project                     # start MCP server (structural only)
indxr serve ./my-project --watch             # MCP server with auto-reindex

# Structural indexing
indxr                                        # index cwd → stdout
indxr ./my-project -o INDEX.md               # index project → file
indxr -f json -l rust,python -o index.json   # JSON, filter by language

# Setup
indxr init                                   # set up all agent configs
indxr members                                # list workspace members (monorepo)

代码库知识Wiki

结构索引告诉代理代码库中存在的内容。维基告诉他们为什么。架构决策、模块职责、故障模式——当有人离开团队时,这些东西通常会丢失。

indxr wiki generate                          # generate wiki from scratch
indxr wiki update                            # update after code changes
indxr wiki status                            # check wiki health
indxr wiki compound notes.txt                # compound knowledge from file
echo "synthesis" | indxr wiki compound -     # compound from stdin

Wiki页面存储在 .indxr/wiki/ 作为带有YAML frontmatter的Markdown。页面类型: architecture, module, entity, topic.页面支持 [[page-id]] 交叉引用、矛盾跟踪和故障模式记录。

代理商如何使用wiki

  1. 生成: wiki_generate → 代理从结构上下文中规划页面,编写每个通路 wiki_contribute
  2. 查询: wiki_search 在阅读源代码之前了解模块和设计决策
  3. 学习: wiki_compound 在跨页面分析后保留综合见解
  4. 记录失败: wiki_record_failure 所以未来的特工不会再犯错误
  5. 更新: wiki_update 识别代码更改后的过时页面,代理通过以下方式重写 wiki_contribute

Wiki MCP工具(9个工具)

工具 说明
wiki_generate 初始化新wiki并返回页面规划的结构上下文
wiki_search 按关键字或概念搜索维基;返回包含摘录的匹配页面
wiki_read 按ID阅读维基页面;返回包含元数据的完整内容
wiki_status 检查wiki健康状况:页面计数、过期时间、源文件覆盖率
wiki_contribute 将知识写回维基(创建或更新页面)
wiki_update 分析代码更改并返回带有差异上下文的受影响页面
wiki_suggest_contribution 建议为给定的合成更新哪个页面(无LLM调用)
wiki_compound 自动将综合知识路由到最佳匹配页面
wiki_record_failure 记录失败的修复尝试,供未来的代理学习

wiki_generate 始终列出;一旦wiki存在,剩下的8个工具就会出现。Wiki工具支持矛盾跟踪和故障模式记录。

自动更新wiki

MCP服务器自动使wiki与您的代码保持同步:

indxr serve --watch --wiki-auto-update

源文件更改时触发wiki页面更新。集 ANTHROPIC_API_KEY, OPENAI_API_KEY,或使用 --exec 用于自定义LLM后端。

看 Wiki文档 有关页面结构、LLM配置和磁盘布局的完整详细信息。

代理设置

indxr init                    # set up for all agents
indxr init --claude           # Claude Code only
indxr init --cursor           # Cursor only
indxr init --windsurf         # Windsurf only
indxr init --codex            # OpenAI Codex CLI only
indxr init --global           # install globally for all projects
indxr init --global --cursor  # global Cursor only
indxr init --no-rtk           # skip RTK hook setup
代理 项目文件 全局文件(--global)
克劳德代码 .mcp.json, CLAUDE.md, .claude/settings.json ~/.claude.json, ~/.claude/CLAUDE.md
光标 .cursor/mcp.json, .cursor/rules/indxr.mdc ~/.cursor/mcp.json
风帆冲浪 .windsurf/mcp.json, .windsurf/rules/indxr.md ~/.codeium/windsurf/mcp_config.json, ~/.codeium/windsurf/memories/global_rules.md
Codex CLI .codex/config.toml, AGENTS.md ~/.codex/config.toml, ~/.codex/AGENTS.md
全部 .gitignore 进入, INDEX.md —

代理并不总是选择MCP工具而不是自己读取文件。 indxr init 设置PreToolUse拦截钩子 Read/Bash 用于教授探索工作流程的调用和指令文件。

MCP服务器

JSON-RPC 2.0通过标准输入/标准输出(或可流式HTTP) --features http).默认列出3个复合工具; --all-tools 全部暴露26。当Wiki存在时,Wiki工具(9)可用。

默认工具(3种组合)

工具 说明
find 按概念、名称、调用者或签名模式查找文件/符号。模式: relevant (默认), symbol, callers, signature
summarize 无需阅读源代码即可理解文件/符号。自动检测:glob->批处理,无“/”->符号名称,文件路径->文件摘要。范围: all (默认), public
read 按符号名称或行范围读取源代码(与 read_source)

粒度工具(23--需要 --all-tools)

工具 说明
search_relevant 跨路径、名称、签名和文档的多信号相关性搜索
lookup_symbol 按名称查找声明(不区分大小写的子字符串)
explain_symbol 签名、文档注释、关系、元数据——无正文
get_file_summary 无需阅读即可完成文件概述
batch_file_summaries 在一次通话中汇总多个文件
get_file_context 文件摘要+反向依赖+相关文件
get_public_api 带有文件或目录签名的公共声明
get_callers 查找在所有文件中引用符号的人
list_declarations 使用可选筛选器在文件中列出声明
search_signatures 按签名模式搜索功能
read_source 按符号名称或行范围读取源
get_tree 目录/文件树
get_stats 文件数、行数、语言细分
get_imports 导入文件的语句
get_related_tests 通过命名约定查找测试函数
get_hotspots 按综合得分排名的最复杂函数
get_health 具有聚合复杂性度量的代码库运行状况摘要
get_type_flow 跟踪哪些函数在代码库中生成/使用给定类型
get_dependency_graph 文件和符号依赖图(DOT、Mermaid、JSON)
get_diff_summary 自git ref或GitHub PR以来的结构变化
get_token_estimate 读取前估计令牌
list_workspace_members 列出monorepo工作区成员(Cargo、npm、Go)
regenerate_index 重新索引并更新index.md

即使未列出,粒度工具也始终可调用-- --all-tools 仅控制它们是否出现在 tools/list.

当Wiki存在时,Wiki工具(9)也可用。看 Wiki部分.

在工作空间模式下,工具获得 member param到范围查询。列表工具支持 compact 模式。看 MCP服务器文档 了解详情。

输出

默认格式为Markdown signatures 细节级别:

# Codebase Index: my-project

> Generated: 2025-03-23 | Files: 42 | Lines: 8,234
> Languages: Rust (28), Python (10), TypeScript (4)

## Directory Structure
src/
  main.rs
  parser/
    mod.rs
    rust.rs

## src/main.rs

**Language:** Rust | **Size:** 1.2 KB | **Lines:** 45

**Declarations:**
`pub fn main() -> Result<()>`
`pub struct App`
细节级别 内容
summary 目录树+文件列表
signatures (默认) +声明、导入
full +文档注释、行号、正文数量、元数据、关系

过滤

indxr --filter-path src/parser              # subtree
indxr --kind function --public-only         # public functions only
indxr --symbol "parse"                      # symbol name search
indxr -l rust,python                        # language filter
indxr --filter-path src/model --kind struct --public-only  # combine

过滤器组成。 --kind 接受: function, struct, class, trait, enum, interface, module, method, constant, impl, type, namespace, macro.

Git结构差异

indxr --since main
indxr --since v1.0.0
indxr --since HEAD~5
indxr diff --pr 42                           # diff against a GitHub PR's base branch
## Modified Files

### src/parser/mod.rs
+ `pub fn new_parser() -> Parser`
- `fn old_helper()`
~ `fn process(x: i32)` → `fn process(x: i32, y: i32)`

标记: + 补充, - 远离的, ~ 签名已更改。

复杂性热点

indxr --hotspots                             # top 30 most complex functions
indxr --hotspots --filter-path src/parser    # scoped to a directory

显示圈复杂度、最大嵌套深度、参数计数、体线和每个函数的复合得分。树保姆只解析语言。

MCP工具: get_hotspots, get_health, get_type_flow.

依赖图

indxr --graph dot                            # file-level DOT graph
indxr --graph mermaid                        # file-level Mermaid diagram
indxr --graph json                           # JSON graph
indxr --graph dot --graph-level symbol       # symbol-level graph
indxr --graph mermaid --filter-path src/mcp  # scoped to a directory
indxr --graph dot --graph-depth 2            # limit to 2 hops
级别 描述
file (默认) 文件到文件的导入关系
symbol 符号间关系(特征隐含、方法调用)

代币预算

indxr --max-tokens 4000

截断顺序:文档注释→ 私人声明→ 孩子→ 最不重要的文件。首先保留目录树和公共API曲面。

语言

8个树保姆(全AST)+19个正则表达式(结构提取):

解析器 语言
树保姆 Rust、Python、Types/TSX、JavaScript/JSX、Go、Java、C、C++
正则表达式 Shell、TOML、YAML、JSON、SQL、Markdown、Protobuf、GraphQL、Ruby、Kotlin、Swift、C#、Objective-C、XML、HTML、CSS、Gradle、CMake、属性

检测是按文件扩展名进行的。详细信息: docs/languages.md

演出

通过人造丝进行并行解析。通过mtime+xxh3进行增量缓存。

文档

文档 描述
维基 代码库知识维基——生成、维护和代理工作流
代理集成 与Claude、Codex、Cursor、Copilot等一起使用。
MCP服务器 MCP工具、协议和客户端设置
CLI 参考 完整的标志和选项参考
语言 每种语言提取详细信息
输出格式 格式和细节级别参考
Git难度 自git ref或GitHub PR以来的结构差异
依赖图 文件和符号依赖关系可视化
过滤 路径、种类、符号、可见性过滤器
代币预算 截断策略和评分
缓存 缓存格式和无效

贡献

欢迎投稿——欢迎打开问题或提交PR。

许可证

麻省理工学院