你有没有遇到过这种场景:想让 AI 编码代理帮你在网页上完成一个多步骤任务,比如去 cars.com 找一辆 Camry,读一下页面、填个邮编、关掉 cookie 弹窗。传统做法是上 Playwright 或 Puppeteer,把 Chrome 变成自动化测试浏览器,但很多网站会通过 CDP(Chrome 调试协议,自动化工具常用的后门)检测到你,而且你操作的是虚拟 DOM,不是用户真正看到的界面。Hands 这个项目换了个思路:让代理直接看 Windows 桌面,移动真实鼠标,点击真实 Chrome 窗口里的元素。
Hands 是一个用 Rust 写的 MCP/CLI 工具。MCP 是模型上下文协议,相当于给 AI 模型接外部工具的标准接口;CLI 就是命令行程序。它可以被 Grok、Codex、Claude Code、OpenCode 这类编码代理作为工具集调用,暴露的操作有 observe、click、type、scroll,分别对应观察、点击、输入、滚动。observe 会返回一张截图路径和一小份元素列表,元素来自 UIA(Windows 的 UI 自动化接口,能读取界面上的控件信息)和可选的 Chrome DOM id。click 不是走 CDP 点击,而是调用 Windows 的 SendInput 接口,并且鼠标移动轨迹是一条贝塞尔曲线(模拟人手画弧线那样移动)。整个项目没有 Playwright、没有 Puppeteer、没有远程调试端口。日常 Chrome 不需要加特殊启动参数,如果已经开着就直接附着上去。这样,那些依赖 CDP/自动化标志做检测的网站大多发现不了异常。不过 Windows 会标记注入的输入(LLMHF_INJECTED),所以严格来说还是能被识别为自动化输入。
为了让模型不靠像素瞎猜,Hands 附带一个极小的 unpacked Chrome 扩展(手动侧载的未上架扩展),可以把页面结构融合进观察结果,比如给元素标上 chr: id,列出卡片区域。这样模型能拿到 DOM(文档对象模型,网页的结构表示)的语义信息。但有个坑:扩展的 service worker(浏览器后台脚本)一旦休眠,融合就会失效,需要重新加载卡片。
Hands 的定位很明确:适合个人在自己电脑上做研究,比如“在 cars.com 上找一辆 Camry”,读页面、填 ZIP、关 cookie 横幅。它不是沙箱,能点屏幕上任何东西,包括 checkout 和 Easy Apply(一键申请)。所谓“花钱前确认”只是程序里的 best-effort 分类,不是保证。截图和 DOM 里的文本可能包含提示注入(恶意指令诱导模型做非预期操作),程序把文本当不可信数据,但模型不一定能抵御。它也不是日常 Chrome 上的 CAPTCHA 验证码破解器,试两次不行就放弃等待。仅支持 Windows。安装流程:编译 exe、注册 native-messaging host(让浏览器扩展和本地程序通信的桥梁)、侧载扩展、把 MCP 客户端指向 hands mcp。README 就是操作手册。缺少 API key 不会导致构建失败,do_task 是可选功能。日志在 %LOCALAPPDATA%\hands\logs\ 目录下,扩展请求 <all_urls> 权限是为了知道当前看的是哪个标签页。Pause/Break 是紧急停止开关。
这个思路能直接用在哪?如果你在做 AI 代理的桌面操作、网页自动化,或者想绕过 CDP 检测,Hands 的“截图+UIA+DOM 融合”和“SendInput 模拟真实输入”是很好的参考。要注意的坑:提示注入、非沙箱、Windows only、扩展休眠。项目 MIT 开源,仓库在 https://github.com/Ryan-AI-Studios/hands
内容与图片版权归原作者所有 · 原文: https://news.ycombinator.com/item?id=49405405