README
🚀 RLM Tools
RLM Tools 是一款能为 AI 编码代理提供持久沙盒环境以探索代码的工具。在大型代码库中,AI 编码代理大部分的令牌预算都花费在读取代码上,而非对代码进行推理。而 RLM Tools 能让数据留在服务器端,仅将结论返回,有效减少上下文占用,提升编码效率。
🚀 快速开始
你可以使用以下命令一键安装 RLM Tools:
# 使用 Claude Code 安装
claude mcp add rlm-tools -- uvx rlm-tools
# 或者使用 Codex 安装
codex mcp add rlm-tools -- uvx rlm-tools
安装完成后,代理会自动使用沙盒进行代码探索,无需额外配置或更改提示。
✨ 主要特性
减少上下文占用
在典型的编码工作流程中,使用 RLM Tools 可减少 25 - 35% 的上下文占用,这意味着代理在达到上下文限制之前可以探索大约多 40 - 50% 的代码。在大量探索任务(如读取多个文件、广泛搜索)中,节省的效果更为显著: | 场景 | 标准工具 | RLM Tools | 节省比例 | | --- | ---: | --- | --- | | 全应用 grep 搜索 | 40,045 字符 | 1,644 字符 | 95.9% | | 读取 10 个大文件 | 1,493,720 字符 | 13,588 字符 | 99.1% | | 多步骤探索 | 136,102 字符 | 5,285 字符 | 96.1% | | grep 搜索后读取匹配项 | 340,408 字符 | 6,022 字符 | 98.2% | | 查找模式的所有使用情况 | 13,478 字符 | 3,691 字符 | 72.6% | | 理解一个模块 | 94,745 字符 | 16,925 字符 | 82.1% |
完整的基准测试方法和复现步骤请参考:docs/benchmarks.md
高效探索代码
RLM Tools 提供了一个服务器端的 Python 沙盒,代理可以在其中运行探索代码,数据保留在沙盒内存中,仅将 print() 输出传递到上下文中。例如,在搜索 import UIKit 时,原本 500 行的 grep 结果可以简化为 5 行摘要:
matches = grep("import UIKit")
by_module = {}
for m in matches:
module = m["file"].split("/")[0]
by_module.setdefault(module, []).append(m)
for module, ms in sorted(by_module.items(), key=lambda x: -len(x[1]))[:5]:
print(f"{module}: {len(ms)} files")
📦 安装指南
一键安装
# 使用 Claude Code 安装
claude mcp add rlm-tools -- uvx rlm-tools
# 或者使用 Codex 安装
codex mcp add rlm-tools -- uvx rlm-tools
其他安装方法
其他安装方法
JSON MCP 配置(Cursor、Windsurf 等)
{
"mcpServers": {
"rlm-tools": {
"command": "uvx",
"args": ["rlm-tools"]
}
}
}
直接运行
uvx rlm-tools
从源代码安装
git clone https://github.com/stefanoshea/rlm-tools.git
cd rlm-tools
uv sync
uv run rlm-tools
然后将你的 MCP 客户端指向 command: uv,args: ["--directory", "/path/to/rlm-tools", "run", "rlm-tools"]。
💻 使用示例
基础用法
使用 RLM Tools 的三个核心 MCP 工具:
| 工具 | 用途 |
| --- | --- |
| rlm_start(path, query) | 在指定目录打开一个会话 |
| rlm_execute(session_id, code) | 在沙盒中运行 Python 代码 |
| rlm_end(session_id) | 关闭会话,释放资源 |
高级用法
沙盒提供了一些内置辅助函数:
read_file(path)/read_files(paths)— 将文件读取到变量中(跨调用缓存)grep(pattern)/grep_summary(pattern)/grep_read(pattern)— 搜索glob_files(pattern)— 根据模式查找文件tree(path, max_depth)— 显示目录结构llm_query(prompt, context)— 子 LLM 分析(可选,需要 API 密钥)
变量在会话内的 rlm_execute 调用之间保持持久化,代理可以逐步建立理解,进行搜索、过滤、读取和分析,而无需将任何中间数据放入上下文窗口。
📚 详细文档
配置
复制 .env.example 到 .env 进行自定义配置。所有设置都是可选的,RLM Tools 无需配置即可直接使用。
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
| ANTHROPIC_API_KEY | — | 仅 llm_query() 需要。使用 Anthropic 的 API(Claude) |
| RLM_SUB_MODEL | claude-haiku-4-5-20251001 | llm_query() 使用的 Claude 模型 |
| RLM_MAX_SESSIONS | 5 | 最大并发会话数 |
| RLM_SESSION_TIMEOUT | 10 | 会话超时时间(分钟) |
安全
沙盒是只读且受限的:
- 导入:仅允许安全的标准库(如 re、json、collections、math 等)
- 内置函数:阻止 exec、eval、compile、
__import__、breakpoint - 文件访问:只读,作用域限于会话目录,阻止路径遍历
- 执行:可配置每次调用的超时时间(默认 30 秒)
- 速率限制:可配置每个会话的最大调用次数
🔧 技术细节
RLM Tools 实现了一个 RLM 风格 的探索循环,将原始数据保留在工具端内存中,仅将紧凑的输出发送到模型。它基于 Model Context Protocol 构建。
🏗️ 开发
git clone https://github.com/stefanoshea/rlm-tools.git
cd rlm-tools
uv sync --dev
pytest tests
运行比较基准测试(需要本地项目检出):
RLM_EVAL_PROJECT_PATH=/path/to/project pytest evals -q -s
📄 许可证
本项目采用 MIT 许可证。
微信扫一扫