前言
前段时间Claude推出了自己的chrome插件Claude for Chrome,可以实现一些浏览器自动化的操作,比如自定点击,填写表单,截图等操作,但是要Max用户且要申请等待才能体验。本着学习研究的心态,我对这个插件做了1:1的代码逆向还原
,这里给大家做一个Claude for Chrome的技术解密,逆向后的代码已开源,如果觉得有帮助的,帮忙点个star
吧。
github: github.com/hangwin/cow...
总体架构
Claude for Chrome总体包含了以下的模块
- 侧边栏应用:提供对话与权限交互的 UI,负责消息流的可视化与可控中断。
- 对话编排器:维护轮次、构造系统提示、聚合工具 Schema、处理流式输出、承接工具调用与回填。
- 模型侧:基于工具 Schema 选择合适工具,流中产生"调用工具/返回结果"的控制信号。
- 工具注册表:以统一协议封装"读/找/填/点/滚/截图/导航"等能力,支持动态裁剪(例如系统页面仅开放导航)。
- 页面执行层:DOM 注入(读取/提取/填表)与 CDP 通道(鼠标键盘/滚动/截图)的双通道能力。
- 权限管理:按"站点/域间跳转 × 一次/长期"授权,支持可控的"跳过权限模式",并按站点风险自动降级。
- 上下文与压缩:基于令牌预算自动/手动触发摘要压缩,保留近期关键图像上下文。
- 后台与调度:管理侧边栏窗口、跨页通信与定时任务;维护运行日志与统计。

具体细节
端到端流程
从输入到工具执行:
- 用户输入后,对话编排器构造系统提示与历史消息,并注入当前页面类型下可用工具的 Schema。
- 模型在流式输出中可能发出"调用工具"的指令;编排器据此执行工具。
- 工具执行前进行权限检查;若需授权则弹窗提示(截图/坐标/拟输入文本等信息对称),用户允许后重试执行。
- 工具完成返回文本/图片/错误;编排器将结果回填给模型继续推理,直至没有新的工具调用。
- 流式文本持续回显到 UI,用户可随时中断。
sequenceDiagram
actor 用户
participant 侧边栏 as 侧边栏应用
participant 编排 as 对话编排器
participant 模型 as 大模型(流式)
participant 工具 as 工具注册表
participant 权限 as 权限管理
participant 执行 as 页面执行(DOM/CDP)
用户->>侧边栏: 输入自然语言指令
侧边栏->>编排: 发送消息
编排->>模型: 消息+系统提示+工具Schema
模型-->>编排: (可能)发出调用工具
编排->>工具: 调用具体工具(名称/参数/ID)
工具->>权限: 检查站点/跳转授权
alt 需要授权
工具-->>编排: 返回"需要权限"
编排-->>侧边栏: 展示权限弹窗
用户->>侧边栏: 允许一次/站点长期 或 拒绝
侧边栏->>权限: 写入或拒绝
编排->>工具: 已授权后重试执行
end
工具->>执行: DOM 注入或 CDP 执行
执行-->>工具: 返回结果(文本/图片/错误)
工具-->>编排: 回传工具结果
编排->>模型: 回填工具结果继续推理
模型-->>编排: 最终回答或下一次调用
编排-->>侧边栏: 流式渲染给用户
工具列表
- 读取页面(可访问性树):提取"可见/可交互/结构性"节点,并为每个元素分配稳定引用与视口坐标。此结构既利于理解页面布局,也为后续"点击/填表"提供定位。
- 语义查找(自然语言找元素):基于可访问性树与用户查询,返回"最多 20 项"的候选清单(含引用/角色/名称/坐标/匹配理由),促成下一步操作。
- 提取正文(纯文本):启发式识别正文主容器(如文章主体/主区域/可读块),用于"阅读/理解/摘要"等任务。
- 表单输入(按引用填值):对原生输入控件进行设置并派发变更事件,兼容选择器、复选、单选、滑块、日期时间、数字等常见类型。
- 计算机操作(鼠标/键盘/滚动/截图/等待):通过浏览器调试通道模拟真实交互,附带坐标缩放与截图分辨率策略,减少图像占用令牌。
- 导航(URL/前进/后退):支持协议补全、URL 合法性与站点风险分类,并在受限场景自动降级。
权限控制
- 动作维度:阅读内容/点击/键入/导航/域间跳转等。
- 作用域:站点网域(支持泛域名)与"从域 A 到域 B"的跳转授权。
- 时效:一次性(执行后自动消费)与站点长期(可撤销)。
- 跳过权限:仅在低风险域允许启用;当站点被识别为高风险时自动禁用该模式。
- 安全校验:执行前后对比域名,发生跨域则中止动作;运行中在页面显式展示"智能体运行中/停止"指示,且在部分执行步骤临时隐藏指示避免干扰。

上下文压缩与对话记忆
- token预算:每轮结束后评估总占用与剩余窗口;接近阈值自动提议压缩,也支持用户指令手动压缩。
- 压缩策略:生成结构化摘要(覆盖"意图/上下文/交互/错误/待办/当前工作"等核心维度),并保留若干"最近图片消息"作为关键上下文锚点。
- 会话替换:以"已压缩提示 + 摘要 + 近期图片"重置对话历史,从而腾出足够空间持续任务。
- 体验反馈:在 UI 中可视化"节省的令牌",并在手动压缩场景下可选择不继续自动推理。

定时任务
- 配置项:任务名称、Prompt、目标 URL、重复策略(一次/每小时/每日/工作日/每周)、是否跳过权限(高风险域将强制关闭)。
- 调度机制:基于浏览器定时 API 触发,到点由后台创建标签页/窗口,注入侧边栏,填充 Prompt 并自动执行。
- 运行记录:按任务维度记录开始/完成/失败/耗时与对话片段,支持导出与清理;同时维护成功率、平均耗时等概览。
自定义指令与系统提示
- 系统提示:会话初始化时注入时间与平台键位说明,可在设置中自定义与重置。
- 用户指令:支持将常用 Prompt 保存为"命令别名",例如通过输入"/命令名"快速触发;支持导入/导出与去重校验。
- 斜杠命令:例如"/compact"触发手动压缩;也可以围绕保存指令做扩展(如模板化多步骤任务)。
总结
本篇文章系统介绍了Claude for chrome从"用户输入 → 模型推理 → 工具调用 → 权限确认 → 页面执行 → 结果回流"的全链路设计,包括工具集合与原理、权限控制、安全护栏、上下文压缩、定时任务、自定义指令,以及整体架构思路,希望对想学习做浏览器agent的同学有帮助吧