Trader Memory Core
tradermonty/claude-trading-skills
Track investment theses across their lifecycle — from screening idea to closed position with postmortem.
Update OWID's GWIS weekly wildfires data (climate//weeklywildfires) on its own, outside the monthly climate batch.
$ npx skills add owid/etl --skill update-wildfires-data -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install owid/etl update-wildfires-data --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/update-wildfires-data .claude/skills/update-wildfires-data && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .claude/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-dataType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add owid/etl --skill update-wildfires-data -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install owid/etl update-wildfires-data --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/update-wildfires-data .agents/skills/update-wildfires-data && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .agents/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add owid/etl --skill update-wildfires-data -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install owid/etl update-wildfires-data --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/update-wildfires-data .cursor/skills/update-wildfires-data && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .cursor/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/owid/etl.git --path .claude/skills/update-wildfires-data--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add owid/etl --skill update-wildfires-data -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install owid/etl update-wildfires-data --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/update-wildfires-data .gemini/skills/update-wildfires-data && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .gemini/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install owid/etl update-wildfires-dataInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add owid/etl --skill update-wildfires-data -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/update-wildfires-data .github/skills/update-wildfires-data && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .github/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add owid/etl --skill update-wildfires-data -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install owid/etl update-wildfires-data --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owid/etl.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/update-wildfires-data .opencode/skills/update-wildfires-data && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "update-wildfires-data" agent skill from https://github.com/owid/etl/tree/master/.claude/skills/update-wildfires-data into .opencode/skills/update-wildfires-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-wildfires-data", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
update-wildfires-dataUpdate OWID's GWIS weekly wildfires data (climate//weeklywildfires) on its own, outside the monthly climate batch.
Update Wildfires Data is an agent skill from owid/etl. Update OWID's GWIS weekly wildfires data (climate//weeklywildfires) on its own, outside the monthly climate batch. A start-to-finish runbook covering the version bump, the snapshot, the checks, the chart remap on staging, and archiving. Also explains the source's weekly grid and why its most recent point is always an undercount. Use when the user wants to refresh wildfires data, run the weekly fire-season update, or asks why our wildfire numbers lag or keep being revised.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Runbooks and postmortems and Physical and earth sciences. The repository describes itself as: A compute graph for loading and transforming OWID's data. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit bf5dc8e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
ourworldindata.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Update Wildfires Data loads about 3.2k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 1,507 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from owid/etl at commit bf5dc8e, republished under its MIT licence (© owid). 1,507 words, ~3,199 tokens.
.claude/skills/update-wildfires-data/SKILL.md (or your agent's skills folder).climate/<version>/weekly_wildfires is the one climate dataset updated on its own schedule:
weekly from May to the end of September, when most of the world is in fire season, and with
the monthly climate batch the rest of the year. The reminder that triggers it is
owid-issues/.github/workflows/update-climate-wildfires.yml.
This is a full runbook, safe to follow without prior experience of this dataset. Run the steps in order. If a check fails, stop and ask rather than working around it: every check here exists because the failure it catches is invisible in the charts.
Related: /update-climate-data for the monthly batch of all climate
datasets, /update-dataset for the generic update flow.
| Step | Path |
|---|---|
| snapshot | climate/<version>/weekly_wildfires.csv (EFFIS API, ~24k requests, ~6 min) |
| meadow | climate/<version>/weekly_wildfires |
| garden | climate/<version>/weekly_wildfires (+ regions, + faostat_rl for land area) |
| grapher | weekly_wildfires, wildfires_by_year, wildfires_by_week, wildfires_by_week_average |
Four grapher datasets, feeding 14 charts and 2 narrative charts. wildfires_by_week_average
reads wildfires_by_week rather than the garden table, so it has to run after it.
Throughout, <old> is the current version folder (e.g. 2026-07-27) and <new> is today's date.
.venv/bin/etl pr "📊 Update weekly wildfires data" data.venv/bin/etl update snapshot://climate/<old>/weekly_wildfires.csv --include-usagesThis copies the step files into <new> folders and appends new entries to the end of
dag/climate.yml, leaving the old ones in place. One manual fix is needed:
Keep the old version (its dag entries, step files and snapshot folder) until the review is done.
It is removed in step 9. The old snapshot is
needed anyway: the snapshot script compares row counts against the most recent earlier version,
so step 3 dies with .dvc file is missing 'outs' field. Have you run the snapshot? if it is gone.
.venv/bin/etls climate/<new>/weekly_wildfiresAround 6 minutes (sometimes over 10), and it prints no progress until it finishes.
.venv/bin/etlr climate/<new>Runs meadow, garden and all four grapher steps (plus any stale upstream deps). The garden step's asserts run here; if one fires, see Checks below.
Run the three checks in Checks. Do not skip the per-country coverage one: it is the only thing standing between a partial fetch and understated regional aggregates.
git add dag/climate.yml etl/steps/data/{meadow,garden,grapher}/climate/<new> snapshots/climate/<new>
git commit -m "📊 Update weekly wildfires data to <new>" # the pre-commit hook runs make check
git push -u origin <branch>The version bump mints new variable IDs. Until they are mapped, every wildfire chart still points at the old ones, so the site keeps showing the old data and Chart Diff shows nothing at all. An empty Chart Diff after a wildfires update almost always means this step was skipped, not that nothing changed.
First wait for the staging server to rebuild and upsert the new datasets (roughly five minutes after the push). Then find the dataset IDs:
from etl.config import OWIDEnv
env = OWIDEnv.from_staging("<branch>")
print(env.read_sql(
"SELECT id, catalogPath, updatedAt FROM datasets WHERE catalogPath LIKE %(p)s ORDER BY catalogPath",
params={"p": "climate/%wildfires%"},
).to_string())Two things that will trip you up here: datasets.catalogPath has no grapher/ prefix
(climate/2026-08-01/weekly_wildfires), and read_sql uses pymysql's %(name)s placeholders,
not :name. If the four <new> rows are missing, staging has not finished; wait rather than
proceeding.
Then match each old dataset to its new counterpart and apply. Four pairs, matching short names
in the same order (weekly_wildfires, wildfires_by_year, wildfires_by_week,
wildfires_by_week_average):
STAGING=1 .venv/bin/etl indicator-upgrade match -old <old_id> -new <new_id> --perfect-match-only
# ... once per pair, then:
STAGING=1 .venv/bin/etl indicator-upgrade upgrade --dry-run
STAGING=1 .venv/bin/etl indicator-upgrade upgradeExpected output: names are identical across versions, so every old indicator gets a perfect match (68 mappings in total for the 2026-08-01 run, across 14 charts and 2 narrative charts). Two normal-looking warnings that are not problems:
match only considers old variables that at least
one chart uses, so new indicators nothing charts yet are correctly left alone.etl indicator-upgrade auto reports "No dataset migrations detected" for this dataset and does
nothing. Use the explicit per-pair match above. To reverse a bad remap:
STAGING=1 .venv/bin/etl indicator-upgrade undo.
Confirm it took, by checking that no chart is left on the old datasets:
print(env.read_sql("""
SELECT d.catalogPath AS dataset, COUNT(DISTINCT cd.chartId) AS n_charts
FROM datasets d JOIN variables v ON v.datasetId = d.id
LEFT JOIN chart_dimensions cd ON cd.variableId = v.id
WHERE d.catalogPath LIKE %(p)s GROUP BY d.catalogPath ORDER BY d.catalogPath
""", params={"p": "climate/%wildfires%"}).to_string())The <old> rows must all read 0 and the <new> rows must carry the charts (2 / 7 / 5 / 2 for
weekly_wildfires / by_year / by_week / by_week_average).
curl -s "http://staging-site-<branch>/grapher/weekly-area-burnt-by-wildfires.csv" | awk -F, 'NR>1{print $3}' | sort -u | tail -1The last value is an ISO week label (e.g. 2026-W39). On staging it should be the new bin's week,
and on production (https://ourworldindata.org/grapher/...) still the previous one. Then open
Chart Diff, enable "Show all charts", and read it with the next section in mind.
No separate announcement. Wildfire refreshes ride on the monthly climate announcement; one post per weekly refresh would flood #data-updates-comms.
Once the review is done, remove the <old> version and archive it:
# Delete the six <old> wildfires entries from dag/climate.yml, then:
git rm -r etl/steps/data/{meadow,garden,grapher}/climate/<old> snapshots/climate/<old>
git add dag/climate.yml && git commit -m "🔨 Remove the superseded <old> wildfires steps"
.venv/bin/etl archive-dag # reads COMMITTED history, so commit first
git add dag/archive/climate.yml && git commit -m "🔨 Archive the superseded <old> wildfires steps"
git pusharchive-dag should add exactly the six <old> wildfires steps. If it sweeps in unrelated steps
somebody else left un-archived, git checkout those lines to keep the PR scoped, and never
hand-edit the archive file. Then merge.
Two things always change, and only one of them is new data:
GWIS reports 7-day bins anchored at 1 January, labelled by their last day: bin N ends on day 7N of the year. Consequences:
mddate is authoritative; the API's week field is not — it is offset by one from the ISO
week (its week 30 carries mddate 20260729, which falls in ISO week 31).A closed bin keeps being revised upwards for one to two weeks as burnt-area detections are reprocessed. Measured on the 2026 season:
| Bin read | Age at read | Shortfall vs value at a later read |
|---|---|---|
| closing 07-08, read 07-10 | 2 days | −5.2% |
| closing 07-22, read 07-27 | 5 days | −8.6% |
| closing 08-05, read 08-14 | 9 days | −9.2% |
| closing 07-29, read 08-07 | 16 days | −2.8% |
| closing 07-22, read 08-07 | 23 days | −2.5% |
| closing 07-15 and earlier, read 08-14 | ≥30 days | 0.0% (identical across reads) |
Don't read the older rows as a settled floor: they are lower bounds against the next read, not against a final value, and each was still moving. Three-plus weeks is the first age at which a bin has been observed not to move at all.
So the newest point on every wildfire chart is an undercount of roughly 5-10% until a later update fills it in. Never quote the latest week as a finished number in an announcement, a footnote, or a reply to a journalist: this is precisely the mechanism behind leading-edge readings of a record-quiet fire season.
Waiting longer trades staleness for accuracy but never removes the effect. A closed bin is in the
API within 2 days (observed on the 2026-06-19 and 2026-07-10 runs); there is no
Last-Modified header and no timestamp in the payload, so the exact publication moment is
unknown. Hence the reminder runs 2 days after the bin closes, and no day of the week yields a
settled latest point.
fetch_with_retry returns {} on a 404, fetch_fires/fetch_emissions turn that into None,
and that country-year vanishes from the snapshot without an error. The script's only guard is a
total row count against the previous snapshot, which grows every week regardless, so it does not
catch a handful of countries going missing.
import pandas as pd
df = pd.read_csv("data/snapshots/climate/<new>/weekly_wildfires.csv",
usecols=["country", "year", "month_day", "indicator", "value"])
cur = df[(df["year"] == df["year"].max()) & df["value"].notna()]
print(cur.groupby("country")["month_day"].max().value_counts()) # expect ONE row
print(df["country"].nunique()) # expect 252Every country must end on the same bin. One country ending earlier means its fetch failed, and every regional aggregate containing it is understated.
The last non-null bin must be newer than in the previous version. If it has not moved, there is nothing to ship: the fetch returned the same data, which during fire season means a problem at the source rather than a quiet week.
The garden step already asserts ≥251 countries, a complete country × date grid, no partially
reported date, Europe − Europe (excl. Russia) = Russia, and World still equal to the sum of
the six continents. If one fires, check the source before touching the assert.
Russia is around 90% of "Europe"'s burnt area every year, so the continental total mostly tracks
the Russian fire season and can move opposite to the rest of the continent.
Europe (excl. Russia) exists so readers can tell them apart. FAOSTAT publishes no land area for
that aggregate, so its denominator is derived as Europe minus Russia; without that, every
share_* indicator for it comes out null.
© owid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/update-wildfires-data of owid/etl.
Open the folder on GitHubat commit bf5dc8e
Update Wildfires Data next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Update Wildfires Data this skillowid/etl | 158 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Trader Memory Coretradermonty/claude-trading-skills | 3k | 3 repos | ~4.3k | Automated safety check: Pass | MIT | |
| OpenRig Upgrade Proceduremvschwarz/openrig | 5.9k | 1 repos | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Author Migrationnrwl/nx | 29k | — | ~12k | Automated safety check: Notes | MIT | |
| Write Notes Like Deepseekczm15053/write-notes-like-deepseek | 484 | — | ~2k | Automated safety check: Pass | None | |
| GreptimeDB Release RunbookGreptimeTeam/greptimedb | 6.7k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
tradermonty/claude-trading-skills
Track investment theses across their lifecycle — from screening idea to closed position with postmortem.
mvschwarz/openrig
Walks an agent through upgrading the OpenRig CLI and daemon one observed step at a time, keeping live seats alive and reconciling managed plugin files.
nrwl/nx
Author or scope a first-party Nx migration. An agent skill from nrwl/nx.
czm15053/write-notes-like-deepseek
A skill your agent uses when a change is non-trivial by DSH standards (behavior, architecture, cross-file contracts, process/tooling, testing strategy, or on-disk/wire/config formats), when choosing…
GreptimeTeam/greptimedb
Runbook for publishing a GreptimeDB version: pick the release branch, verify the Cargo version, then tag, create the GitHub release and open the docs note PR.
henryqin1997/statem
A skill your agent uses when a long coding or research task should be managed with statem state-machine runbooks, including creating specs, starting or resuming runs, checking current state…
owid/etl
Find every OWID surface that references a chart, indicator, MDIM, or explorer — articles (links vs embeds), explorers, narrative charts, data insights, static viz, key-chart slots, MDIM views.
owid/etl
Add a scatter view (with GDP per capita on x) to existing OWID charts via the admin API, mirroring the admin UI's "Add scatter type" defaults, then retire the old standalone "X vs.
owid/etl
Add new survey question codes (e.g. An agent skill from owid/etl.
owid/etl
Build or refresh an OWID static visualization end to end — resolve what data it needs from an old static viz image, an indicator, or a grapher chart; check both the ETL catalog and the producer's…
owid/etl
Propose redirects from (soon-to-sunset) grapher charts to the matching views of published MDIMs.
owid/etl
Take (soon-to-sunset) OWID explorers to redirected MDIMs, end to end.
Categories
Update OWID's GWIS weekly wildfires data (climate//weeklywildfires) on its own, outside the monthly climate batch. Update Wildfires Data is an agent skill from owid/etl. Update OWID's GWIS weekly wildfires data (climate//weeklywildfires) on its own, outside the monthly climate batch.
Update Wildfires Data fits situations like: the user wants to refresh wildfires data; run the weekly fire-season update; asks why our wildfire numbers lag; keep being revised.
Run `npx skills add owid/etl --skill update-wildfires-data -a claude-code`. Or copy the skill folder (.claude/skills/update-wildfires-data in owid/etl) into .claude/skills/update-wildfires-data in your project. Claude Code loads it when a task matches its description.
Run `npx skills add owid/etl --skill update-wildfires-data -a codex`. Or copy the skill folder (.claude/skills/update-wildfires-data in owid/etl) into .agents/skills/update-wildfires-data in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add owid/etl --skill update-wildfires-data -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-wildfires-data, .gemini/skills/update-wildfires-data, .github/skills/update-wildfires-data and .opencode/skills/update-wildfires-data in your project.
Going by SKILL.md and its folder, Update Wildfires Data needs the command-line tools its instructions call (git and curl). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: ourworldindata.org; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Update Wildfires Data is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Update Wildfires Data: Trader Memory Core (tradermonty/claude-trading-skills, 3k stars), OpenRig Upgrade Procedure (mvschwarz/openrig, 5.9k stars), Author Migration (nrwl/nx, 29k stars) and Write Notes Like Deepseek (czm15053/write-notes-like-deepseek, 484 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
owid (a GitHub organization) maintains it in owid/etl, which has 158 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 8, 2026.
Source: owid/etl on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.