作品 · Works

CSI

20251GoTypeScriptChrome ExtensionCDPMCP
CSI

开源的浏览器控制工具(Ctrl+Shift+I / Crime Scene Investigation 双关),让 Claude Code 等 AI agent 直接驾驶用户正在使用的真实 Chrome:导航、点击、填表、读取页面、截图、存 PDF,全部复用已有登录态。Go daemon 约 4500 行 + TypeScript 扩展约 2500 行,一行脚本安装,预编译产物覆盖 macOS / Linux / Windows。

项目特点

  • 真实浏览器路线:不用无头浏览器、不开独立 profile,直接操作用户日常 Chrome 的标签页——天然继承全部登录会话,也不会触发 headless 自动化检测标记。
  • daemon + 扩展解耦架构:Go 守护进程绑定回环地址(127.0.0.1:10088),HTTP + WebSocket 双服务;Chrome MV3 扩展经 CDP debugger API 操作真实标签页;AI 侧一条 HTTP POST /command 即可下发指令,截图与 PDF 由 daemon 落盘返回文件路径。
  • 17 个工具:导航、点击、填表、无障碍树 snapshot、截图、存 PDF、原始 CDP 透传等,另有 stdio MCP server(csi mcp)让任何 MCP 客户端一行接入全部能力。
  • 可观察的会话机制:agent 操作的标签页自动归入 Chrome 标签组(agent:<session>),人在旁边可以实时看到 AI 的每一步动作。
  • csi-e2e 技能:把自然语言描述的浏览器场景固化为纯 Node、零测试框架依赖的可回放 e2e 回归套件——写用例、真实浏览器验证、固化回放三步走。

技术难点

为什么是真实浏览器。 无头方案(headless Chrome / Playwright)在登录墙和反爬面前步履维艰:验证码、设备指纹、自动化检测标记每一关都要对抗。CSI 反过来利用用户已经通过所有验证的日常浏览器,把「绕过检测」这个问题整个消掉了——代价是要处理 MV3 扩展、CDP debugger 会话与多标签页状态管理的工程复杂度。

安全边界。 daemon 无鉴权,隔离边界就是回环地址本身:只绑 127.0.0.1,任何远程机器物理上够不到这个端口,README 对这一假设有明示。

自然语言到可回放测试。 csi-e2e 的难点不在录制而在「固化」:把一次真实浏览器里验证通过的人工/AI 操作,转成不依赖 AI、确定性可重放的 Node 脚本,选择器要用语义化的 accessibility ref 而非脆弱的 CSS 类名,重放才有意义。