1. last30days-skill 是什么:给 AI Agent 补上“最近 30 天”的社区感知
大模型的知识有训练截止时间,这个大家都知道。但真正让人头疼的不是“它不知道 2026 年发生了什么”,而是它不知道“最近 30 天真实用户在讨论什么”。你问它某个 AI 工具好不好用,它能给你背出官网的功能列表,却不知道 Reddit 上有人吐槽安装脚本把 shell 配置写坏了,也不知道 Hacker News 上高赞评论在争论它的许可证问题。
last30days-skill 就是冲着这个缺口来的。它是一个面向 AI Agent 的“近 30 天社区研究技能”,由 mvanhorn 维护,当前版本 v3.0.2。它的核心逻辑是:当你在 Claude Code、Codex、Cursor 这类宿主 Agent 里触发它时,它不会直接让模型凭记忆回答,而是先调度一组 Python 脚本去检索 Reddit、X、YouTube、Hacker News、Polymarket、GitHub 等平台最近 30 天的公开讨论,把热度、评论、视频 transcript、PR 活动、市场赔率等信号综合成一份带来源的研究简报,再交给宿主模型做归纳和再加工。
它适合谁?三类人最直接受益。第一类是技术内容创作者,写文章前需要验证选题是不是社区真正在讨论的,而不是自己拍脑袋想的。第二类是开发者,做工具选型时想看到真实用户的踩坑反馈,而不是只看 GitHub star 数。第三类是产品经理或独立开发者,做需求调研时想快速抓到用户的原话和情绪。
一句话概括:last30days-skill 让 AI Agent 从“我知道什么”切换到“最近真实的人在说什么”。它不是搜索引擎的替代品,而是一个前置调研层,把人工打开几十个标签页的成本压下来。
我试过用它做 Claude Code Skills 生态的选题调研,输入/last30days Claude Code skills,它返回的简报里把 Reddit 的安装体验吐槽、HN 的架构讨论、GitHub 的 release 活动分成了几个 cluster,比我自己翻半天效率高不少。当然,结果质量取决于数据源配置和宿主模型是否认真读了输出,这个后面会细说。
2. TaoToken 前置:把 Agent 的模型通道统一到一套 Key
last30days-skill 本身不绑定特定模型供应商,它依赖宿主 Agent 的模型能力来做意图解析和最终综合。问题在于,Claude Code、Codex、Cursor 各自有自己的模型接入方式,如果你同时用多个宿主,Key 管理会变得很碎。这时候把 endpoint 统一到 TaoToken 的 API 通道,能省掉不少切换成本。
TaoToken 提供的是统一的 Key/API 通道,官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。它的作用是让你用一套 Key 去调用不同模型,宿主 Agent 只需要改 Base URL 和 Model ID,不用每个平台单独配一套凭证。
具体到 last30days-skill 的场景,你需要关注三个东西:Base URL、API Key、Model ID。这三件套在 Claude Code 的 settings、Codex 的 auth.json、Cline 的 MCP 配置里都会出现。下面我按宿主分别给配置片段。
先说 Claude Code。它的配置文件通常在~/.claude/settings.json或项目级.claude/settings.json。如果你要把模型通道指向 TaoToken,配置大概长这样:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }注意这里的ANTHROPIC_BASE_URL不要带末尾斜杠,ANTHROPIC_API_KEY填你在 TaoToken 控制台生成的 Key。Model ID 按你实际要用的模型填,不同模型 ID 不一样,去模型对话页面确认。
再说 Codex。Codex 的凭证文件一般在~/.codex/auth.json,格式是:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }如果你用的是 Cline 并且走 MCP 方式接入,配置会写在 Cline 的 MCP settings 里,通常是这样的结构:
{ "mcpServers": { "taotoken": { "command": "npx", "args": ["-y", "@taotoken/mcp-server"], "env": { "TAOTOKEN_API_KEY": "sk-你的TaoToken密钥", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } } }这三件套的核心逻辑是一样的:Base URL 指向 https://taotoken.net/api ,Key 用 TaoToken 生成的,Model ID 按需选。配好之后,last30days-skill 在调用宿主模型做综合时,走的就是这条统一通道。
这里有个坑要注意:last30days-skill 自己的数据源配置(Reddit、X、YouTube 的 API Key 或 cookie)和模型通道是两回事。前者放在~/.config/last30days/.env或项目级.claude/last30days.env,后者放在宿主 Agent 的配置里。别把两者混在一起,否则排查问题时会很乱。
3. 可复制配置:last30days-skill 安装与数据源接入
这一节给你可以直接复制的配置片段。先装 Skill,再配数据源,最后确认模型通道。
Claude Code 用户走 plugin marketplace 方式:
/plugin marketplace add mvanhorn/last30days-skill /plugin install last30daysCodex、Cursor、Copilot、Gemini CLI 等支持 Agent Skills 的宿主,用 npx 方式全局安装:
npx skills add mvanhorn/last30days-skill -g装完之后,Skill 的核心文件在skills/last30days/SKILL.md,Python 引擎在scripts/last30days.py。SKILL.md 负责流程规范,Python 脚本负责多平台检索和数据处理。
接下来配数据源。全局配置放~/.config/last30days/.env,项目级配置放.claude/last30days.env,项目级优先级更高。一个典型的数据源配置片段:
# Reddit 数据源 REDDIT_CLIENT_ID=your_reddit_client_id REDDIT_CLIENT_SECRET=your_reddit_client_secret # X/Twitter 数据源 X_BEARER_TOKEN=your_x_bearer_token # YouTube 数据源 YOUTUBE_API_KEY=your_youtube_api_key # GitHub 数据源 GITHUB_TOKEN=ghp_your_github_token # 输出目录 LAST30DAYS_MEMORY_DIR=/Users/yourname/Documents/Last30Days如果你不想配这么多数据源,也可以先用--diagnose参数跑一次诊断,看看哪些源可用、哪些源缺凭证:
python scripts/last30days.py --diagnose输出会告诉你每个平台的连通状态。缺凭证的源会标出来,你可以按需补。
模型通道这边,如果你用 Claude Code,确认~/.claude/settings.json里的ANTHROPIC_BASE_URL指向 https://taotoken.net/api ,Key 填 TaoToken 的。Codex 用户确认~/.codex/auth.json里的OPENAI_BASE_URL同样指向这个地址。Cline 用户确认 MCP 配置里的TAOTOKEN_BASE_URL一致。
这里给一个完整的 Claude Code settings 片段,把模型通道和 Skill 环境变量放在一起:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "LAST30DAYS_MEMORY_DIR": "/Users/yourname/Documents/Last30Days" } }注意LAST30DAYS_MEMORY_DIR是给 Skill 用的,ANTHROPIC_*是给宿主模型用的,两者互不干扰。配好之后,Skill 检索到的原始数据会存到指定目录,模型综合时走 TaoToken 通道。
如果你用 Codex,auth.json 里只放模型通道相关字段,数据源配置还是走.env文件。别把 Reddit 的 client secret 写进 auth.json,那样既不安全也不符合 Codex 的配置约定。
4. 验证请求:跑一次真实检索并比对结果
配置写完,得验证它真的能跑通。分两步:先验证模型通道连通,再验证 Skill 检索链路。
模型通道验证,用 curl 直接打 TaoToken 的 API:
curl -X POST https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-你的TaoToken密钥" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 100, "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'如果返回里有content字段且内容是 OK,说明模型通道通了。如果返回 401,说明 Key 有问题;如果返回local proxy failed,说明 Base URL 写错了或者网络不通。
模型通道通了之后,在 Claude Code 里跑一次 Skill:
/last30days Claude Code skills正常流程是:Agent 先解析主题,判断查询类型,生成子查询,决定搜索哪些平台,然后调用scripts/last30days.py执行检索。检索完成后,Agent 读取完整输出,补充 WebSearch,最后综合成简报。
你可以观察几个点。第一,输出目录~/Documents/Last30Days/下有没有生成新的 markdown 或 JSON 文件。第二,简报里有没有带来源链接,比如 Reddit 帖子 URL、HN 讨论 URL、GitHub PR 链接。第三,不同来源的信号有没有被合并成 cluster,而不是散成一堆重复链接。
如果简报里只出现单一来源,比如全是 Reddit 没有 HN 和 GitHub,可能是主题太窄导致智能扩展没触发,也可能是某些数据源凭证没配好。这时候用--diagnose再跑一次,看哪些源是空的。
结果比对方面,你可以手动打开 Reddit 搜同一个关键词,按“最近 30 天”排序,看看 Skill 返回的帖子是不是真的在时间窗内。如果它返回了半年前的内容,说明--days参数没生效或者数据源的时间过滤有问题。默认是 30 天,你也可以显式传:
python scripts/last30days.py --days 30 --emit markdown --save-dir ./research--emit支持 raw markdown、HTML、JSON、SQLite store 等格式。如果你想把每次研究变成可追溯资产,用 SQLite store 比较合适,后续可以查询历史简报。
验证通过的标准很简单:模型通道返回正常,Skill 输出有来源、有时间窗、有多源 cluster。三者都满足,说明配置链路是通的。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一节对照真实报错来排查。我把常见症状、根因、定位方法、修复动作列成表,你对着查。
| 症状 | 根因 | 定位 | 修复 |
|---|---|---|---|
| 401 Unauthorized | API Key 无效或过期 | 检查ANTHROPIC_API_KEY或OPENAI_API_KEY是否填对 | 去 TaoToken 控制台重新生成 Key,确认没有多余空格 |
| local proxy failed | Base URL 写错或网络不通 | 检查ANTHROPIC_BASE_URL是否为 https://taotoken.net/api | 去掉末尾斜杠,确认没有拼写错误 |
| reading choices 报错 | 模型返回格式不符合预期 | 检查 Model ID 是否拼对 | 去模型对话页面确认可用 Model ID |
| OAuth 相关报错 | 宿主 Agent 走了 OAuth 流程而非 API Key | 检查 Codex auth.json 是否同时有 OAuth 和 API Key 字段 | 删掉 OAuth 字段,只保留 API Key 和 Base URL |
/last30days返回 Unknown command | Claude Code v2.1.105+ 升级后 plugin.json 未声明 skills 目录 | 运行/doctor看报错 | 升级到 v3.0.2+,确认.claude-plugin/plugin.json包含"skills": ["skills"] |
| 出现重复的 last30days-3@last30days-skill | 用户作用域与项目作用域安装冲突 | /plugin list看是否有两条同名记录 | 删除 user-scope 重复安装,只保留 project-scope |
| 检索结果只显示单一来源 | 主题太窄,智能扩展未触发 | 检查 SKILL.md 流程是否先做主题扩展 | 在查询里补充人名、账号、repo、channel 等扩展词 |
| 平台数据为空或频繁失败 | X/YouTube/TikTok 访问规则变化,cookie 或 API Key 失效 | 检查~/.config/last30days/.env | 更新 token,或先用--diagnose确认哪些源可用 |
| 总结与来源内容对不上 | 宿主模型未认真读取 JSON 输出 | 检查输出文件是否存在但模型跳读 | 强化 SKILL.md 中“必须读取完整输出”的自检规则 |
| 热门结论与事实不符 | 社区热度不等于事实质量 | 检查是否单源高赞贴 | 至少要求 2 个独立来源交叉验证 |
| 安装后脚本拒绝运行 | 第三方 Skill 安全审计未通过 | 检查脚本是否请求网络访问或读取浏览器会话 | 安装前审计scripts/last30days.py的网络和文件访问行为 |
| 输出保存到默认目录找不到 | 未配置--save-dir或环境变量 | 检查~/Documents/Last30Days路径是否存在 | 设置LAST30DAYS_MEMORY_DIR或传--save-dir |
重点说几个高频的。401 和 local proxy failed 基本都出在模型通道配置上,前者是 Key 问题,后者是 URL 问题。这两个错误在 Claude Code、Codex、Cline 里都会出现,排查方法一样:先确认 Base URL 是 https://taotoken.net/api ,再确认 Key 没有多余空格。
OAuth 报错比较隐蔽。Codex 的 auth.json 如果同时存在 OAuth 字段和 API Key 字段,它可能优先走 OAuth 流程,导致你的 TaoToken Key 没被用上。解决办法是删掉 OAuth 相关字段,只保留OPENAI_API_KEY和OPENAI_BASE_URL。
reading choices 报错通常是 Model ID 拼错了。不同模型的 ID 不一样,去模型对话页面复制准确的 ID,别手打。
Unknown command 和重复安装这两个是 Claude Code 特有的。v2.1.105+ 之后 plugin.json 的 skills 声明方式变了,旧版本装的 Skill 可能不认。升级到 v3.0.2+ 能解决大部分问题。重复安装则是作用域冲突,/plugin list一看就知道,删掉 user-scope 那条就行。
6. 语义一致 CTA:按你的场景选入口
排障和接入相关的问题,去 API Keys 页面生成 Key,再去接入文档看完整的 Base URL 和 Model ID 对照表。这两个入口能解决 401、local proxy failed、OAuth 这类配置问题。
验证模型是否可用,去模型对话页面直接试。输入一句话看返回是否正常,比在宿主 Agent 里反复调试快得多。
长期编码和 Agent 工作流,看 Coding Plan。last30days-skill 这类多步骤研究任务会频繁调用模型,用 Coding Plan 比按次计费更划算,也适合把 Skill 检索纳入日常开发流程。
具体入口:
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan
最后说一个实用技巧。last30days-skill 的输出默认存到~/Documents/Last30Days/,你可以把这个目录纳入 git 管理,每次研究生成一份 markdown,时间久了就是一个可追溯的社区情报库。配合 SQLite store 输出,还能写脚本做关键词趋势分析。这比每次重新搜一遍高效得多,也是这个 Skill 从“单次调用”走向“可复用工作流”的关键一步。