34 天 33 个版本:rvs(rust-verb-shell)如何用版本号对抗 AI 误判

1. 引言

一个 shell 在 34 天里迭代了 33 个版本,几乎每天一个版本号。rvs(rust-verb-shell)是面向人类和 AI Agent 的结构化命令运行时,核心模型是 Command → Value → JSON → AI。2026 年 8 月,它从 26.8.10 迭代到 26.8.43。触发点不是功能堆砌,而是三类真实场景反复暴露问题。

2. 三类真实场景:版本迭代的触发点

rvs 的高频迭代并非为了堆功能,而是被三类真实场景反复逼出来的。

2.1 AI Agent 把终端输出当文本流解析

rvs 的非交互输出混入包装信息,污染 scp、sftp、tar-pipe 管道;--json 输出早期格式不统一,Agent 只能解析文本。

2.2 对话式 AI 仅凭终端字符把 rvs 误判为 POSIX shell

实测生成 echo A; echo B、$var 展开等不兼容语法,执行结果与预期完全不符。

2.3 多台异构运行机登录 shell 都是 rvs

物理 tty、Windows 控制台、emoji、UTF-8 等跨平台差异逐个暴露,每修一个都值得一个版本号。

3. 谬误溯源:三个被反复证伪的认知

回顾这 33 个版本,最值得记录的并不是功能列表,而是三个被反复证伪的认知。

3.1 "rvs 是 POSIX shell 的兼容实现"

实测:非交互解析与 POSIX 不同,; 不分隔命令(echo A; echo B 只出 A;)、$var 不展开。已决策不兼容 POSIX ,靠输出自我标识([rvs] 前缀 + 非 POSIX 声明)纠正 AI 误判。

3.2 "CPU 制程数据库按型号精确匹配"

26.8.38 实测:i5-8265U 显示 65W 桌面功耗,实际 15W。根因是子串匹配 + 通配条目抢先命中,修正为精确条目前置(Whiskey Lake / Kaby Lake R)。

3.3 "flag 在位置参数前没问题"

26.8.42 实测:list-items --llm <path> 的 path 被 flag 静默吞掉,回落到当前目录且 exit 0,极难发现。

4. 源码验证:33 个版本做了什么(按主线归类)

抛开版本号本身,把 33 个版本按主线归类,可以看到每一次迭代都落在真实场景的修复上。

4.1 AI 可消费性(26.8.32/33)

--json 提供三档输出:Pretty、Compact、Llm(token 优化);RunReport.error_type 枚举化,不再是自由字符串;schema 快照测试锁定 JSON 结构,防止回归。

4.2 沙盒安全(26.8.35)

沙盒操作审计写入 ~/.config/rvs/audit.jsonl(who/what/when/where/how);sudo、doas、su 在解析前直接拒绝(error_type=sandbox_violation);--dry-run 全局开关,外部程序与 remove-item 只预览不执行。

4.3 系统信息(26.8.27/35/37/38)

show-fetch 采用 neofetch 风格,默认安全输出 + --all 全量,磁盘统计默认仅物理盘;show-memory 提供内存槽位级信息(Windows wmic / Linux dmidecode / macOS system_profiler,Apple Silicon 标记「不适用」,无权限降级 sysfs);内置 CPU 制程/TDP 数据库(i5-8265U 15W、N3050 6W、Xeon 8168 205W、QEMU 兜底)。

4.4 远程屏幕监视(26.8.19-26)

virtual-screen 落盘共享(跨进程可读);monitor 升级为 ratatui TUI 分屏 + 状态栏按键说明 + 等待模式;monitor-set 远程切换监视目标。

4.5 跨平台收敛(26.8.23/39/40)

物理 tty 中文/emoji 降级 ASCII;Windows 强制 UTF-8 代码页 65001,表格使用控制台窗口宽度;Windows emoji 降级 ASCII。

4.6 解析修复(26.8.15/42)

ssh 智能分流(无 --command 走真实 OpenSSH);fill_positionals 按命令元信息识别 switch 参数,flag 不再吞位置参数;--help 拦截改用注册命令名。

4.7 实测数据

