移植自 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 带网关原话 / 正常返回)。
11 KiB
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 模块 |