Files
MediaCrawler/mac-agent-os-main/01_core/MAINTENANCE_GUIDE.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

11 KiB
Raw Blame History

AgentOS 系统操作速查手册

版本:v1.1 | 最后更新:2026-05-15 用途:换机安装 / 日常同步 / 升级技能 / 角色切换——所有系统级操作一览 仓库策略:主电脑双仓库(Gitee + GitHub),其他电脑仅 Gitee


一、操作总表

场景 命令 频率 耗时
首次装新机 agentos init 每台机器仅一次 3-5分钟
日常同步 git pull + 增量部署 每次工作前/后 1分钟
部署身份文件 bash apply-config.sh 01_core/ 有改动时 10秒
同步技能 agentos skill install 02_skills/ 有改动时 10秒
升级 agentos CLI agentos upgrade CLI 本身有版本更新时 1分钟
切换机器角色 HOST_ROLE=xxx bash apply-config.sh 需要改变角色时 10秒
重建向量索引 agentos rebuild-vector 知识库大批量更新后 3分钟
健康检查 agentos check 出问题时 30秒

二、换机初始化(仅一次)

场景:买到新电脑 / 重装系统后,从头搭建 AgentOS。

# 1. 安装 WorkBuddy(从官网下载)

# 2. 克隆仓库
cd ~/workbuddy-agent-os
git clone [email protected]:babycalf/mac-agent-os.git agent-sync

# 3. 运行一键初始化
cd agent-sync
agentos init

# 4. 部署身份文件
bash 00_bootstrap/apply-config.sh

agentos init 自动完成:

  • 创建 agent-sync/ + agent-local/ 目录
  • 安装 Python/Node 依赖
  • 注册所有技能到 WorkBuddy
  • 配置 MCP 服务器
  • 创建自动化定时任务

三、日常同步(每天做)

场景:本机和另一台机器互相同步最新代码。

3.1 流程

# 第1步:拉取远程最新代码(所有机器都先做这步)
cd ~/workbuddy-agent-os/agent-sync
git pull

# 第2步:部署身份文件(如果 01_core/ 有更新)
bash 00_bootstrap/apply-config.sh

# 第3步:同步技能(如果 02_skills/ 有更新)
agentos skill install

# 第4步:推送本地更新(如果本机有改动)
git add .
git commit -m "更新说明"
git push

3.2 ⚠️ 推送规则(重要)

禁止使用 git push --force。强制推送会导致其他机器的提交记录丢失。

你的 commit 被拒绝时,说明远程比你新(别人先推了),你应该:

# 正确做法
git add .
git commit -m "更新说明"
git pull      # 先拉取别人更新(自动合并)
git push      # 再推自己的

# 错误做法(会导致其他人的代码丢失)
git push --force   # ❌ 禁止!会覆盖远程历史

如果确实需要强制推送(如修复敏感信息),使用更安全的版本:

# 安全的强制推送:只在你基于最新远程代码时才允许
git push --force-with-lease
# 比 --force 安全:如果你本地不是基于最新远程,会拒绝

3.3 多机协作防冲突机制

机制 说明 配置方式
Git 规范 先 pull 再 push,不用 --force 团队约定
pre-push 钩子 执行 git push --force 时自动拒绝 运行 apply-config.sh 自动安装
--force-with-lease 安全强制推送,检查本地是否基于最新远程 替代 --force
GitHub 分支保护 公开仓库免费,可禁止 force push GitHub → Settings → Branches

pre-push 钩子已集成到 apply-config.sh,每次部署配置时会自动安装到 .git/hooks/pre-push。 钩子脚本在 00_bootstrap/hooks/pre-push,所有机器 git pull 后自动同步。

推荐:在 Gitee 仓库设置中开启 main 分支保护(设置 → 分支保护 → 不允许强制推送),这样即使有人用了 --force 也会被拒绝。

3.2 gitignore 规则(避免机器专属文件冲突)

.gitignore 已配置以下排除规则,各机器专属文件不会进入仓库:

