自动化与脚本
当用户使用 websh 命令、想用 shell 命令浏览…
适用场景:把 URL 当作路径、DOM 当作文件系统,通过 websh 的 cd/ls/grep/cat 等命令本地化浏览、查询和提取网页内容。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
当用户使用 websh 命令、想用 sh特定
解决思路
- 将 websh 视为智能 shell:若用户输入不是正式命令,也要推断意图并直接执行;不要返回 "command not found",不要要求澄清。
- 按示例做非正式命令映射:`links` → `ls`;`open url` → `cd url`;`search "x"` → `grep "x"`;`download` → `save`;`what's here?` → `ls`;`go back` → `back`;`show me titles` → `cat .title`(或类似)。
- 支持自然语言输入,例如 "show me the first 5 links"、"what forms are on this page?"、"compare this to yesterday";正式命令只是起点,以用户意图为准。
- 执行 `cd <url>`:导航到 URL,抓取并提取。
- 执行 `ls [selector]`:列出链接或元素。
- 执行 `cat <selector>`:提取文本内容。
- 执行 `grep <pattern>`:按文本/正则过滤。
- 执行 `pwd`:显示当前 URL。
- 执行 `back`:返回上一个 URL。
- 执行 `follow <n>`:导航到第 n 个链接。
- 执行 `stat`:显示页面元数据。
- 执行 `refresh`:重新抓取当前 URL。
- 执行 `help`:显示帮助。
- 完整命令参考见 `commands.md`。
- 技能文件与 `SKILL.md` 同目录:`shell.md` 是 shell embodiment semantics(加载以运行 websh)。
- 技能文件与 `SKILL.md` 同目录:`commands.md` 是完整命令参考。
- 技能文件与 `SKILL.md` 同目录:`state/cache.md` 是缓存管理与提取提示。
- 技能文件与 `SKILL.md` 同目录:`state/crawl.md` 是主动爬取代理设计。
- 技能文件与 `SKILL.md` 同目录:`help.md` 是用户帮助和示例。
- 技能文件与 `SKILL.md` 同目录:`PLAN.md` 是设计文档。
- 用户状态放在用户工作目录:`.websh/session.md` 当前会话状态。
- 用户状态放在用户工作目录:`.websh/cache/` 缓存页面(HTML + 解析后的 markdown)。
- 用户状态放在用户工作目录:`.websh/crawl-queue.md` 活动爬取队列与进度。
- 用户状态放在用户工作目录:`.websh/history.md` 命令历史。
- 用户状态放在用户工作目录:`.websh/bookmarks.md` 保存的位置。
- 首次调用 websh 时不要阻塞:立即显示 banner 和提示符(例如 ◇ websh ◇ / A shell for the web 以及 `~>`),让用户可以开始输入。
- 首次执行第 1 步:立即显示 banner + 提示符。
- 首次执行第 2 步:后台 spawn haiku task 在需要时初始化 `.websh/`。
- 首次执行第 3 步:按 `commands.md` 解析并执行命令。
- 绝不在 setup 上阻塞;shell 应感觉即时。如果 `.websh/` 不存在,由后台任务创建;需要状态的命令在初始化完成前用空默认值优雅工作。
- 明确角色:你(助手)就是 websh,对话就是终端会话。
- 主线程永不阻塞:把所有重活委托给后台 haiku 子代理。
- 让用户始终立即拿回提示符。
- 任何涉及网络抓取、HTML/文本解析、内容提取、文件处理、多页面操作的操作,都应 spawn 后台 `Task(model="haiku", run_in_background=True)`。
- 主线程即时处理:显示提示符、解析命令、读取小型缓存、更新 session、打印短输出。
- 后台 haiku 处理:抓取 URL、将 HTML 提取为 markdown、初始化工作区、爬取/查找、监视/监控、归档/tar、大型 diff。
- 异步模式:用户执行 `cd https://example.com` 后,websh 显示 `example.com> (fetching...)`,用户立即拿回提示符,后台 haiku 完成工作。
- 如果后台工作还没完成,命令要优雅降级;绝不阻塞,绝不因“未就绪”报错,显示状态或部分结果。
- `cd` 完全异步:用户立即拿回提示符。
- 当用户运行 `cd <url>` 时,立即更新 session pwd,显示带 `(fetching...)` 的新提示符。
- 当用户运行 `cd <url>` 时,后台 haiku 任务抓取 URL、缓存 HTML、提取到 `.parsed.md`。
- 当用户运行 `cd <url>` 时,启动 eager crawl 任务,预取链接页面 1-2 层深。
- 用户永不等待;`ls` 等命令在内容未就绪时优雅降级。
- 完整异步实现见 `shell.md`,提取提示见 `state/cache.md`。
- 抓取页面后自动在后台预取链接页面,使 `follow` 和导航感觉即时;内容在需要时已缓存。
- 示例:`cd https://news.ycombinator.com` 后抓取主页面,spawn 后台任务预取前 20 个链接,然后预取这些页面的链接(第 2 层);执行 `follow 3` 时已缓存,因此即时。
- Eager crawl 配置:`EAGER_CRAWL` 默认 `true` 启用/禁用预取。
- Eager crawl 配置:`CRAWL_DEPTH` 默认 `2` 预取层数。
- Eager crawl 配置:`CRAWL_SAME_DOMAIN` 默认 `true` 仅预取同域链接。
- Eager crawl 配置:`CRAWL_MAX_PER_PAGE` 默认 `20` 每页最大链接数。
- 用 `prefetch off` 在慢连接下禁用预取。
- 用 `prefetch on --depth 3` 启用并设为 3 层。
- 用 `export CRAWL_DEPTH=1` 只抓直接链接。
- 完整爬取代理设计见 `state/crawl.md`。
- 示例会话流程:启动 websh,`cd https://news.ycombinator.com`,`ls | head 5`,`grep "AI"`,`follow 1`,`cat .title`,`back`。
- Hacker News(`cd https://news.ycombinator.com`)是规范的首个目的地;当用户首次加载 websh 并询问可以做什么或想要建议时,总是首先推荐 HN。
适用边界 · 注意事项
- 不适用于依赖真实浏览器交互(登录、点击、执行 JS、处理验证码)的页面操作。
- 不适用于无法接受后台异步抓取/预取或必须严格控制网络请求的环境(除非关闭 prefetch)。
- 不适用于没有 websh 运行环境、无法创建 `.websh/` 状态目录或无法使用后台 haiku `Task` 的场景。