开源工具

only-cli/oc 0.3.0减少Agent二次命令

oc 0.3.0把网页压缩CLI的指标推向Agent任务轮次。

2026年8月24日 · 周一深度报告中置信重要度 3/5
#only-cli#Agent浏览#CLI#网页提取#工具调用

本文要点

  • 评价口径从单页输出短,转到一个真实问题需要几次命令。
  • 搜索标题、find结果和截断边界从提示下一步,改为尽量直接给答案。
  • 代码块从高亮碎片拼接,变为保留行、缩进和可运行文本。

阅读辅助

先看数字、证据和来源,再读正文。

64→49轮会话轮次
40→25条命令数
4 条 Claim Audit

v0.3.0的新闻增量是减少Agent完成网页任务时的二次命令。

5 个时间点

2026-08-23T12:46:10Z · f840747提交命令轮次优化,修复搜索结果标题、find单命中和截断边界。

6 个来源6 个非 X 来源

only-cli/oc在8月23日发布0.3.0,把网页压缩工具的重点放到Agent完成任务所需的命令轮次。作者在GitHub Release中写明,端到端interleaved A/B里,配对任务会话轮次从64轮降到49轮,命令数从40条降到25条,并强调每个任务4轮、frozen builds、答案保持正确。

这些数字必须按作者口径读。它们来自项目release自报,不是独立benchmark;任务集、页面样本和完整日志没有在release里公开。因此这篇稿子的置信度是medium:版本发布时间、commit内容和代码变更可以逐项核验,但“少15轮、少15条命令”只能写作项目方报告的端到端结果,不能外推成所有Agent网页浏览都会获得同等收益。

更扎实的部分在commit链上。v0.3.0发布于2026-08-23T13:23:19Z;发布commit在此前约一分钟把package、lockfile和插件元数据推进到0.3.0。更早的f840747解释了三类“本该一次给答案、却多耗一次命令”的位置;90d5c20修复语法高亮把代码块拆碎的问题;5567b31把redirect hop检查从依赖第三方httpbin的活测试,改成共享redirect loop加离线测试。

对读者来说,关键信号是成本单位变了。网页提取工具过去常用“输出多少token”证明价值;Agent实际运行时,一次工具调用还会带来会话调度、上下文重读、失败恢复和安全判断的额外成本。oc 0.3.0把优化点推进到“首个命令能否足够可行动”,这比单页token压缩更贴近coding agent、研究agent和CLI自动化的真实成本。

0.3.0具体改了什么

release第一段直接定义了这次更新的主题:“the cost of a second command”。更准确的读法是:页面视图已经足够便宜,真实问题仍会被openfindread等连续命令拖长,搜索结果页也可能让Agent点到只会读回标题文字的编号。页面本身可以很短,但多一次命令会消耗整轮工具调用。

命令轮次优化commit把问题拆成三处。第一处是搜索结果标题。搜索引擎常把结果标题放在h2里的a标签中,旧逻辑拿到heading文本后返回,丢掉了href;Agent对最明显编号执行oc do <n>时,得到的只是标题本身,于是还要再找真正能跳转的编号。新逻辑只在“整个heading就是一个非fragment链接”时保留href,避免把文档页里指向自身锚点的标题也误当成外部导航。

第二处是find。旧行为在单个命中时仍然只给一个编号,Agent下一步大概率会跑read <n>。0.3.0改成单命中直接打印区域;多命中但预算足够时,也尽量打印完整匹配,而不是只给短snippet。第三处是截断边界。以前一个block可能切在句子中间,Agent无法判断被展示的半句是否已经完整,于是再跑read。新逻辑在可接受成本内把截断落到句末;代码块则落到行末。

代码块修复是第二组关键变更。90d5c20的commit message给了很具体的失败例子:语法高亮会把命令每个token包成不同元素,旧的文本重组只会粘合共享父节点的片段,于是AWS CLI示例可能被交给Agent为aws s3 cp test . txt s3 : // amzn - s3 - demo - bucket / test2 . txt,Node文档里的console.log会变成console . logfd?.close()会变成fd ?. close ()。这类错误会让Agent拿到看似可信、实际不可运行的命令。

