← 知识整理
AI 技术与工程 / 知识整理 · 中文

王凯多 Agent 浏览器矩阵架构(v1.1 实操指南)

一台电脑 × N 套独立身份 × 每套身份 1 个浏览器 + 1 个 cdp-proxy + M 个 agent。Claude Code v2.1.x 实测路径 + 端口对分配 + 文件模板 + hub 协调层 + 指纹工具 + 住宅代理 + CDP 安全

资料来源:王凯 · 本站发布:2026-09-26

多智能体浏览器自动化系统架构

一句话定义:矩阵架构 = "一台电脑 × N 套独立身份 × 每套身份 1 个浏览器 + 1 个 cdp-proxy 进程 + M 个 agent"。身份之间靠浏览器/账号/IP/指纹四重隔离;同身份内的多 agent 靠 chrome-mcp-proxy 的 sessionId 路由互不串台。

v1.0 → v1.1 关键修正:

  • 端口分配从"按平台维度"改为"按身份维度"
  • 共享浏览器模型替代"一 agent 一浏览器"
  • 全局配置路径全部按 Claude Code v2.1.x 实测路径
  • 增加 hub 协调层、指纹工具、住宅代理、CDP 安全
  • 工具调用必须走 mcp__chrome__* 强制约束

适用:Claude Code v2.1.126+(v2 工具发现机制)。验证环境:macOS + Chrome 147 + chrome-mcp-proxy v1.0(William Wang)。

1. 核心定义

身份 (Identity)  = 一个浏览器 app + 一套登录态 + 一个住宅 IP + 一个 cdp-proxy 进程
   ↓
工种 (Role)      = 一个 Claude Code agent(独立工作目录),跟同身份其他 agent 共享同一个浏览器实例

这里的"agent" = 一个独立的 Claude Code 终端窗口/会话,不是 Claude Code 内部的 sub-agent / Task 工具,是字面意义上的"开一个新终端、跑一次 claude 命令"。

2. 架构总览

graph TB
    A[一台电脑] --> B[全局共享层 ~/.claude/]
    A --> C[身份 A: Chrome + US-East 住宅 IP]
    A --> D[身份 B: Arc + US-West 住宅 IP]
    A --> E[身份 C: Brave + UK 住宅 IP]
    A --> F[hub 协调层 ~/agents/_hub/]
    
    B --> B1[~/.claude.json mcpServers]
    B --> B2[~/.claude/CLAUDE.md 全局偏好]
    B --> B3[~/.claude/skills/ 全局 skill]
    
    C --> C1[cdp-proxy 9401 → Chrome 9222]
    C1 --> C2[agent A1 publisher]
    C1 --> C3[agent A2 engager]
    C1 --> C4[agent A3 researcher]
    
    F --> F1[不接浏览器,只读 logs + memory<br/>做调度]

3. 端口对分配(v1.1 按身份维度)

身份 浏览器 app proxy 端口 chrome 调试端口 用户数据目录 住宅代理出口
identity-A Chrome 9401 9222 ~/agents/identity-A/browser-data/ US-East
identity-B Arc 9402 9223 ~/agents/identity-B/browser-data/ US-West
identity-C Brave 9403 9224 ~/agents/identity-C/browser-data/ UK
identity-D Edge 9404 9225 ~/agents/identity-D/browser-data/ DE
identity-E Vivaldi 9405 9226 ~/agents/identity-E/browser-data/ JP
... ... +1 +1 ... ...
identity-J (随选) 9410 9231 ... ...

预留 9450+/9270+ 给实验/临时用。

同一身份下多 agent:所有 agent 的 .mcp.json 都指向同一个 proxy 端口(如 identity-A 下的所有 agent 都指 9401)。chrome-mcp-proxy 通过 sessionId 路由保证它们看到的事件互不干扰。

4. 三层配置分层(v2.1.x 实测)

层级 MCP 配置 Skill 路径 CLAUDE.md 路径 加载方式
Enterprise (managed) (managed) /Library/Application Support/ClaudeCode/CLAUDE.md 优先级最高
User(全局) ~/.claude.json 的 mcpServers ~/.claude/skills/<name>/SKILL.md ~/.claude/CLAUDE.md 所有 agent 自动继承
Project(项目) ./.mcp.json ./.claude/skills/<name>/SKILL.md ./CLAUDE.md 仅该工作目录下生效
Local(本地) ./.claude/settings.local.json — ./CLAUDE.local.md 不入 git,最后 append

