用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/QianJinGuo/wiki --skill upstream-ban-mirror-fallback命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
精选高价值 RSS feeds 扫描,输出到 raw/rss-inbox/ 暂存区。只保留有独立知识深度的 feed(非 digest 类),不再自动入库。包含 rss-inbox-curl-recovery.py 绕过 blogwatcher read-state 漏抓的兜底。
Meta-orchestrator that wires web-content-reviewer, llm-wiki, and wiki-evolver into a single four-phase knowledge pipeline (Triage → Gate → Store → Evolve). Use as the single entry point for all knowledge base operations. Includes a 6-URL-validated user-pasted WeChat URL fast path, three-axis dedup decision matrix (NEW/MERGE/DEDUP), orphan-raw detection protocol, and sibling-subagent race V7 evidence, and a two-variant V6 mid-write fix for matching vs different-slug duplicates.
从 Gmail 中提取 TLDR AI 等 newsletter 的链接,写入 raw/email-inbox/candidates.md,供后续 inbox-screener 评分。只做链接不做评分,与 inbox-screener 配合使用。
基于 SOC 职业分类
正在显示 SKILL.md
| name | upstream-ban-mirror-fallback |
| description | Upstream API ban (200013)? Mirror RSS + unban watchdog. |
| version | 1.0.0 |
| author | Hermes Agent |
| tags | ["wechat","rss","mirror","ban","fallback","watchdog","cron",200013] |
Trigger: an upstream content source's account gets API-banned (WeChat MP ret=200013 freq control, or analogous account-level blocks on X/Twitter, RSSHub targets, etc.), and you need to keep the content flow alive without the native account.
Run the split test BEFORE assuming a ban is permanent:
ret:0 to ret=200003 invalid session, the ban is escalating — expect the long tier.For WeChat MP, the ecosystem options, ranked by verified experience:
| Option | Verdict |
|---|---|
| wechat2rss.xlab.app (online) | ✅ Best: free, 395+ accounts, own collection channel, ~6h latency, full-text. Zero account risk (uses its own accounts). |
| WeWe RSS self-host | ⚠️ Archived 2026-05; all requests proxy through the AUTHOR's server (weread.111965.xyz/api/v2/...) — single point of failure outside your control. Needs a WeChat-Read account (separate from the banned MP account, so unaffected by 200013). |
| RSSHub wechat routes | ⚠️ Needs gateway, heavy anti-scrape. |
| Self-implement (reverse-engineer i.weread.qq.com) | ❌ Not worth it: weread MP-article API is undocumented + volatile; you'd own the maintenance + account risk. |
Decision rule: use the free online mirror first. Self-host only if (a) coverage insufficient AND (b) the mirror's forwarding-server dependency is acceptable. Verify the mirror's feed actually returns content before wiring it in (curl the .xml, count <item>, check latest pubDate).
Verified end-to-end for the wiki RSS pipeline (blogwatcher → rss-inbox-recovery.py → inbox-screener):
blogs table): insert one row per mirror feed, name prefixed to identify origin (e.g. WeChat-机器之心). ⚠️ Do NOT use blogwatcher-cli add — it dedupes by URL and mirror feeds share one domain, so only the first insert succeeds. Direct SQL INSERT with the unique .xml feed_url.rss-inbox-recovery.py GOOD_FEEDS dict): hardcoded feed list — mirror entries MUST be added here or recovery never fetches them (it does NOT read the source registry DB).--unsafe-client to allow loopback proxy for GFW-blocked mirror domains).Pitfalls hit:
blogwatcher-cli scan with HTTPS_PROXY=127.0.0.1:10808 fails ... not authorized by the client: "127.0.0.1" address is loopback. Fix: --unsafe-client. Python (urllib) paths are unaffected.headers={"Cookie": ...} raises 'latin-1' codec can't encode characters. Split into a dict and pass cookies=....Keep the banned account at ZERO collection requests (stop internal scheduler + pause discover cron) so the ban window isn't extended. Then add a watchdog that does the waiting for you:
Design (verified as ~/.hermes/scripts/wechat-unblock-probe.py, cron wechat-unblock-probe, daily 09:20, no_agent=True):
appmsgpublish request, count=1, fixed fakeid. Single daily request does NOT refresh the rate-limit window (window is minute-scale).ret=200013 → exit silently (no_agent empty stdout = no alert). Keep it quiet — the ban is expected.ret=0 → auto-restore: (1) re-enable the collection task (UPDATE message_tasks SET status=1 + container restart), (2) resume the paused discover cron (hermes cron resume <job_id> — a no_agent script CAN shell out to hermes CLI), (3) send notification email via the verified SMTP fallback chain (direct 587 ×3 retries → send-report.py 465 fallback).running in executions.db with no subprocess (agent died mid-run), verify with ps aux | grep <job_id> (empty = dead) and re-trigger via cronjob action=run.Probe BEFORE enabling the cron: run the script once manually — banned state must exit 0 with zero stdout, and the restore path must be verified (function imports + job IDs match DB) without actually flipping the DB.
The 9-day silent WeChat outage was caused by three false-healthy layers, ALL of which must be present in any pipeline:
processed += 1 per non-exception reports "30/30 ok" while yielding 0 articles. Count DB rows before/after; ALERT + exit 1 on zero new.slave_sid exists) ≠ server-side valid session. Check the home-page URL token (token=\d+ in the dashboard URL) — logged-out sessions have no token.alerted=True) when the send actually succeeds, else a failed send suppresses future alerts forever.wechat-monitor.py (cron wechat-pipeline-monitor) kept polling the OLD direct-crawl DB (/Users/jinguo/data/we_mp_rss.db → MAX(create_time) stuck at the ban date) → fired bogus "481h stale" alerts for 20 days while the mirror channel was healthy. Diagnosis: compute the mirror's real freshness from raw/rss-inbox/ — a file counts as WeChat-mirror if feed_name: starts with WeChat- OR source_url: contains mp.weixin.qq.com; latest mtime among them = last discovery. If that is <48h old while the monitor says stale, the monitor is watching the wrong source → repoint it (re-verify with a dry run that prints the channel + hours). Rule: when a channel is parked under a ban, EVERY downstream monitor/alert that read it must be checked and redirected to the live mirror.we-mp-rss-troubleshooting (user-owned) — WeChat-specific container/cookie/endpoint fix details, 200013 history, wechat2rss integration specificscron-management (user-owned) — cron error debugging, provider-failure waves, zombie roundsrss-to-wiki-pipeline (user-owned) — blogwatcher/recovery pipeline operational details, WeChat-* mirror feed management