opencode-rust

用 Rust 重写的开源 AI 编码代理,提供 CLI、TUI 与 HTTP 服务,无需 Docker。

Star 数
★ 52
最近更新
2 天前
License
MIT
主语言
Rust

30 秒速览

可在哪里用
兼容但需适配OpenAI API · Claude API
开始前需要
Node.js 18+Rust 工具链(Homebrew 或源码安装)模型提供商 API 密钥(如 ANTHROPIC_API_KEY)Shell / 命令行网络访问本地文件系统MCP Server
典型场景
需要在本地终端里做仓库级代码阅读、修改与分析的开发者,希望用 TUI 而不是网页聊天。
主要局限
run 从未在付费提供商上端到端验证,README 明言免费 OpenRouter 模型拒绝工具 schema、付费模型无额度返回 402。

这个 Agent 能做什么,适合哪些场景?

opencode-rust 是 OpenCode 的 Rust 实现,由一个包含 20 个 crate 的 Cargo workspace 组成,核心组件包括 opencode-cli(二进制 opencode 与代理别名)、opencode-server(HTTP/SSE/WebSocket 服务与 MCP 加载器)、opencode-session(会话提示循环)、opencode-agent、opencode-tool(22 个内置工具与注册表)、opencode-provider、opencode-mcp、opencode-plugin、opencode-lsp、opencode-storage(SQLite)与 opencode-tui。它通过 npm、Homebrew 或 install.sh 安装,统一以 opr 命令暴露交互式 TUI、单次执行的 run 子命令、serve HTTP 服务器、web、acp 等交互模式。设计动机是用 Rust 替换 TypeScript 引擎以解决内存与实例状态泄漏:对话历史写入 SQLite,工具 schema 按 (model, tool-set) 缓存,实例状态按配置哈希做 LRU+TTL 回收,因此不需要容器运行时。部署边界是本机进程:引擎会启动 Node 子进程运行插件桥、通过 npx 拉起 MCP 服务器,因此无论何种安装方式都要求 Node 18+,并需要自备模型提供商密钥。

引擎以 opr 命令启动:opr 进入交互式 TUI,opr run "..." 驱动与 HTTP 服务器相同的 SessionPrompt 循环,opr serve --port 3000 启动 HTTP/SSE/WebSocket 服务。会话循环把请求发给 opencode-provider 中的提供商适配器,解析流式工具调用,在 opencode-tool 注册表中解析并执行 22 个内置工具与 MCP 工具,权限按路径范围判定、最后匹配规则生效。工具侧通过 opencode-mcp 以换行分隔 JSON 的 stdio 或 HTTP 连接 MCP 服务器,通过 opencode-lsp 连接语言服务器,通过 opencode-plugin 以 Node 子进程承载 TypeScript 插件桥(sendNotification 反向通道按 params.requestId 关联)。会话、消息与分片存入 SQLite(sessions、messages、parts)。run 子命令会等待会话 idle、等待父 SQLite 中记录的子代理任务静止,并读取 .omo/run-continuation/<session>.json 的后台任务状态,超时默认 120 秒、失败时放行而非挂死。

  1. 需要在本地终端里做仓库级代码阅读、修改与分析的开发者,希望用 TUI 而不是网页聊天。
  2. 想要把编码代理作为 HTTP 服务嵌入自有工具链的团队,使用 opr serve 与 ACP/Web 模式。
  3. 对 Docker 运行时开销敏感、希望以单一本机二进制运行代理的工程师。
  4. 已经维护 OpenCode / oh-my-opencode 配置(opencode.json、~/.omo/omo.jsonc)并希望复用代理定义与模型的用户。
  5. 需要通过 MCP 服务器与 LSP 把外部工具与语言服务接入编码代理的场景。

如何安装或部署这个 Agent?

npm 方式(Linux、macOS、Windows,安装器不编译,按平台拉取预编译包):

npm install -g opencode-rust

Homebrew 方式(macOS 与 Linux,从源码构建,首次会拉取 Rust 工具链):

brew install vakandi/tap/opencode-rust

源码方式:

git clone https://github.com/vakandi/opencode-rust.git
cd opencode-rust
./install.sh          # 构建 release 二进制并安装 opr;--force 强制重建

运行前需 Node 18+,并设置提供商密钥:

export ANTHROPIC_API_KEY=sk-ant-...

如何使用这个 Agent?

最简首次运行:

