
编辑落地了。代码面板展示的正是那一块。
在获批的编辑之前拍下;对未经批准的编辑,则由编辑自身的锚点重建。
- 1编辑落地时切到 ± 差异模式
- 2对照磁盘上的文件读 +4 −1
- 3跟着紧凑的工具行走:先读取,再编辑
- 4看着上下文填到 200k 的 13 %
Rovecode 跑在 Bun 上,能对接 16 个提供方或任意 OpenAI 兼容端点,并让每一次工具调用先经过默认拒绝的策略,再触碰你的仓库。AGPL-3.0 下的自由软件。

真实画面:bun test 的批准卡片、+4 −1 的编辑行、上下文占 200k 的 13 %。以固定时钟经 sextant 画笔渲染。
一个面向终端的编码智能体。基于 Bun 的 TypeScript,47 个移植模式,每个工具前面都有一条默认拒绝的策略。
运行 rovecode 的团队
占位名称,待首批客户同意展示后替换。
02驾驶舱
带 git 状态的文件、带高亮条和 ± 差异的代码、紧凑的工具行、计划、用量和吉祥物。以固定时钟经 sextant 画笔无界面渲染:与 TUI 绘制时完全相同的代码路径,不是效果图。
you · sent
add a state check to the oauth callback and run the auth tests
◆ rovecode · needs you
Let me look at the auth flow first.
◆ needs your permissionbash bun test tests/auth.test.ts
allowalwaysdeny↵ confirm · ↔ choose · esc deny
消息面板 · 逐行
每次工具调用只占一行:动作、文件、以及改了什么。这次编辑落地为 +4 −1。Shell 命令等在一张有三个答案的卡片后面;Esc 表示拒绝,答案会在本次会话内一直记住。
子智能体不能发问。被禁止的 argv 根本到不了卡片。
03问题 → 解法
用你在键盘前会说的话陈述,用机制及其边界作答。每一条图带都是真实画面的裁切或真实的配置文件。
{"default": "kaesra/zai-org/glm-5.3-flash","providers": {"kaesra": {"baseUrl": "https://api.kaesra.tech/v1","protocol": "openai","keyEnv": "KAESRA_API_KEY"},
01问题
每个智能体都被焊死在一家厂商的 API 和一张价目表上。
rovecode 的做法
一处 StreamFn 接缝加一份活的提供方注册表。16 个具名提供方,或 providers.json 里任意 OpenAI、Anthropic 兼容端点;在另一个终端里新增的提供方,下一次调用就会用上。按角色的回退链会在 429 或 5xx 时向后推进。
rovecode provider add homelab http://10.0.0.7:8000/v1 --no-key
02问题
智能体正在改的那个文件,被聊天记录顶出了屏幕。
rovecode 的做法
分面板的驾驶舱:文件、代码、消息、计划、用量和云朵吉祥物。消息面板把每次工具调用压成一行;代码面板只展示真正落地的那一块。
files · code · messages · plan · usage · rovecode
03问题
模型要求 rm -rf,而没人来得及说不,框架就执行了。
rovecode 的做法
先是默认拒绝的通配规则,再是 execpolicy 判定——被禁止的既到不了执行也到不了人,然后是针对修正后参数的批准卡片。四层叠加,且没有一层假装自己是沙箱。
rules → execpolicy → approval → runtime denylist + cwd lock
04问题
第 40 轮出了问题,唯一的退路却是重开一段对话。
rovecode 的做法
带 sha256 哈希链的仅追加 JSONL 会话树。/rewind 打开轮次选择器,可从任意一轮分叉,并把那一轮的完整文本填回编辑器;shadow-git 检查点以 3 种模式恢复,且从不碰你的 .git。
/rewind /checkpoints /restore rovecode trace <session-id>04能力
Rovecode 从 pi、opencode、codex、cline、aider、gemini-cli 等处移植有据可查的模式。只有当一位上下文全新的评审依照动工前写下的标准验证通过,移植才会落地。
界面
在至少 100×30 的真彩 TTY 上排布 6 个面板:带 git 状态的文件、带高亮条和 ± 差异的代码、紧凑的工具行、计划、用量、吉祥物。3 套配色,/theme 可热切换;--classic 保留 pi-tui 的聊天界面。
rovecode · ROVECODE_TUI=sextant|classic · /theme night|ember|contrast
提供方
16 个内置,加上你在 providers.json 里登记的一切。每次调用都按活的快照解析提供方:在另一个终端里添加一个,正在运行的驾驶舱下一次调用就会用它。无需重启。
rovecode provider add|list|test · rovecode model use provider/model{"default": "kaesra/zai-org/glm-5.3-flash","providers": {"kaesra": {"baseUrl": "https://api.kaesra.tech/v1","protocol": "openai","keyEnv": "KAESRA_API_KEY"},"homelab": {"baseUrl": "http://10.0.0.7:8000/v1","protocol": "openai","noKey": true,"models": ["qwen3-coder-30b"]}}}
上下文
来自 .rovecode/mcp.json 的 stdio 与 HTTP 服务器。通过 2 个注册表工具惰性披露,空闲的服务器几乎不耗 token。
mcp_list · mcp_call安全
每次工具调用运行前都要爬四级。被禁止的 argv 在任何钩子看到之前就被拒绝;--yolo 跳过询问,但绝不跳过拒绝规则。
rules → execpolicy → approval → runtime
记忆
带 sha256 哈希链的仅追加 JSONL。/rewind 分叉、/resume 续接,shadow-git 检查点以 3 种模式恢复,且从不碰你的 .git。
/rewind · /checkpoints · /restore基于 stdio 的 Agent Client Protocol v1,官方 SDK。
rovecode acp会话、一条 RunEvent 流、/doc 上的 OpenAPI。端口 4100,仅回环。
rovecode serve有上限的 FIFO 子会话,默认并发 3 个;笔记会在父会话的下一轮送达。
/tasks.rovecode/hooks.ts 中 9 个带类型的钩子,各自限时 5 秒。pre_tool 只能拒绝。
pre_tool · approval · on_event每次运行一条链路:run ⊃ turn ⊃ tool,带 token、延迟与成本。未设置端点则没有导出器。
ROVECODE_OTEL_ENDPOINT05安全与部署
README 怎么讲,安全模型就怎么呈现,连同它的限度。每一层都说明自己判断什么、到哪里为止;它们都不是沙箱。
层
判断什么
限度
层 01
01rules针对工具与 argv 的默认拒绝通配规则。被禁止的模式在任何东西运行之前就被拒绝。
限度匹配的是模式而不是意图:危险命令的一种新写法会交给下一层。
层 02
02execpolicy对解析后的 argv 作出裁定:allow、prompt、forbidden。被禁止的既到不了执行,也到不了人。
限度它读的是命令,而不是命令将要运行的 shell;别名或脚本正文对它是不透明的。
层 03
03approval针对修订后参数的一张卡片:允许、始终允许、拒绝。答案按会话缓存;子代理无法发问。
限度这是人的决定:--yolo 跳过这一级,但绝不跳过它上面的拒绝规则。
层 04
04runtime执行时的 bash 拒绝清单与 cwd 锁;Esc 结束正在进行的调用,在 Windows 上还会结束它的整棵进程树。
限度是委派,不是隔离。不受信任的工作应放进容器或 microVM。
部署与数据
01
从源码在你的机器或你的 CI 上运行。账户是可选的:它只解锁定价页面上的套餐,绝不会限制 CLI。唯一的要求是 Bun ≥ 1.3.14。
02
出站流量只去往你配置的提供商、你列出的 MCP 服务器,以及模型请求时的 web_fetch。价格目录是离线快照;没有自动更新。
03
在设置 ROVECODE_OTEL_ENDPOINT 之前,OpenTelemetry 导出是关闭的;即便开启,它携带的也只是 id、大小与结果——绝不包含提示词、参数或输出。
04
会话是只追加的 JSONL,带 sha256 哈希链;每次运行导出一条 trace(run ⊃ turn ⊃ tool),被取消的也不例外。
05
Windows 优先:开发与发布闸门都跑在 Windows 11 上。POSIX 路径已测试,Linux 与 macOS 尚未经 CI 验证。
06
AGPL-3.0-only。可自由修改与再分发;将修改后的构建作为网络服务运行,则须向这些用户提供其源码。
06来自终端
以固定时钟经 sextant 画笔无界面渲染:与 TUI 绘制时完全相同的代码路径,不是效果图。把指针移到画面上会将其压平;移到某一行会点亮它的标记。

在获批的编辑之前拍下;对未经批准的编辑,则由编辑自身的锚点重建。

批准是针对修正后的参数作出的,并按会话记住;子智能体不能发问。

PASS 与 FAIL 标记从工具自己的标题行读取退出码。

子会话共用唯一的智能体循环;退出 TUI 会取消所有还活着的子会话。
07快速开始
没有配置提供方时,一次性运行会使用带脚本的模拟提供方;打包冒烟测试也是这么工作的。
CLI 入口是由 bun 执行的 TypeScript,node 跑不了。bun link 会把 rovecode 放进 PATH。
$ git clone https://github.com/9Code-Labs/rovecode && cd rovecode && bun install && bun linkrovecode setup 会带着你走:挑一个提供方,隐藏着粘贴密钥,做一次很小的测试调用,完成。也可以用 rovecode auth set 直接存密钥,或把 ROVECODE_BASE_URL 指向任意 OpenAI 兼容端点。
$ rovecode setup$ rovecode auth set anthropic直接输入 rovecode 会打开 sextant 界面。带引号的提示是一次性运行;--output json 恰好返回一个结果对象。
$ rovecode "fix the failing test"
08提供方
已保存的凭据优先于 <NAME>_API_KEY 环境变量;显式给出的 ROVECODE_BASE_URL / ROVECODE_API_KEY 组合则优先于两者。
托管 api
本地运行时
● 本地运行时不需要密钥 · rovecode auth set <名称> 会把密钥存进 ~/.rovecode/credentials.json,在终端里询问且从不回显。
任意端点 · 实时
$ rovecode provider add homelab http://10.0.0.7:8000/v1 --no-key{"default": "kaesra/zai-org/glm-5.3-flash","providers": {"kaesra": {"baseUrl": "https://api.kaesra.tech/v1","protocol": "openai","keyEnv": "KAESRA_API_KEY"},"homelab": {"baseUrl": "http://10.0.0.7:8000/v1","protocol": "openai","noKey": true,"models": ["qwen3-coder-30b"]}}}
09他们的话
评审搬进了终端,审批卡片成了对话本身。交付量不变,来回沟通少了三分之二。
Aylin Demirci
Head of Platform · Northwind Robotics
默认拒绝的策略是安全团队签字放行的原因。每一次工具调用都是我们本来就会读的日志里的一行。
Marcus Oyelaran
Staff Engineer · Harbourline Payments
十二个人,本地模型,中间没有供应商。它运行在客户代码被允许运行的地方。
Inés Ferrer
创始人 · Meridian Studio
为页面撰写的虚构团队示例引言——上线前会换成真实的。
10定价
每个套餐运行的都是同一个代理,背后是同一套默认拒绝的策略。套餐的区别在于你运行多少,以及和谁一起运行。
在你自己的仓库上试用代理。
$0/ 月
为每天用它交付的一位工程师。
$20/ 月
为整周都泡在其中的工程师。
$200/ 月
为共享额度、知识和策略的团队。
$80/ 月
最低 $80 · 每个完整席位 $40 / 月
11常见问题
人们把 shell 交给智能体之前会问的七个问题。每个答案都说明机制,以及它到哪儿为止。
这里的一切都取自 README.md 的安全模型、已知限制、可观测性以及许可证与声明几节。README 承认存在的边界,本页同样承认。
12获取 rovecode
$ git clone https://github.com/9Code-Labs/rovecode && cd rovecode && bun install && bun link