多代理Chrome编排器
启动1-5个并行Claude Code代理,每个代理拥有自己的Chrome浏览器,同时执行浏览器任务。
使用场景
- 向多个网站提交联系表单
- 在多个平台上填写申请
- 抓取需要真实浏览器交互的JS渲染页面
- 任何顺序执行太慢的重复性浏览器任务
架构
Business workspace (orchestrator)
├── active/multi-chrome-agent/
│ ├── chat.md # 共享协调文件
│ ├── launch_chrome.sh # 在端口9223-9227上生成Chrome实例
│ ├── kill_chrome.sh # 销毁所有Chrome实例
│ ├── chrome-agent-1/ # 代理1的工作空间
│ │ ├── .mcp.json # 端口9223上的Chrome DevTools
│ │ └── CLAUDE.md # 代理行为说明
│ ├── chrome-agent-2/ # 端口9224
│ ├── chrome-agent-3/ # 端口9225
│ ├── chrome-agent-4/ # 端口9226
│ └── chrome-agent-5/ # 端口9227
逐步编排
1. 确定需要多少代理
查看任务。如果有10个联系表单需要填写,3-5个代理比较合适。如果有3个,使用2-3个。不要过度配置。
2. 启动Chrome实例
bash /Users/nicksaraev/Business/active/multi-chrome-agent/launch_chrome.sh [COUNT]
这会生成COUNT个Chrome实例,端口从9223开始。等待每个实例的"READY"确认。
3. 重置聊天文件
清除聊天文件并写入任务分配:
# 多Chrome代理聊天
## 编排器
[2026-03-05 14:30] 启动3个代理用于联系表单提交。
### 代理1任务
1. 访问 https://example1.com/contact -> 填写姓名:"Nick Saraev",邮箱:"[email protected]",消息:"您好,我对...感兴趣"
2. 访问 https://example2.com/contact -> 同样的表单填写
### 代理2任务
1. 访问 https://example3.com/contact -> 填写表单
2. 访问 https://example4.com/contact -> 填写表单
### 代理3任务
1. 访问 https://example5.com/contact -> 填写表单
2. 访问 https://example6.com/contact -> 填写表单
## 代理1
## 代理2
## 代理3
4. 生成Claude Code代理
对于每个代理,打开一个新终端并运行:
cd /Users/nicksaraev/Business/active/multi-chrome-agent/chrome-agent-N && claude
其中N是1-5。每个代理将:
- 读取其
CLAUDE.md(浏览器工作指令) - 通过其本地的
.mcp.json连接到其Chrome实例 - 读取
chat.md以获取其任务分配 - 执行任务并将状态报告回
chat.md
通过osascript以编程方式启动: Claude Code通过CLAUDECODE环境变量阻止嵌套会话。要从现有会话中以编程方式启动代理,请使用osascript配合env -u移除阻塞的环境变量:
for i in 1 2 3 4 5; do
osascript -e "tell application \"Terminal\" to do script \"cd /Users/nicksaraev/Business/active/multi-chrome-agent/chrome-agent-$i && env -u CLAUDECODE -u CLAUDE_CODE_ENTRYPOINT -u CLAUDE_AGENT_SDK_VERSION -u CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING -u CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS claude --dangerously-skip-permissions -p '你是代理$i。读取/Users/nicksaraev/Business/active/multi-chrome-agent/chat.md,找到你在代理$i下的任务并执行它们。使用Chrome DevTools MCP浏览网站、搜索列表并收集数据。将你的发现以markdown表格形式写回chat.md中代理$i的部分。活动时标记自己为[WORKING],完成后标记为[DONE]。'\""
sleep 2
done
这将打开独立的Terminal.app窗口,每个窗口运行一个独立的Claude Code会话,并配有各自的Chrome DevTools MCP。
手动后备方案: 如果osascript不起作用,告诉用户打开N个终端标签页:
标签页1:cd ~/Business/active/multi-chrome-agent/chrome-agent-1 && claude
标签页2:cd ~/Business/active/multi-chrome-agent/chrome-agent-2 && claude
...
5. 监控进度
定期读取聊天文件以检查代理状态:
cat /Users/nicksaraev/Business/active/multi-chrome-agent/chat.md
查找每个代理的[DONE]、[ERROR]或[WORKING]标签。
6. 清理
当所有代理报告[DONE]后:
bash /Users/nicksaraev/Business/active/multi-chrome-agent/kill_chrome.sh
聊天协议
代理通过共享的chat.md文件进行通信:
| 标签 | 含义 |
|---|---|
[WORKING] | 代理正在积极处理任务 |
[DONE] | 代理完成了所有分配的任务 |
[ERROR] | 代理遇到阻塞(验证码、超时等) |
[WAITING] | 代理空闲,等待新任务 |
端口映射
| 代理 | Chrome端口 | 工作空间 |
|---|---|---|
| 1 | 9223 | chrome-agent-1/ |
| 2 | 9224 | chrome-agent-2/ |
| 3 | 9225 | chrome-agent-3/ |
| 4 | 9226 | chrome-agent-4/ |
| 5 | 9227 | chrome-agent-5/ |
端口9222保留给主(非并行)Chrome DevTools MCP。
边界情况
- 验证码: 代理在聊天中报告
[ERROR] CAPTCHA on https://...。编排器可以重新分配或跳过。 - 速率限制: 如果某个网站在N次请求后开始阻止,则将URL分散到更多代理上,使每个代理对该网站的访问次数减少。
- 需要登录: 在分配任务之前,在每个Chrome实例中预先进行身份验证,或者在任务列表中包含登录步骤。
- 长时间运行的任务: 代理每30秒检查一次chat.md。如果编排器需要中止,请在编排器部分写入
[ABORT]。