关于 jarvis
jarvis 为本地代码仓库建立索引,为编码 Agent 和 MCP 客户端提供导航与搜索。其 SCIP 和 Zoekt 工具可查找符号引用、定义、调用关系及文本匹配,代码和索引均保留在本机。
主要功能
- 01查找符号引用和定义
- 02查看调用与类型层级
- 03浏览文件中的符号
- 04使用 Zoekt 进行词法搜索
- 05索引仓库并检查新旧状态
适用场景
- 01查找符号的所有用例
- 02追踪调用关系的来向和去向
- 03按文本或正则搜索已索引仓库
- 04检查索引相对工作树的更新状态
MCP 相关
stdio MCP 服务提供十种代码导航、搜索和本地仓库索引工具,可连接 Claude Code、Cursor 和 Claude Desktop 等客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
jarvis
你的编码 Agent 不该把上下文窗口浪费在 grep 上。
当 Agent 问 “AuthService 在哪里用到了?” 时,grep 会把注释、
Markdown、测试夹具和名称相似的符号混成一团杂乱结果。Agent 不得不反复阅读文件,
从噪声中筛选有效信息,白白消耗上下文——却仍然会漏掉调用位置。
jarvis 会预先构建本地代码智能层,让 Agent 调用
findReferences 查找精确匹配项,调用 goToDefinition 查找定义范围,调用
callHierarchy 查看调用路径,并调用 searchCode 进行精确的词法搜索——为 Claude Code、Cursor 或任何 MCP 客户端提供 10 个 MCP 工具。
你的代码和索引永远不会离开你的设备。
| 不使用 jarvis | Grep → 注释、测试、导入与实际匹配项混在一起 → 打开文件进行筛选 → 猜测调用位置 → 把上下文浪费在搜索上,而不是推理上 |
| 使用 jarvis | findReferences("AuthService") → 精确到文件和范围的匹配项 → 用 callHierarchy 查看调用图 → searchCode("token refresh") → 无需打开每个匹配项即可获得答案 |
快速开始 · MCP 工具 · 仪表板 · 限制 · 详细信息 · 文档
快速开始
1. 安装独立二进制文件:
brew install jarvis-intelligence/jarvis/jarvis
Linux 用户需要先安装 Homebrew/Linuxbrew。
该公式支持 macOS arm64/x86_64 和 Linux
arm64/x86_64,会同时安装 jarvis 和 jarvis-server,并内置 Python
3.12、仪表板资源、tree-sitter 库、watch、scip、
zoekt-git-index 和 zoekt-webserver。Homebrew 会提供
universal-ctags。无需安装 Python、uv、pip 或 PyPI 软件包。
使用 brew upgrade jarvis 升级;使用 brew reinstall jarvis 修复损坏的安装。
2. 为仓库建立索引(slug 默认为目录名称):
jarvis index /path/to/your/repo
3. 注册 MCP 服务:
claude mcp add jarvis --scope user -- jarvis-server
让你的 Agent “查找所有对 AuthService 的引用”——它会调用
findReferences,而不是使用 grep 搜索。
其他 MCP 客户端(Cursor、Claude Desktop,以及任何 stdio 客户端)
{
"mcpServers": {
"jarvis": {
"command": "jarvis-server"
}
}
}
如果客户端无法在 PATH 中找到 jarvis-server(图形界面应用通常不会继承 shell 的
环境变量),请使用 which jarvis-server 获取其绝对路径。
Claude Code 插件(注册 MCP 服务并附带 Agent 技能)
请先安装 Homebrew 二进制文件。该插件会添加 jarvis 技能,并可注册已安装的
jarvis-server。
/plugin marketplace add jarvis-intelligence/jarvis-index
/plugin install jarvis@jarvis
可选语言索引器
独立软件包包含 SCIP 转换器和两个 Zoekt 二进制文件。
Homebrew 公式不会安装 setup.sh;请从 jarvis 源码检出目录中,为你的仓库
安装可选的语言索引器:
| 语言 | 安装程序 | 工具链 |
|---|---|---|
| TypeScript/TSX | sh setup.sh --only scip-typescript | Node.js/npm |
| Python | sh setup.sh --only scip-python | Node.js/npm |
| Java/Kotlin | sh setup.sh --only scip-java | JDK;Kotlin 仓库要求版本必须恰好为 2.2.0 |
| Swift | sh setup.sh --only scip-swift | macOS arm64 上的 Xcode |
对于在 macOS 上使用 Maven 构建的 Java 仓库,还需使用
brew install bash 安装较新版本的 Bash,然后在同一源码检出目录中运行
sh setup.sh --only bash-shim。添加索引器后请重新建立索引。若没有对应的
索引器,在 Tree-sitter 覆盖的范围内,documentSymbols 和 goToDefinition 仍可
使用;
findReferences、callHierarchy 和 typeHierarchy 会返回恢复
指引。
未包含的功能
为兼容 MCP,已注册 semanticSearch,但独立发行版不包含该功能。它会返回一条
特定于 Homebrew 的不可用错误,并指向下方的源码构建步骤;词法搜索和符号搜索
仍可使用。
从源码构建语义搜索
独立 Homebrew 软件包不包含语义搜索依赖项。在源码检出目录中,使用以下命令安装:
uv run jarvis install-semantic
然后显式建立索引:
uv run jarvis index /path/to/repo --semantic
install-semantic 还会将嵌入模型(BAAI/bge-m3,
约 4.3 GB,仅需下载一次)预下载到共享的 Hugging Face 缓存
(~/.cache/huggingface/);所有已建立索引的仓库都会复用该模型。如果下载
中断,下次运行 jarvis index 时会自动重试。
MCP 工具
| 工具 | 功能 |
|---|---|
goToDefinition | 将符号解析到其定义文件和范围 |
findReferences | 查找已建立索引的仓库中某个符号的所有出现位置 |
callHierarchy | 某个符号的传入/传出调用 |
typeHierarchy | 父类型/子类型 |
documentSymbols | 列出某个文件中定义的所有符号 |
searchCode | Zoekt 词法/正则搜索,可选择限定在单个仓库中 |
semanticSearch | 返回 Homebrew 发行版的语义搜索不可用错误 |
blastRadius | 最多 2 跳范围内依赖某个软件包的其他已建立索引的仓库 |
getIndexStatus | 已发布的提交、最新状态,以及相对于工作树的陈旧状态 |
indexRepo | 为 path 处的 git 仓库建立索引 |
仪表板
jarvis dashboard # serves http://127.0.0.1:6080 and opens a browser
本地 Web 控制台,使用 CLI 和 MCP 服务读取的同一份 ~/.jarvis 数据:
要求和限制
- 仅支持 macOS arm64/x86_64 和 Linux arm64/x86_64。 不支持 Windows。
- Homebrew 发行版中无法使用语义搜索。
- 每个仓库只能使用一种语言——根据 Git 跟踪文件中占多数的扩展名检测;可通过
--language覆盖。 - jarvis 从不编辑代码。 它负责检索——Serena 可与之配合完成重命名和重构。
- 索引需显式创建——查询前运行
jarvis index(或jarvis watch)。
详情
工作原理
一个索引 CLI 将预计算索引写入 ~/.jarvis;一个 stdio
运行时读取这些索引。两者之间没有其他约定。
- 发布是原子的——重新索引会写入新快照,然后通过
os.replace切换current指针。读取旧快照的查询会继续运行;不会出现停机窗口。 - 运行时路径绝不写入数据——每次查询都以只读方式打开已发布的快照(
mode=ro&immutable=1)。 - 软件包依赖图会重建,而非累积——每次重新索引都会先清除该仓库的出边,再重新计算。
索引 CLI 参考
jarvis index /path/to/your/repo # slug defaults to the directory name
jarvis index /path/to/your/repo --slug foo # or pick one explicitly
jarvis index /path/to/your/repo --scheme MyScheme # Swift repo with an ambiguous Xcode scheme
jarvis index /path/to/your/repo --language python # force the language instead of detecting it
jarvis index /path/to/your/repo --no-scip # skip optional SCIP enrichment; syntax baseline + Zoekt still publish
jarvis index /path/to/your/repo --scip # re-enable SCIP enrichment (both flags persist per repo)
jarvis list
jarvis status foo
jarvis reindex foo
jarvis forget foo
jarvis watch /path/to/your/repo [--debounce 5.0] # debounced auto-reindex on file changes (foreground)
已知上游限制
scip-java无法为 Android/Gradle 仓库创建索引——其 Gradle 插件依赖标准源集,而 AGP 会替换这些源集(scip-java#177)。系统会自动检测,并降级为仅搜索。- Kotlin 索引要求 Kotlin 版本完全匹配——
scip-kotlinc是针对一个固定版本编译的(当前为2.2.0)。系统会自动检测。 - 通过 Maven 构建的 Java 仓库在 macOS 上需要 bash ≥ 4.4——运行
brew install bash即可解决。 - Swift 索引要求
scip >= v0.9.0——较旧的转换器会静默丢弃出现位置范围。jarvis index会拒绝使用较旧的scip,以免发布损坏的索引。
配置
| 变量 | 用途 |
|---|---|
JARVIS_DATA_DIR | 覆盖所有索引和注册表的默认目录 ~/.jarvis |
源代码开发中的语义路径还支持额外的模型前缀覆盖; 这些设置不会影响独立发行版。
文档
docs/project-overview-pdr.md— 范围、价值主张和不在范围内的事项docs/system-architecture.md— 架构保证、存储布局和查询路径docs/codebase-summary.md— 模块概览、测试覆盖率docs/code-standards.md— 代码模式和约定docs/dashboard.md— 仪表板视图、操作和安全模型
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。