移植自 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 带网关原话 / 正常返回)。
17 KiB
agent-os多机协同 本系统通过 WorkBuddy 作为 AI 交互中枢,整合本地大模型、计划做一个多机可协同,知识库可自增长,自学习、自优化。记忆可以不断提炼更新,向量化,持久化、长期化的、自我进化的 Mac 全栈智能体。 多机采用共同底座及分机学习的模式,可进行快速迁移,快速生成复制快速恢复。
agent-os(全局/多机共用内容)这是共同底座的部分。
- 初始化脚本
- 从零安装、环境配置、workbuddy等自动化脚本
- 建议统一放在 00_bootstrap,可细分 install、setup、update 等子目录 安装的时候主要包括一次性把权限给到位,相应的基础设施,核心的环境内容,包括软件依赖,虚拟环境全部设置到位,假设是从空白组机开始还原先铺环境,然后再按依赖,最后按主程序。并设置自动任务、自动备份及自动优化等相应的所有的任务系统。所有的任务复制过来以后,根据祖籍身份,有些任务可以暂时暂停,如果身份切换以后再启用。
- 核心配置(01_core)
- 系统身份、主机标识、主维护机配置
- 建议增加主机/维护机标识文件(如
HOST_ID.md、MAINTAINER.md) 包括智能体所有的基础设定规则,还有一些通用全局的设置文件,全部装在这里,方便拷贝生成,或者可以进行嗯几个版本的生成,到时候可以选择性的加载,因为可能还涉及到多智能体等其他的各种设置,总之这些文件都可以配置在这里头
- 技能(02_skills)
- 系统必需技能
- 自定义/个人维护技能
- 每个技能需有身份证明(如
SKILL.md),并标注维护主机 - 建议增加技能分类(如系统/自定义/第三方) 基于前面讨论的技能身份证和版本控制分层,你只需要增加以下文件:
A. 每个技能目录下:SKILL_CARD.yaml(技能身份证)
只加在你自己写的技能里,比如 memory_manager/、kb_manager/、inbox_refine/、collect_to_inbox/、auto_collector/。
以 memory_manager/ 为例,在 02_skills/memory_manager/ 下新增一个文件:
# SKILL_CARD.yaml —— 技能身份证
skill:
name: "记忆管理器"
id: "memory_manager"
version: "1.1.0"
category: "core-system"
status: "active"
created: "2026-04-25"
updated: "2026-04-27"
description:
short: "每日对话提炼、去重、冲突检测、版本管理"
use_cases:
- "每日凌晨 2:00 自动提炼前一天记忆"
- "首次冷启动灌入已有 MEMORY.md"
- "手动触发记忆更新"
tags: ["记忆", "L1索引", "L2事实", "自动化"]
ownership:
master_editor: "macbook-air-m1"
readonly_on_other_devices: true
environment:
os: "macos"
python_path: "~/.workbuddy/binaries/python/envs/agent-os/bin/python3"
local_dependencies:
- "sqlite3(系统自带)"
pip_dependencies:
- "sqlite-utils>=3.35"
- "chromadb>=1.0.0"
setup:
install_script: "" # 由顶层 init.sh 统一安装
post_check: "python3 -c 'import sqlite3; print(\"OK\")'"
usage:
entry_point: "daily_digest.py"
scheduled: "每日 02:00(WorkBuddy 自动化 agentos)"
manual_trigger: "记忆更新"
changelog:
- version: "1.1.0"
date: "2026-04-27"
changes: "接入 oMLX Embedding,支持向量化"
- version: "1.0.0"
date: "2026-04-25"
changes: "初始版本"
对其他技能(kb_manager、inbox_refine、collect_to_inbox、auto_collector)同样操作,字段按实际填写。
外部技能(如 web-clipper、voice-summary、social-collector)暂不加 SKILL_CARD,因为它们不是你开发的,升级不归你控制。如果你后续改造了它们,那时再加。
B. 05_tools/ 下:skill_scanner.py(技能身份证扫描器)
让你在任何一台机器上运行一次,就知道哪些技能就绪、哪些缺依赖:
#!/usr/bin/env python3
"""扫描所有 SKILL_CARD.yaml,生成技能状态报告"""
import os
import yaml
from pathlib import Path
SKILLS_DIR = Path.home() / "agent-os" / "02_skills"
def scan():
print("=" * 60)
print("AgentOS 技能状态报告")
print("=" * 60)
for skill_dir in sorted(SKILLS_DIR.iterdir()):
if not skill_dir.is_dir():
continue
card_path = skill_dir / "SKILL_CARD.yaml"
if not card_path.exists():
print(f" ⚠️ {skill_dir.name} — 无 SKILL_CARD.yaml(外部技能或待补充)")
continue
with open(card_path) as f:
card = yaml.safe_load(f)
s = card["skill"]
o = card.get("ownership", {})
print(f" ✅ {s['name']} (v{s['version']}) 主理: {o.get('master_editor', '未知')}")
print("=" * 60)
if __name__ == "__main__":
scan()
放在 05_tools/skill_scanner.py,用 AGENTOS_PYTHON 运行即可。
C. 根目录:SKILL_CARD_TEMPLATE.yaml(技能身份证模板)
当你在别的机器上新写一个技能时,复制这个模板来填,确保格式统一。放在 ~/workbuddy-agent-os/agent-sync/SKILL_CARD_TEMPLATE.yaml。
- 知识库(03_knowledge)
- 分类建议:
- 知识(外部资料、文档、教程等)
- 个人笔记,个人我自己去想到的一些事,或者说我的感悟,或者说临时的一个随手的记的笔记,那这个东西呢其实就相当于随手记,我觉得这块就是呃它可以不用当成知识库,但是可能我需要有一个随手记随手查的事情,特别是比方说我开会的一个笔记,或者是我个人记录的一些语音,或者是个人记事,其实这是个个人成长,在我的第1版里头,其实是按照这个分类来的,所以呃知识库你会看到它比较乱,它有好多分类,其实是我的一个思想过程,中间呃有刚开始按照类别分的,后面按照事实分的,也有按领域分的,还有按概念分的,所以这块我们可以再讨论,嗯我只是把我所有的信息先放进来,你去了解一下
- 记忆固化(长期记忆、总结、反思等)这个说的是整个我嗯好多机子的记忆体里头很多内容,它可能随着时间的偏移,它有些东西也变成了事实,也要记录下来。如果变成事实的东西,而且是通用的,不是说单机能用的,那其实也可以归集到总的知识库里头的记忆体里头,或者说是整个转到事实的记录,这块也要进行一个合理的判断
- 项目立项/成形(项目文档、方案、进展等)我自己写的一些项目立项文件记录,包括我们自己编的程序的进展什么的,可能要单独画出来,因为它可能记录的我的一个过程,它可能是个过程记录,并不是结果,等到整个项目都成型了,稳固下来,可能他会写到正式记忆体。所以他要单独处理一下,我想的,
- 向量化内容(如向量索引、embedding 数据)
- 收件箱(待整理内容)
- 建议每类下可细分为原始、已整理、归档等
- 分类建议:
── 8_收件箱/ # 临时收集,每月归档 ├── 1_日记/ # 每日记录,自动生成 ├── 20_项目/ # 活跃项目,Frontmatter包含type/status/areas ├── 30_研究/ # 永久参考,深度调研内容 ├── 40_知识库/ # 原子概念,拆分独立知识点 ├── 50_资源/ # 精选内容,新闻稿、行业简报 ├── 90_计划/ # 执行计划,完成后归档 └── 99_系统/ # 模板、提示词、归档目 知识库结构详解 6.1 目录结构与命名规则 知识库路径:~/workbuddy-agent-os/agent-sync/03_knowledge/,同时作为 Obsidian Vault。 编号 目录 中文名 知识属性 说明 00 00_inbox/ 📥 收件箱 — 待提纯内容暂存 01 01_daily/ 📅 日记 — 每日日记、闪念笔记 10 10_concepts/ 💡 概念层 concept/axiom 16 个子领域目录 20 20_methods/ 🔧 方法层 method 可操作的步骤/教程 30 30_facts/ 📋 事实层 fact/regulation/data 已验证的客观事实 40 40_references/ 📎 参考层 reference 论文/文档/外部资料 50 50_resources/ 🛠 资源层 resource 视频笔记/阅读笔记/灵感素材等 60 60_opinions/ 💭 观点层 opinion/quote 主观看法/他人原话 90 90_archive/ 🗄 归档层 — 已弃用的知识 99 99_system/ ⚙️ 系统层 — 模板/分类/配置
6.2 领域分类体系 10_concepts/ 下按 16 个一级领域分子目录: 编号 英文目录 中文 典型子领域 01 cs 计算机科学 数据库、前端、后端、运维、安全 02 ai 人工智能 NLP、CV、强化学习、RAG、Agent 03 finance 金融 量化交易、价值投资、宏观经济 04 law 法律 民法、商法、知识产权 05 medicine 医学 中医、西医、营养学 06 physics 物理 量子力学、相对论、热力学 07 math 数学 线性代数、概率统计、微积分 08 psychology 心理学 认知心理学、社会心理学 09 philosophy 哲学 认识论、伦理学、美学 10 history 历史 中国史、世界史、科技史 11 engineering 工程 机械、电子、土木 12 design 设计 UI/UX、平面设计、建筑设计 13 business 商业 创业、管理、营销、战略 14 personal-management 个人管理 GTD、番茄工作法、精力管理 15 personal-insight 个人洞见 决策模型、价值观、反思 16 other 其他 待新增领域
当"其他"类别超过总知识 5% 时,memory_manager 会提示新增领域。 6.3 知识卡片模板 99_system/templates/ 下有 4 种标准化模板: 模板文件 适用类型 核心字段 concept-card.md 概念/公理 一句话定义、核心原理、与相关概念区别、主流选择 method-card.md 方法/教程 适用场景、步骤、注意事项、示例 fact-card.md 事实/数据 事实陈述、数据来源、可信度 personal-insight-card.md 个人洞见 背景、思考过程、结论、行动项
所有知识卡片使用标准 Frontmatter: yaml 复制
id: KB-YYYYMMDD-NNN title: "知识标题" type: concept|method|fact|reference|resource|opinion status: draft|review|published|archived nature: fact|opinion|method|regulation|reference|data|quote|axiom domain: [领域1, 领域2] tags: [标签列表] confidence: 0.0-1.0 source: "原始来源 URL" source_type: official_doc|literature|experiment|personal_exp|social_media|unknown date_created: YYYY-MM-DD date_modified: YYYY-MM-DD version: 1 previous_version: "" superseded_by: ""
6.4 分类体系配置文件 文件 路径 说明 domains.md 99_system/taxonomies/domains.md 16 个一级领域定义 nature-types.md 99_system/taxonomies/nature-types.md 9 种 nature 类型 + 决策树 folder-aliases.json 99_system/taxonomies/folder-aliases.json 英文目录 ↔ 中文映射 classify-knowledge.md 99_system/prompts/classify-knowledge.md 知识分类 Prompt
- 工具层(05_tools)
- 非技能化的工具脚本
- 包括知识库管理、记忆管理、技能管理等
- 建议按功能模块细分 因为技能很更多的是自然语言或一些东西,它可能对于一些大量的个性化的工具,呃可能不一定使用得很好,所以我的工具做很多做cl i的终端化的处理,或者说直接写成一些接口的东西,这样子会被技能更好的去去调用,技能这面有一些东西,呃如果确实是可以写,那中间也可以转换,但这个转换过程可能要等着这个技能呃通用了,才可能放到技能里头,或者说它跟系统有关才放进去。我是这么想的,你可以给我点建议啊,我们在这个事上再讨论讨论
- 系统管理(07_migration/90_archive)
- 打包、解包、迁移、备份等脚本
- 系统归档、历史记录
agent-os-local(本机专属内容)
-
采集原始内容
- 各类原始数据(音频、视频、网页、截图等),每个单机的原始讨论,可能还包括我说的一些话,一些笔记,这个其实和知识库那块来讲是联动的,它其实是先进行我从网上或者。说手机或者是新闻客户端收集到的内容全都看到了以后,先暂存到每台机子上,因为每台机子我在做项目的时候,同时会看到一些信息,这个信息就是临时性的,或者是一个闪念,但是过完以后可能再去收集整理,所以它就相当于是个前前端缓存,存。存完以后,有一些东西可能分门别类,这块跟知识库呢要对应起来,到时候连知识库的分门别类和这块一块讨论。这个才是这个项目可能比较核心的东西,最初我就是拿这个东西想写一个项目来着,但是后来发现其实是依托智能体,不过不光是做这个项目,还要做智能体的一些配置,运行状态等等,才会越写越大,最后涉及到多机联动
- 建议按类型细分 materials/audio、video、web、screenshots 等
-
本机记忆
- 个人/本机的记忆数据
- 建议分为原始、整理、归档等 本机的记忆,自己也涉及到和知识体的共享的,就是什么记忆提取出来变成长久的记忆,他记忆里头可能有一些东西是要加一些属性字段,也就是向量化处理的时候,可能在一些东西,比方说事实层,或者说具体的这种呃硬约束层,它可能。能能提取出来,分享给所有人用,呃有一些东西只有跟本机有关,比方说本机的CPU处理能力,或者本机的向量化处理能能力,这些东西只能在本机用,放在别的机器上不通用的,那其实是不要放,那这个中间如何去判断,如何去执行。所以我们这中间的这个知识管理和提炼,记忆提炼这两个程序,就要把这些东西都整理进去,所以这两个程序写起来就会很重要
-
运行记录、对话记录、缓存
- 任务缓存、运行日志、对话历史
- 建议分为 runtime/cache、memory/raw、memory/vector_db 等 这块主要是和这个智能体的一个对接的地方,因为将来有可能智能体我换了的话,用其他智能体如何对接,其实都要在这块处理,因为换一个智能整体可能我用openclaw和现在workbuddy可能将来用的对接的方式或者是运行状态,可能对话记录或者说是呃每次的呃这种上下文也不一样。如何能从用这个适合智能体的一些工具把它调用出来,这个是很重要的事情,都在这块解决
-
本机情况数据说明记录
- 本机环境、硬件、软件、配置说明
- 建议单独设 info/ 或 system/ 目录
需要你补充/确认的问题
-
向量库(vector_db)
你希望它只作为索引,还是也存储知识内容?是否需要和知识库内容分离,还是做成知识库的一个子模块?向亮库,我就在想,其实我本地本机是应该有个向量库,然后在共享的呃服务器知识体上,其实也是有一个向量库,那个向亮库可以全全域和多多台主机同步,但我本机就是我本机,其实不需要同步,呃本机根据依据本机的这个能力,其实。在进行,所以我中间这个有一个向量库,可能要全局通用,这样子才能同步起来,呃我理解是这个样子,你可能想想是不是再帮我补充一下 -
主机/维护机标识
是否需要每台主机有唯一标识?主维护机如何指定?是否需要自动同步主维护机的内容? 主机肯定是要维护的,因为我相当于是多台主机跨系统的一个跨主机的一个操作,所以每台主机它是什么一个唯一标识,然后它充当。什么角色,对刚才我讲的知识库、记忆、技能,所有的这种管理,包括整个这个主程序的管理,他们都有什么权限角色,其实我觉得这个还是需要的,因为谁写的智能体可能最好是在他原来的这台主机上继续在维护。体的知识库的管理,最好是有一台主机,就固定充当这台管理主机,然后他晚上就可以进行呃提炼管理,记忆体各自是各自的管理,然后管理与有了一些记忆可以共享升级的情况下,然后再去提取到中组主机里头去呃管理 -
知识库分类
你希望知识库的分类粒度到什么程度?是否需要支持多级分类、标签等? 知识库的分类,我前面讲了好多了,包括记忆体那块也讲了好多了,有很多对接的,所以我需要这块来讲,呃展开了,到时候我们再细聊,你可以发散性的给我提问题,帮助我去把这块这一部分去完善掉 -
工具与技能的边界
工具和技能的区别是否只在于是否被系统自动加载?有无交集或转换机制? 工具在加载这一块,我需要既要注重效率,又要呃合理的去呃扩展,呃这块你给出很好的建议 -
本机数据说明
本机情况数据说明,具体希望包含哪些内容?如硬件、软件、网络、环境变量等? 本机情况就是根据我系统将来要完成的所有的电脑相关的事项,给出来的所有的数据,其实这个数据最好固定的写在这儿,但是它有一些变化的时候,又能够动态更新,这个要有个很好的呃模式,我不想浪费太多的token,因为核心逻辑就是整个这个系统使用token的时候还是要尽量节省一点效率为先,我不不能太过于浪费 -
同步/备份机制
agent-os 与 agent-os-local 之间是否需要自动同步、定期备份?同步粒度和策略如何? 我觉得你问这个问题就是你没搞清楚我现在在写什么,所以我现在才写了这么大一段东西给你