Borrowing it
Nothing to install: this file belongs to re0wiki/wiki-bot. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/re0wiki/wiki-bot/main/.agents/skills/pywikibot-update/SKILL.mdgit clone --depth 1 https://github.com/re0wiki/wiki-botWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/re0wiki/wiki-bot/pywikibot-update)<a href="https://agentmods.dev/skills/re0wiki/wiki-bot/pywikibot-update"><img src="https://agentmods.dev/badge/skills/re0wiki/wiki-bot/pywikibot-update/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/re0wiki/wiki-bot/pywikibot-update"><img src="https://agentmods.dev/badge/skills/re0wiki/wiki-bot/pywikibot-update.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00036 | $0.02349 |
| Opus 5.5 | $0.00014 | $0.00940 |
| Sonnet 5.5 | $0.00007 | $0.00470 |
| Haiku 4.5 | $0.00004 | $0.00235 |
Grade A, and why
pywikibot-update scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 13d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 94 lines — stays where its author put it; the contents beside it link to each section on GitHub.
pywikibot submodule 更新流程
把 fork(re0wiki/pywikibot 的 main)rebase 到 upstream 最新版的完整流程。本 skill 同时是 fork 定制提交清单的唯一权威——rebase 时必须逐条保留。
fork 历史可任意重写(force push 常态化):只保留上游 → 定制终态的最短路径。补丁的演进中间态(加了又改、又删)一律重写抹平,不留在历史里;补丁「是什么、为什么」以本清单的当前描述为准。
定制提交清单(rebase 上游时必须保留)
每个定制一个独立提交:
- 全库
import re→import regex as re(80 文件机械替换,setup.py 除外)+ requirements.txt 加 regex:译名合并 alternation(1000+ 分支)靠 regex 的 trie 优化(stdlib re 逐位置顺序试探,167KB 页 8.9s → 0.03s)。regex 默认 VERSION0 与 re 行为对齐。 replace.py:generate_summary支持 callable 替换的take_summary_pairs()协议——回读本页实际命中的(原文, 目标)对并清空;合并 alternation 的编辑摘要打印真实转换(-菲爾歐蕾 +菲尔欧蕾)而非整条 pattern。textlib.py:replaceExcept加快速路径(marker 为空且不 allowoverlap 时):异常区间预计算一次(合并排序),编辑后区间随 delta 平移,替代原版「每个候选匹配 × 每个异常正则」的全文重扫——保护行密集的页面(NekoQuote 月表,200KB)上 10x+ 加速。行为锚点测试在主仓tests/test_fork_replaceexcept.py。textlib.py+fixes.py:新增keep标签 =<!--as-is-->...<!--/as-is-->注释对,textlib 加 regex,HTML/syntax/isbn/specialpages fixes 的 exceptions 里加keep—— wiki 上可以用这对注释保护内容不被 bot 改。注释零渲染、可行内使用,行内内容整词包裹即可(如<!--as-is-->精灵<!--/as-is-->)。标记不配平时该区域失去保护(静默失效,扫描时可查配平)。fixes.py:HTML fix 把<br>归一到不闭合形式(MediaWiki 渲染等价,不闭合是本 wiki 惯例)。fixes.py:syntax fix 注释掉外链竖线规则(误报太多)。textlib.py:replaceLanguageLinks的 CategorySelect 分支加守卫,模板页(含子页)改走 noinclude 感知分支——否则getCategoryLinks不识别<noinclude>包裹,会把分类从 noinclude 里拽出来放到页尾(Fandom 有 CategorySelect 扩展,cosmetic_changes 的 standardizePageFooter 必踩)。_filepage.py:下载 URL 加&format=original,否则 Fandom API 返回 webp。同时必须去掉上游的 suffix 调整:它从 URL 路径取扩展名,而 Fandom URL 以/revision/latest结尾(无扩展名),留着会把下载文件的真扩展名剥掉(Wikimedia 的 URL 路径以文件名结尾,所以上游留着没事)。noreferences.py:zh 参考资料段标题首选「注释」;预载带pageprops——skip_page对每页调isDisambig()(use_disambigs=False)读prop=pageprops,默认预载不含它导致每页一次查询(全扫 ~18 min),带上后随内容同批缓存(~25 s)。背景:本站按对齐 en 的策略不加__DISAMBIG__(en 不加,zh 单加会破坏 interwiki;用户尝试给 en 加被回退),该检查恒为空——故选零成本的语义保留方案而非改use_disambigs=None的假设性跳过。scripts/listpages.py:-notitle(含-format:空值)抑制标题后treat()不再 pop 空output_list——上游 bug:非 preloading 且无-tofile时逐页pop(),首页即 IndexError 崩溃。pagegenerators/_factory.py:恢复多个-start的并集语义。上游 fa0c6f6c7(T425882,11.3 引入-until)把-start改为惰性合并进单个_allpages_args,导致多个-start只有第一个命名空间生效(jobs 的starts.py全依赖多-start)。补丁在再遇-start时把挂起的参数实例化为独立 allpages 生成器,-start+-until配对行为不变。site/_decorators.py:need_right权限检查失败且当前为匿名会话(user() is None)但配置了账号时,先_relogin()重登一次再复查,复查仍失败才抛UserRightsError。覆盖「进程启动后首次取 userinfo 时会话已被服务端作废」的盲区——该场景下缓存里从未有过登录态,api._requests的 userinfo 不符自愈(要求user() is not None)不会触发,会直接以User "None"抛错退出。重登失败则NoUsernameError照常传播(响亮失败)。
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 13d ago Changed · +18 lines 1dcac77248b8
- 1mo ago Changed · +2 lines e4a630833a73
- 1mo ago First seen · 74 lines · 36 tokens per session scan A 203071a361f6
pywikibot-update is a skill published in the GitHub repository re0wiki/wiki-bot (5 stars, last pushed 3d ago), licensed MIT. It adds 36 tokens to every session and 2,349 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-22.
pywikibot-update compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| pywikibot-updatere0wiki/wiki-bot | Skill | 5 | 3d ago | MIT | A | 36 | Claude Code, Codex |
| project-graveyardShubhamsaboo/awesome-llm-apps | Skill | 144k | yesterday | Apache-2.0 | A | 127 | Claude Code, Codex |
| mem0-test-integrationmem0ai/mem0 | Skill | 68k | 2d ago | Apache-2.0 | A | 207 | Claude Code, Codex |
| marimo-pairmarimo-team/marimo | Skill | 23k | yesterday | Apache-2.0 | A | 57 | Claude Code, Codex |
| create-releasecocoindex-io/cocoindex | Skill | 12k | yesterday | Apache-2.0 | A | 155 | Claude Code, Codex |
| cli-releaseComposioHQ/composio | Skill | 31k | yesterday | MIT | A | 95 | Claude Code, Codex |
| config-loading-precedencexberg-io/xberg | Skill | 9.5k | yesterday | MIT | A | 18 | Claude Code |