如何用 last30days-skill doctor 检查哪个数据源没在正常工作并拿到修复建议?
【免费下载链接】last30days-skillAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary项目地址: https://gitcode.com/GitHub_Trending/la/last30days-skill
当你跑完一次 last30days-skill 研究、发现某个平台(比如 X 或 TikTok)的内容明显偏少甚至完全没有时,最直接的排查手段是引擎自带的doctor健康检查命令。它会逐源输出一份四状态审计,并对每个没正常工作的数据源给出一行可执行的修复建议——文档把它总结为回答四个问题:"什么可以开、什么已经开了、什么在工作、什么不工作"。适用前提:已按项目说明安装 skill(skills/last30days/目录可用),且系统有 Python 3.12+ 解释器。
完整命令说明见 CONFIGURATION.md 的 "Health check (doctor)" 章节,agent 侧的使用约定见 SKILL.md。
准备:确认 Python 版本
引擎要求 Python 3.12+。执行任何last30days.py命令前先确认版本:
python3 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 12) else 1)' && echo OK输出OK即可继续。如果报错,说明系统 Python 低于 3.12,需要安装 Python 3.12+(SKILL.md 给出的对应系统是:macOS 用brew install python@3.12,Windows 用winget install Python.Python.3.12,Linux 用sudo apt install python3.12)。如果解释器不在python3,可以把路径放到环境变量LAST30DAYS_PYTHON里,下面的命令都遵循这个约定。
运行基础审计:一条命令列出每个数据源的状态
在仓库根目录执行:
python3 skills/last30days/scripts/last30days.py doctor(在支持斜杠命令的 agent 环境中也可以用/last30days doctor。)
输出是文本形式的四状态审计,每个数据源一行,另有两个辅助块:
- 四状态:
WORKING(本次/上次运行已验证,或免密钥常开源)、TURNED ON - UNVERIFIED(已配置/已选但还没有运行证据)、NOT WORKING(已配置但失败,或上次运行出错)、COULD BE ON(可用但尚未配置); - CLI-health 块:对需要下载二进制(如 yt-dlp、digg-pp-cli)的源检查其是否在 PATH 上;
- backup/comment 缩进子行:展示 Reddit、YouTube 等源的备用路径与评论区子通道状态。
你要找的问题源就在NOT WORKING行上——文档明确说明每个未正常工作的源会附 "an exact fix"(一条精确修复),例如缺哪个 key、哪个 CLI 不在 PATH、cookie 过期等。找到对应行后按该行给出的 fix 操作即可,不需要自己猜根因。
几条重要的行为约定,判断输出时有用:
- 报告问题也算成功运行:退出码恒为 0,不要因为退出码为 0 就以为全部正常,要看审计状态本身;
- 不读浏览器 cookie,不打印任何密钥值:key 的存在性只以布尔值呈现,输出可以直接分享;
- 带缓存的运行(见下文)在文本输出末尾有一行
generated: … (cached|live),告诉你这份报告是缓存还是实时生成的。
三种模式:预测、实测、事后诊断
doctor有三个按需模式,对应排查的三个不同时机:
1. 实测确认:doctor --probe
基础doctor读的是配置和上次运行留下的证据;如果你怀疑某个源"配好了但实际不通",用--probe跑一次有界实测:
python3 skills/last30days/scripts/last30days.py doctor --probe边界是明确划定的:probe 只打免费 HTTP 端点(Reddit、Hacker News、Polymarket、GitHub)加免密钥 CLI;从不探测按次计费的源(X、TikTok、Instagram、Threads 等),因此不消耗 ScrapeCreators 额度、不会触发鉴权限流。每个源并发探测并受每源截止时间约束(LAST30DAYS_DOCTOR_PROBE_TIMEOUT,默认 10 秒),慢源不会卡住命令。
一个值得记住的联动规则:当没有新鲜运行可供参考时,普通的doctor会自动触发同样的有界 probe——也就是说你平时裸跑doctor就已经在自动做这件事,--probe是显式版本。
2. 事后诊断:doctor --postmortem
"跑完了但结果偏少"是 troubleshooting 的高频场景。这时doctor --postmortem正是为此设计:它读取上一次运行的last-report.json(不限时间,输出会标注),逐源报告实际发生的事——Failed / Partial / Succeeded / Skipped,带细节与修复提示:
python3 skills/last30days/scripts/last30days.py doctor --postmortem它不做任何网络调用,纯离线读缓存报告,所以可以放心在任何时候运行。SKILL.md 对两个方向的区分值得记一下:普通doctor预测的是"跑之前配置是否健康",--postmortem报告的是"上一次实际哪里坏了"。运行报告里## Partial Coverage和Report.source_status字段(状态包括partial、rate-limited、auth-failed、unreachable、timeout、schema-drift、skipped-unconfigured、error等)也描述同一批事实——这些状态意味着"这次运行没能证明该源是安静的",而不是"该源没内容"。
3. 机器可读:doctor --json
需要把结果接进脚本时用--json拿机器契约:
python3 skills/last30days/scripts/last30days.py doctor --json--json输出中每个源带tier、status、backends、active_backend、fix、requires等字段;顶层还有from_cache和generated_at标明报告来源与生成时间。
用缓存降低重复检查成本:--cached与 TTL
每次实时doctor都会把 JSON 结果写入~/.config/last30days/doctor-cache.json(遵循LAST30DAYS_CONFIG_DIR)。--cached在报告未过期时直接返回这份缓存:
python3 skills/last30days/scripts/last30days.py doctor --cached新鲜度窗口由LAST30DAYS_DOCTOR_TTL控制,单位秒,默认900(15 分钟);设为0则每次--cached都实时重跑。缓存过期、缺失或损坏时会自动回落为实时运行并重写缓存。
还有一层自动失效机制:缓存里带配置指纹(哪些凭据存在、LAST30DAYS_X_BACKEND/LAST30DAYS_REDDIT_BACKEND的 pin 值、INCLUDE_SOURCES)。因此你新增/删除一个 key、改一个 pin 或切换选开源之后,下一次--cached调用会自动转实时运行,不需要手动清缓存。裸跑(不带--cached)的doctor则永远实时运行并刷新缓存。
排查时可以用--cached --json做低成本复查:SKILL.md 建议依赖登录态源(cookie 的 X、ScrapeCreators 的 Reddit 回补)做研究前先查一次缓存报告,只有缓存过期或上次报告了登录态源降级时才重跑实时doctor。
读报告:修复建议如何对应到你的配置
审计中每个源的fix行来自统一的修复词表(实现见 prescriptions.py)。常见形态举例(均来自项目文档实际给出的修复文案):
- 免密钥源之外的按次计费源未配 key → 提示补
SCRAPECREATORS_API_KEY; - 需要下载二进制的源 → CLI-health 块指出二进制缺失或不在 PATH(例如
digg-pp-cli需在 agent 子进程 PATH 上,典型位置$HOME/.local/bin); - 可选源未选开 → 提示 "add {source} to INCLUDE_SOURCES (or request it via --search {source})";
- X 后端未 pin 时的提示示例:"pin LAST30DAYS_X_BACKEND=grok to enable, then fix the store"。
与 doctor 直接相关的环境变量,完整表格见 CONFIGURATION.md:
| 变量 | 作用 |
|---|---|
LAST30DAYS_DOCTOR_TTL | --cached新鲜度窗口(秒),默认900;0表示每次都实时跑 |
LAST30DAYS_DOCTOR_PROBE_TIMEOUT | 每源 probe 截止时间(秒),默认10 |
LAST30DAYS_X_BACKEND | pin X 后端(bird/xai/xurl/xquik/grok);doctor 会渲染 pin 并预测"下次将使用哪个"。未 pin 时的自动链是 bird → xai → xurl → xquik,grok 仅 opt-in |
SKILL.md 补充了一条与 X 相关的读法:当 X 在可用源列表里时,应把报告的sources.x.active_backend告知用户(例如 "X will use: bird");若 doctor 报告 grok 后端degraded且带过期时间戳,正确表述是 "Grok 会话已于 {timestamp} 过期,运行时会尝试刷新;若刷新失败,执行grok login --device-auth",而不是简单说 "Grok CLI 未登录"——过期 access_token 不等于 refresh_token 已失效,只有运行时报auth_revoked或invalid_grant才需要真正重新登录。
边界与限制
- probe 不覆盖计费源:X、TikTok、Instagram、Threads 等永远不会被 live 探测,所以
WORKING对这些源的判定依赖配置与上次运行证据,不要指望 probe 给出它们的实时连通性; --postmortem依赖上一次运行:它只是读last-report.json,如果从未跑过研究,没有可诊断的对象,此时应先用普通doctor查配置;TURNED ON - UNVERIFIED不是故障:它表示已配置但还没有运行证据,下一步是跑一次真实研究让证据落地;- 网络行为可预期:带新鲜运行证据的普通
doctor、--cached与--json均不发网络请求;会发请求的只有--probe及无新鲜运行时自动触发的 probe,且严格限定在免费端点与免密钥 CLI。
修复完成后,重新运行一次doctor(或研究跑完后的doctor --postmortem),确认该源从NOT WORKING变为WORKING、且末行generated: … (live)表明是实时结果,排查即闭环。
【免费下载链接】last30days-skillAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary项目地址: https://gitcode.com/GitHub_Trending/la/last30days-skill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考