1. 从 50+ 信源到一份简报:我到底在解决什么问题
每天早上打开手机,微信里躺着十几个公众号推送,浏览器书签栏里排着 HackerNews、Reddit、量子位、机器之心,RSS 阅读器里未读数已经飙到 300+。我试过用 RSS 阅读器把所有源聚到一起,结果只是把「到处刷」变成了「在一个地方刷」,该花的时间一点没少。真正的问题不是信息不够,而是从 100 条里挑出那 10 条值得看的,这件事以前只能靠人工。
后来我把这个流程拆成了三步:抓取、筛选、推送。抓取靠 RSS 和公开 API,筛选靠 Claude Code 的 Skill 做打分和摘要,推送靠 iCloud Drive 同步到手机。整套东西跑在本地,不需要服务器,不需要数据库,一个 Skill 加一行 cron 就能转起来。
这篇文章要讲的就是这条流水线怎么搭。核心检索词是 Claude Code Skill 每日情报简报,适合谁?适合每天要跟踪 AI 动态但不想被信息流冲走的人,适合已经在用 Claude Code 或 OpenClaw 的开发者,也适合想给自己搭一套自动化信息管道的技术爱好者。你不需要会写爬虫,也不需要懂 NLP,只要能把配置文件改对、把 cron 写对,剩下的交给 Skill 和模型。
我踩过的坑主要在两个地方:一是 Claude Code 的 endpoint 和 Key 没配对,Skill 跑起来报 401;二是 cron 环境变量没加载,手动跑正常、定时跑就挂。这两个问题后面会单独讲怎么排查。
整条流水线的结构是这样的:Skill 负责定义「抓什么、怎么筛、输出什么格式」,Claude Code 负责执行 Skill 里的逻辑,TaoToken 负责提供统一的模型调用通道,cron 负责定时触发,iCloud Drive 负责把结果送到手机。下面按这个顺序拆开讲。
2. 前置准备:TaoToken 统一 Key 接入 Claude Code 的完整步骤
在写 Skill 之前,先把 Claude Code 的模型通道配好。这一步不做,后面所有命令都会报错。我用的是 TaoToken 的统一 Key,好处是一个 Key 能调多个模型,不用在 Claude Code、OpenClaw、Cline 之间来回换配置。
2.1 获取 API Key 和确认 Base URL
先到 TaoToken 控制台创建一个 API Key。地址是 https://taotoken.net/api-keys ,登录后点「创建 Key」,复制出来存好。这个 Key 后面要填到 Claude Code 的配置里。
Base URL 用 https://taotoken.net/api ,注意不要加多余的路径,Claude Code 会自己拼/v1/messages。如果你用的是 OpenAI 兼容模式,路径可能是/v1/chat/completions,但 Claude Code 默认走 Anthropic 协议,所以 Base URL 填到/api这一层就行。
2.2 配置 Claude Code 的 endpoint 和 Key
Claude Code 的配置有两种方式:环境变量和配置文件。我推荐用配置文件,因为 cron 跑的时候环境变量不一定能加载到。
配置文件路径是~/.claude/settings.json,如果没有就新建一个。内容如下:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }这里三个字段都要写全:Base URL、Key、Model ID。少一个都可能报错。Model ID 根据你实际用的模型填,TaoToken 支持的模型列表可以在文档里查。
如果你用的是 OpenClaw,配置方式类似,在它的设置里找到 Anthropic 相关的配置项,把 Base URL 和 Key 填进去。Cline 的话在 VS Code 设置里搜cline.apiProvider,选 Anthropic,然后填 Base URL 和 Key。
2.3 验证配置是否生效
配完之后先跑一个最简单的请求,确认通道是通的:
claude "回复一句:配置成功"如果返回了正常文本,说明 Base URL 和 Key 都对了。如果报 401,检查 Key 有没有复制错、有没有多余空格。如果报local proxy failed,检查 Base URL 是不是写成了https://taotoken.net/api/v1,多写一层路径会导致拼接错误。
这一步过了之后再往下走。不然后面 Skill 报错你分不清是配置问题还是 Skill 问题。
3. 可复制配置:Skill 定义、信源清单与 cron 定时任务
这一节是整篇文章的核心。我会给出 Skill 的目录结构、配置文件内容、以及 cron 的写法。你直接复制改路径就能用。
3.1 Skill 的目录结构
Skill 本质上是一个文件夹,里面放配置文件和提示词模板。结构如下:
vv-horizon-briefing/ ├── SKILL.md ├── assets/ │ └── presets/ │ └── default.json └── output/SKILL.md是 Skill 的说明文件,Claude Code 读它来理解这个 Skill 能做什么。default.json是信源和输出配置。output/是简报输出目录,后面可以改成 iCloud 路径。
3.2 SKILL.md 的内容
--- name: vv-horizon-briefing description: 从 50+ 信源抓取内容,AI 打分筛选,生成每日情报简报 --- # 每日情报简报生成器 ## 触发方式 用户说「生成今日简报」或「生成今日 AI 简报」时触发。 ## 执行步骤 1. 读取 assets/presets/default.json 中的信源配置 2. 抓取最近 72 小时内启用的信源内容 3. 对每条内容进行重要性评分(0-10 分) 4. 筛选出 Top N 条,生成深度摘要 5. 按格式输出 Markdown 文件到 output_dir ## 输出格式 # 今日 AI 简报 - {date} > 从 {total} 条信息中筛选出 {top_n} 条重要内容 ## 今日信源分析 ## 精选 Top 10(含 AI 评分 + 深度摘要) ## 更多文章(按类别归档,附评分)3.3 default.json 信源与输出配置
{ "filtering": { "time_window_hours": 72, "min_score": 6 }, "output": { "languages": ["zh"], "top_n": 10, "output_dir": "/Users/yourname/Library/Mobile Documents/com~apple~CloudDocs/Briefings" }, "sources": { "ai_tech": { "enabled": true, "items": [ {"name": "HackerNews", "type": "api", "url": "https://hacker-news.firebaseio.com/v0/topstories.json", "min_score": 100}, {"name": "Reddit LocalLLaMA", "type": "rss", "url": "https://www.reddit.com/r/LocalLLaMA/.rss"}, {"name": "Simon Willison", "type": "rss", "url": "https://simonwillison.net/atom/everything/"} ] }, "cn_media": { "enabled": true, "items": [ {"name": "量子位", "type": "rss", "url": "https://www.qbitai.com/feed"}, {"name": "机器之心", "type": "rss", "url": "https://www.jiqizhixin.com/rss"} ] }, "finance": { "enabled": false, "items": [ {"name": "华尔街见闻", "type": "rss", "url": "https://wallstreetcn.com/feed"} ] } } }几个关键参数说明:time_window_hours控制抓取时间窗口,72 小时比较合适,不会漏掉周末的重要消息。min_score是入选门槛,低于这个分数的直接丢掉。top_n是每天精选条数,10 条是我试下来比较舒服的量。output_dir改成 iCloud 路径后,文件会自动同步到手机。
想只关注 AI 技术,把finance的enabled改成false。想加自己的 RSS,在对应分类的items里追加一行就行。
3.4 cron 定时任务写法
手动跑通之后,加一行 cron 让它每天自动执行:
30 7 * * * cd /path/to/vv-horizon-briefing && /usr/local/bin/claude "生成今日简报" >> /tmp/briefing.log 2>&1这里有几个细节要注意。第一,claude命令要写绝对路径,cron 的 PATH 和终端不一样,直接写claude可能找不到。用which claude查一下实际路径。第二,cd到 Skill 目录再执行,不然 Skill 找不到配置文件。第三,把输出重定向到日志文件,方便排查问题。
如果你用的是 OpenClaw,cron 里的命令换成 OpenClaw 的调用方式,逻辑一样。
4. 验证请求:手动触发一次简报生成并检查结果
配置写完先别急着等第二天早上。手动跑一次,确认整条链路是通的。
4.1 手动触发命令
在终端里执行:
cd /path/to/vv-horizon-briefing claude "生成今日简报"正常的话你会看到 Claude Code 开始读取配置、抓取信源、逐条打分,最后输出一个 Markdown 文件。整个过程大概 1-3 分钟,取决于信源数量和网络情况。
4.2 检查输出文件
跑完之后去output_dir看文件:
ls -la "/Users/yourname/Library/Mobile Documents/com~apple~CloudDocs/Briefings"应该能看到一个类似briefing-2025-04-16.md的文件。打开看一下结构:
# 今日 AI 简报 - 2025-04-16 > 从 127 条信息中筛选出 10 条重要内容 ## 今日信源分析 - HackerNews: 45 条,入选 3 条 - Reddit: 32 条,入选 2 条 - 量子位: 12 条,入选 2 条 ... ## 精选 Top 10 ### 1. Anthropic 发布新模型(评分 9.2) **一句话摘要**:... **核心内容**:... **技术背景**:... **影响意义**:... **社区讨论**:HN 上 200+ 评论,主要讨论... ## 更多文章 ...如果文件生成了、结构对了,说明 Skill 和配置都没问题。接下来检查 iCloud 同步:在 iPhone 上打开 Obsidian 或 iA Writer,找到 iCloud Drive 里的 Briefings 目录,看文件在不在。在的话,第二天早上你就能直接在手机上看了。
4.3 验证 cron 是否生效
手动跑通后,把 cron 加上,然后等下一个触发时间。或者临时把 cron 改成 1 分钟后触发,验证一下:
# 临时测试用 * * * * * cd /path/to/vv-horizon-briefing && /usr/local/bin/claude "生成今日简报" >> /tmp/briefing.log 2>&1等一分钟,看/tmp/briefing.log里有没有输出,output 目录有没有新文件。确认没问题再把时间改回30 7 * * *。
这一步过了,整条流水线就算搭完了。每天早上 7:30 自动跑,你起床的时候简报已经在 iCloud 里等你了。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节列几个我实际遇到过的报错和排查方法。你大概率会碰到其中一两个。
5.1 401 Unauthorized
报错长这样:
Error: 401 Unauthorized {"error":{"type":"authentication_error","message":"invalid api key"}}原因就一个:Key 不对。检查三件事。第一,~/.claude/settings.json里的ANTHROPIC_API_KEY有没有复制完整,有没有多余空格。第二,Key 是不是过期了,去 TaoToken 控制台看一下状态。第三,如果你同时设了环境变量和配置文件,环境变量会覆盖配置文件,检查一下echo $ANTHROPIC_API_KEY输出的是什么。
5.2 local proxy failed
报错长这样:
Error: local proxy failed: connection refused这个通常是 Base URL 写错了。检查ANTHROPIC_BASE_URL是不是https://taotoken.net/api,不要写成https://taotoken.net/api/v1或者https://taotoken.net。多一层或少一层路径都会导致拼接错误。另外确认一下网络能通,curl https://taotoken.net/api看有没有响应。
5.3 reading choices 报错
报错长这样:
Error: reading choices: unexpected end of JSON input这个一般出现在用 OpenAI 兼容模式调 Claude 模型的时候。Claude Code 默认走 Anthropic 协议,返回格式是content数组,不是choices。如果你在配置里把协议改成了 OpenAI 兼容,但模型返回的是 Anthropic 格式,就会报这个。解决办法是把配置改回 Anthropic 协议,Base URL 用https://taotoken.net/api,不要加/v1。
5.4 OAuth 相关报错
报错长这样:
Error: OAuth token expiredClaude Code 有时候会尝试用 OAuth 登录而不是 API Key。如果你已经配了 API Key,但还是报 OAuth 错误,检查一下有没有残留的 OAuth 配置。在~/.claude/目录下找credentials.json之类的文件,有的话删掉,强制它走 API Key。
5.5 cron 跑了但没输出
手动跑正常,cron 跑没反应。九成是环境变量问题。cron 不加载.bashrc或.zshrc,所以claude命令找不到、或者配置文件读不到。解决办法是在 cron 命令里写绝对路径,并且在脚本开头手动 source 一下环境:
30 7 * * * cd /path/to/vv-horizon-briefing && source ~/.zshrc && /usr/local/bin/claude "生成今日简报" >> /tmp/briefing.log 2>&1或者更稳妥的做法,写一个 shell 脚本,在脚本里把环境变量都设好,cron 直接调脚本。
6. 把通道和 Skill 固定下来,让简报每天准时到
整套东西搭完之后,我每天早上打开手机,iCloud 里已经躺着一份结构完整的简报。从 127 条信息里筛出 10 条,每条有评分、有摘要、有社区讨论要点。我不需要再打开任何信息流 App,也不需要自己判断哪条重要。
如果你也想搭一套,建议按这个顺序来:先把 TaoToken 的 Key 和 Base URL 配到 Claude Code 里,跑通一个最简单的请求;然后把 Skill 的目录结构和配置文件建好,手动触发一次确认输出正常;最后加 cron,改成 iCloud 路径,等第二天早上收结果。
几个实用技巧。第一,time_window_hours设 72 小时比 24 小时好,周末的消息不会漏。第二,min_score一开始可以设低一点,比如 5,跑几天看看入选质量再往上调。第三,cron 的日志一定要留着,出问题的时候看日志比猜快得多。第四,iCloud 路径里的yourname要换成你的实际用户名,别直接复制。
模型通道这边,TaoToken 的统一 Key 好处是一个 Key 能覆盖 Claude Code、OpenClaw、Cline 几个工具,不用每个工具单独配。Base URL 固定用https://taotoken.net/api,Model ID 按你实际用的填。配置写全三件套:Base URL、Key、Model ID,少一个都可能报错。
Skill 的配置文件就是文档,想加信源就加一行,想关分类就改enabled。改完手动跑一次验证,没问题就等 cron 自动执行。整条流水线不需要服务器,不需要数据库,一台 Mac 加 iCloud 就够了。