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 stdinWiki页面存储在 .indxr/wiki/ 作为带有YAML frontmatter的Markdown。页面类型: architecture, module, entity, topic.页面支持 [[page-id]] 交叉引用、矛盾跟踪和故障模式记录。
代理商如何使用wiki
- 生成:
wiki_generate→ 代理从结构上下文中规划页面,编写每个通路wiki_contribute - 查询:
wiki_search在阅读源代码之前了解模块和设计决策 - 学习:
wiki_compound在跨页面分析后保留综合见解 - 记录失败:
wiki_record_failure所以未来的特工不会再犯错误 - 更新:
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。
