个人信息中枢 · 需求说明
依据 2026-08-25 四轮追问 + 接口调研 · 可点原型见 info-hub

把你存过的东西,变成替你认出下一个该看的东西

这份稿子回答两类问题:要做什么(第 1–5 节:问题、判断、定下来的事、查证过的事实),和具体怎么做(第 6–12 节:周报格式、够格判定规则、标签体系、画像算法、每个界面的规则、异常处理、本地跑起来是什么形态)。界面长什么样不在这里——那是可点原型稿,两份配着看。

凡是带 默认值 的数字都是我替你定的起始值,不是需求。挑出来改就行,不改也能开工。

结论先说:你要的不是一个更好的收藏夹。你的收藏在这套系统里主要用来提炼出「你是谁、在关心什么」,然后拿这个去认下周该看的新项目。收藏本身能不能搜到,是副产品。

事实层部分验证外部接口字段逐条查过官方文档(X 与 GitHub)。本系统一行代码没写,标「待建」的字段都还不存在
需求层来自四轮追问每条决定都有 2026-08-25 对话里的原话出处,下面第 4 节逐条列了
设计层在另一份稿12 个场景 + 7 条状态图鉴在 info-hub;这里写的是那些界面背后的规则(第 10 节逐个对应)
验收层有验收标准 + 5 条待澄清做不到的单列在第 16 节,没定的在第 17 节。默认值全部标了出来,可逐条改
问题

你的收藏现在是什么状态

四个痛点你全中了,而排第一的那个决定了整个方案的方向:不是找不到,是根本不会回去找。

基本再也没打开过收藏即归档即遗忘。这一条决定了:做一个更好的收藏夹没用——再整齐的收藏夹也还是个等你去翻的收藏夹
想找时找不到明知道存过,翻不出来
散在好几个平台记得看过,不确定在哪个 app 里
能找到但用不上翻出原文还得重看一遍,才想起当时为什么存
为什么这条排序重要:如果主要痛点是「找不到」,那该做检索;但主要痛点是「不会回去找」,那该做的是主动把东西推回你眼前。这是两个完全不同的产品。
关键判断

收藏是原料,不是目的

你选的周报主体是「新项目对照我的兴趣」。把它和上面那条痛点拼起来,整套系统真正的产物只有一个:每周那份周报。

这套系统是

  • 一个替你认人的东西:拿你存过的内容当判据,去认下周值得看的新项目
  • 产物是一份你愿意坐下来读完的周报
  • 收藏库是它的原料仓,顺带能搜

这套系统不是

  • 不是一个更整齐的收藏夹——那个你已经证明自己不会去翻
  • 不是一个全文检索工具——语义检索你已经决定一期不做
  • 不是多平台聚合器——抖音一期不接
所以一期的验收标准换了:不是「你能搜到三个月前那条」,而是「你收到的第一份周报,让你觉得值得坐下来读完」
机制

怎么转

一期就是这整张图。关键是右边那条回边——没有它,系统永远停在第一版画像上,推荐不会越用越准。

X 书签约 400 条 收藏库打标签 · 摘要 兴趣画像你在关心什么 GitHub每天扫新项目 候选池本周 412 个 引得出你的收藏? 周报7 条 · 进飞书 丢弃 31 个 提炼 作为判据 够格 引不出出处 你点「有用 / 不相关」→ 回头修正画像
这张图回答:为什么这套东西会越用越准,而不是推一堆七分像的项目给你。 答案在两处——中间那个菱形(引不出你的具体收藏就丢掉),和右边那条回边(你的反馈改画像,画像决定下周推什么)。
菱形那一步是整套系统的防废话机制。让 LLM 打分,它会给什么都打七分,最后推给你一堆泛泛相关的东西,你看两周就不看了。唯一的解法是强制它说人话:每条推荐必须引用你具体哪条收藏,引不出的直接丢弃。
需求层

四轮追问定下来的事

每条都有原话出处。没写在这里的,就是还没定的(见第 10 节),不要当成已定的需求往下做。

