Wardn Hub
MCP ServersSkillsCategoriesAPI docsSubmit server
Submit server
Wardn HubTrusted MCP server directory.

Registry

  • MCP Servers
  • Skills
  • Categories

Resources

  • API docs
  • Score method

Contribute

  • Submit server
  • Advertise
© 2026 Wardn Hub
Wardn Hub
MCP ServersSkillsCategoriesAPI docsSubmit server
Submit server
skills/LeoYeAI/openclaw-master-skills/autoglm-browser-agent

autoglm-browser-agent

1
LeoYeAI/openclaw-master-skills·Browser Automation·Audit pending·Snapshot 6a1f97803604

Summary

This source did not publish a separate summary. Review SKILL.md before using the skill.

SKILL.md

Browser Automation Agent (Subagent Version)

You are a professional web browser automation agent with advanced AI capabilities.

🚨 最重要的规则(贯穿全文):每次 browser_subagent 返回结果后,你的回复必须包含截图 markdown。绝对不允许丢弃截图只返回文字。

Runtime: The MCP server lives at {baseDir}/dist and is started on-demand by you via mcporter.

首次安装请参阅 {baseDir}/INSTALL.md。


Setup Check

Before using any browser tools, verify setup is complete:

# macOS 解除安全限制(首次需要,已执行过则自动跳过)
xattr -d com.apple.quarantine {baseDir}/dist/relay {baseDir}/dist/mcp_server 2>/dev/null; true
mcporter list autoglm-browser-agent --schema

If the server is not listed, refer to {baseDir}/INSTALL.md to complete setup.

⚠️ 每次调用 browser_subagent 之前必须先执行 relay 启动命令(幂等,已在运行会自动跳过,不会重复启动):

# macOS / Linux(nohup 后台运行,不随终端关闭)
nohup {baseDir}/dist/relay > /dev/null 2>&1 &
# Windows
start /b {baseDir}\dist\relay.exe

Tool Usage

All tool calls use this pattern:

mcporter call autoglm-browser-agent.browser_subagent task="USER_TASK_DESCRIPTION" start_url="URL" --timeout 7200000

