ARNO(Agent Repository Navigation & Operations)是一个面向编码智能体的 MCP 服务器,定位为“智能体的 IDE”。它把 IDE 通常提供给开发者的能力,通过 MCP 协议提供给编码智能体:按符号读取代码、基于已知修订版本编辑、在编辑时返回编译器诊断、使用仓库自身的命令进行验证、查看变更内容,以及回退到检查点。每一步都是一次工具调用,且不经过 shell。
用途与设计目标
ARNO 的核心目标是解决智能体绕过受控工具、直接使用 shell(grep、sed、cat)的问题。当智能体回退到 shell 时,就没有修订跟踪、没有护栏、没有遥测,也无法知道它做了什么以及为什么那样做。仅靠提示模型不要使用 shell 无法根治,因为 shell 更便宜——token 更少、往返更少、更灵活。因此 ARNO 的思路是让结构化工具成为更便宜的选择,并通过基准测试来衡量是否成功。
主要能力
- 按符号读取代码:ARNO 通过符号感知的方式在代码库中导航。
- 基于修订版本编辑:编辑针对已知修订进行。
- 编译器诊断:编辑时返回编译器诊断信息。
- 仓库命令验证:使用仓库自身的构建和测试命令进行验证。
- 变更查看与回退:查看变更内容,并回退到检查点。
- 语言支持:Go、Java、Scala、TypeScript、Python、Rust、Ruby。
- 语言服务器集成:精确引用、跨文件重命名和编辑时的类型错误需要对应语言服务器;未安装服务器时,ARNO 会说明哪些答案是近似的,缺失服务器不会被视为错误。
- 仓库命令声明:智能体可通过 declare_command 声明常用命令,后续会话从 .arno/commands.json 复用。
- 遥测:arno.telemetry 为本地遥测,不记录参数或响应文本,不包含源代码。
使用方式
ARNO 是一个 stdio MCP 服务器。安装方式包括:
- 安装脚本:下载对应操作系统和 CPU 的最新发布二进制文件,用 checksums.txt 校验,无需 sudo 安装到 /usr/local/bin 或 ~/.local/bin。再次运行同一命令即可更新。
- Go 安装:go install github.com/julianbei/arno/cmd/arno-mcp@latest。
- 预编译二进制:GitHub release 附带 linux 和 darwin 的 amd64、arm64 二进制及 checksums.txt。
- MCPB 包:自 0.0.11 起,每个 GitHub release 附带 arno-mcp_<version>.mcpb,可用 Claude Desktop 打开。
- 容器:提供容器镜像,静态链接 musl。
语言服务器可通过 arno-mcp install 菜单安装,或手动安装(如 gopls、jdtls、metals、TypeScript、Pyright、rust-analyzer、ruby-lsp)。对于智能体或脚本,可使用 --list --json 获取各服务器状态和安装命令。
配置 MCP 客户端时,需要将客户端指向 arno-mcp 二进制。ARNO_WORKSPACE_ROOT 指定要检查和编辑的仓库,--root /path/to/repo 标志优先于环境变量,启动时会打印使用了三个来源(标志、环境变量、工作目录)中的哪一个。
在 Claude Code 中,可将配置放入仓库根目录的 .mcp.json。建议让 ARNO 替代内置工具,因为每轮都会重发整个工具列表,Claude Code 内置工具约占 38k token。使用 arno.json 传入 core 配置,列出十二个工具(读取、编辑、验证、运行仓库声明的命令),其他工具仍可调用。注意:没有 Bash 时智能体无法运行任意命令;需要 git 操作、网络访问或临时脚本的任务仍需 shell。
其他客户端配置:Codex CLI 在 ~/.codex/config.toml 中配置;goose 可通过命令行或 goose configure 添加;OpenCode 在 opencode.json 中配置,工具会以 arno_arno_find 等形式出现。Cline 和 Gemini CLI 尚未验证。
适用场景
- 编码智能体在真实仓库中进行代码查找、引用分析、跨文件重命名、多处修改并验证构建。
- 运行特定测试或测试文件。
- 声明并复用常用仓库命令。
- 在风险操作前创建检查点,出错时回退。
限制与注意事项
- 平台:支持 macOS 和 Linux,不支持 Windows(WSL 2 运行 Linux,但未测试且不接受 bug 报告)。
- JVM 已知问题:Java 或 Scala 文件没有格式化程序运行;大型 Gradle 构建可能使 jdtls 首次回答远慢于 8.5 秒;尚不支持 Kotlin。
- 非 git 目录或尚无提交的仓库:changes、diff、history 和 checkpoint 需要 git,会说明降级,其他功能仍可用。
- 一个服务器服务一个仓库,但可服务其任意工作树;ARNO 固定在启动目录,shell 中的 cd 无法影响它。
- Claude Code 中若不设置 "alwaysLoad": true,可能永远不会使用 ARNO,因为 MCP 工具默认隐藏在工具搜索之后。
- 基准测试结果:在本仓库基准中,ARNO 回答七个现实工程问题的 token 用量是等效 shell 命令的 0.85 倍;在无关仓库的一个问题上为 1.36 倍。0.0.4 试点在四个外部仓库中,替代 Claude Code 内置工具时解决了 12 个真实问题中的 12 个,token 减少 51%,比裁剪到四个工具的 shell 少 18–25%。这些结果有 caveats,详见文档。
- 当前版本 0.0.14,是首个不带 Jade 名称的版本;0.0.11 及更早为 Jade。
- 安装语言服务器是全局包安装,故意不作为 MCP 工具,需通过智能体 shell 批准。
更多细节(如基准测试、响应风格、反馈日志、测试者指南)见项目文档。