Files
MediaCrawler/mac-agent-os-main/archive_docs/matrix_docs/FRAMEWORK_V1.md
T
butubb 2112c1a870
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s
feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。

**目前能用的(真环境实测,非推断)**:

    profile/other : 200, 7075 字节  —— 博主主页指标(粉丝/获赞/作品数/昵称)
    aweme/detail  : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)

**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
  1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
     带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
     同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
     挑中的恰好是「批量拉作品列表」这个最敏感的动作。
  2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
     代价,过几小时要重测)。

  所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。

**排查中控住变量后得到的两条事实**(都写进注释了):
  · `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
    UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
    (我先前猜的 sec-ch-ua 不是关键。)
  · 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
    从 CDP 取齐 cookie + UA + hints,而不是各自写死。

「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。

测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
2026-10-10 17:12:25 +08:00

28 KiB
Raw Blame History

MC 系统框架设计方案 v1.1

最后更新: 2026-06-15 设计目标: 三层分离 + 平台插件化 + 联邦多机协同 + 录制回放全链路 + 原子操作蓝图系统


一、核心设计原则

  1. CLI 优先 — 所有实操通过 mc 命令行执行, 稳定、可脚本化、可审计
  2. 三层分离 — CLI 做执行 / AI 做分析决策 / Dashboard 做展示, 各司其职
  3. 平台即插件 — 新增一个平台 = 新建一个目录, 标准接口自动发现
  4. 不重复造轮子 — 发布/搜索/评论等通用能力集成开源项目
  5. 联邦多机 — 每台机器独立运行, 通过 SSH/HTTP 远程调用, Gitee 同步状态
  6. 录制回放即技能 — 原子操作录制是核心差异化能力, 录制包 = 可分享的技能

二、整体架构

┌──────────────────────────────────────────────────────────────┐
│  第1层: CLI 命令行 (最稳定层, 所有实操的唯⼀入口)               │
│  ┌──────────────────────────────────────────────────────────┐│
│  │  mc [platform] [action] --account <name> [options]      ││
│  │  mc [通用] [action] [options]                           ││
│  │  mc remote <machine> <command>   ← 远程执行              ││
│  │  mc record [start|stop|list|replay] ← 录制回放           ││
│  └──────────────────────────────────────────────────────────┘│
├──────────────────────────────────────────────────────────────┤
│  第2层: MCP Server + AI 智能体 (分析决策, 不直接碰浏览器)       │
│  ┌──────────────────────────────────────────────────────────┐│
│  │  每个平台插件自动生成 MCP 工具                        ││
│  │  AI 智能体 → 调 MCP → 调 CLI → 读结果 → 出报告           ││
│  └──────────────────────────────────────────────────────────┘│
├──────────────────────────────────────────────────────────────┤
│  第3层: Dashboard 看板 (只展示 + 一键触发, 不执行复杂逻辑)     │
│  ┌──────────────────────────────────────────────────────────┐│
│  │  读 JSON 展示 / 点按钮调 CLI / 看历史趋势图表              ││
│  │  多机聚合: 一台 Dashboard 展示所有机器状态                 ││
│  └──────────────────────────────────────────────────────────┘│
├──────────────────────────────────────────────────────────────┤
│  底座: 联邦多机同步                                           │
│  ┌──────────────┬──────────────┬───────────────────────────┐ │
│  │ Gitee 代码    │ SSH 远程执   │ guardd 心跳 + cross_     │ │
│  │ 同步(已有)    │ 行(新增)     │ machine 数据(已有)         │ │
│  └──────────────┴──────────────┴───────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

三、CLI 命令树 (完整版)

3.1 平台插件命令

mc douyin|xiaohongshu|bilibili|kuaishou|weibo|wechat [action]
  login                      --account <name>      登录
  logout                     --account <name>      登出
  status                     --account <name>      状态检查
  collect                    --account <name>      采集主页信息
  publish                    --account <name>      发布视频/图文
                             --file <path>
                             --title <text>
                             --desc <text>
  nurture                    --account <name>      养号
                             --blueprint <name>
  interact                   --account <name>      互动
                             --action like|comment|follow
                             --target <url/id>
  search                     --keyword <text>      搜索
                             --limit <n>
  live                       --room-id <id>        直播相关
  record                   录制原子操作(平台专属)
    start                   开始录制
    stop                    停止录制
    list                    列出录制包
    replay  <name>          回放录制包

3.2 通用管理命令

mc account
  list                      [--json]              列出所有账号
  create                    --phone <num>          创建新身份
                            --platform dy|xhs
  delete                    --account <id>         删除账号
  status                    [--json]              所有账号状态

mc sms
  check                     --phone <num>         查短信
  wait                      --phone <num>         等待新短信

mc config
  show                      [--json]              查看配置
  set                       <key> <value>         设置配置

mc record                  原子操作录制(跨平台通用)
  list                                            列出所有录制包
  export                    <name> --output <p>   导出录制包
  import                    <file>                导入录制包
  analyze                   <name>                分析录制内容

mc remote                  远程多机执行
  exec                      <machine> <cmd>       在远程机器执行命令
  status                    [--json]              所有机器状态
  sync                                             触发全机同步

mc agent
  "分析采集结果"                                  调 LLM 分析
  "检查账号健康度"
  "生成日报"

3.3 输出规范

所有命令支持 --json 参数, 输出标准 JSON 供 Dashboard 和 AI Agent 消费:

mc status --all --json
# → {"machines": {...}, "accounts": [...], "collected_at": "..."}

mc douyin collect --account my_name --json
# → {"status": "ok", "nickname": "...", "fans": 1303, ...}

四、平台插件标准

4.1 目录结构

platforms/
├── __init__.py                  # 插件发现: 自动扫描所有子目录
├── base.py                      # BasePlatform 基类
│
├── douyin/
│   ├── __init__.py              # 注册: name='douyin', actions=[...]
│   ├── cli.py                   # mc douyin [action] 的命令实现
│   ├── collector.py             # 主页信息采集 (已有collect_batch_runner)
│   ├── publisher.py             # 发布 (集成social-auto-upload)
│   ├── interactor.py            # 互动 (点赞/评论/关注)
│   ├── recorder.py              # 录制原子操作 (平台专属)
│   ├── SKILL.md                 # AI Agent 调用说明
│   └── requirements.txt         # 本平台额外依赖
│
├── xiaohongshu/                  # 同上
│
├── bilibili/                    # 发布复用 social-auto-upload
│
├── kuaishou/                    # (TODO)
│
└── wechat/                      # (TODO)

4.2 插件基类接口

class BasePlatform:
    name: str                          # 平台名: 'douyin'
    display_name: str                  # '抖音'
    actions: list[str]                 # 支持的动作列表
    
    def login(account_name, headless=False) -> bool
    def logout(account_name) -> bool
    def status(account_name) -> dict
    def collect(account_name) -> dict   # 主页信息 → 写 homepage_info.json
    def publish(account_name, file, title, desc) -> bool
    def nurture(account_name, blueprint) -> bool
    def interact(account_name, action, target) -> bool
    def search(keyword, limit) -> list

4.3 新增平台流程

# 1. 创建插件目录
mkdir platforms/kuaishou/

# 2. 实现 base.py 中的接口
#    - 最简单的: 只实现 status(), 其他返回 "暂不支持"
#    - 完整版: 逐步实现 login/collect/publish ...

# 3. 注册插件
#    platforms/kuaishou/__init__.py:
#      register_platform(KuaishouPlatform())

# 4. 完成。mc 自动发现:
#    mc kuaishou status --account my_account

五、录制回放系统 (核心差异化能力)

5.1 定位

录制回放是 MC 系统区别于纯开源方案的核心能力。通过录制鼠标/键盘操作, 将人的操作经验转化为可复用的"技能包", 在同平台的不同账号间共享。

5.2 架构

录制阶段:
  人操作浏览器 → mc record start → 记录鼠标/键盘事件 → mc record stop
  → 保存为 platforms/douyin/recordings/login.skill (JSON)

回放阶段:
  mc douyin record replay login.skill --account my_name
  → 按时间轴回放鼠标/键盘事件 → 完成登录

分享阶段:
  mc record export login.skill → 得到 .skill 文件
  → 提交到 Gitee → 其他机器 mc record import → 直接可用

5.3 与三层架构的融合

  • CLI 层: mc record list|start|stop|replay|export|import
  • 平台插件: 每个平台可以有专属的录制包 (抖音的登录流程 vs 小红书的登录流程不同)
  • 跨平台: 通用的录制包 (如"通用浏览") 放在 recordings/ 根目录
  • Dashboard: 录制管理界面保留, 但改为调 CLI 执行

5.4 录制包格式规范 (JSON)

{
  "name": "douyin_login_20260614",
  "platform": "douyin",
  "created_at": "2026-06-14T22:00:00",
  "steps": [
    {"time": 0, "action": "navigate", "url": "https://www.douyin.com/"},
    {"time": 3000, "action": "click", "selector": ".login-btn", "x": 350, "y": 680},
    {"time": 5000, "action": "wait", "duration": 30000},
    {"time": 35000, "action": "check_login", "expected": true}
  ]
}

六、原子操作 + 蓝图系统

6.1 三层模型

录制 (record)
  ↓ 捕捉用户在浏览器上的操作
原子操作 (atom) = {前置状态锚点, 操作步骤, 后置状态验证}
  ↓ 组合串联成工作流
蓝图 (blueprint) = 有向无环图 (DAG) 的原子序列
  ↓ 打包发布为 CLI 命令
CLI 命令 = mc [platform] [blueprint_name] --account <name>

6.2 原子操作的数据结构

每个原子操作是一个自包含的"操作单元":

{
  "name": "douyin_like_video",
  "category": "interact",
  "platform": "douyin",
  "version": 1,
  "description": "点赞当前播放的视频",
  "before": {
    "url_pattern": "https://www.douyin.com/**",
    "dom_anchor": ".video-player",
    "logged_in": true
  },
  "steps": [
    {"type": "wait", "target": ".like-btn", "timeout": 5000},
    {"type": "click", "target": ".like-btn", "xpath": "//div[contains(@class, 'like')]"},
    {"type": "verify", "check": ".like-btn.active"}
  ],
  "after": {
    "dom_check": ".like-btn.active"
  }
}

6.3 蓝图的 DAG 结构

蓝图 = 多个原子操作按顺序或条件连接成有向无环图:

          ┌─────────┐
          │ 登录检测  │
          └────┬────┘
               │ 未登录
          ┌────▼────┐
          │ 扫码登录  │
          └────┬────┘
               │ 已登录
          ┌────▼────┐
          │ 打开首页  │
          └────┬────┘
          ┌────▼────┐
          │ 浏览推荐  │  ← 循环 5 次
          └────┬────┘
          ┌────▼────┐
          │ 随机点赞  │  ← 30% 概率
          └────┬────┘
          ┌────▼────┐
          │ 等待 8秒  │
          └────┬────┘
          ┌────▼────┐
          │ 滚动加载  │
          └─────────┘

蓝图 JSON:

{
  "name": "douyin_daily_browse",
  "platform": "douyin",
  "description": "日常浏览推荐页, 随机点赞",
  "version": 2,
  "nodes": [
    {"id": "check_login", "atom": "check_login", "position": {"x": 100, "y": 0}},
    {"id": "goto_home", "atom": "goto_home", "position": {"x": 100, "y": 80}},
    {"id": "browse", "atom": "wait_watch", "position": {"x": 100, "y": 160}},
    {"id": "like", "atom": "like", "position": {"x": 100, "y": 240}, "probability": 0.3},
    {"id": "scroll", "atom": "scroll_feed", "position": {"x": 100, "y": 320}}
  ],
  "edges": [
    {"from": "check_login", "to": "goto_home"},
    {"from": "goto_home", "to": "browse"},
    {"from": "browse", "to": "like"},
    {"from": "like", "to": "scroll"}
  ]
}

6.4 与 Dashboard 可视化编辑器的关系

Dashboard 的 矩阵管理页 (matrix_mgmt.html) 已有 SVG DAG 节点编辑器。

蓝图编排流程:

打开 Dashboard → 矩阵管理 → 蓝图编排 tab
  │
  ├─ 左侧节点面板: 列出所有可用原子操作 (按平台/分类)
  │   登录类 | 浏览类 | 互动类 | 工具类
  │
  ├─ 中间画布: 拖拽原子到画布, 连线编排
  │   支持: 顺序 / 条件分支 / 循环 / 概率
  │
  └─ 右侧属性面板: 配置选中节点的参数
      等待时间 | 点击概率 | 目标选择器
      

编辑完成后:
  → 保存为 blueprint.json → 存入 blueprints/ 目录
  → CLI 直接调用: mc douyin nurture --blueprint douyin_daily --account my_name
  → 或用录制功能生成新原子: mc record start → 操作 → mc record stop → 自动生成原子

6.5 录制 → 原子 → 蓝图 → CLI 全链路

步骤1: 录制
  mc record start                           ← 打开浏览器, 开始录制
  → 人在浏览器上操作 (点赞/评论/浏览...)
  mc record stop                            ← 停止录制
  → 生成 raw_recording.json (时间轴事件序列)

步骤2: 提炼原子
  mc record refine raw_recording.json       ← AI 辅助提炼
  → 生成 atom.json (结构化原子操作, 含前后状态)

步骤3: 组合蓝图
  Dashboard DAG 编辑器                       ← 拖拽编排
  或 CLI: mc blueprint compose --atoms a1,a2,a3
  → 生成 blueprint.json

步骤4: 打包发布
  mc blueprint publish douyin_daily_v3      ← 注入 blueprints/
  → 自动生成 CLI 入口
  mc douyin nurture --blueprint douyin_daily_v3 --account my_name

6.6 适配界面版本更新

当平台改版 (DOM 结构变化), 旧原子可能失效。方案:

  1. 录制新操作: mc record start → 在新版界面上操作 → mc record stop
  2. 对比旧原子: mc record diff old_atom.json new_recording.json
  3. 自动修补: AI 分析差异, 更新选择器/css/xpath
  4. 版本管理: 原子带 version 字段, 旧版蓝图可指定使用旧版原子

七、联邦多机协同方案

6.1 现状评估

能力 当前状态 评价
代码同步 Gitee push/pull ✅ 够用
数据同步 cross_machine 目录 ✅ 够用
心跳检测 guardd (300s 周期) ⚠️ 基本够用, 但不够实时
远程执行 ❌ 无 需开发
中央调度 ❌ 无 按需

6.2 远程执行方案

最简单的方案: SSH 包装 + 各机器 HTTP API

# 方案A: SSH 远程执行 (简单可靠)
mc remote exec chengzigedeAir "mc douyin collect --account my_name"
# → ssh chengzigedeAir "cd ~/agent-os/... && python mc collect ..."

# 方案B: HTTP API 远程执行 (无需 SSH 配置)
mc remote exec chengzigedeAir "mc douyin collect"
# → curl http://chengzigedeAir:9988/api/cli/run
#   (每台机器 Dashboard 新增 /api/cli/run 端点)

# 方案C: 集群广播
mc remote exec --all "mc collect --all"
# → 同时在所有机器上执行采集

推荐方案: B + A 双通道。默认走 HTTP API (配置了 SSH 的机器可选 SSH)。

6.3 机器注册与管理

每台机器在首次部署时, 在 cross_machine/machines/ 下注册:

# cross_machine/machines/7kecheng.yaml
hostname: 7kecheng
ip: 192.168.31.96
port: 9988
ssh_user: 7kecheng
capabilities: [douyin, xiaohongshu]   # 这台机器能操作哪些平台
local_accounts: 11                     # 本机账号数

6.4 guardd 替换方案: 从 Gitee 迁移到 Tailscale

当前 guardd 的问题

guardd 每 300s 往 Gitee 仓库的 04_memory/cross_machine/ 写心跳文件:

问题1: 每次 git status 都有 10 个文件被修改, 分不清是心跳还是真改动
问题2: 多机同时写 Gitee 导致 push/pull 冲突
问题3: 心跳延迟 (Gitee push 不是实时的)
问题4: 仓库里混入大量无意义的自动生成文件

核心矛盾: Git 是版本管理工具, 不是实时状态同步工具。把心跳数据放 Gitee 是架构错误。

替换方案: 本地状态 + Tailscale 即时查询

┌────────────────────────────────────────────────────────┐
│ 部署前: guardd → Gitee (10个json频繁更新, 冲突不断)    │
│                                                       │
│ 部署后: 各机本地存状态 + 需查询时走 Tailscale HTTP API  │
│                                                       │
│ Gitee 仓库只保留:                                     │
│   代码 + 配置 + cross_machine/machines/ (机器注册,     │
│   几乎不变)                                            │
│                                                       │
│ 各机本地保留:                                          │
│   agent-local/tools/matrix/data/status.json           │
│   (心跳数据, 不参与 Gitee 同步)                        │
│                                                       │
│ 实时查询:                                              │
│   mc remote status → 通过 Tailscale 查各机 API         │
│   实时返回, 无冲突, 无延迟                              │
└────────────────────────────────────────────────────────┘

具体实施

步骤1: guardd 停止写 Gitee 的 cross_machine/data/
       → 改为写本机 agent-local/tools/matrix/data/guardd_status.json
       → 文件格式不变, 只是换了个目录

步骤2: guardd 不再提交 git
       → 从 guardd.py 中去掉 git add/commit/push 步骤
       → cross_machine/data/*.json 文件不再被更新

步骤3: Gitee 仓库清理
       → 把 04_memory/cross_machine/data/ 加入 .gitignore
       → 一次性提交删除历史心跳文件
       → 以后 git status 不再被心跳文件污染

步骤4: 即时状态替代
       → 每台机器 Dashboard 提供 /api/machine/status 端点
       → mc remote status 通过 Tailscale 查各机
       → 实时, 无冲突, 零延迟

对比

维度 guardd (当前) guardd (改造后) mc remote
存储位置 Gitee 仓库 本机 local 目录 内存 + API
更新频率 300s 300s 或更长 即时查询
Git 冲突 ⚠️ 频繁 ✅ 完全没有 ✅ 不涉及 Git
实时性 ❌ 有延迟 ❌ 有延迟 ✅ 实时
历史记录 ✅ 有 ✅ 仍保留 ❌ 无 (可加日志)

结论: guardd 保留, 但停止写 Gitee。改为写本机 + mc remote 做即时查询。 (2026-06-14 已实施)

6.5 mc remote 命令(已实现)

mc remote list                 # 列出已注册机器(来源: 本机machines.json + cross_machine/machines/)
mc remote ping [host]          # 连通性测试 (调用 /api/health)
mc remote status [host]        # 获取所有/指定机器完整状态 (调用 /api/machine/status)
mc remote exec <host> <cmd>    # 在远程机器执行 mc 命令 (调用 /api/machine/exec)

通信方式 (--via):

  • auto (默认): 先试 HTTP API (Tailscale IP:9988), 失败自动回退 SSH
  • http: 强制走 HTTP API (Dashboard 端点)
  • ssh: 强制走 SSH 通道

Dashboard 新增端点 (均已在 app.py 实现):

GET  /api/machine/status    # 本机完整状态 (系统/矩阵/采集/磁盘/guardd)
POST /api/machine/exec      # 远程执行 mc 命令 (白名单安全限制)

Tailscale 安装 (可选, 但强烈推荐):

brew install tailscale          # 每台机器都安装
tailscale up                    # 登录同一账号, 获得 100.x.x.x IP
# 之后 mc remote 通过该加密 IP 通信, 跨网络、跨子网、端到端加密

七、与开源项目的集成边界

功能 策略 具体方案
抖音采集主页 🏗️ 自研 已有的 collect_batch_runner, 优势是联邦多机+批量错峰
小红书采集主页 🏗️ 自研 Camoufox 方式, 修"我"按钮断点
录制回放 🏗️ 自研 ⭐ 核心差异化能力, 开源项目没有
抖音发布视频 📦 集成 social-auto-upload 的 douyin_uploader
小红书发布笔记 📦 集成 social-auto-upload 的 xiaohongshu_uploader
B站发布 📦 集成 social-auto-upload 的 bilibili uploader (本身用的 biliup)
小红书搜索/评论 📦 集成 xiaohongshu-mcp (12.4k stars)
抖音搜索/下载 📦 参考 参考 dy-cli 的设计, 自己实现
抖音互动 🏗️ 自研 已有原子操作库, 集成到插件
反检测 📦 融合 引入 dy-cli 的高斯抖动 + 指数退避
联邦多机 🏗️ 自研 ⭐ 核心差异化能力, 开源项目没有
多账号矩阵管理 🏗️ 自研 ⭐ 核心差异化能力, 开源项目没有

八、四阶段落地路线

第一阶段: 命令行统一 (已完成 ✓)

目标: 所有操作能通过 mc 完成, 底层不改。

  • 清理 41 个遗留脚本 → 归档到 scripts/archive/ + LEGACY_INDEX.md
  • 规范 mc collect 命令 (包装 collect_batch_runner)
  • 规范 mc login / mc status / mc sms / mc proxy
  • 所有命令支持 --json 输出
  • mc status --all --json 整合系统+采集+账号列表
  • 平台插件路由: mc douyin|xiaohongshu [action]
  • mc remote 远程多机: list/ping/status/exec (HTTP + SSH 双通道)
  • mc task 智能任务: comment/search/collect/reply
  • mc record 原子操作录制: start/analyze/export/list/delete
  • mc op 原子操作注册/删除/列表
  • mc schedule 定时任务: list/add/remove/start/history

第二阶段: 平台插件化 (已完成 ✓)

目标: 插件架子搭好, 扩展零成本。

  • 建 platforms/ 目录 + BasePlatform 基类 + 自动发现
  • 抖音插件: 实现 login/collect/publish/nurture (plugin.py)
  • 小红书插件: 实现 login/collect/publish/nurture (plugin.py)
  • mc 自动发现 platforms/ 下的插件
  • 录制系统整合: mc record 通用 + 平台专属
  • 各插件附带 SKILL.md (AI Agent 调用说明)

第三阶段: 接入开源生态 (大部分完成)

目标: 白嫖开源项目的能力。

  • mc douyin publish / mc xhs publish → publish_video.py (Camoufox)
  • 反检测: 高斯抖动 + 指数退避 + 拟人化操作 (anti_detection.py)
  • social-auto-upload 已 clone (~/workbuddy-agent-os/social-auto-upload/)
  • mc douyin publish --sau → 调 social-auto-upload 的 douyin_uploader
  • mc xhs publish --sau → 调 social-auto-upload 的 xiaohongshu_uploader
  • mc bilibili publish → 调 biliup
  • mc xhs search → 调 xiaohongshu-mcp

第四阶段: 联邦多机 + 持续扩展 (已完成 ✓)

目标: 万物皆可接, 多机协作。

  • mc remote exec 远程执行 (HTTP + SSH 双通道)
  • mc remote status 多机状态
  • mc remote list / mc remote ping 机器管理
  • Dashboard 合并 (统一迁移到 index.html, 301 重定向)
  • 采集历史版本化 (时间戳快照 + timeline.json)
  • Tailscale 已安装 (brew install tailscale)
  • tailscale up 配置 Tailscale 网络
  • MCP Server: 每个插件自动生成 MCP 工具

第五阶段: 模板统一 + 采集稳定化 (新增)

目标: 跨机模板一致, 采集结果可靠, 禁用 Chrome 引擎。

  • 决策记录: Chrome CDP 禁用 (养号/采集只能用 Camoufox)
  • 决策记录: 采集改为导航到个人中心页 (/user/self)
  • 决策记录: 配置模板统一存入仓库
  • config_template/ 全面审核: accounts.yaml / ai.yaml / schedule.yaml / profiles.json / screen_layout.yaml / sms.yaml / tasks.yaml
  • 采集脚本: xiaohongshu 增加重试逻辑 (最多 3 次, 指数退避)
  • 采集脚本: 抖音改为导航到 /user/self 个人页提取准确数据
  • 展示层统一: mc account list 合并 display_name + 采集昵称/粉丝
  • Dashboard 合并: 身份账号 tab 和采集信息 tab 统一为一个数据源
  • 新机部署: install.sh 从 config_template 初始化本地配置

九、决策记录

决策 选项 选择 原因
浏览器窗口 显示/隐藏 显示 防封号+能看到进度+需要模拟鼠标
首发发布平台 抖音/小红书 抖音 用户量大
Dashboard 合并/保留 合并 减少混乱
遗留脚本 删除/归档 归档 万一需要还能找回
采集历史 快照/新覆盖 快照 看得出变化趋势
改造范围 先本机/全改 先本机 跑通再同步
仓库策略 同仓库/单独仓库 同仓库 矩阵系统嵌入 agent-sync 仓库内, 与 agent-os 共享工具链和同步机制; 降低管理成本, 避免双仓库冲突
浏览器引擎 Chrome CDP / Camoufox Camoufox Chrome CDP 经实测会触发平台反爬封号, 所有养号/采集/发布操作统一使用 Camoufox (Firefox 内核) ; Chrome 仅限调试, 禁止用于生产操作
采集方式 个人页/首页 个人页 首页 DOM 扫描提取的粉丝数/关注数不可靠, 改为导航到 /user/self 个人中心页提取准确数据
跨机模板 独立管理/仓库统一 仓库统一 所有配置模板 (config_template/)、蓝图 (blueprints/)、平台插件 (platforms/) 统一存放在 agent-sync 仓库, 各机器 git pull 同步, 避免机器间模板不一致导致的运行差异

十、风险管理

风险 概率 影响 应对
开源项目停更 中 发布功能断 插件架构可换底层
平台反爬升级 高 采集/发布失效 反检测独立层, 单独升级
多机 SSH 配置复杂 低 远程执行用不了 HTTP API 兜底, 不强制 SSH
录制回放兼容性 中 跨版本录制包失效 录制包带版本号, 向前兼容
Dashboard 合并工作量 中 阶段投入多 最后阶段再做, 先用两个
Chrome CDP 封号 已发生 账号被封 全面禁止 Chrome CDP 用于生产操作, 所有养号/采集/发布统一使用 Camoufox (Firefox) ; Chrome 仅限开发调试
跨机模板不一致 中 行为差异/配置错误 模板统一存入 agent-sync 仓库, 新机 deploy 从模板初始化, install.sh 自动复制