The progressive-disclosure checklist for scientific figures: correctness and legibility, with optional matplotlib helpers behind it. The rules are keyed to the role an element plays, not to a house look: frame, font and palette stay parameters you choose. The checklist says nothing about whether the data you hand it is scientifically true.
A Skill is a directory of files, so installing one is copying that directory
somewhere an agent looks. With Node 18+ and git on PATH (npm resolves a
github: spec through it), and nothing cloned:
npx github:PKU-YuanGroup/OpenAI4S install figure-style --target claude
--target claude writes to ~/.claude/skills, claude-project to
./.claude/skills, openai4s to <data_dir>/user-skills, and --dir <path>
to anywhere you name. The resolved absolute path is printed before anything is
written there, and --dry-run stops at that plan. A reinstall refuses to
overwrite a copy you have edited or one it did not install, and uninstall
removes only the files it wrote. For a recipe included in the npm release,
npx @pku-yuangroup/openai4s-skills install figure-style --target claude
installs the published copy. The npm catalog can differ from this repository.
Without Node, take the directory itself — and turn it into a .zip if an upload
field wants one. The tarball is the whole repository (over 100 MB), and the pipe
is a POSIX shell recipe (macOS, Linux, WSL) that extracts only this directory:
curl -L https://codeload.github.com/PKU-YuanGroup/OpenAI4S/tar.gz/refs/heads/main \
| tar -xz --strip-components=2 OpenAI4S-main/skills/figure-style
python3 -m zipfile -c figure-style.zip figure-style
The click-through form of that same download is the
repository zip,
which is also the route to take on Windows: extract it and copy
skills/figure-style/ out
(unzip main.zip 'OpenAI4S-main/skills/figure-style/*' unpacks only that
directory). If you already run OpenAI4S there is nothing to install — the wheel
ships every bundled Skill, and a bundled Skill takes precedence over a
same-named copy in <data_dir>/user-skills. Targets, provenance, and what the
installer refuses to do:
tools/skills-installer/.
| File | Responsibility |
|---|---|
SKILL.md |
The rules themselves: data fidelity and self-consistency, claim-titles tested against every row, label economy (a floor as well as a ceiling), axes and scales, colour, typography, chart family by data shape, layout and narrative, the anti-pattern list, and the render-then-verify QA loop. Sections 1–3, 8 and 9 are correctness and bind everywhere; 4–7 are guidance a deliberate alternative can override — except for the rules inside them that state a factual or perceptual invariant (centring a diverging map on the semantic zero, CVD-safe colour, leader lines that land on the point they name), which bind like the rest. |
kernel.py |
Optional sidecar. apply_figure_style sets the rcParams once before you plot (role-mapped font-size ladder, outward ticks, frameless legends, 300-dpi save, embedded fonts); set_frame and panel_letter handle the frame and the panel letter; focal_palette, bar_with_points, strip_with_median and end_of_line_labels implement the encodings the rules keep asking for, with goodness_arrow and two_tier_label for the annotations; panel_crops returns each panel's crop box in the saved PNG so you can look at what you actually rendered. |
Matplotlib is optional runtime state and has to be installed in whichever kernel you select. A figure that passes the geometric collision check has only been checked geometrically: it still needs the perceptual pass and a domain reader.