X 书签走官方付费 API你选「接受,就走官方 API」。按量计费、合规、可全自动,不会因平台改版失效
抖音一期不做你选「抖音先不做」。无开放接口,只能 cookie 抓取
打标签 / 摘要 / 打分用本地订阅你选「就用我们本地的 codex/claude 订阅」,不另开按量 API key
跑在本机你选「用本地的 AI,代码也可以放在本地 run」
语义检索一期不做你选「一期先不做」。订阅额度只能做生成、做不了 embedding,见第 9 节
周报主体 = 新项目对照我的兴趣你从四个候选里选了这一个。它决定了收藏库主要用来当画像原料
周报是坐下来认真看的你选「坐下来认真看」,所以周报可以长、可以分主题、可以带分析,不是手机上扫一眼的五条
整理要到「能提炼出观点」不只是归类,要能说出这批内容合起来意味着什么
观点服务于三件事找产品灵感 · 看行业走向做判断 · 个人成长。不含写公众号——你没选那一项
开局兴趣画像AI Agent / 开发者工具 · 产品设计 / 交互 · 创业 / 商业模式。后续从收藏自动修正
存量几百条以内回填一次跑完,不需要分批策略
输入只加「网页 / 文章随手存」不含微信收藏、不含自己写的笔记——这两项你没选
事实层

调研出的四个事实,都改了设计

动笔前逐条查了官方文档。其中两条如果不提前发现,做到一半会返工。

X 不返回「你什么时候收藏的」接口只给推文自己的 created_at。更麻烦的是:回填时所有历史书签的「首次见到时间」都是回填当天,历史书签没有真实时间线。所以周报里能不能说「你三个月前存过」,成了待澄清第 2 条
回填进度不能显示百分比X 分页只告诉你有没有下一页,不告诉你总共多少条。任何进度条比例都是编的。原型里那一屏明确不放百分比,并把理由写在界面上
GitHub 没有官方 trending 接口trending 只能解析 HTML 页面(约 6 小时更新),会随改版失效。官方 /search/repositories 是稳的替代,但排序逻辑不同——待澄清第 3 条
成本不是均匀的,差 5 倍你自己的书签 $0.001/条;读你关注的人的推文 $0.005/条。每天 200 条就是 $30/月,而其余部分全年不到 $5——待澄清第 1 条,最该先定
下面是查证过的接口清单,每条都能指到官方文档:
X 书签
GET /2/users/{id}/bookmarks · max_results 100 · pagination_token · OAuth 2.0 PKCE
X 可取字段
id / text / created_at / author_id / entities / public_metrics / lang / conversation_id
X 计费
owned reads $0.001 · Post:Read $0.005 · User:Read $0.010
GitHub
/search/repositories 按 created+stars · 认证后 20 次/分钟
产品规格 · 核心

周报长什么样

周报是这套系统唯一的产物。它的规格就是这个项目的规格——下面每一条都要能直接实现出来。

规格为什么这么定
产出形态每周一份新建飞书文档,不追加默认值每期独立、可单独分享和回看;追加会让文档越来越长,翻旧期要滚很久
标题格式【周报】8月18日–8月24日 · 7 条默认值标题里带条数,你在飞书列表里不点开就知道这周多不多
推荐条数上限8 条默认值每条含理由约 100 字,8 条约 1000 字,十分钟能读完。你要的是"坐下来认真看",不是扫一眼
条数下限没有下限,够几条发几条默认值凑数是这类产品最常见的死法。见下一节的硬闸
0 条时照发,只写"这周没有"默认值不发的话,你分不清"这周确实没内容"和"系统坏了"
排序按引用强度降序,同分时新项目优先默认值引用强度 = 引用到的收藏条数 × 那些收藏所属主题在画像里的权重
去重同一项目 90 天内不重复推默认值热门项目会连续几周出现在榜单上,不去重会让周报看起来在复读

一份周报由四块组成,顺序固定:

① 扫描总览(一行)扫了 N 个候选 · M 条够格 · 丢弃 K 条。丢弃数要露出来——它是你判断判定标准松紧的唯一依据
② 推荐列表(主体)按下面的字段表逐条展开。这是周报的全部价值所在
③ 这周你收了什么(一行摘要)新增 N 条 + 主题分布一句话。让你知道这周喂进去了什么
④ 画像变化(有才出现)本周反馈改了哪些主题的权重、有没有冒出新方向

每条推荐包含这些字段,缺一不可:

