商业产业 Hacker News AI 2026-08-23T01:16 正文 ok 339 words

Show HN:可查看 Windows 桌面并点击真实 Chrome 的 Rust MCP/CLI——Hands

英文标题:🔶 Show HN: Hands-Rust MCP/CLI that sees the Windows desktop and clicks real Chrome

Hands 是一个面向 Windows 的 Rust MCP/CLI 工具,让 Grok、Codex、Claude Code、OpenCode 等编码 Agent 能通过截图观察桌面,并使用真实鼠标和键盘操作日常 Chrome 配置文件。它不依赖 Playwright、Puppeteer 或 Chrome 远程调试端口,而是通过 OS SendInput 沿贝塞尔路径执行点击,并可借助手动侧载的 Chrome 扩展融合页面 DOM 结构。该工具适合用户个人桌面上的研究和表单操作,但并非沙箱,可能点击付款、Easy Apply 等界面;项目也明确提示截图与 DOM 中的提示注入风险。项目采用 MIT 许可证,支持暂停键 Pause/Break 作为紧急终止开关。
打开原文相关 3 · 机会 1
media315 B media43 B

中文

我开发 Hands,是因为我希望一个编码 Agent 能像我一样使用这台 Windows PC 和真实的 Chrome 配置文件:查看屏幕、移动真实鼠标、输入、点击,而不是把 Chrome 变成一个自动化浏览器。

它是一个 Rust MCP/CLI。一个宿主程序(Grok、Codex、Claude Code、OpenCode 等)调用诸如 observe、click、type、scroll 之类的工具。observe 会返回截图路径以及一个小型元素列表(UIA + 可选的 Chrome DOM id)。click 使用 OS SendInput 沿贝塞尔路径执行点击,而不是通过 Chrome DevTools 点击。

没有 Playwright,没有 Puppeteer,也没有远程调试端口。日常使用的 Chrome 会在不添加额外标志的情况下启动;如果它已经打开,也可以直接附加。多数依据 CDP/自动化标志识别自动化的站点通常不会察觉这一点。不过,它们仍然可以检测到注入式输入(LLMHF_INJECTED)。

一个微型的未打包 Chrome 扩展可以融合页面结构(chr: id、列表卡片),使模型不必仅靠像素猜测。侧载需要手动完成。如果 service worker 失活,融合功能会停止;重新加载卡片即可。

它擅长的场景:在你自己的桌面上进行个人研究。例如,“在 cars.com 上找一辆 Camry”、阅读页面、填写 ZIP 代码、关闭 Cookie 横幅。

它不是什么:

  • 不是沙箱。它可以点击屏幕上的任何内容,包括结账和 Easy Apply。
  • “付款前确认”是二进制程序中的尽力分类机制,并非保证。来自截图/DOM 的提示注入确实存在;二进制程序将这些文本视为不可信,而模型未必如此。
  • 不是日常 Chrome 上的 CAPTCHA 求解器。可见地尝试两次后,它会让出控制并等待谜题消失。
  • 仅支持 Windows。
  • 安装流程是:构建 exe、注册 native-messaging host、侧载扩展,并将 MCP 客户端指向 hands mcp。README 是操作手册。缺少 API key 不会导致构建失败;do_task 是可选的。
  • 日志位于 %LOCALAPPDATA%\hands\logs\ 下。该扩展请求 <all_urls> 权限,以便映射你正在查看的标签页。

仓库:https://github.com/Ryan-AI-Studios/hands(MIT)

欢迎提问 observe、fusion 和安全围栏的工作方式。如果你试用它,Pause/Break 是紧急终止开关。

English / 原文

I built Hands because I wanted a coding agent to use this Windows PC and a real Chrome profile the way I do: look at the screen, move the real mouse, type, click , without turning Chrome into an automation browser.

It is a Rust MCP/CLI. A harness (Grok, Codex, Claude Code, OpenCode, etc.) calls tools like observe, click, type, scroll. Observe is a screenshot path plus a small element list (UIA + optional Chrome DOM ids). Click is OS SendInput on a Bézier path, not a Chrome DevTools click.

There is no Playwright, no Puppeteer, no remote debugging port. Daily Chrome is launched with no extra flags, or attached if it’s already open. Sites that key on CDP/automation flags mostly don’t see that. They can still see injected input (LLMHF_INJECTED).

A tiny unpacked Chrome extension can fuse page structure (chr: ids, listing cards) so the model isn’t guessing from pixels. Sideload is manual. Fusion dies if the service worker goes inactive; reload the card.

What it is good for: personal research on your own desk. “Find a Camry on cars.com,” read a page, fill a ZIP, dismiss a cookie banner.

What it is not: • Not a sandbox. It can click whatever is on screen, including checkout and Easy Apply. • Confirm-before-money is best-effort classification in the binary, not a guarantee. Prompt injection from the screenshot/DOM is real; the binary treats that text as untrusted, the model might not. • Not a CAPTCHA solver on daily Chrome. Two visible tries, then it yields and waits for the puzzle to go away. • Windows only. • Install is: build the exe, register a native-messaging host, sideload the extension, point an MCP client at hands mcp. README is the runbook. Missing an API key does not fail the build; do_task is optional. • Logs live under %LOCALAPPDATA%\hands\logs\. The extension asks for <all_urls> so it can map the tab you’re looking at.

Repo: https://github.com/Ryan-AI-Studios/hands (MIT)

Happy to answer how observe/fusion/the fence work. If you try it, Pause/Break is the kill switch.