关于 RLM Tools
RLM Tools 是供 AI 编码 Agent 探索代码库的持久化 Python 沙箱,原始数据留在服务端,仅将代码执行结果返回对话。它适用于需要搜索和读取大量代码的工作,并以只读、受限的文件访问方式运行。
主要功能
- 01持久化 Python 沙箱会话
- 02读取、搜索和筛选代码文件
- 03文件树与模式匹配
- 04只读且限定目录的访问
适用场景
- 01汇总大型 grep 搜索结果
- 02跨文件读取并提炼代码信息
- 03逐步探索项目模块
- 04在沙箱中执行可选语义分析
MCP 相关
该 MCP 服务提供会话创建、Python 代码执行和会话关闭三个工具,并内置文件读取、搜索和目录浏览辅助函数。可选的 llm_query 使用 Anthropic API 进行沙箱内语义分析。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
RLM Tools
AI 编码 Agent 的大部分令牌预算都花在了读取代码上,而不是分析代码。每次 grep、读取文件和 glob 的结果都会被全部塞进对话中。在大型代码库中,这会让 25-35% 的上下文(和成本)耗费在模型根本不需要看到的原始数据上。
RLM Tools 为 Agent 提供了一个持久沙箱,用于探索代码。数据留在服务端,只有结论会返回。
# Install in one line (Claude Code)
claude mcp add rlm-tools -- uvx rlm-tools
# Or Codex
codex mcp add rlm-tools -- uvx rlm-tools
就是这样。Agent 会自动使用沙箱进行探索。无需配置,也无需修改提示词。
有何变化
不使用 RLM Tools——Agent grep import UIKit,500 条匹配结果全部被塞进上下文。读取 10 个文件,所有内容都消耗令牌。上下文窗口被填满,Agent 忘了自己正在做什么。
使用 RLM Tools——Agent 在服务端 Python 沙箱中进行同样的探索。数据留在沙箱内存中,只有 print() 的输出会进入上下文:
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")
500 行 grep 结果变成 5 行摘要。Agent 只看到所需内容,不多不少。
实际效果
在典型的编码工作流中:上下文减少 25-35%。 这意味着 Agent 在达到上下文限制前,可以多探索约 40-50% 的代码。
在大量探索任务中(读取多个文件、大范围搜索),节省效果会更显著:
| 场景 | 标准工具 | RLM Tools | 节省 |
|---|---|---|---|
| 搜索整个应用 | 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
工作原理
三个 MCP 工具,这就是全部 API:
| 工具 | 用途 |
|---|---|
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)— 子大模型分析(可选,需 API 密钥)
变量会在同一会话中的多次 rlm_execute 调用间持久保留。Agent 可以逐步建立理解——搜索、筛选、读取、分析——中间数据无需进入上下文窗口。
兼容
RLM Tools 是标准的 MCP 服务。它兼容任何支持 MCP 的客户端:Claude Code、Codex、Cursor 等。
其他安装方式
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"]。
配置
将 .env.example 复制为 .env 进行自定义。所有设置均为可选项——RLM Tools 无需任何配置即可开箱即用。
核心探索功能(读取、grep、glob、tree)无需 API 密钥。可选的 llm_query() 助手函数会调用 Anthropic API,在沙箱内进行语义分析;这是唯一需要密钥的功能。
| 变量 | 默认值 | 说明 |
|---|---|---|
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 - 文件访问:只读,范围限定在会话目录内,并阻止路径遍历
- 执行:可配置每次调用的超时时间(默认 30s)
- 速率限制:可配置每个会话的最大调用次数
背景
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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。