字段内容来源
序号排序位次计算
项目名原名,不翻译源接口(真实)
来源标记一期只有 GitHub,先留字段源接口(真实)
热度star 数与本周增量源接口(真实)
这是什么一句话,不超过 50 字默认值,只说做什么不评价LLM 从项目描述改写(待建)
为什么推给你2–4 句默认值。必须包含两个成分:那条收藏当时在讲什么、这个项目对上了哪一点LLM(待建)
引用1–2 条收藏默认值,带作者与推文发布日期,可点回原文收藏库 id(待建)
原链接项目地址源接口(真实)
反馈有用 / 不相关 / 早知道了写回画像(待建)
一条推荐实际读起来的样子(内容为示意,不是需求指标)

1 · mem-layer GitHub · 1,240 ★(本周 +380)· TypeScript

把 agent 的长期记忆拆成三层,检索时按层加载,作者说能把上下文占用压到三分之一。

为什么推给你

你存过一条讲「agent 记忆该不该分层」的推文,当时那条底下在争分层策略,没人给出能跑的实现。这个项目正好把那套做出来了。

↩ 引用你的收藏 · @swyx · 推文发于 3月12日

发送时机没定,进了待澄清第 4 条。因为"坐下来认真看"要对上你真有整块时间的那个点,我猜不出来。
产品规格 · 核心

什么叫「够格」

这一节是整套系统的成败所在。让 LLM 打分,它会给什么都打七分,最后推给你一堆泛泛相关的东西,你看两周就不看了。

三道闸,全过才够格,顺序固定:

闸一 · 能引到具体收藏(硬闸)至少能引到 1 条你的具体收藏条目。引不到就丢弃,不管这个项目多热门。这是二元判定,不是打分
闸二 · 理由必须点出具体关系(硬闸)理由要同时包含「那条收藏当时讲了什么」和「这个项目对上了哪一点」。只说"都属于 Agent 方向"不算——那是主题相同,不是具体关系
闸三 · 不在 90 天去重窗口内推过的项目不再推

判定时喂给模型的是收藏原文,不是画像。

这样做

  • 候选项目的名称 + 描述 + README 摘要,对比收藏库里的具体条目
  • 先用标签和关键词把候选缩到十几条相关收藏,再让模型逐条判断
  • 输出必须带上引用了哪条收藏的 id,能反查

别这样做

  • 别拿画像去判定——画像是聚合后的抽象("你关心 Agent 架构"),用它只能得出"主题相同"这种笼统关系,正好是闸二要挡掉的
  • 别让模型直接输出一个 0-100 的相关度就完事

过了硬闸之后才打分,而且必须给分数锚点。没有锚点的打分一定会挤在 70-80 之间。

分档什么情况给这个分
85–100你收藏里明确提出过的问题 / 需求,这个项目直接做了出来默认值
70–84和你收藏讨论的同一个具体问题相关,但角度或成熟度不同默认值
60 以下只能说出主题相关,说不出具体对上哪一点 —— 这一档直接丢弃,不进周报默认值

还要有负面清单,明确写进判定规则:

不因为热度高就加分star 多、涨得快,都不构成"跟你相关"
不因为标题里有关键词就加分项目名或描述里出现 agent、AI、workflow 这些词,不等于对上了你的具体收藏
不因为同属一个大领域就加分"都是开发者工具"是分类,不是关系
宁可漏推不可错推拿不准时判不够格。漏掉一个你自己也会刷到,错推一个消耗的是你对周报的信任
被丢弃的也要存下来存丢弃原因,你可以随时抽查判定是不是太严。但入口要写"不推荐查看"并默认折叠——一旦被当成正式列表看,宁缺毋滥就白做了
这一节的分档与负面清单做法,参考了 GitHub 上 huawolf/news-agent 的打分 prompt 设计(它把 quality 与 interest 拆成两个分、给每档写明锚点、并明确列出"不要因为标题包含 X 就自动高分")。差别是:它的偏好来自用户手写的偏好文本,我们的判据是你收藏库里的具体条目,所以我们能多加"必须引得出出处"这道硬闸。
产品规格

收藏怎么加工

每条收藏进库后要产出三样东西:标签、一句话摘要、推测的收藏理由。标签体系是重点——它直接决定画像准不准。

