Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/wenhaochai/claude-plugins/plotnpx skills add wenhaochai/claude-plugins --skill plotgit clone --depth 1 https://github.com/wenhaochai/claude-pluginsWhat 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 | $0.00181 | $0.02718 |
| Opus 5 | $0.00090 | $0.01359 |
| Sonnet 5 | $0.00036 | $0.00544 |
| Haiku 4.5 | $0.00018 | $0.00272 |
Grade A, and why
plot 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 2d 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 — 102 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Plot
Drop-in matplotlib templates for publication-quality figures. Each template is one .py file producing one figure, with no save logic — copy, swap data, add your savefig.
Principles
The complete style contract. Every figure — template-derived or written from scratch — follows all of these; style.py encodes most of them as rc defaults and helpers.
- Frame: announcement-clean. L-shaped spines only (top/right hidden), near-black ink
#1a1a1afor spines/ticks/labels, no grid, outward ticks. All rc defaults — never restate them in a script;clean_axes(ax)re-asserts the frame only on twin/secondary axes the rc cannot reach. - Titles: left-aligned, bold, no letter prefixes. Plain
ax.set_title(text)is enough — the rc makes it left-aligned bold ink, and titles are the ONLY bold text in a figure. Never prefix titles with(a)/(b)/(c)— reference panels in captions as Left/Middle/Right or Top/Bottom. Multi-panel suptitles:fig.suptitle(..., x=0.01, ha='left', fontweight='bold', color=INK). - Legend: a header row above the axes, never inside them.
header_legend(ax, entries)per axes, orfig_header_legend(fig, entries)for one figure-level row over a multi-panel grid (needsconstrained_layout). Entries:(label, color)for white-edged dots,(label, color, '-')solid-line proxy,(label, color, '--')reference-dash proxy, or any marker char. Never hand-roll proxy handles; keep labels short enough that the row fits its panel's width. - Spacing: measured, not guessed. End every figure with
finalize_headers(fig)— after allset_title/header_legendcalls, beforesavefig. It measures the real legend heights and makes title, legend, and plot equidistant (one 6pt gap on each side of the legend row), level across panels, at any font size.level_all=Falsewhen legend-less panels sit in their own row under a figure-level header. After ANY header or font change, re-render and view the output — never ship a spacing change unchecked. - Palette: Google brand only.
G_BLUE/G_RED/G_YELLOW/G_GREEN/G_PURPLE/G_GREYsoftened through the tier system (brand → medium → paper (default) → soft → mute). Paper series colors default to the medium tier. - Hue count follows series count. At most 3 colored series → ONE brand hue, lightness steps via
hue_ramp(base, n)(index 0 lightest) ortwotone(base). More than 3 series → distinct Google hues at the medium tier. Neutrals never count as a hue:HUMAN_DARK/HUMAN_SOFTfor human/reference cohorts, greys for annotations. Legend-less encodings (bar charts read off the axis) may use longer ramps. - References: one grey, one dash. Every reference/baseline line is
REF_GREY+REF_DASH. A second dashed series in the same panel is distinguished by color and label, reusingREF_DASHrather than inventing a new pattern. - Markers and bands. Emphasized markers get
markeredgecolor='white', width 0.6–0.8. Confidence bands are the same hue as their line,alpha0.12–0.18,linewidth=0. - Fonts: Palatino with real bold, one size band. Palatino body + STIX math (matches LaTeX
mathpazo);apply_style()registers TeX Gyre Pagella from TeX Live because macOS Palatino.ttc exposes no bold face to matplotlib. Sizes: title 12.5 bold / axis label 14 / tick 13 (rc), header legend rows 9.5, annotations ≥ 8.5. Dense multi-panel grids may step down (title ~10, tick ~8), and every figure in one document stays inside this one band. - Output: PDF is the artifact. Save both
out.pdfand adpi=200PNG preview; papers include only the PDF.matplotlib.use('Agg')before pyplot in scripts; anchor outputs onHERE = Path(__file__).resolve().parent. - Restyle never touches data. A styling pass changes colors, legends, fonts, and spacing — not data loading, fits, tick semantics, or panel content. After restyling a figure with computed values, verify the numbers are identical to the pre-restyle run.
What ships with it
26 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- 00_bar_vertical.py 1.2 KB runs code
- 01_bar_horizontal.py 1.3 KB runs code
- 02_bar_grouped_twotone.py 2.1 KB runs code
- 03_bar_highlight_twotone.py 2.1 KB runs code
- 04_bar_stacked_segments.py 1.9 KB runs code
- 05_bar_panel_grid.py 2.8 KB runs code
- 10_box_horizontal.py 1.7 KB runs code
- 20_line_multi.py 1.7 KB runs code
- 21_line_broken_y.py 2.9 KB runs code
- 22_line_logx.py 842 B runs code
- 23_line_loglog_compare.py 1.7 KB runs code
- 24_line_twotone.py 1.4 KB runs code
- 25_scatter_twotone.py 2.9 KB runs code
- 26_line_frontier_twotone.py 1.5 KB runs code
- 27_line_band_scatter.py 1.7 KB runs code
- 28_line_dual_axis.py 1.8 KB runs code
- 29_line_event_annotations.py 2.0 KB runs code
- 30_scatter_powerlaw.py 1.2 KB runs code
- 31_scatter_isoflops.py 2.0 KB runs code
- 32_scatter_regression.py 1.5 KB runs code
- 33_errorbar_zone.py 1.5 KB runs code
- 40_area_share_stack.py 1.9 KB runs code
- 41_sankey_alluvial.py 5.0 KB runs code
- 42_dag_lineage.py 3.2 KB runs code
- 43_taxonomy_table.py 3.3 KB runs code
- style.py 12 KB runs code
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.
- 2d ago First seen · 102 lines · 181 tokens per session scan A 8043514b8e84
plot is a skill published in the GitHub repository wenhaochai/claude-plugins (16 stars, last pushed 2d ago), licensed MIT. It adds 181 tokens to every session and 2,718 once invoked, about $0.0009 per session on Opus 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-08-30.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
chat-pet-sprite-creation
Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…
babysit-pr
Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep…
imagegen
Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output…
agent-host-chat-contributions
Build and review cross-cutting agent-host chat behavior through lifecycle contributions. Use when adding turn lifecycle side effects, prompt or context injection, restored-history transformation, protocol-action observation, or when reviewing changes that add code to AgentSideEffects or AgentService.