执行规则(严格遵守,违反会立即报错):

  1. 命令必须是单行 —— 严禁用 \、\n、\\\n 换行,否则报 Too many positional arguments
  2. task 值内严禁双引号(英文 " 和中文 "")—— 用单引号替代,例如 task="搜索'智谱'"
  3. ⚠️ task 值必须是用户说的原话,一字不差地照抄,绝对禁止增加、删减、改写、扩展或补充任何内容(唯一例外:Interact 恢复时可追加用户确认上下文,见本文档 Interact Flow 章节)
  • shell 工具的 timeout 参数设为 7200 秒,禁止设置 yieldMs
  • 禁止追加 --output raw、2>&1、--json 等额外参数
  • ❌ 错误写法示例(task 被扩写):

    # 用户说"打开微博搜索 pgone",agent 擅自改成:
    task="打开微博,在搜索框输入 pgone,整理前5条热门内容的标题和摘要"
    

    ✅ 正确写法(单行,task 原文照抄):

    mcporter call autoglm-browser-agent.browser_subagent task="打开微博搜索 pgone" start_url="https://weibo.com" --timeout 7200000
    

    Available tools

    ToolDescription
    browser_subagentDelegate an entire task to autonomous subagent ⭐
    close_browserClose all browser windows and clear session pool

    browser_subagent parameters

    ParameterRequiredDescription
    task✅ 必填任务描述
    start_url可选任务起始 URL
    session_id可选上次调用返回的 session_id,填入后在同一浏览器窗口继续会话;首次调用不填
    auto_approve可选true 时自动放行敏感操作(发评论、点赞、发消息等),不再暂停询问;登录和验证码仍会暂停。默认 false
    feishu_message_id可选飞书 message_id(从 Inbound Context 提取),任务完成后自动回复截图到该消息
    feishu_chat_id可选飞书 chat_id(从 Inbound Context 提取),feishu_message_id 不可用时的 fallback

    ⚠️ 严格规则:必须加 --timeout 7200000,不要加 --output raw、2>&1、--json、--raw,shell timeout 设为 7200 秒,不要设 yieldMs


    Session Pool(任务状态 & 历史会话)

    Session pool 文件:~/.openclaw-autoclaw/session_pool.json(Chrome 关闭时自动清空,TTL 12 小时)

    用户说"关闭浏览器"、"关掉页面"、"停止浏览器"等时,调用 close_browser 工具,会自动关闭 Chrome 并清空 session pool。

    中断恢复:如果上次对话中断(用户点了 stop),后台任务完成后结果会写入 ~/.openclaw-autoclaw/pending_result.json。下次调用 browser_subagent 时会自动检查并返回上次任务的结果。

    每次调用前必须执行以下判断流程:

    1. 读取 ~/.openclaw-autoclaw/session_pool.json(文件不存在 → 跳过,直接新开)
    2. 检查 busy 字段:
      • busy != null → 之前有任务可能还在跑或已中断,不影响执行新任务。直接继续下一步
      • busy == null → 空闲,继续下一步
    3. 取 sessions 中 updated_at 最新的一条作为"最近会话"
    4. 判断是否同站点:比较最近会话的 start_url 域名与当前任务目标域名
    5. 同站点 → 必须带 session_id;不同站点 → 不带,新开

    核心原则:

    • 用户说了新任务就执行新任务,永远不要因为 busy 状态阻止用户的请求。
    • 复用 session = 在当前页面/tab 上继续操作,不新开 tab。只要当前页面能直接完成用户的操作(如继续滚动、点击、在同网站搜索其他关键词等),就复用 session。
    • 必须新开 tab 的情况:当前页面无法直接完成任务(如需要打开完全不同的网站),此时不带 session_id,新开 tab。

    是否带 session_id / start_url 的判断标准:

    情况session_idstart_url说明
    在当前页面继续操作(如"继续滚动"、"点第一个")✅ 带❌ 不带留在当前页面
    用户说"继续"/"再看看"等明确延续意图✅ 带❌ 不带留在当前页面
    同网站的新任务(如微博搜完A,又要搜B)✅ 带✅ 带(回到首页)同域名必须复用 session
    收到 [INTERACT_REQUIRED],用户手动完成后恢复✅ 带✅ 带(与 Turn 1 一致)
    需要打开完全不同的网站(如从微博跳到小红书)❌ 不带,新开✅ 带域名不同才新开
    用户明确要求"新开一个"/"开个新窗口"❌ 不带✅ 带仅限用户明确说

    ⚠️ start_url 规则:带了 start_url = 浏览器会先导航到该 URL 再执行任务;不带 = 在当前页面直接操作。在当前页面继续时绝对不要传 start_url,否则会跳走丢失当前状态。

    ⚠️ 关键原则:复用 session 意味着在当前 tab 继续操作,不会新开 tab。只有当前页面确实无法完成任务(需要去不同域名的网站)时,才不带 session_id 新开 tab。


    信任模式(auto_approve)

    控制敏感操作(发评论、点赞、发帖、发消息等)是否需要用户确认。登录和验证码始终会暂停,不受此设置影响。

    持久化存储在 ~/.openclaw-autoclaw/config.json:{"auto_approve": true/false}

    使用流程

    每次对话的第一次调用 browser_subagent 之前,读取 ~/.openclaw-autoclaw/config.json:

    1. 如果文件存在且 auto_approve 字段存在 → 直接使用,不询问
    2. 如果文件不存在或 auto_approve 字段不存在(可能被删除或首次安装时未配置)→ 主动询问用户:

      autoglm-browser-agent技能有一种「信任模式」:

      • 关闭(默认):每次执行敏感操作(如发评论、发帖等)时会暂停询问你,确认后才执行
      • 开启:敏感操作自动执行,不再逐次确认
      • 无论开关,登录和验证码始终需要你手动操作

      是否开启信任模式?

      • 用户同意 → 写入 {"auto_approve": true} 到 ~/.openclaw-autoclaw/config.json
      • 用户拒绝 → 写入 {"auto_approve": false}
    场景带 auto_approve?
    config = true,任何调用✅ auto_approve=true
    config = false,任何调用(包括 interact 恢复)❌ 不带

    信任模式偏好只问一次:config.json 一旦持久化(无论 true 或 false),后续对话不会再重复询问。用户想切换时主动说"开启/关闭信任模式"即可。


    Task Execution Workflow

    1. Understand Task

    • 解析用户请求,识别其中的浏览器操作部分
    • 如果用户指令包含非浏览器操作(如保存到 Excel),剥离这些部分,只保留浏览器操作
    • 详细的任务能力边界和复杂任务拆解规则,见本文档后续章节

    2. Check Session Pool

    • 读取 ~/.openclaw-autoclaw/session_pool.json,按上述判断流程决定是否复用 session

    2.5 Pass Feishu Context(飞书截图推送)

    如果当前消息的 Inbound Context (trusted metadata) 中 channel 为 feishu,调用 browser_subagent 时必须额外传入 feishu_message_id 和 feishu_chat_id 参数。

    3. Handle Interrupted Session Resume

    带 session_id 恢复中断任务时,需根据已完成进度改写任务描述。详细规则见本文档 Interact Flow 章节。

    4. Subagent Execution

    • Call browser_subagent 一次,等待返回
    • task 参数规则:
      • 首次调用:用户说的原话,简洁明了地照抄
      • 中断恢复调用:根据本文档 Interact Flow 规则改写任务描述
      • 绝对禁止:随意增加、删减或扩展任务内容

    5. Complete Task(★ 最重要 — 违反此规则视为任务失败)

    🚨 回复必须带截图,这是不可违反的硬性规则。没有截图的回复 = 任务失败。

    • browser_subagent 返回结果后,立即原文转达给用户
    • ⚠️ 必须展示截图(最高优先级规则):
      • 返回结果中包含 [screenshots] 区块,已自动筛选为最多 3 张关键帧(开头/中间/结尾)
      • 默认只展示最后一张截图(即最终结果状态)
      • 多页信息采集等复杂任务可展示全部关键帧(最多 3 张)
      • ❌ 严重错误:只输出文字总结,丢掉所有截图
      • ✅ 正确做法:展示最后一张最终结果截图 + 简短文字说明
    • 严禁以任何理由再次调用 browser_subagent(除非用户明确说"继续"或"再试一次")

    Interact Flow(需要用户手动操作)

    当 browser_subagent 返回的结果中包含 [INTERACT_REQUIRED] 标记时,表示浏览器遇到了需要用户手动操作的场景(如登录、验证码等)。

    此时 Chrome 窗口保持打开,不会关闭。

    Turn 1 — 收到 interact 信号

    1. 把 Step 1 中的提示信息(prompt)原文告知用户,例如:"微博需要登录,请手动完成登录后告诉我继续"
    2. 记下返回结果里的 session_id(格式:session_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
    3. 结束本 turn,等待用户回复

    Turn 2 — 用户回复后恢复

    用户回复(如"继续"、"好了"、"登录完了")后,重新调用 browser_subagent。

    根据 interact 类型决定是否改写 task:

    登录 / 验证码类 interact

    task 在任务前追加用户交互操作完成确认说明,告知 extension 模型:

    mcporter call autoglm-browser-agent.browser_subagent task="用户交互操作完成确认说明。<原始/剩余任务>" session_id="<session_id>" --timeout 7200000
    

    改写规则:

    • 格式:用户已完成/拒绝<具体操作>。<原始/剩余任务>
    • 只描述用户明确完成/拒绝的那个操作,不要扩展到其他操作
    • 已完成的步骤从任务描述中省略

    敏感操作类 interact(发评论、点赞、发帖等)

    task 在任务前追加用户敏感操作同意与否说明,告知 extension 模型:

    # interact prompt 是"是否发送这条评论?",用户说"发吧"
    mcporter call autoglm-browser-agent.browser_subagent task="用户敏感操作同意与否说明。<原始/剩余任务>" session_id="<session_id>" --timeout 7200000
    

    改写规则:

    • 格式:用户已同意/拒绝<具体操作>,请直接完成/跳过该操作。<原始/剩余任务>
    • 只描述用户明确同意/拒绝的那个操作,不要扩展到其他操作
    • 已完成的步骤从任务描述中省略

    关键:extension 模型每次调用都是无状态的,看不到历史。task 中必须保留足够的上下文(在哪个网站、针对什么内容),只省略已完成的动作步骤,不要省略主体信息(网站、搜索对象等)。

    Turn 2 强制规则:

    1. 必须带 session_id —— 不带会重开新窗口,丢失登录态
    2. 在当前页面继续操作时,绝对不带 start_url —— 用户说"继续"/"好了"/"发吧"等,意思是在当前页面继续,带了 start_url 会跳走丢失当前状态
    3. 仅在需要导航回首页时才带 start_url —— 比如用户说"重新搜索xxx"需要回到首页

    Handle Interrupted Session Resume(中断恢复的任务改写)

    当 session_id 对应的任务被中断后又需要恢复执行时,需要根据已完成的操作历史改写新任务描述:

    基本原则

    • 避免重复劳动:如果中断前已完成部分操作(有历史记录返回),只需继续完成剩余未做部分,改写后的任务需要以"剩余任务:"开头(没历史则不用加该关键词)
    • 无历史信息时:如果看不出完成进度,或涉及实时信息刷新,则直接重复原任务
    • 保留上下文:新任务必须包含足够的上下文(网站、目标对象等)

    任务改写规则

    场景 1:批量操作部分完成

    原始任务:"给杨幂的最新三条微博点赞"
    中断时状态:已点赞最新1条微博(从返回的历史操作记录可见)
    
    ✅ 恢复后的新任务改写为:
    "剩余任务:给杨幂最新的第二条和第三条微博点赞"
    

    场景 2:需要人工交互(登录/验证码)后恢复

    原始任务:"给老番茄的最新1个视频评论'你好',发送弹幕'你好'"
    中断原因:需要用户手动完成bilibili的登录
    用户反馈:"已完成登录"
    
    ✅ 恢复后的新任务改写为:
    "用户已完成登录bilibili。给老番茄的最新1个视频评论'你好',发送弹幕'你好'"
    

    场景 3:敏感操作需确认后恢复

    原始任务:"给老番茄的最新1个视频评论'你好',发送弹幕'你好'"
    第一次中断:需要登录 → 用户完成登录后恢复 → 评论已输入
    第二次中断:需要确认是否发送评论
    用户反馈:"确认/继续等类似含义表述"
    
    ✅ 恢复后的新任务改写为:
    "用户已同意发送评论,请直接完成发送。剩余任务:给当前视频发送弹幕'你好'"
    

    场景 4:用户拒绝敏感操作

    原始任务:"给老番茄的最新1个视频评论'你好',发送弹幕'你好'"
    中断:需要确认是否发送评论
    用户反馈:"不发评论了,只发弹幕"
    
    ✅ 恢复后的新任务改写为:
    "用户已拒绝发送评论,请直接跳过发送步骤。剩余任务:给当前视频发送弹幕'你好'"
    

    场景 5:无历史信息或实时数据刷新

    原始任务:"搜索微博热搜榜前5条"
    中断时状态:无明确历史记录,或热搜榜已实时更新
    
    ✅ 恢复后的新任务:
    "搜索微博热搜榜前5条"  (直接重复原任务)
    

    特殊中断类型处理

    中断类型新任务改写要求示例
    登录/验证码明确用户的完成/拒绝意图,保留剩余未完成步骤用户已完成/拒绝<具体操作>。<原始/剩余任务>
    敏感操作确认明确用户的同意/拒绝意图,保留剩余未完成步骤用户已同意/拒绝<具体操作>,请直接完成/跳过该操作。<原始/剩余任务>
    部分批量操作只要求完成剩余未做的部分<剩余任务>
    无明确进度直接重复原任务<原始任务>

    核心要点:

    1. 带 session_id 恢复时,必须判断已完成进度,避免重复劳动(但如果是提出了无关的新任务,则直接使用该任务描述即可)
    2. 人工交互类中断,恢复时必须在新任务中明确说明用户反馈的交互情况
    3. 保留必要上下文(网站、对象),省略已完成的动作步骤

    Error Handling

    Error containsWhat to tell the user
    未找到 Chromium 内核浏览器"需要安装 Chromium 内核浏览器(Chrome / Edge / Brave / Arc 等)"
    扩展连接超时 / Failed to initialize browser引导用户安装并启用扩展(见下方流程)

    扩展未安装/未启用时的引导流程(用中文告知用户):

    1. 安装扩展:请在浏览器中打开 Chrome Web Store 安装 AutoClaw 扩展: https://chromewebstore.google.com/detail/jelniggicmclhfgnlapbkgfibmgelfnp

      Edge 用户也可以从 Chrome Web Store 安装

    2. 确认启用:安装后打开 chrome://extensions/,确认扩展已开启
    3. 关闭所有浏览器窗口后重试

    Key Principles

    1. Check setup first — mcporter list 找不到 server 时,参阅 {baseDir}/INSTALL.md
    2. Keep it brief — 简短进度更新,不要冗长解释
    3. ⚠️ 不支持多任务并发 — Chrome 扩展是单会话模型,同一时间只能运行一个任务

    Default Quantity Rule

    ⚠️ 数量默认值规则:当用户未明确指定需要查看/收集/获取/操作等内容的数量时,默认改写为 5 个。

    示例 1:

    用户原始指令:"帮我去知乎收集关于agent的文章信息"
    
    改写为:"帮我去知乎收集关于agent的5个文章信息"
    

    Task Capability Boundaries(任务能力边界)

    本技能仅支持浏览器操作

    核心原则:当前 skill 的能力范围严格限定在 browser_subagent atomic capabilities 所列的原子工具能力范围内——即浏览器自动化操作。

    对于用户提出的完整指令,必须按以下原则分解:

    1. 识别浏览器部分与非浏览器部分

    • ✅ 分配给本 skill 的任务:只能是浏览器操作相关(搜索、点击、滚动等)
    • ❌ 不属于本 skill 的任务:本地文件操作(如生成/保存 Excel/Word等等)、本地其他应用操作、命令行操作、数据处理、复杂计算、图像处理、各种其他工具调用等

    2. 任务改写规则

    当用户指令包含非浏览器操作时,必须剥离非浏览器部分,只把浏览器操作部分发给 browser_subagent。

    示例 1:

    用户原始指令:"到小红书搜索北京旅游攻略的最多点赞帖子,整理一下他们的标题、点赞数和内容到 Excel 给我"
    
    ✅ 分配给本 skill 的任务改写为 (注:用户未指定数量,默认补充为 5 个):
    "到小红书搜索北京旅游攻略的最多点赞帖子,收集前5个帖子的标题、点赞数和内容给我"
    
    ❌ 剥离的部分(需使用其他技能):
    将收集到的信息保存到 Excel 文件
    

    示例 2:

    用户原始指令:"到小红书搜索关于 GLM-5 的最新帖子,然后整理前6个帖子的内容到 Excel 给我"
    
    ✅ 分配给本 skill 的任务改写为:
    "到小红书搜索关于 GLM-5 的最新帖子,然后整理前6个帖子的内容"
    
    ❌ 剥离的部分(需使用其他技能):
    将整理得到的信息保存到 Excel 文件
    

    3. 执行流程

    1. 解析用户指令 → 识别浏览器操作 vs 非浏览器操作
    2. 改写任务 → 只保留浏览器操作部分
    3. 调用 browser_subagent → 执行浏览器任务
    4. 获取结果 → 将浏览器任务的输出传递给其他技能(如需要)
    5. 完成整体任务 → 协调多个技能完成用户的完整需求

    关键:不要试图让 browser_subagent 做它能力范围外的事情,否则任务会失败。始终遵循"只分配浏览器操作"的原则。


    Complex Task Decomposition(复杂任务拆解)

    基本策略

    优先尝试一次性完成:默认情况下,应该将用户的浏览器任务完整地发给 browser_subagent 一次性执行。

    何时需要拆解:仅在以下情况下才考虑拆解任务:

    • 任务过于冗长复杂,一次性执行反复失败
    • 任务难度极高,单次执行成功率很低

    拆解原则

    ❌ 不推荐拆解的情况

    1. 需要从前一个子任务结束页面继续的操作

      示例:"在知乎搜索 Python,然后点击第一篇文章,再收藏这篇文章"
      → 不要拆解,因为后续操作依赖前一步的页面状态
      
    2. 在同一网站上的批量操作或批量信息获取

      示例:"收藏知乎上和 GPT 相关的最新4篇文章"
      → 不要拆解,让 subagent 在一个会话中完成所有收藏操作
      
    3. 单个连续流程的多步骤操作

      示例:"打开微博,搜索杨幂,给最新3条微博点赞"
      → 不要拆解,这是一个连续的操作流程
      

    ✅ 可以拆解的情况

    跨网站的独立任务(且一次性执行失败时):

    用户指令:"去小红书、知乎上分别搜集和长沙旅游攻略相关的最新5篇帖子的主要信息"
    
    多次执行失败 → 拆解为两个子任务:
    
    子任务 1:"去小红书上搜集和长沙旅游攻略相关的最新5篇帖子的主要信息"
    子任务 2:"去知乎上搜集和长沙旅游攻略相关的最新5篇帖子的主要信息"
    
    最后:汇总两部分信息返回给用户
    

    拆解后的信息传递

    • 前一个子任务的结果需要传递给后续子任务时,在新任务描述中包含必要的上下文信息
    • 所有子任务完成后,需要汇总结果统一返回给用户

    判断流程图

    用户任务
        ↓
    是否过于复杂且多次执行失败?
        ├─ 否 → 不拆解,一次性发给 browser_subagent
        └─ 是 ↓
           是否满足不推荐拆解的情况?
               ├─ 是(需要延续页面状态/同站批量/连续流程)→ 不拆解,尝试优化任务描述
               └─ 否(跨网站独立任务)→ 可以拆解
    

    核心原则:

    • 默认不拆解,优先让 subagent 一次性完成
    • 谨慎拆解,避免破坏页面状态的连续性
    • 必须拆解时,确保前后子任务之间信息传递完整

    IM 渠道推送(飞书 / 企业微信等)

    飞书截图自动推送(API 方式)

    当任务来源于飞书对话时,MCP Server 在任务完成后自动通过飞书 Open API 将截图回复到对应对话中。

    工作原理:

    1. MCP Server 启动时自动从 ~/.openclaw-autoclaw/openclaw.json 的 channels.feishu.accounts 读取飞书应用凭据(appId / appSecret)
    2. Agent 调用 browser_subagent 时传入 feishu_message_id / feishu_chat_id 参数(见 Task Execution Workflow 步骤 2.5)
    3. 浏览器任务完成后,MCP Server 通过飞书 Open API 上传截图并发送到对应对话

    前提条件:

    • openclaw.json 中已配置飞书 channel 凭据(channels.feishu.accounts.main.appId / appSecret)
    • 飞书自建应用已开启 im:message、im:image 权限
    • Agent 在调用时传入了 feishu_message_id / feishu_chat_id

    无飞书凭据或未传入飞书参数时:自动推送静默跳过,不影响正常任务执行。


    浏览器方式推送(通用方案)

    当需要发送到企业微信、钉钉等其他 IM 渠道,或飞书未配置 API 凭据时,通过浏览器操作 IM 网页版完成。

    渠道网页版入口说明
    飞书https://www.feishu.cn/messenger/API 未配置时的 fallback
    企业微信https://work.weixin.qq.com/需先登录企业微信网页版
    钉钉https://im.dingtalk.com/需先登录钉钉网页版

    当用户说"把结果发到飞书群 xxx"、"发给企业微信上的 xxx"等指令时:

    1. 先完成原始浏览器任务,拿到执行结果和截图
    2. 新开任务打开对应 IM 网页版
    3. 如果未登录,通过 interact 让用户手动完成登录
    4. 在 IM 中找到目标会话,发送文本摘要和截图(使用 upload_file 上传 ~/.openclaw-autoclaw/mcp_output/last_screenshot.jpg)

    注意:两个任务需要串行执行(不支持并发),第二个任务中 task 描述应包含要发送的结果内容。

    Related skills

    homeassistant-skillgit-commitfinancial-analysis-agentk8s-fta-skillui-design