标签用「先自由生成、再收敛成词表」。

为什么不用固定词表

  • 你的关注方向会变。固定词表半年后就盖不住新方向,还会把新东西硬塞进旧类目

为什么不能纯自由生成

  • 几百条收藏会产出几百个只用过一次的标签,聚合不出主题,画像就成了一盘沙
规格
第一轮全库自由打标签,不给词表
第二轮合并同义标签("agent 记忆" / "长期记忆" / "memory" 归一),产出词表
之后新条目优先复用词表;确实盖不住时才新增,新增累计到 10 个触发一次词表重整默认值
每条标签数1–3 个默认值
词表规模控制在 30–60 个默认值,超了就再合并
标签禁止禁止"技术""产品""思考"这类空泛分类词。标签要具体到能一眼认出这条讲什么
产出规格约束
一句话摘要不超过 40 字默认值只说这条讲了什么,不评价、不引申
推测的收藏理由1–2 句默认值界面上必须标注「AI 推测 · 平台没有记录」。依据是同期收藏的其他条目 + 这条的独特点
失败处理单条加工失败不阻塞全库,标记为"未打标"稍后重试默认值库列表里"未打标"要能筛出来,你能看见有多少条没处理成功
产品规格

兴趣画像怎么算、怎么改

画像是推荐的唯一判据,但它是 AI 归纳的、必然有偏差,所以必须能看见、能改。

规格
结构一组主题,每个主题有:名称 · 关联收藏条数 · 权重 · 是否启用
怎么生成把标签词表聚合成主题(多个近义标签归一个主题)
权重初值该主题的收藏条数 ÷ 总条数默认值
多久重算新增收藏满 20 条时全库重算一次默认值
发周报的下限库里少于 100 条时不发周报,只提示画像还立不住默认值

反馈怎么改画像(这是那条回边的具体规则):

你点了发生什么为什么
有用该推荐引用的收藏所属主题,权重 ×1.05默认值正反馈要轻,避免几次点击就把画像带偏
不相关同上主题权重 ×0.9默认值负反馈略重于正反馈:错推的代价比漏推大
早知道了不改权重默认值,只把该项目加入去重名单这不是兴趣问题是时效问题。你早知道说明推得对,只是晚了
在画像里关掉某主题权重置 0,不再作为判据;收藏不删一次性查资料存的东西(比如某段时间查加密行情)不该长期污染推荐
生效时机下一期生效,不重算本期默认值本期已经写进飞书文档,改了会对不上
上面这些系数(1.05 / 0.9 / 20 条 / 100 条)都是我拍的起始值,没有依据说它们最优。跑两个月看反馈曲线再调,PRD 里写死是为了让一期能开工,不是说它们对。
产品规格

12 个界面各自的规则

界面长什么样在可点原型里;这里写的是每个界面背后的判断规则,两份对着看。

界面什么时候出现关键规则
周报主体够格 ≥1 条按引用强度排序,最多 8 条;每条必须有引用链
本周没几条够格 < 3 条默认值显式说明"这不是故障";被丢弃的入口标注"不推荐查看"并折叠
单条展开点任一推荐摊开完整引用链:被引的每条收藏显示原文、作者、发布日期、标签
反馈之后点了三个反馈按钮之一当场说清改了什么(哪个主题权重变了);提供撤销;标明下期生效
库列表库里有内容按标签筛;每条标注"收藏时间未知";"未打标"可单独筛出
单条详情点任一收藏推测理由必须标"AI 推测";显示这条被周报引用过几次
搜索结果输入关键词命中数 + 说明匹配的是原文还是标签;提示一期只有关键词匹配
搜索无结果命中 0不能只写"无结果":要区分"你没存过"和"系统搜不了",并给两条出路
画像总览库 ≥100 条主题分布 + 明确写"这是 AI 归纳的不是你填的";显示最近在变的方向
修正画像点修正关闭主题不删收藏;说明关掉后的后果
首次接入未授权把要花的钱和要授的权当场讲清;标明抖音不在一期
回填进行中回填任务在跑不显示百分比(拿不到总数);打标签那步可以显示 x/y,因为总数已知
产品规格

出错了怎么办

失败必须分两类:要你动手的,和等系统重试的——这决定你现在该不该起身。