关键规则

  • MCP 写入命令:claude mcp add <name> -s user|project|local <command> [args...],不要手编 JSON
  • Skill 优先级:Enterprise > Personal > Project > Plugin
  • CLAUDE.md 是拼接不是覆盖 —— 全局 CLAUDE.md 写的所有内容都会出现在每个 agent 里,必须保持极简

4 问决定放哪一层

1. 这个能力绑定特定资源吗?(如某个浏览器端口)  → Project
2. 不同身份/agent 凭证不一样吗?(如各自 API key)→ Project
3. 不同身份/agent 行为不一样吗?(如不同语气)   → Project
4. 纯逻辑、所有 agent 都用同一份?               → User(全局共享)

MCP / Skill / CLAUDE.md 分层示例

资产 层 理由
chrome MCP(端口 9401/9222) Project 不同身份指向不同 proxy 端口对
filesystem MCP User 纯本地工具
fetch MCP User 纯网络工具
notion MCP(hub agent 用) User(在 hub 项目里启用) 单一工作区
Skill:markdown-writer User 通用写作
Skill:youtube-publish Project(identity 级) 该身份的 YT 账号特有规则
Skill:identity-A-tone Project 该身份口吻
全局 CLAUDE.md User,只写跨 agent 偏好 拼接到每个 agent,必须极简
项目 CLAUDE.md Project agent 人设、绑定浏览器、铁律

5. 单身份目录结构

~/agents/identity-A/
├── _identity/                   ← 身份级共享资产
│   ├── start-browser.sh         ← 启动浏览器 + cdp-proxy
│   ├── stop-browser.sh
│   ├── browser-data/            ← user-data-dir
│   ├── identity.env             ← 身份元数据
│   ├── .browser.pid
│   └── .proxy.pid
│
├── publisher/                   ← Agent A1:管发布
│   ├── .mcp.json                ← 指向 9401
│   ├── CLAUDE.md                ← 该 agent 人设
│   ├── .claude/
│   │   └── skills/
│   │       ├── publish-youtube/SKILL.md
│   │       ├── publish-tiktok/SKILL.md
│   │       └── publish-instagram/SKILL.md
│   ├── feedback.md
│   ├── memory/
│   └── logs/
│
├── engager/                     ← Agent A2:管评论互动
│   └── (结构同上,skill 不同)
│
└── researcher/                  ← Agent A3:监控同行
    └── (结构同上)

6. 关键文件模板

6.1 start-browser.sh(节选关键部分)

#!/bin/bash
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
mkdir -p "$DIR/browser-data" "$DIR/logs"

IDENTITY_NAME="identity-A"
PROXY_PORT=9401
CHROME_PORT=9222
BROWSER_EXEC="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
PROXY_HOST="residential.example.com"
PROXY_USER="your-user"
PROXY_PASS="your-pass"
PROXY_PORT_RESIDENTIAL=22225
PROXY_SCHEME="socks5"

CDP_PROXY_SCRIPT="$HOME/chrome-mcp-proxy/chrome-mcp-proxy.sh"

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY

# 启动浏览器
"$BROWSER_EXEC" \
  --remote-debugging-port=$CHROME_PORT \
  --remote-debugging-address=127.0.0.1 \
  --user-data-dir="$DIR/browser-data" \
  --proxy-server="${PROXY_SCHEME}://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT_RESIDENTIAL}" \
  --no-first-run --no-default-browser-check --window-size=1280,800 \
  > "$DIR/logs/browser.log" 2>&1 &

# 启动 cdp-proxy
nohup bash "$CDP_PROXY_SCRIPT" $PROXY_PORT $CHROME_PORT > "$DIR/logs/proxy.log" 2>&1 &

完整版见 sources/learning/wangkai/方案探讨/multi-agent-browser-matrix-v1.1.md §5.1

6.2 identity.env(身份元数据)

IDENTITY_NAME="identity-A"
BROWSER="Chrome"
PROXY_PORT=9401
CHROME_PORT=9222
RESIDENTIAL_PROXY_REGION="US-East"

ACCOUNTS_YOUTUBE="creator-yt-A@example.com"
ACCOUNTS_TIKTOK="@creatorA_us"
# ... 15 平台清单

STATUS_YOUTUBE="active"
STATUS_TIKTOK="active"
# 风控状态记录

6.3 .mcp.json(每个 agent)

{
  "mcpServers": {
    "chrome": {
      "command": "bash",
      "args": [
        "/Users/lilimeng/chrome-mcp-proxy/chrome-mcp-proxy.sh",
        "9401",
        "9222"
      ]
    }
  }
}