该commit还写到,作者在AWS CLI reference、Rust book、Node API docs和Python library docs等五个真实页面上测到172个pre元素,其中159个以这种方式被拆碎。新实现把precode子树作为整体文本读取,保留行与缩进,并去掉页面放进代码块里的copy按钮、语言标签等“页面家具”。README也同步说明,代码块会按页面原样给出行和缩进,命令可以按输出运行。

JSON API和站点快捷入口是release里的第三组增量。README写明,JSON API在oc视角下也可以被当成页面:一个endpoint返回JSON时,可以按记录渲染成编号视图,保留真正不同的字段,并把共享字段只说明一次。release同时列出AWS、GCP和Azure CLI文档搜索快捷入口。它们不是这篇的核心事实,但说明oc的目标场景在向“Agent读开发资料和API响应”集中。

数据口径要分清

原文或来源可写成的中文表述不能写成
“64 turns down to 49, 40 commands down to 25”release自报端到端A/B中轮次从64降到49,命令数从40降到25独立benchmark证明所有任务成本下降同等幅度
“interleaved A/B, four reps per task, frozen builds and correct answers throughout”作者称测试采用交错A/B、每任务4轮、冻结构建且答案正确公开可复现的大规模评测已完成
“Of 172 code blocks…159 are split this way”作者在5个真实文档页中观察到159/172个pre元素被拆碎所有文档站159/172代码块都有问题
5567b31 redirect commit该提交证明redirect hop检查可离线覆盖且两种transport共享同一循环0.3.0再次提高安全等级或扩大安全承诺

这张表是本条新闻最需要保留的边界。尤其是重定向测试,release里的措辞是“Both transports now share one redirect loop, so the check that revalidates every hop cannot be fixed in one copy and left broken in the other. It is proven offline”。它描述的是把既有检查变成共享实现,并让测试不再依赖第三方服务;不能翻译成“再次提高安全等级”。安全相关说法如果把可测试性写成安全承诺,会误导读者。

轮次数字也要避免过度包装。release说的是“measured end to end”,并给出八个配对rep都改善、无回退。它有工程参考价值,因为它把页面压缩工具放回Agent会话里衡量;但它还缺少外部复现条件:任务类型、网站集合、Agent策略、初始prompt、失败判定和命令日志。更稳妥的读法是,0.3.0展示了一组作者自控条件下的会话成本下降,而不是建立了行业通用基准。

为什么这比token压缩更重要

oc README的定位是“把网站变成给AI Agent使用的命令行界面”。oc open <url>抓取页面后,给出紧凑、编号的视图;do跟随编号链接或读取文本,find在已打开页面中定位字符串,read取完整区域,next继续读预算之外的内容,raw给整页Markdown。它还强调页面文本是数据,不是指令,Agent不应把网页内容当作要执行的命令。

这个定位背后的现实是,Agent浏览网页时经常卡在三类成本上。第一类是无关结构太多,原始HTML动辄几万token。第二类是可行动元素丢失,模型看到了标题、按钮或片段,却不知道下一步该点哪个。第三类是输出看起来可信,实则丢了代码缩进、链接目标或安全跳转检查。0.3.0最有信息量的地方,是它同时处理了第二类和第三类问题。

对coding agent来说,少一轮不仅是少一些token。一次额外命令可能带来新的上下文截断、错误动作、超时、网络失败、会话状态漂移和审查成本。比如搜索结果标题如果不能直接跳转,Agent需要再找链接;代码块如果把s3://拆成s3 : //,Agent可能执行失败后再排查;截断如果停在半句,Agent会为了确认语义再读取全文。每一次补救都让任务链更长。

这也是为什么“first command the answer more often”比“页面压缩到几百token”更像Agent工具的核心指标。页面压缩解决的是输入成本,命令轮次解决的是闭环成本。一个Agent不是读网页的旁观者,它要把网页内容转成后续动作:打开结果、复制命令、核对API字段、判断是否还要读下一段。工具输出越接近可执行对象,Agent越少用自然语言推断网页结构。

代码块修复的工程含义

90d5c20的修复看似小,却碰到AI开发工具常见的隐蔽故障。现代文档站为了高亮、复制按钮、语言切换,会把同一行代码拆成许多DOM节点。人眼看到的是一条连续命令;抽取器如果按节点拼接,就可能在标点和标识符之间加空格。对网页摘要来说,这只是格式问题;对Agent来说,代码块本身经常是下一条要执行的命令。