情况怎么处理给你看什么
X 授权过期停止同步,等你重新授权要你动手。写明最后一次成功同步的时间
credits 用尽停止拉取,已入库的不受影响要你动手。写明本月已花多少、还差多少条没拉
候选源挂了一期只有 GitHub,抓不到就本周不推周报里注明"本周 GitHub 没抓到",不静默
打标签失败标记未打标,下次重试默认值库列表可筛"未打标"
原推已删除保留我们回填时存的正文标注"原推已删除",整条推荐不因源站删帖而消失
本地模型没额度暂停加工,已排队的保留要你动手。提示可换另一个 runner 跑同一批
一条通用规则:任何"少了东西"的情况都要在界面上说出来,不许静默跳过。静默跳过会让"系统坏了"和"这周确实没有"长得一模一样。
技术框架

本地怎么跑、数据存在哪

你选了"跑在本机、用本地订阅",那么整套东西的形态就定了:一个定时触发的脚本 + 一个 SQLite 文件,没有常驻服务、没有数据库服务器、没有容器。

你的 Mac(不联网也能查库) launchd 定时每天 08:00 一个 Node 脚本跑完就退出 data.dbSQLite 单文件 claude / codex CLI子进程 · 走订阅额度 X API付费 · 只读你自己 GitHub API免费 · 公开数据 飞书文档周报写这里 读写 出网的只有这三条
这张图回答:什么在你本机、什么会出网。 蓝线是仅有的三条出网调用(拉书签、拉新项目、发周报);打标签走的是本地 CLI 子进程,你的收藏内容不会被送去任何按量计费的接口。库是一个文件,Mac 不开机时它就静静躺着,不影响你随时打开查。

为什么不做常驻服务:

定时脚本,跑完退出

  • 一天就跑几次,常驻纯属浪费
  • 崩了不用管,下次定时照跑
  • 要调试就手动执行同一条命令,行为一致

常驻服务的代价

  • 要管进程存活、要开端口、要写健康检查
  • 挂了你不会知道,等发现时已经断了几天
  • Mac 睡眠 / 重启都要额外处理

数据存在一个 SQLite 文件里,九张表:

存什么关键字段
items收藏条目本体source · source_id · text · author · created_at · first_seen_at · url · raw_json
item_tags条目的标签item_id · tag
item_aiAI 加工结果item_id · summary · guessed_reason · model · updated_at
themes画像主题name · weight · muted · updated_at
theme_tags主题由哪些标签组成theme_id · tag
candidates每天扫来的新项目source · source_id · name · desc · url · metrics_json · seen_at
verdicts够格判定结果(含不够格的)candidate_id · verdict · score · reason · cited_item_ids · created_at
digests每期周报period_start · period_end · doc_url · created_at
digest_items周报里的每条推荐与你的反馈digest_id · candidate_id · rank · feedback
raw_json 整条留着接口返回的原始数据不丢。以后想用新字段(比如书签文件夹)不用重新花钱拉一遍
first_seen_at 是我们自己造的X 不给收藏时间,这个字段是"我们第一次在同步里见到它"。回填进来的历史书签这个值全是回填当天——第 17 节待澄清第 2 条就是问这个怎么用
不够格的判定也存存了才能抽查判定是不是太严。不存的话你只能看见推荐,看不见系统丢了什么

为什么是 SQLite 不是 Postgres:单用户、几百到几千条数据、要跟着 Mac 走。一个文件,拷走就是备份,出问题用任何工具都能打开看。上 Postgres 意味着多一个要照顾的服务,换不来任何东西。

每天那一次的完整流程:下面这张是照着能实现的那版——每步的输入输出、失败往哪走、结果写进哪张表都标了。