opr                                   # 交互式 TUI
opr run "check this repo for risks"    # 单条提示,运行到完成
opr serve --port 3000                 # HTTP 服务器

通过 npm 安装时 opr 是分发脚本,opr --some-flag 会被改写为 opencode tui --some-flag;通过 Homebrew 或 install.sh 安装时 opr 就是引擎二进制,需要写出子命令:

opr tui --some-flag

查看数据位置与运行测试:

opr db path
cargo test --workspace

这个 Agent 有哪些优点和局限?

优点
  • 单一本机二进制运行,不需要 Docker、cgroup 或容器运行时。
  • 多提供商适配器(opencode-provider)加 MCP、LSP、TypeScript 插件桥,扩展面完整。
  • MCP 修复后有实测数据:3 个服务器约 4 秒启动、77 个工具暴露给代理。
  • 会话持久化在 SQLite,工具 schema 按 (model, tool-set) 缓存,实例状态按配置哈希 LRU+TTL 回收。
  • run 子命令会等待子代理与后台任务结束,失败时放行而不是挂死。
局限
  • run 从未在付费提供商上端到端验证,README 明言免费 OpenRouter 模型拒绝工具 schema、付费模型无额度返回 402。
  • 无论安装方式都依赖 Node 18+(插件桥与 npx 启动 MCP)。
  • opr 的语义随安装渠道不同(npm 下是分发脚本,Homebrew/install.sh 下是引擎本体),容易误用。
  • Homebrew 与源码安装需要 Rust 工具链,首次构建成本高。
  • 20 个 crate 的 workspace 结构意味着上手需要理解多个组件与配置合并路径。

这个 Agent 与同类方案有什么区别?

README 将其定位为 OpenCode(原 TypeScript 引擎)的 Rust 实现,并直接对比两者:TypeScript 版本把对话历史放在内存、每个 LLM 步骤重算工具 schema、按目录维护不回收的实例状态,并用 Docker 运行时来容纳这些开销;Rust 版本改用 SQLite 持久化、schema 缓存与 LRU+TTL 回收,从而去掉容器。它声明与 OpenCode 团队无关联。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
opencode-rust 当前 46 · 缺口较多 — ★ 52 2 天前 Rust OpenAI API · Claude API
zerostack 57 · 缺口较多 命令行工具免费 + 模型费 ★ 1.7k 今天 Rust OpenAI API · Claude API
Tura 65 · 存在缺口 命令行工具免费 + 模型费 ★ 657 19 天前 Rust —
Aster 77 · 表现良好 命令行工具免费 + 模型费 ★ 132 今天 Rust OpenAI API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
缺口较多
46/ 100 五分制 2.3 / 5
信任安全 11/29
可靠稳定 6/14
适用触发 10/18
规范维护 9/18
有效结果 6/13
证据核验 4/8
查看各维度的扣分理由
信任安全11 / 29 · 1.9/5

README 提到 opencode-permission 提供按路径作用域、最后匹配规则生效的权限层,docs/opencode-permission.md 也描述了 allow/deny/ask 与 PermissionAsk 钩子,但仅有设计描述,未见默认策略、确认流程或敏感数据(API key、会话内容)处理的具体实现证据,故 least_privilege、user_confirmation、sensitive_data_handling 均只给 1。数据流方面 README 说明会话落 SQLite、插件为 Node 子进程、MCP 经 npx 启动,但未说明数据外发边界,data_flow_transparency 给 1。依赖安全方面 Cargo.toml 固定了部分版本(nucleo-matcher、syntect、similar),但无审计或漏洞说明,dependency_security 给 1。外部效应与回滚:install.sh/clean.sh 有防误删与 --force 说明,但工具执行本身无回滚机制,external_effects 与 rollback 各给 1。source_attribution 有 LICENSE 与对 OpenCode 上游的明确致谢及非关联声明,给 2。

可靠稳定6 / 14 · 2.1/5

README 对 run 的排空逻辑、MCP 修复、TUI 缺陷有较细描述,但存在自相矛盾:README 称 npm 使用按平台拆分的二进制包,而 publish.yml 注释明确说平台包方案已被放弃、改为 release 资产由 install.js 拉取,self_consistency 扣至 1。依赖可用性方面要求 Node 18+ 与 npx,且 Homebrew 需 Rust 工具链,依赖链较重且未给出离线方案,dependency_availability 给 1。失败信息方面 README 描述了安装无匹配平台时打印替代方案并干净退出、drain 失败开放不挂起、TUI 显示 API 错误,failure_messages 给 2。