或者用命令行(推荐):

cd ~/agents/identity-A/publisher
claude mcp add chrome -s project bash $HOME/chrome-mcp-proxy/chrome-mcp-proxy.sh 9401 9222

6.4 项目 CLAUDE.md 模板(关键铁律)

# Agent 人设:identity-A / publisher

## 身份
我是身份 A 的 publisher agent,负责该身份在 15 个平台的内容发布。
身份 A 的浏览器是 Chrome(住宅代理 US-East),由 cdp-proxy 9401 → 9222 控制。

## 工具铁律
- 只能用 mcp__chrome__* 工具操作浏览器
- 禁止用 Bash 写脚本绕路调 CDP(端口 9222 / 9401)
- 禁止操作其他端口(9402/9403/...)或其他浏览器 app
- 禁止登录与 identity-A 无关的账号

## 合规铁律(违反一次账号就废)
- TikTok / IG Reels:禁止任何 NSFW 暗示
- 不发硬广,不发政治/宗教
- 不让 Claude 替我润色发挥(让 Claude 翻译,不发挥)
- 发布前自审一次

## 出错处理
- 浏览器加载失败 → 重试 1 次 → 仍失败写 logs/error-YYYYMMDD.log
- 检测到限流/风控提示 → 立即停止 + 更新 STATUS_<平台>="throttled"
- chrome MCP 工具找不到 → 不要绕路,停下来报错,让人类来 fix

6.5 全局 ~/.claude/CLAUDE.md(必须极简)

# 全局偏好(影响所有项目,请极简)
- 语言:中文优先,技术名词用英文原文
- 代码风格:函数命名 snake_case,注释解释为什么不解释做什么
- token 风格:宁可多问一次,不要假设
- 不主动 commit / push git,等明确指令

禁止在全局 CLAUDE.md 写:项目名、产品名、平台账号、密钥、个人偏好以外的任何内容。

7. Hub 协调层

矩阵规模 ≥ 3 个身份后必须有 hub。hub agent 不接浏览器,只读各 identity 的 logs / memory / identity.env,做调度和监控。

~/agents/_hub/
├── CLAUDE.md           ← "你是 hub,不操作浏览器,只调度"
├── .mcp.json           ← 只装 filesystem 和 fetch(无 chrome)
├── inbox/              ← 人类下发任务的目录
├── outbox/             ← hub 给各 identity 下发任务
├── dashboard/          ← hub 生成的状态报告
├── memory/
└── feedback.md

Hub 工作流

  1. 启动后先扫描所有 identity.env,汇总当前矩阵状态
  2. 读人类放进 ./inbox/ 的任务文件
  3. 拆解任务 → 决定派给哪些 identity 的哪些 agent
  4. 写任务文件到对应 agent 的 ./inbox/
  5. 每天 9:00 / 18:00 生成 dashboard 报告

报警规则

  • 任何 STATUS_* 出现 throttled / banned → 高亮
  • 任何 agent 24h 没有新 feedback.md 条目 → 警告(说明卡住了)
  • 任何 logs/error-*.log 在过去 1h 出现新条目 → 警告

8. 浏览器指纹工具

选型(按预算)

工具 价格 何时用
GoLogin 免费 3 profile / 付费 $24/mo 起 起步、矩阵 ≤ 3 个身份
AdsPower 免费 5 profile / 付费 $5.4/mo 起 国内出海团队用得多
Multilogin $99/mo 起 TikTok / X 严打期、矩阵 ≥ 5 身份
BitBrowser (未给价) 备选

为什么需要:5 个不同 Chromium 浏览器(Chrome / Arc / Brave / Edge / Vivaldi)的指纹只是表面差异,深层指纹(Canvas / WebGL / 字体 / AudioContext)相似度极高,TikTok / X / Instagram 风控能识别。

集成方式

指纹工具替代 start-browser.sh 里直接 launch Chrome 的部分:

# GoLogin 示例
PROFILE_ID="65a1b2c3d4e5f6789"
GOLOGIN_TOKEN="$(cat ~/.gologin-token)"

RESPONSE=$(curl -s -X POST "http://localhost:36912/browser/${PROFILE_ID}/start" \
  -H "Authorization: Bearer ${GOLOGIN_TOKEN}")
CHROME_PORT=$(echo $RESPONSE | python3 -c "import sys,json; print(json.load(sys.stdin)['port'])")

每个 identity 在指纹工具里建一个 profile,配上:

  • 不同 user-agent / OS 组合
  • 不同时区(匹配住宅代理的地理位置)
  • 不同 Canvas / WebGL / Audio 噪声
  • 独立 cookie / localStorage 存储
  • 绑定的住宅代理