每天 08:00 · launchd 触发同步读 sync_log 拿上次同步时间← sync_log调 X API 拉增量书签GET /2/users/{id}/bookmarks分页到 next_token 为空按 source_id 判重,只写新条目first_seen_at = 今天→ items(含 raw_json)→ sync_logtoken 过期 → 停,等你重新授权credits 用尽 → 停,记已拉条数加工查 item_tags 为空的条目← items / item_tags分批调 claude / codex CLI打标签 + 摘要 + 推测理由本地子进程 · 走订阅额度换 runner 不改脚本写回加工结果→ item_tags / item_ai单条失败 → 标未打标,明天重试画像距上次重算新增 ≥ 20 条?聚合标签成主题,重算权重权重 = 该主题条数 ÷ 总条数→ themes / theme_tags否 → 跳过,沿用上次画像候选GitHub Search 拉新项目按 created + stars 过滤GET /search/repositories认证后 20 次/分钟滤掉 90 天内推过的→ candidates对照 digest_items 去重判定用关键词+标签缩小相关收藏← items / item_tags缩到十几条候选收藏调 CLI 跑三道闸 + 打分引不出具体收藏 → 直接丢弃闸一 引得到闸二 说得出关系闸三 不在去重窗口写判定结果(含不够格的)→ verdictscited_item_ids下一个候选周报今天是周日?否 → 今天到此结束取本周够格的,按引用强度排序引用强度 = 引用条数 × 主题权重← verdicts / themes生成飞书文档上限 8 条 · 0 条也发→ digests / digest_items飞书 API反馈你点 有用 / 不相关 / 早知道了不是定时跑,你点才发生→ digest_items.feedback→ themes.weight×1.05 / ×0.9反馈改的权重不改本期,下次到 ③ 才生效
这张图回答:一次跑下来到底发生了什么、卡住时卡在哪一步。 灰虚线框是失败或跳过的分支(都不会静默,界面上要能看见);⑤ 的左侧回边是逐个候选的循环;⑦ 那条蓝色长回边是整套系统唯一的自我修正路径——你的反馈不会当场改本期,而是等下次跑到 ③ 重算画像时才生效。

七个阶段对应的要点:

① 同步 · 只拉增量从 sync_log 取上次同步时间,只拉之后的新书签。按 source_id 判重,避免重复写入。raw_json 整条存下来,以后想用新字段不用重新花钱拉
② 加工 · 只处理没打过标的查 item_tags 为空的条目,分批调本地 CLI。单条失败不阻塞整批,标记未打标明天重试
③ 画像 · 不是每天都重算新增满 20 条才重算一次。没满就跳过,沿用上次画像——画像本来就不该天天抖动
④ 候选 · 拉完先去重GitHub Search 按 created + stars 过滤,写 candidates 前先对照 digest_items 滤掉 90 天内推过的
⑤ 判定 · 逐个候选走一遍三道闸先用关键词和标签把相关收藏缩到十几条,再调 CLI 判定。够格的和不够格的都写进 verdicts,不够格的带上原因,你随时能抽查判定是不是太严
⑥ 周报 · 只有周日多这一步其余六天跑到这里就结束了。周日取本周够格的排序、生成飞书文档,上限 8 条,0 条也照发
⑦ 反馈 · 不是定时跑的你点按钮时才发生,写 digest_items.feedback 并改 themes.weight。不重算本期——本期已经写进飞书文档,改了会对不上
换 runner 怎么办:第 2 步和第 4 步调 CLI 的地方走同一个薄封装,claude 没额度就换 codex 跑同一批,脚本不用改。这也是你在 CLAUDE.md 里定的硬规矩——不锁死单一 runner。
这一节是框架不是技术设计。表结构、目录布局、定时方式都还能改;真正的技术设计(索引怎么建、CLI 封装的接口长什么样、失败重试的退避策略)该由 TechLead 出,我这里只把"本地长什么样"说清楚,让你能判断这个形态对不对。
范围

一期做什么

一条链路走通:X 书签 → 打标签 → 提炼画像 → 每天扫新项目 → 够格的进周报 → 飞书。

接入X 官方 API 一次授权,回填全部历史书签(含你自己发的和转发的——同属 owned reads,一起抓)
加工每条打标签 + 写摘要 + 推测「你当时可能为什么存」。用本地 claude / codex 订阅批量跑,一晚上跑完
画像聚合成主题分布,你能看、能关掉不要的主题
监控只扫 GitHub,对照画像判定够不够格。一期就这一个候选源
周报每条必须引用你具体哪条收藏,引不出就丢弃。写进飞书文档
能按标签浏览、能全文搜(关键词,非语义)
一期验收(三条全中才算成):① 第一份周报你愿意读完;② 十条推荐里至少三条你真会点开;③ 每条推荐都能引用到你具体的收藏,引不出的已经被丢掉而不是硬凑上去。
范围