commit补丁新增了codeTextverbatim路径:读取pre/code子树时不按普通文本折叠空白,而是保留行和相对缩进;同时丢弃按钮、输入框、选择器、标签等不属于样例代码的控件。测试里覆盖了高亮命令、注释后保留换行、shell续行、共享缩进剥离、toolbar不进入代码块、inline code回到句子,以及长代码块截断落到行末。

这个修复还解释了“更短”之外的目标。commit message说,五个真实页面的compact view变化分别是-15、-7、+208、-45和0字符,总体约增加35个token,增长主要来自Python漂亮打印输出恢复缩进。为了让代码可运行,输出可能略长。Agent工具的合理优化应在token预算内保留会改变动作结果的结构。

重定向测试说明的是可证明性

5567b31的commit背景很具体:原先用于验证redirect hop重新检查的测试依赖httpbin.org;当httpbin返回503时,main分支测试会失败,release工作流也会被第三方服务状态阻断。更重要的是,两个transport各自有redirect loop,活测试只覆盖实际安装的那一个,无法证明另一个实现也保持相同行为。

新提交把redirect loop提取成followRedirects(get, start),由调用方传入“单次请求”的callback。这样两个transport共享同一循环,测试也可以用进程内假transport证明:跳到私有地址会在发出下一次请求前被拒绝;跳到公开地址仍会正常跟随;循环会在超过上限时退出。提交还说明移除hop check会让第一项测试失败。

这里的新闻价值落在测试方式:安全检查从依赖线上第三方服务,变成可在离线测试里证明的共享路径。对Agent网页工具而言,这很实际:工具要能抓页面,就不可避免要处理redirect;工具也必须避免公开URL跳转到私有地址。把检查放在每个hop上并让它可测试,属于防止实现分叉的工程卫生。

早报观点 oc 0.3.0的看点在于,它把Agent工具的性能问题重新定义为“动作链长度”。过去很多网页提取器会把成败压到单次页面输出:能不能绕过阻拦,能不能把HTML压短,能不能生成Markdown。Agent真正付费和出错的位置却常常在第二、第三个命令:再找一次链接,再读一次区域,再确认一次半截句子,再修一条被拆坏的代码。

早报判断是,浏览工具进入Agent工作流后,产品质量要从“读给模型看”升级到“把下一步动作做成确定对象”。搜索标题必须保留可跟随链接,代码块必须能直接运行,截断必须让模型知道展示部分是否完整,redirect检查必须在实现层可证明。这些改动都不显眼,但它们决定了Agent是否会在网页任务里反复自救。

限制同样清楚。0.3.0仍不是通用浏览器:README写明没有JavaScript渲染、没有登录站点支持,硬bot挑战也可能拒绝它。release数字也还是项目方自报。对团队采用者来说,这个版本更适合作为设计参照:衡量网页Agent工具时,不只看单页token,还要记录任务轮次、二次读取率、代码块可执行率和安全跳转测试覆盖。

后续该看哪些证据

第一类证据是外部复现。release已经给出方向:端到端配对任务、冻结构建、答案正确、统计轮次和命令数。后续如果only-cli/benchmarks或第三方Agent框架公开任务清单、页面URL、命令日志和失败样例,读者才能判断64→49轮是不是来自常见任务,而不是作者选择的少数路径。

第二类证据是错误减少。代码块修复最容易验证:拿AWS CLI、Rust book、Node API docs、Python library docs之外的文档站,看命令、缩进、续行和inline code是否仍保持原样。更进一步,要看Agent是否真的减少“复制代码后执行失败”的恢复命令,而不只是页面文本更漂亮。

第三类证据是覆盖边界。README列出的限制仍然存在:JavaScript重渲染、登录站点和硬bot挑战不是0.3.0解决的范围。oc对Agent最有价值的场景,可能是文档、博客、搜索结果、JSON API和静态社区页面;在复杂SaaS后台、交互式Web应用和登录流程里,它仍需要浏览器工具互补。

最后要看安全测试是否继续随能力扩展。redirect hop检查这次变得更可证明;如果后续加入表单填写、提交、登录态或JavaScript fallback,同类问题会扩展到cookie边界、POST动作、下载文件和跨站跳转。网页CLI的优势是轻量,风险是Agent会把轻量输出当作可执行事实。0.3.0给出的答案是,把可行动对象和可测试边界同时往前移。