rvs --json -c 'show-version' 输出带 schema 版本号的 JSON;N3050 无 dmidecode 时 show-memory 降级 sysfs 统计 32 块 × 128 MiB = 4 GiB,与硬件吻合;go-to-bottom(别名 bottom)清屏后光标落终端末行(crossterm::terminal::size() + MoveTo(0, rows-1))。

5. 落地结论:可复用的模式

回顾这 33 个版本,真正值得沉淀的不是功能清单,而是五条可复用的设计模式。

5.1 AI 接口与人类交互分离

终端是人类观察面,JSON 是 AI 消费面;两套输出各自纯净互不污染(包装信息走 stderr,stdout 纯净透传)。

5.2 错误类型枚举化

error_type 使用枚举而非自由字符串,Agent 按类型分流处理,不用解析文本。

5.3 自我标识

终端输出让任何读者(人类或 AI)第一眼识别「这是谁、什么语义」------[rvs] 前缀 + 非 POSIX 声明,避免被误判为 bash/PowerShell。

5.4 文档-代码一致性守卫

pre-commit 校验 locales 版本号、文档命令数与 all_commands() 注册数一致,防止文档漂移。

5.5 降级而非伪造

读不到硬件信息时明确标注「不适用/不可用」,绝不伪造数据(Apple Silicon 内存槽位即如此)。

适用范围:Verb-Noun 命名的 Agent 接口 shell、需要多机跨平台部署的命令行工具、任何「既要给人看又要给 AI 消费」的 CLI。

6. 三类读者速查

6.1 人类开发者

  • 查看版本与构建信息:rvs show-version
  • 体验:cargo build && ./target/debug/rvs,REPL 里敲 list-commands 看全部 41 个命令
  • 更新记录:docs/ROADMAP.md「已实现」+ docs/issues-2026-08-02.md 1.x 记录

6.2 对话式 AI

  • 一句话问法:「rvs 和 POSIX shell 有什么区别?」
  • 回答要点:rvs 是面向 AI Agent 的结构化命令运行时,非交互解析不兼容 POSIX(; 不分隔、$var 不展开);结构化数据用 --json 拿。

6.3 代码 Agent

  • 结构化输出:rvs --json -c 'list-items'(Pretty/Compact/Llm 三档)
  • 破坏性操作前预览:rvs --dry-run remove-item <path>
  • 沙盒审计:~/.config/rvs/audit.jsonl 逐条结构化记录

7. 总结

rvs 的 33 个版本,本质上是与 AI 误判和跨平台差异持续对抗的过程。每一次版本号递增,都对应一个真实场景的修复,而不是为了刷版本号。

相关推荐
niyongsheng2 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
A.说学逗唱的Coke2 小时前
【大模型专题】大模型怎么选(2026 年 10 月版):从 20 个模型里挑对那 3 个,以及 Agent 按角色分模型的实操矩阵
ai agent·claude code·大模型选型·模型路由·多模型编排
Hello.Reader3 小时前
tsrs 技术解析用 Rust 移植 TypeScript 7,类型检查还能怎样提速?
开发语言·rust·typescript
王仔小奶5 小时前
Rust 正在接管金融圈?深度拆解一份高薪 FinTech 岗位 JD
开发语言·金融·rust
吴名氏.6 小时前
Java转AI Agent教程(第一周)让模型先跑起来
人工智能·python·ai·ai agent
你为她披上外套时我正站在窗外7 小时前
subtitler v2.10 发布:3 个社区 PR、一个一天修掉的 issue,和关于 uuencode 的真相
rust
Thneonl7 小时前
熔断不是开关是状态机:Claude Code 路由内核的 3 条红线
人工智能·rust
Thneonl7 小时前
一个 Claude Code 本地代理,凭啥配了 3 个观测出口?
人工智能·rust
西风测评9 小时前
终端粘贴原理:bracketed paste、4095 字节行限制与 UTF-8 分片
rust
yz_aiks9 小时前
chrome-use 使用教程:让 Claude Code 操控已登录的 Chrome(禅道、ONES 实测)
chrome·自动化·大模型·ai agent