二期、三期

一期做完你就知道这东西对你有没有用。没用就停,成本是几天加不到一美元。

二期 · 网页文章随手存接 Karakeep(自托管,28k stars)。它不可替代的地方是浏览器插件、移动端保存、页面快照防链接腐烂——这些自建最贵。一期的 SQLite 数据一次性灌进去。验收:你看到好文章会顺手存,而不是想起来才存
三期 · workbench 页面把周报和库搬到 workbench 上。界面价值没验证前不接前端
为什么一期不上 Karakeep:它解决的是「存得整齐」,而一期要验证的是「周报有没有价值」。几百条书签用 SQLite 完全够,先把最值钱的那条链路跑通。
成本

花多少钱

一期几乎零成本,唯一会让它变贵的是待澄清第 1 条。

回填历史书签
约 400 条 × $0.001 = 不到 $1,一次性
日常增量
每天几条,一年不到 $2
打标签 / 摘要 / 打分
$0,走你的 claude / codex 订阅
GitHub
$0,公开接口免费
部署
$0,跑在你自己的 Mac 上
「关注的人在聊什么」
每天 200 条 ≈ $30/月 —— 是上面全部加起来的几十倍,待定
验收层

做不到的,单列出来

把做不了的划掉,比把能做的说满更有用。下面这些不是「以后补」,是这一期里界面上根本不会出现的东西。

你什么时候收藏的(平台不给) 历史书签的真实时间线 匹配度百分比(没有校准来源,只做够格 / 不够格) 回填进度百分比(拿不到总数) 你为什么收藏某条(只有 AI 推测) 已读 / 未读 模糊问法搜索(一期只有关键词) 抖音 / 小红书 / 微信的任何数据 画像置信度 GitHub trending 的官方名次
关于语义检索为什么做不了:claude / codex 订阅只能做生成类任务,做不了 embedding。要么本机跑个小模型(几百 MB,零成本),要么单独开个 embedding 接口。你选了一期先不做,所以「跟 XX 相关的」这类问法一期搜不到。
待澄清

还没定的五件事

这五条我没有替你假设答案。第 1 条最该先定,它决定这个项目是「几乎免费」还是「每月一顿饭钱」。

1 ·「你关注的人在聊什么」这条源做不做?按 Post:Read 计费 $0.005/条,是读自己书签的 5 倍。每天 200 条 ≈ $30/月,而整套系统其余部分一年不到 $5。做或不做、拉多少条,直接决定项目的成本量级
2 · 周报里能不能说「你三个月前存过」?回填的历史书签没有真实收藏时间,只有推文的发布时间是真的。允许近似的话措辞要改成「你存过一条 3 月发的推文」;不允许就只能说「你存过」,周报会损失一部分说服力
3 · GitHub 走官方 Search API 还是抓 trending 页面?官方接口稳定但排序逻辑不同(按 stars 和创建时间,不是 GitHub 自己的热度算法);抓页面更贴近「热门」但会随改版失效。这决定「新项目」的定义和维护成本
4 · 周报什么时候发?低于几条就不发?发送时机要对上你真有整块时间的那个点。另外宁缺毋滥要有下限:够格 0 条时是照发一份空周报,还是攒到下周?这决定「这周没内容」会不会被误当成系统坏了
5 · X 书签文件夹(Premium)能不能通过 API 拿到?尚未核实。能拿到的话,你自己分的文件夹比 AI 打标签准得多,画像质量会明显提升;拿不到就只能全靠 AI 归纳。这会改变打标签那一步的设计
开工前

只有你能做的三件事

这三件我做不了,得在开工前备好,否则长任务会卡在权限上。

1 · 在 X Developer Console 建 app拿 Client ID,只需要 bookmark.read 和 tweet.read 两个权限
2 · 充值 credits按量计费,充 $5 够用一年多
3 · 走一次 OAuth 授权跳到 X 点一次同意,拿到 refresh token 之后自动续期
界面长什么样、每个状态怎么处理,看 可点原型稿——12 个场景可走查,含空态、失败态、宁缺毋滥态。
右下角可以点「批注」,指着任意一段提意见——导出的 Markdown 带精确定位。