Skill: mrhenghu/autoglm-browser-agent (version 1.0.0)

--- name: autoglm-browser-agent description: >- 智能浏览器自动化代理,可执行任何需要浏览器的任务。 包括但不限于:打开网页、搜索信息(百度/谷歌/必应)、浏览社交媒体(微博/小红书/知乎/抖音/B站)、 点赞/评论/转发/收藏、发帖/发消息、登录网站、填写表单、截图、采集网页内容、 在线购物比价、查看新闻资讯、操作在线文档(飞书文档/腾讯文档等)。 当用户提到任何网站名称、网址URL、或需要在网页上执行操作时,使用此技能。 metadata: { "openclaw": { "emoji": "🌐", "requires": { "bins": ["mcporter"] }, "install": [ { "id": "node", "kind": "node", "package": "mcporter", "bins": ["mcporter"], "label": "Install mcporter (node)", }, ], }, } --- # 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: ```bash # 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 启动命令**（幂等,已在运行会自动跳过,不会重复启动）: > ```bash > # 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: ```bash 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 章节) > 4. shell 工具的 `timeout` 参数设为 **7200 秒**,**禁止**设置 `yieldMs` > 5. **禁止**追加 `--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 | Tool | Description | |---|---| | `browser_subagent` | Delegate an entire task to autonomous subagent ⭐ | | `close_browser` | Close all browser windows and clear session pool | ### browser_subagent parameters | Parameter | Required | Description | |---|---|---| | `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_id | start_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`(格式:[REDACTED_SECRET]) 3. **结束本 turn,等待用户回复** ### Turn 2 — 用户回复后恢复 用户回复(如"继续"、"好了"、"登录完了")后,重新调用 `browser_subagent`。 **根据 interact 类型决定是否改写 task**: #### 登录 / 验证码类 interact task 在任务前追加**用户交互操作完成确认说明**,告知 extension 模型: ```bash mcporter call autoglm-browser-agent.browser_subagent task="用户交互操作完成确认说明。<原始/剩余任务>" session_id="<session_id>" --timeout 7200000 ``` **改写规则**: - 格式:`用户已完成/拒绝<具体操作>。<原始/剩余任务>` - 只描述用户**明确完成/拒绝的那个操作**,不要扩展到其他操作 - **已完成的步骤从任务描述中省略** #### 敏感操作类 interact(发评论、点赞、发帖等) task 在任务前追加**用户敏感操作同意与否说明**,告知 extension 模型: ```bash # 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 contains | What 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 描述应包含要发送的结果内容。

path: INSTALL.md
content: # AutoGLM Browser Agent — 安装指南

本文档说明首次安装所需的全部步骤。安装完成后日常使用请参阅 `SKILL.md`。

---

## 0. macOS 解除安全限制

首次下载后，macOS 会阻止未签名的二进制文件运行。执行以下命令解除：

```bash
xattr -d com.apple.quarantine {baseDir}/dist/relay {baseDir}/dist/mcp_server
```

---

## 1. 安装浏览器扩展

在 Chrome / Edge / Brave 等 Chromium 内核浏览器中安装 AutoClaw 扩展：

**Chrome Web Store 安装**（推荐）：

打开链接安装：[AutoClaw 扩展](https://chromewebstore.google.com/detail/jelniggicmclhfgnlapbkgfibmgelfnp)

> Edge 用户也可以从 Chrome Web Store 安装——浏览器会提示"允许来自其他商店的扩展"，点击允许即可。

**安装后验证**：

1. 打开 `chrome://extensions/`
2. 确认 AutoClaw 扩展已出现且开关为**开启状态**（蓝色）
3. 如果扩展被禁用，点击开关启用

---

## 2. 安装 mcporter

```bash
# macOS / Linux
command -v mcporter || npm install -g mcporter
```

**Windows 注意**：PowerShell 默认执行策略会拦截 npm 全局安装的 `.ps1` 包装脚本，导致 `mcporter` 无法直接运行。推荐用 cmd（而非 PowerShell）执行后续所有命令。

```bat
:: Windows — 用 cmd 安装
where mcporter 2>nul || npm install -g mcporter
```

---

## 3. 注册 MCP Server

```bash
# macOS / Linux
mcporter config add autoglm-browser-agent --stdio "{baseDir}/dist/mcp_server --start_url https://www.bing.com --window_width 1456 --window_height 819 --resize_width 1456 --resize_height 819 --max_steps 100 --log_dir {baseDir}/mcp_output --if_subagent"
```

**Windows**：

由于 PowerShell 执行策略限制，推荐用 `node ... cli.js` 方式注册：

```bat
:: Windows — 用 cmd 执行，将 {baseDir} 替换为实际路径
node "%APPDATA%\npm\node_modules\mcporter\dist\cli.js" config add autoglm-browser-agent --command "{baseDir}\dist\mcp_server.exe" --arg --start_url --arg https://www.bing.com --arg --window_width --arg 1456 --arg --window_height --arg 819 --arg --resize_width --arg 1456 --arg --resize_height --arg 819 --arg --max_steps --arg 100 --arg --log_dir --arg "{baseDir}\mcp_output" --arg --if_subagent
```

> **为什么用 `node ... cli.js` 而不是直接 `mcporter`**：PowerShell 执行策略禁止运行 `.ps1`，但 `node` 直接运行 `.js` 不受限制。

验证注册成功：
```bash
# macOS / Linux
mcporter list autoglm-browser-agent --schema
```
```bat
:: Windows
node "%APPDATA%\npm\node_modules\mcporter\dist\cli.js" list autoglm-browser-agent --schema
```

---

## 4. 启动 WS Relay Daemon

Relay 保持 Chrome 扩展的 WebSocket 长连接，防止 mcporter call 结束后 Chrome 窗口关闭。

```bash
# macOS / Linux
{baseDir}/dist/relay
```
```bat
:: Windows
{baseDir}\dist\relay.exe
```

日志输出到 `{baseDir}/mcp_output/relay.log`。

---

## 5. 配置信任模式（auto_approve）

信任模式控制敏感操作（发评论、点赞、发帖、发消息等）是否自动执行：
- **关闭（默认）**：每次敏感操作暂停询问用户确认后才执行
- **开启**：敏感操作自动执行，不再逐次确认
- **无论开关，登录和验证码始终需要用户手动操作**

**询问用户是否开启信任模式**，根据回答写入配置：

```bash
# macOS / Linux — 用户同意开启
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝（默认关闭）
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
```

```bat
:: Windows — 用户同意开启
if not exist "%USERPROFILE%\.openclaw-autoclaw" mkdir "%USERPROFILE%\.openclaw-autoclaw"
echo {"auto_approve": true} > "%USERPROFILE%\.openclaw-autoclaw\config.json"

:: Windows — 用户拒绝（默认关闭）
if not exist "%USERPROFILE%\.openclaw-autoclaw" mkdir "%USERPROFILE%\.openclaw-autoclaw"
echo {"auto_approve": false} > "%USERPROFILE%\.openclaw-autoclaw\config.json"
```

> 后续使用中用户可随时说"开启/关闭信任模式"来切换。


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)