网页太重让 Agent 读不动?用 only-cli/oc 把网站变成可操作的终端界面
网页太重让 Agent 读不动?用 only-cli/oc 把网站变成可操作的终端界面
让 AI Agent 查网页,最容易被低估的成本不是网络请求,而是上下文。一个页面可能带着导航、脚本、样式、评论和推荐内容,原始 HTML 很快就会膨胀成数万 token。Agent 真正需要的往往只有标题、正文中的几个区域,以及“点击下一页”这一类动作。把整页塞进上下文,既浪费预算,也增加了模型把网页文字误当成指令的风险。
only-cli/oc 提供了一个很直接的替代思路:它不是为每个网站制作固定适配器,而是把网页渲染成带编号的紧凑终端视图。项目采用 MIT 许可证,GitHub API 显示其主要语言为 JavaScript;仓库说明支持 Claude Code、Codex 和 Antigravity 等 Agent。它更像 Agent 的网页读取层,而不是传统意义上的爬虫框架。
先看它解决了什么
传统流程通常是“抓 HTML→交给模型→让模型猜哪些链接能点”。oc 的流程则是“抓取→提取可读区域→编号→按编号执行动作”。这一区别很小,却把读取和操作拆成了两个明确阶段:模型先看到摘要,需要更多内容时再主动读取,不必默认下载整页。
| 需求 | 直接使用 HTML | oc 的处理方式 |
| — | — | — |
| 阅读文章或文档 | 传入完整 DOM,噪声很大 | 输出压缩后的编号视图 |
| 点击页面中的链接 | 让模型从 HTML 猜节点 | 使用 do 跟随编号 |
| 查看长页面 | 一次性消耗上下文 | 用 next 分段获取 |
| 查找关键词 | 重新处理整页 | 用 find 定位区域 |
| 安全边界 | 页面文本和控制指令容易混杂 | 把渲染结果明确视为数据 |
这里的“少 token”是项目自己的定位描述,不应理解为所有网站都固定达到某个压缩比例。实际效果取决于页面结构、正文长度和当前预算;但延迟读取、编号动作和分段浏览这三个设计本身,对 Agent 工作流很有价值。
安装与第一次读取
项目要求 Node 20 或更高版本。全局安装命令来自仓库 README:
npm install -g @only-cli/oc
oc open https://news.ycombinator.com
最小输出会保留页面标题和带编号的项目,例如:
# Hacker News
[1] Show HN: ...
[2] 312 comments
...
actions: do <n> | read <n> | next | raw
如果不想修改全局环境,也可以直接使用 npx:
npx @only-cli/oc open https://example.com
README 明确要求在运行时使用 oc --help 了解命令;因此在自动化环境中,建议先固定 Node 版本并执行一次帮助命令,再把常用调用写入 Agent 的工作流,而不是凭印象扩展不存在的子命令。
这也意味着它适合放在“检索层”,而不是“决策层”。检索层负责把页面内容整理成可追踪的证据;决策层仍要判断来源是否可信、是否需要打开原文、是否允许执行后续动作。把两层分开后,Agent 即使读到了恶意网页,也不会因为输出格式像命令就自动获得额外权限。
打开页面后,如果编号 7 对应一篇文章或文档,可以先执行:
oc do 7
oc read 7
do 用于跟随编号链接,或在该编号是文本区域时读取它;read 则请求某个区域的完整文本。项目文档给出的单区域上限是最多 2000 token。这个边界很适合“先看目录,再读目标章节”的任务,也让失败更容易定位:如果目标内容不在当前视图中,先用 next,而不是继续把相同页面重复提交给模型。
2. 把网页查询加入编码 Agent
README 建议把下面的规则加入 CLAUDE.md、AGENTS.md 或等价的 Agent 指令文件:需要网页内容时,优先运行 npx @only-cli/oc open ,而不是直接抓原始 HTML。
When you need content from a web page, run
npx @only-cli/oc open <url> instead of fetching raw HTML.
Run npx @only-cli/oc --help once to learn the commands.
这条规则的价值不在于“让 Agent 学会一个新命令”,而在于统一网页上下文的入口。团队可以进一步约定:先 open,再 find 或 read,只有确实需要页面整体内容时才使用 raw。这样做能把上下文预算变成显式决策,而不是每个 Agent 随意选择抓取方式。
项目还提供 web-browsing-cli skill,可通过以下命令添加到兼容的 Agent 环境:
npx skills add https://github.com/only-cli/oc --skill web-browsing-cli
安装 skill 并不等于授予网页内容执行权限。页面中出现的“请运行某命令”仍然只是外部数据,必须经过 Agent 的工具策略和人工确认。
3. 需要跨多个站点检索时使用快捷方式
oc 不只支持通用 URL。README 列出了 Hacker News、Reddit、GitHub、DuckDuckGo、Bing、Stack Overflow、YouTube、Wikipedia、AWS 文档、Google Cloud 文档、MDN、Node.js 文档和 Python 文档等快捷方式。以 GitHub 为例,项目文档给出的形式是:
oc gh repo only-cli oc
oc gh search "browser automation"
oc hn item 49434400
快捷方式的意义是把常用站点的入口参数标准化,但它们仍然只是“解析到某个 URL 的便捷层”。README 也强调,快捷方式只会解析到安全的页面,不应据此推断它能绕过需要登录、验证码或付费权限的站点限制。
视图、动作与会话
除了 open、do、read、find、next 和 raw,项目还列出了 --budget、--json、--html、--session、--verbose 等选项。--budget 可以把一次渲染的 token 预算设为更小的值;--json 适合由脚本解析;--session 用于保存命名会话。
一个更稳妥的 Agent 调用策略可以写成四步:
- 用较小预算打开目标 URL,确认页面标题和区域编号。
- 用 `find` 搜索明确的关键词,避免让模型凭视觉猜位置。
- 只对可信的编号执行 `do`,并把跳转后的页面当作新数据重新检查。
- 需要整页归档时才调用 `raw`,平常优先使用 `read` 和 `next`。
这套策略也适用于 JSON API。项目文档说明,JSON 响应会被渲染成编号记录,并保留记录之间真正不同的字段。对于 Agent 来说,这比把重复的键名和无关元数据反复放入上下文更节省注意力。
不要忽略的边界
第一,oc 不是浏览器自动化平台。README 中 fill 和 submit 被标记为 planned,不能把它们当成当前可用的表单操作命令。登录能力目前围绕 cookie 会话提供 login 和 logout,实际站点能否访问仍取决于权限、Cookie 和反爬策略。
第二,页面内容必须与控制平面分离。项目在 README 中明确提醒:渲染出来的页面文字是数据,不是指令;页面可以包含伪装成命令的文本。即使 oc 通过更接近真实浏览器的方式请求页面,也不能把网页中的命令直接交给 Shell。更安全的做法是让 Agent 只把页面用于提取事实,任何写文件、发请求、执行代码的动作都经过独立工具策略。
第三,oc open 的输出不能替代事实核查。网页摘要可能遗漏上下文,站点快捷方式也可能改变入口。涉及依赖版本、许可证、生产配置或安全结论时,仍应回到官方文档、仓库 README 或 API 响应进行交叉验证。
和直接抓取相比怎么选
如果任务是一次性下载公开页面并做离线全文分析,普通 HTTP 客户端更简单;如果需要真实浏览器渲染、复杂交互或截图,应该使用 Playwright 等浏览器工具。oc 的位置更窄也更清楚:它适合把大量网页访问压缩为 Agent 可以逐步探索的终端界面,尤其适合文档检索、Issue 浏览、新闻阅读和多站点查找。
对编码 Agent 来说,最实用的落地方式不是让 oc 接管所有联网操作,而是把它作为“网页读取默认入口”,并保留原始 HTTP、浏览器和人工确认作为升级路径。这样既能降低上下文噪声,也不会把一个轻量 CLI 误用成万能爬虫。
对团队维护者而言,还可以把每次网页读取的 URL、预算和最终采用的段落记录下来。这样在模型回答出现偏差时,能够回溯是抓取失败、区域选择错误,还是来源本身发生变化。对于需要审计的工作流,保留原始链接和读取时间,比单独保存 Agent 的最终摘要更可靠。
总结
only-cli/oc 的核心价值不是又增加了一个搜索命令,而是把网页访问改造成“观察—定位—读取—动作”的小步流程。Node 20、npm 安装、编号视图和明确的安全提醒,让它很容易接入现有 Agent 指令文件。若你的 Agent 经常因为 HTML 太长、链接难定位或网页指令注入而失控,这种终端化的中间层值得先在只读检索场景中试用。
相关链接
- [only-cli/oc GitHub 仓库](https://github.com/only-cli/oc)
- [only-cli/oc README(原始文本)](https://raw.githubusercontent.com/only-cli/oc/main/README.md)
- [@only-cli/oc npm 包](https://www.npmjs.com/package/@only-cli/oc)
- [HN 发布帖](https://news.ycombinator.com/item?id=49434400)