9. 住宅代理

提供商 价格 备注
Bright Data $8.4/GB 老牌,IP 池最大
Soax $7/GB 性价比 ok
IPRoyal $7/GB 起步价低
Smartproxy $7/GB 入门友好

机房代理(Datacenter)绝对禁用 —— X / TikTok / Reddit 在机房 IP 上注册即封。

代理 endpoint 形式

http://user-xxx:pass-xxx@gate.smartproxy.com:7000
socks5://user-xxx:pass-xxx@residential.brightdata.com:22225

地理一致性(风控最容易抓的点)

代理 IP 的地理位置必须和该身份的"人设"一致:

  • identity-A = 美国东海岸用户
  • → US-East 住宅 IP
  • → 时区 America/New_York(指纹工具里设置)
  • → 平台账号都用 EST 时间发布

地理矛盾是风控最容易抓的点。

验证

启动浏览器后用 chrome MCP 验证出口 IP:

mcp__chrome__navigate_page("https://api.ipify.org")
mcp__chrome__take_screenshot()

10. CDP 安全(必读)

CDP 端口(9222 / 9223 / ...)暴露 = 该浏览器的所有 cookie / 标签页内容 / JS 执行权全部公开。

默认监听 127.0.0.1 是安全的,但:

# start-browser.sh 必须写:
--remote-debugging-address=127.0.0.1

禁止

  • ❌ 改成 0.0.0.0 想从别的机器连
  • ❌ 用 Docker 时做 -p 9222:9222 的端口映射
  • ❌ 把 9222/9401 端口写进任何对外的脚本/截图/配置

额外建议

  • 矩阵浏览器禁止登录你的私人重要账号(私人 Gmail / 工作邮箱 / 银行)
  • 不安装来源不明的 npm 包(有偷扫本地 CDP 端口的攻击案例)

11. 完整工作流

11.1 第一次搭建(一次性)

# 1. 全局共享层
mkdir -p ~/.claude/skills
claude mcp add filesystem -s user npx -y @modelcontextprotocol/server-filesystem $HOME
claude mcp add fetch -s user npx -y @modelcontextprotocol/server-fetch

cat > ~/.claude/CLAUDE.md << 'EOF'
# 全局偏好(影响所有项目,请极简)
- 语言:中文优先
- ...
EOF

