逆向还原Claude for Chrome - 学习顶尖公司是如何做浏览器agent的

前言

前段时间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的同学有帮助吧

相关推荐
小欣加油3 小时前
python123 机器学习基础练习2
人工智能·python·深度学习·机器学习
DuHz3 小时前
Stable Video Diffusion:将潜在视频扩散模型扩展到大规模数据集——论文阅读
论文阅读·人工智能·深度学习·神经网络·算法·音视频
学境思源AcademicIdeas3 小时前
我用ChatGPT完成选题的全过程复盘
人工智能·chatgpt
cxr8283 小时前
BMAD方法论:敏捷价值、原则映射与全生命周期技术
人工智能·智能体·ai赋能
荼蘼3 小时前
自然语言处理——情感分析 <上>
人工智能·自然语言处理
STLearner3 小时前
AI论文速读 | 当大语言模型遇上时间序列:大语言模型能否执行多步时间序列推理与推断
大数据·论文阅读·人工智能·深度学习·机器学习·语言模型·自然语言处理
IT_陈寒3 小时前
3年Java老手:我用这5个Spring Boot优化技巧将系统吞吐量提升了200%!🚀
前端·人工智能·后端
Dongsheng_20193 小时前
【汽车篇】AI深度学习在汽车激光焊接外观检测的应用
人工智能·汽车
产业家3 小时前
AI重塑流量背后,微软广告打造下一代广告生态
人工智能·microsoft