排除项 原因 说明
.obsidian/ 窗口布局/插件配置各机器不同 workspace.json 记录打开的文件和窗口位置
01_core/IDENTITY.md 从模板生成,填充本机设备信息 模板为 IDENTITY.tpl.md,各机器运行 init 生成
01_core/HOST_ID.md 角色/主机名各机器不同 每台机器独立设置
01_core/USER.md 用户偏好各机器可能不同 同上
01_core/mcp.json MCP 服务路径各机器不同 模板为 mcp.tpl.json
04_memory/long_term/facts.db 本地记忆库,各机器独立 不同步
04_memory/logs/*.log 日志文件,各机器独立 —
04_memory/vector_db 向量库,可重建 —
agent-local/ 整机专属数据目录 软链到本机私有位置

如有新文件需要排除,编辑 .gitignore 后运行:

git rm --cached <文件路径>    # 解除 Git 追踪(不删本地文件)

3.2 同步协作图

本机(A)         远程仓库         另一台(B)
  │                  │                │
  ├─ git push ──────→│←── git pull ──┤
  │                  │                │
  │←── git pull ────│── git push ──→│
  │                  │                │

每次工作前 → git pull(拉取别人更新) 每次工作后 → git push(推送自己更新)


四、升级技能(02_skills/ 变更时)

场景:某台机器新增/修改了技能文件(content_processor/collect_to_inbox 等)。

操作步骤

# 1. 拉取更新
git pull

# 2. 查看技能变更了哪些
git diff --name-status HEAD~1 02_skills/

# 3. 安装/更新所有技能到 WorkBuddy
agentos skill install

# 4. 验证技能已注册
agentos skill list

注意:agentos skill install 会扫描 02_skills/ 下的所有 SKILL.md,注册到 WorkBuddy。新增技能会自动注册,修改技能会自动更新。


五、升级核心配置(01_core/ 变更时)

场景:SOUL.md/IDENTITY.md/USER.md 有更新。

操作步骤

# 1. 拉取更新
git pull

# 2. 查看身份文件变更了什么
git diff HEAD~1 -- 01_core/SOUL.md 01_core/IDENTITY.md 01_core/USER.md

# 3. 部署到 .workbuddy/(使新配置生效)
bash 00_bootstrap/apply-config.sh

# 4. 重启 WorkBuddy(使新 SOUL.md 被加载)
# 在 WorkBuddy 中重启即可

# 5. 验证部署版本
cat ~/.workbuddy/.config-version.json

版本追踪

每次执行 apply-config.sh 会自动生成版本记录:

{
  "deployed_at": "20260503_120117",   // 部署时间
  "host_role": "unified",              // 当前机器角色
  "files": {                           // 各文件MD5
    "SOUL.md": "27f08daf...",
    "IDENTITY.md": "ca0478d9...",
    "USER.md": "086bb449..."
  }
}

六、切换机器角色

场景:某台机器角色变更(统一版→仅采集内容→媒体处理机)。

预设角色

角色 适用场景 SOUL.md 版本
unified 所有机器统一配置(默认) 完整版
main-node 主力工作机 完整版
submit-node 仅采集内容 精简版(仅收集规则)
media-node 视频/音频处理 中量版(采集+素材)

操作步骤

# 设定角色并部署
HOST_ROLE=submit-node bash 00_bootstrap/apply-config.sh

# 查看当前角色
cat ~/.workbuddy/.config-version.json | grep host_role

当前阶段使用 unified(统一版本),后续可按需分配不同角色。


七、升级 agentos CLI(05_tools/00_setup/ 变更时)

场景:agentos 主程序有版本更新。

# 查看当前版本
agentos --version

# 升级
agentos upgrade

# 验证新版本
agentos --version

八、guardd 守护进程运维

guardd 是 AgentOS 联邦多机协同守护进程,每 300 秒执行一轮 9 模块循环(心跳/dashboard同步/任务/版本/记忆/知识/加密/git同步/清理)。

安装

cd ~/workbuddy-agent-os/agent-sync/05_tools/00_setup/guardd
bash scripts/install.sh

安装后 guardd 会通过 launchd 自动管理,重启后也会自动运行。

手动控制

# 查看守护进程状态
launchctl print gui/$(id -u)/com.agentos.guardd

# 立即执行一次(不等待周期)
launchctl kickstart -k gui/$(id -u)/com.agentos.guardd

# 手动测试执行(调试用)
python3 ~/workbuddy-agent-os/agent-sync/05_tools/00_setup/guardd/guardd.py

# 暂停守护进程(不卸载)
launchctl bootout gui/$(id -u)/com.agentos.guardd

# 恢复守护进程
launchctl bootstrap gui/$(id -u)/com.agentos.guardd

# 彻底卸载
launchctl bootout gui/$(id -u)/com.agentos.guardd || true
rm -f ~/Library/LaunchAgents/com.agentos.guardd.plist

查看运行状态

# 最近一次执行结果
cat ~/workbuddy-agent-os/agent-local/runtime/guardd/last_run.json

# 完整日志
cat ~/workbuddy-agent-os/agent-local/runtime/guardd/guardd.log

# 错误日志
cat ~/workbuddy-agent-os/agent-local/runtime/guardd/errors.log

9 模块说明

模块 职责 输出
heartbeat 采集 CPU/内存/磁盘 → 写入心跳 cross_machine/status/{host}/heartbeat.json
task_worker 扫描并执行分配至本机的跨机任务 cross_machine/tasks/completed/
upgrade_checker 版本清单比对,发现更新后发事件 cross_machine/events/ + 本地 version 记录
memory_triage 过滤本地记忆,推送通用内容到提交箱 agent-local/submissions/memory_triage/
knowledge_sync 检测知识库变更 + 推送本地提交 事件日志 + 03_knowledge/01_submissions/
encrypted_channel 解密 RSA-4096 加密消息(需 cryptography) agent-local/identity/secrets/received/
cleanup 清理超过 30 天的旧事件和已完成任务 删除过期文件

依赖说明

  • 基本运行:Python 标准库(无额外依赖)
  • 加密消息:需安装 cryptography 库(pip install cryptography)
  • 日志自动轮转:launchd 管理的 stdout/stderr 日志不会自动截断,建议定期检查 agent-local/runtime/guardd/ 目录大小

九、不用做的事

操作 什么时候需要 备注
agentos init ❌ 仅换机时一次 日常不要重复执行
重建向量库 ❌ 知识库内容无变化时 只在大批量入库后做
手动修改 .workbuddy/ ❌ 应通过 apply-config.sh 部署 直接改会被下次部署覆盖
重启机器 ❌ WorkBuddy 重启即可 不需要重启操作系统

十、快速查询:我怎么知道该做什么?

场景 你的问题 答案
新机 "刚买电脑,怎么装环境?" 走 二、换机初始化
日常 "另一台机器有更新,我要拉吗?" 走 三、日常同步
技能 "我更新了一个技能文件" 走 四、升级技能
核心 "改了 SOUL.md,另一台怎么生效?" 走 五、升级核心配置
角色 "这台机器以后只做采集" 走 六、切换机器角色
CLI "agentos 有新版了" 走 七、升级 agentos CLI
集群 "怎样查看各机器是否在线?" 走 八、guardd,查看 cross_machine/status/{host}/heartbeat.json
集群 "怎么给另一台机器发加密消息?" 走 八、guardd,参考 encrypted_channel 模块