About docs-watch
A skill for checking whether mirrored Celo and MiniPay reference facts differ from their live sources. It classifies changes and, when a run is blocked or finds drift, prepares one reviewable pull request for human review.
Key features
- 01Checks seven documented source groups
- 02Compares live facts with snapshots
- 03Classifies updates and review flags
- 04Groups findings into one pull request
- 05Updates references only for clear changes
Use cases
- 01Refreshing Celo reference data
- 02Reviewing MiniPay documentation changes
- 03Flagging sensitive contract or network changes
- 04Recording runs blocked by unavailable sources
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ celo-org/ celopedia-skills --skill docs-watchAfter installing, type/docs-watchin Claude Code to confirm it loaded.
Bundled filessnapshot.md
Details
From the project READMEcelopedia-skills docs upstream watch
Goal: detect when the facts mirrored into skills/celopedia-skill/references/
have drifted from their live sources, and surface every finding — mechanical
fixes and ambiguous/high-stakes flags alike — in one reviewable pull
request per run, opened against celo-org/celopedia-skills:main (the
canonical upstream repo, not a fork), so a human can approve, edit, or
close it. This builds on the process already documented in this repo's
README.md ("Contributing" section: check docs.celo.org → update the file
→ bump version → open a PR) but replaces its own ad hoc reports/issues with
a single PR as the one place everything gets reviewed.
Sources checked
| # | Source | Fetch command (see live-data-sources.md for more) | Reference file |
|---|---|---|---|
| 1 | Docs sitemap | curl -s https://docs.celo.org/llms.txt | docs-map.md |
| 2 | Contract addresses | https://docs.celo.org/tooling/contracts/core-contracts + token-contracts + l1-contracts + uniswap-contracts (WebFetch) | contracts.md |
| 3 | Network info | https://docs.celo.org/build-on-celo/network-overview (WebFetch) | network-info.md |
| 4 | Ecosystem / TVL | curl -s https://api.llama.fi/protocols | jq '[.[] | select(.chains[]? == "Celo")]' | ecosystem.md |
| 5 | Grant programs | curl -s https://www.celopg.eco/programs (WebFetch) | grants-funding.md |
| 6 | MiniPay docs | https://docs.minipay.xyz/ page tree + getting-started/submit-your-miniapp.html + getting-started/best-practices.html + technical-references/deeplinks.html (WebFetch) | minipay-docs-map.md, minipay-requirements.md, minipay-common-mistakes.md |
| 7 | wFIAT access (Ripio tokens on Celo) | the commands in wfiat-access.md → Re-verify (x402 /supported + /api/config, Ripio Ramp /api/countries, Textile RFQ levels, GeckoTerminal pools, LI.FI quotes, Aave getReservesList, CapyFi eth_getCode) | wfiat-access.md, plus the x402 token rows in ai-agents.md and SKILL.md |
Source 6 — MiniPay: classify carefully
MiniPay's docs mix structure (which pages and deeplinks exist) with policy (what is required to get listed). They do not get the same treatment:
reference update— a docs page added / removed / renamed, or a new or changed deeplink. These are structural facts; editminipay-docs-map.mddirectly.needs review— any change to a listing requirement: supported or mandatory tokens, the SLA, the dependency-security policy, the submission form URL or fields, whitelisting rules, the minimum viewport, or the performance bar. These are policy, not data, and they drive what the skill tells builders to build. Never auto-editminipay-requirements.mdorminipay-common-mistakes.mdfrom a docs diff — describe what changed versus what's cached and let a human decide.- Also check that the URLs cited in
minipay-requirements.mdandminipay-docs-map.mdstill resolve (curl -o /dev/null -w "%{http_code}"). A dead URL is areference updateonly if the replacement is unambiguous; otherwise flag it.
Source 7 — wFIAT access: track structure, not prices
wfiat-access.md mixes structural facts (which route exists for which
token) with liquidity snapshots (pool TVL, Textile max size) that move
hourly. Only structure drives edits:
reference update— a route appears or disappears for a token: a Textile pair goes from zero to non-zero buy depth (or back), LI.FI starts or stops returning a same-chain route into a token, a new Celo DEX pool for a token shows up, the Ripio Ramp adds/removes a country or a Celo token, the x402/supportedlist adds/removes an asset. Edit the per-token table and the matching path section. When the x402 list changes, updateai-agents.md(Enabled tokens table and Token-support line) and the x402 line inSKILL.mdin the same run so the three never disagree.- Liquidity numbers: update a figure only when it moves by more than 2×
or crosses zero, and restamp
Last verified. Smaller moves areno action— they would make every run a PR. needs review— anything that changes money-path behaviour for an integrator: an x402 asset'sassetTransferMethodoreip2612GasSponsoringflag changes, a wFIAT token address changes, the Ripio BridgeDeposit address (0x465e642387d3d73a57CDc1368fFA53A800bA5D47) stops returning code, or a yield venue for wFIAT appears on Celo (Aave reserve list gains a wFIAT, or CapyFi's Comptroller address gains code on Celo). Never auto-edit these.- A source that answers with an error (Textile, ramp.ripio.com, li.quest are third-party APIs) counts as blocked for that source, same as sources 5–6.
Procedure
-
Load the snapshot at
.claude/skills/docs-watch/snapshot.md— the facts we currently rely on, with the date each was last verified. -
Fetch each source above and extract the same facts the corresponding reference file documents (page list, address table, chain params, protocol list, program status table).
-
Diff each source against both the snapshot and the current content of its reference file.
-
Classify every delta:
no action— cosmetic/unrelated (e.g. a docs page's prose changed but not its existence or URL). Not mentioned in the PR.reference update— mechanical, unambiguous fact change: a sitemap page added/removed/renamed, a DeFi protocol added/removed from the Celo chain list, a grant program's Live/Past status flipped, a new fee-currency token added. Edit the reference file directly with the corrected fact, on the run's branch (see step 5) — do not commit or PR per-item.needs review— anything ambiguous or high-stakes (a contract address that doesn't match, a chain ID / fee-currency address change, anything touchingcontracts.mdcore protocol addresses ornetwork-info.mdchain IDs). Do not edit the file — never guess a fix for these. Instead, write a clearly-marked entry describing exactly what was observed vs. what's cached, for the "Needs review" section of the PR body (step 5).
-
Every run ends one of three ways — always distinguishable from each other by whether/how a PR shows up, since this skill never writes report files:
-
Drift found (any
reference updateand/orneeds reviewdelta): open one pull request for the whole run.- Create a branch off
main(e.g.docs-watch/<YYYY-MM-DD>). - Apply all
reference updateedits on that branch, and bumpversioninskills/celopedia-skill/SKILL.md(patch bump for a pure data refresh) if any reference file changed. - Update the snapshot (step 6) on the same branch.
- Push the branch directly to
celo-org/celopedia-skills(this checkout has push access — no fork needed) and open the PR:gh pr create --repo celo-org/celopedia-skills --base main --head <branch> --title "docs-watch: weekly refresh — <date>" --body "..." - The PR body is the report — no separate report file. Structure it as: a one-line "what changed" summary at the top, one section per source with its deltas and classification, a clearly separated Needs review section for anything requiring human judgment (the reviewer approves, pushes edits, or closes the PR), and the mechanical edits already applied in the diff.
- One PR covers the whole run — don't split
reference updateandneeds reviewfindings into separate PRs.
- Create a branch off
-
Blocked (one or more sources unreachable — network error, 403, timeout, etc. — so deltas couldn't be assessed for those sources): open a small pull request too, so a blocked run is never silently indistinguishable from a clean one.
- Branch off
main(e.g.docs-watch/blocked-<YYYY-MM-DD>), and only edit the "Last attempt" line insnapshot.md(step 6) — no reference files, no version bump, since nothing was actually verified. - Push and open the PR with title
docs-watch: blocked — <date>and a body listing exactly which sources failed and how (status code / error), plus which sources (if any) did succeed this run. - This PR is informational, not something to merge for content — the reviewer's real fix is the underlying blocker (e.g. a network egress allow-list). Merging just records the attempt; closing without merging is equally fine.
- Branch off
-
Clean (every source reachable, every delta
no action): do not open a PR or commit anything — stay completely silent. End with a short summary in the final message instead.
-
-
Update the snapshot, on whichever branch step 5 used:
- On a drift-found or clean run where sources were reachable:
update the per-source facts with newly-verified values and set
Last verified: <date>for each source checked. - On a blocked run: leave the per-source facts untouched (they
weren't actually re-verified), and only update the top-of-file
Last attempt: <date> — BLOCKED (<hosts>)line. - Keep the file small — only the facts checked above, not a full copy of the reference files.
- On a drift-found or clean run where sources were reachable:
update the per-source facts with newly-verified values and set
Notes
live-data-sources.mdalready documents the priority order (live API > official docs > hardcoded references > ecosystem directory) — this skill exists to keep the "hardcoded references" tier honest, not to replace live lookups elsewhere.- Never guess a contract address or chain parameter to "fix" a
needs reviewitem — that tier exists specifically so factual corrections to security-sensitive data always get a human's eyes first.