# 2. 模板目录
mkdir -p ~/agents/_template/{_identity,publisher,engager,researcher}
chmod +x ~/agents/_template/_identity/*.sh

# 3. hub
mkdir -p ~/agents/_hub/{inbox,outbox,dashboard,memory}

11.2 新增一个身份(5 分钟)

cp -r ~/agents/_template ~/agents/identity-A
# 改 _identity/start-browser.sh / identity.env 里的端口、代理、账号清单
$EDITOR ~/agents/identity-A/_identity/start-browser.sh
$EDITOR ~/agents/identity-A/_identity/identity.env

# 给每个 role agent 注册 chrome MCP
for role in publisher engager researcher; do
  cd ~/agents/identity-A/$role
  claude mcp add chrome -s project bash $HOME/chrome-mcp-proxy/chrome-mcp-proxy.sh 9401 9222
  $EDITOR CLAUDE.md   # 改人设、改身份名
done

# 启动浏览器(一次性,常驻)
cd ~/agents/identity-A/_identity && ./start-browser.sh

11.3 日常启动 agent

# iTerm2 开多 tab
cd ~/agents/identity-A/publisher && claude
cd ~/agents/identity-A/engager && claude
cd ~/agents/identity-A/researcher && claude
cd ~/agents/_hub && claude

浏览器和 cdp-proxy 常驻,只在重启电脑后跑一次 start-browser.sh。

11.4 不同浏览器路径

# Chrome
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
# Arc
"/Applications/Arc.app/Contents/MacOS/Arc"
# Brave
"/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
# Edge
"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"
# Vivaldi
"/Applications/Vivaldi.app/Contents/MacOS/Vivaldi"
# Opera
"/Applications/Opera.app/Contents/MacOS/Opera"

.mcp.json 不用改 —— chrome-devtools-mcp 通过 CDP 协议接管,所有 Chromium 系浏览器都支持。

12. 验证清单

# 1. 目录结构
tree ~/agents/identity-A -L 3

# 2. 浏览器和 proxy 启动
cd ~/agents/identity-A/_identity && ./start-browser.sh

# 3. CDP 端口可达
curl http://127.0.0.1:9222/json/version

# 4. proxy 状态
curl http://127.0.0.1:9401/proxy/status

# 5. 出口 IP 是住宅代理(在 publisher agent 里)
# "用 mcp__chrome__navigate_page 打开 https://api.ipify.org,然后截图"

# 6. MCP 工具直接可用(关键!)
# /mcp,展开 chrome,应该看到 29 tools

# 7. 多 agent 不串台
# 同时开 publisher / engager 两个 tab,检查 proxy/status 应 clients: 2

13. 常见坑

13.1 端口冲突

lsof -i :9222
# 占用了就换端口或 kill 进程

13.2 user-data-dir 锁定

"profile in use" → ps aux | grep -i chrome → kill 残留 / 删 browser-data/SingletonLock

13.3 关掉浏览器窗口后 MCP 失联

  • proxy 有 5 秒自动重连
  • 还是不行:./stop-browser.sh && ./start-browser.sh

13.4 Chrome 已经在跑

完全退出日常用的 Chrome(Cmd+Q)再跑 start-browser.sh,或者矩阵 Chrome 全部用 9223+ 起步避开 9222

13.5 npx 启动慢

npm install -g chrome-devtools-mcp

13.6 chrome MCP 工具不被 agent 调用(v1.1 重点)

症状:agent 看到任务后绕路写 Node.js/Python 脚本调裸 CDP

原因:Claude Code v2.x 工具发现机制不会 eager-load 仅在 user 级注册的 MCP

强制注册法(每个 agent 项目目录里也注册一份 chrome):

cd ~/agents/identity-A/publisher
claude mcp add chrome -s project bash $HOME/chrome-mcp-proxy/chrome-mcp-proxy.sh 9401 9222

仍绕路 → 启动后第一句话发 /mcp,确认 chrome 列出来后再下任务。

13.7 全局 CLAUDE.md 污染

症状:agent 在 A 项目里突然回复 B 项目的事 → 检查 ~/.claude/CLAUDE.md,砍到只剩偏好

13.8 Skill 同名冲突

全局和项目级有同名 skill 时项目级覆盖。命名上避免重名(全局 markdown-writer,项目级 markdown-writer-tiktok)

13.9 多 identity 抢焦点

chrome-mcp-proxy 已防 agent 调用时的焦点抢夺。但浏览器首次启动时会跳出来 → --window-position=$((PROXY_PORT - 9400))00,100 让窗口错开;或用指纹工具的 headless 模式

14. 给新接手者的搭建顺序

  1. 读完第 1-2 节理解架构
  2. 核实 Claude Code 版本:claude --version 必须 ≥ v2.1.126
  3. 核实 chrome-mcp-proxy 已装:ls ~/chrome-mcp-proxy/chrome-mcp-proxy.sh
  4. 建全局层(11.1)
  5. 建 hub(复制模板)
  6. 建第一个 identity(11.2)
  7. 跑通 13.6 那个 MCP 工具调用验证 —— v1.1 最大修正点,必须确认通过
  8. 加指纹工具 + 住宅代理(第 8 / 9 节)
  9. 复制扩展:每加一个 identity,重复 6-8

15. 王凯帖子原文索引

帖子 日期 核心观点
#1278 2026-03-11 HN Agent 自动注册闭环
#1296-1300 2026-03 控制浏览器代替自己用浏览器
#1297 2026-03 iTerm2 常开 10 标签页
#1319 2026-04-06 "杀手级 Chrome MCP" 改造(focus-stealing 修复)
#1326 2026-04-08 "每台电脑不同 agent 窗口控制不同浏览器"——架构核心
#1327 2026-04-09 一个项目拆成多窗口 → 部门 → 岗位 → 职能
#1330 2026-04-13 "终端开多个窗口跑 Claude Code,一台电脑多个浏览器"
#1331 2026-04-14 10 电脑 × 5 浏览器 × 15 平台终极路线图
#1336 2026-04-21 5 运营窗口 + 5 视频生产窗口分工
#1339 2026-04-28 把知识写成代码塞进 skill

16. 王凯说

"身份隔离靠四件套(浏览器 app + 住宅 IP + 指纹 + 账号),同身份多 agent 协作靠 chrome-mcp-proxy 的 sessionId 路由。"

"Claude Code 的 agent 就是工作目录,目录是 agent 的身体,CLAUDE.md 是它的人设,.mcp.json 是它的工具,feedback.md 是它的成长记录。"

"任何想跳过养号、批量发链接的方案都会被反作弊系统秒杀。"


引用