适用触发10 / 18 · 2.8/5

README 明确区分 TUI、run、serve、web、acp 多种场景与 build/plan 内置 agent,audience_and_scenarios 给 2。capability_boundaries 有 build 全权限与 plan 只读的区分,并说明 run 与 TUI 行为差异,给 2。trigger_precision 方面 opr 在不同安装方式下语义不同(npm 为 dispatcher、Homebrew 为引擎本体),同一命令行为不一致,扣至 1。environment_fit 覆盖 Linux/macOS/Windows 与多架构,给 2。

规范维护9 / 18 · 2.5/5

README 结构清晰、有仓库结构与 docs 索引,information_architecture 给 2。install_notes 详述 npm/Homebrew/源码三种方式及差异,给 2。naming_stability 存在 opr/opencode 双名与安装方式差异,扣至 1。examples_and_faq 有少量命令示例但无 FAQ,给 1。known_limitations 明确写出 run 未在真实付费 provider 上端到端验证,给 2。license 为 MIT 且文件完整,给 2。versioning_changelog 仅有 workspace 0.1.0 与 v* 标签发布,无 CHANGELOG,给 1。maintenance_responsibility 发布者未经验证,LICENSE 版权方与仓库 owner 不一致(opencode/ChrisFeldmeier 对 vakandi),维护责任不清,给 1。

有效结果6 / 13 · 2.3/5

output_usability 有 CLI 命令表、run 参数与配置路径,给 2。marginal_value 作为 OpenCode 的 Rust 重写,价值主张(无 Docker、SQLite 持久化)有说明但缺乏与上游的量化对比,给 1。cost_benefit 需 Node 运行时、Rust 工具链(Homebrew)与 provider key,成本不低而收益证据有限,给 1。

证据核验4 / 8 · 2.5/5

claim_traceability 方面 README 的修复叙述(MCP 三缺陷、TUI 宽度)指向具体代码但未给出提交或测试链接,给 1。cross_source_corroboration 仅 README、docs 与 workflow 相互印证部分内容,且 npm 打包方式存在矛盾,给 1。fact_inference_separation 较好,README 明确区分已测量与未验证(known limitation),给 2。

风险与缓解建议
  • README 与 publish.yml 对 npm 分发方式(按平台拆分包 vs release 资产)描述矛盾,安装行为需自行核实。
  • opr 在 npm、Homebrew、install.sh 下语义不同,同一命令可能被拒绝或转发,脚本化调用前需确认安装方式。
  • 权限层仅有设计文档,未见默认策略与确认流程的实现证据,高风险工具操作前应人工审查配置。
  • LICENSE 版权方与仓库 owner 不一致且发布者未经验证,供应链与维护归属需谨慎对待。
  • run 未在真实付费 provider 上端到端验证,工具执行与子代理排空的实际效果未经证实。
证据充分度:低 评估于 2026年10月26日 审查版本 a8d5612f9921
查看完整评分方法 →

常见问题

使用它需要付费吗?
软件本身是 MIT 许可、可免费使用,但你需要自备模型提供商的 API 密钥并按用量付费;README 的 Known limitation 提到付费提供商在无额度时返回 402。
为什么装了它还要装 Node?
引擎会为插件桥启动 Node 子进程,并通过 npx 启动 MCP 服务器,所以即使 npm 安装不编译,Node 18+ 仍是硬性要求。
MCP 和 LSP 真的可用吗?
README 记录了三个已修复的 MCP 缺陷(stdio 使用了 LSP 的 Content-Length 帧、McpServerConfig 反序列化被 untagged enum 误匹配、串行启动无上限),修复后实测 3 个服务器约 4 秒启动并暴露 77 个工具。
opr run 会中途丢任务吗?
不会。run 现在走 SessionPrompt 同一循环,并在轮次后等待 session.idle、SQLite 中的子代理行与 .omo/run-continuation 的后台任务台账,等待默认上限 120 秒,可用 --wait-background-timeout 调整;台账缺失或损坏时按空闲处理。
不同安装方式下 opr 行为一致吗?
不一致。npm 安装的 opr 是分发脚本,会把参数转给 opencode tui;Homebrew 与 install.sh 安装的 opr 是引擎二进制本身,必须显式写出子命令。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents