benchmark-checklist
Skill1 starsChanged 9 days agoMITView on GitHub
Vet a runtime measurement for a query, dataframe transform, pipeline, or notebook before you report or act on it: limiter, tuning, data volume, warm vs cold cache, errors, repeatability, relevance, and whether the work really ran. Use when you time a run or report a speedup or regression.
42 other projects use a version of this, 35 of them edited.
Adopted by
Most recently taken up by
- Yeachan-Heo/oh-my-claude-sisyphustheir own version, first seen Nov 8, 2026
- Loner1024/skillsedited, first seen Nov 8, 2026
- maxatwork/skillsedited, first seen Nov 8, 2026
- jimyag/dotfilestheir own version, first seen Nov 8, 2026
- caidanw/skillsedited, first seen Nov 8, 2026
- painhardcore/pstackedited, first seen Nov 8, 2026
Used with
Projects with it also use ketchup-video, poteto-help and 2 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
tristanphvnSkillketchup-video
Catch the user up like /keel:ketchup, with a short silent video of slides for what happened and the waiting calls as text under it. Use for /keel:ketchup-video.
Also in 14 projects that use this
ianclearySkillpoteto-help
Guides users through pstack setup, /poteto-mode, and picking the skill, playbook, or principle for a task. Type /poteto-help with a question.
Also in 14 projects that use this
instructureSkillketchup
Rebuild context after /clear by analyzing uncommitted changes across Canvas LMS and all plugin repositories
Also in 25 projects that use this
eryzerzSkillmake-bot-ui
Use when building a custom UI (page, dashboard, buttons) that should wake a Grok Bot over a webhook, when the user must provide a webhook sender key, or when exposing that UI on Tailscale.
Also in 15 projects that use this
Other versions42 projects use a version of this.
Word for word · 0
None found.
Edited · 35
- backnotprop/pstack★ 3.8k61% same
- uzairansaruzi/p3-stack★ 12647% same
- dsebban/skills★ 7158% same
- TheOnlyFusionCube/potetos-for-everyone★ 2159% same
- creedants/pstack-t3★ 1859% same
- painhardcore/pstack★ 1861% same
- mariusflorescu/pstack-t3★ 1361% same
- caidanw/skills★ 1158% same
- krishhgg/t3term★ 1115% same
- adjohn/pstack★ 961% same
25 more not listed
Wrote their own version · 7
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
- jtaroreh/agystack★ 128same name
- jimyag/dotfiles★ 11same name
- requie/endostack★ 4same name
- wilbeibi/wilbeibi-skills★ 2same name
- woodbeary/later-dog★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository50 other files it gives its agents.
- analyst-modeSkill
- architectSkill
- arenaSkill
- astack-helpSkill
- blast-radiusSkill
- catch-upSkill
- correctSkill
- create-formal-verification-skillSkill
- figure-it-outSkill
- howSkill
- interrogateSkill
- in-your-own-wordsSkill
- maintain-formal-verification-skillSkill
- no-commentsSkill
- plain-wordsSkill
- principle-attack-the-premiseSkill
- principle-boundary-disciplineSkill
- principle-build-the-leverSkill
- principle-define-the-questionSkill
- principle-encode-lessons-in-structureSkill
- principle-experience-firstSkill
- principle-explain-the-numberSkill
- principle-fix-root-causesSkill
- principle-foundational-thinkingSkill
- principle-guard-the-context-windowSkill
- principle-laziness-protocolSkill
- principle-make-operations-idempotentSkill
- principle-minimize-reader-loadSkill
- principle-model-the-domainSkill
- principle-name-the-estimandSkill
- principle-never-block-on-the-humanSkill
- principle-prove-it-worksSkill
- principle-reproduce-from-clean-stateSkill
- principle-respect-the-grainSkill
- principle-sequence-verifiable-unitsSkill
- principle-simulate-the-methodSkill
- principle-subtract-before-you-addSkill
- principle-test-behavior-not-implementationSkill
- recallSkill
- reflectSkill
- retail-analyticsSkill
- sharpenSkill
- show-me-your-workSkill
- statechartSkill
- swarmSkill
- tddSkill
- teachSkill
- technical-writingSkill
- unslopSkill
- whySkill
The file
We split this skill into the rules it gives an agent
5 rules. 2 are common, 0 are distinctive, and 3 are very specific to this project.
2
Common
Most of the 40 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Write down the claim you expect to make, in the words you would ship ("the Parquet version of events_daily builds 3 times faster at 60 …
- Very specific: line 16
Read the timing script. Note what it times, counts, and ignores.
- Very specific: line 17
Check the load average with uptime and the core count with nproc.
- Common: line 34
Call the verdict inconclusive when you claim a difference but cannot name the limiter, when a side ran untuned, when the data size is not …
- Common: line 35
Keep a PR body to one primary number, per the opening-a-pr playbook of the analyst-mode skill.
“Common” is measured: kept by at least 6 in 10 of the 40 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Benchmark checklist
Use this when you produce a runtime number: a query or transform before and after, a notebook that got slower, a pipeline step's wall time, or a library or file-format choice (CSV, Parquet, eager vs lazy Polars). Answer each question with evidence from a run, not a guess about the code.
For a quick ballpark the user asked for, one run is enough. Still check questions 4 and 7, and say that it is one run. Skip the rest unless that run looks wrong. A choice between options is never a ballpark.
Before you run anything
- Write down the claim you expect to make, in the words you would ship ("the Parquet version of
events_dailybuilds 3 times faster at 60 million rows, warm cache"). The questions test that sentence. - Pin the data. Name the file, its row count, and its size on disk. Check that both sides read the same input.
- Read the timing script. Note what it times, counts, and ignores. A
time.perf_counter()aroundlf.collect()times the query. Aroundlf = pl.scan_parquet(...)it times almost nothing. - Check the load average with
uptimeand the core count withnproc. If the machine is busy, find out what is running. If you cannot stop it, interleave the sides so both see the same noise, and say so in the report. - Decide the cache state before you run. Warm means the file was just read. Cold means the OS page cache was dropped. Production usually runs warm for repeated jobs and cold for the first job of the day. Say which one you measured. Dropping caches needs root. Run
sync, thenecho 3 | sudo tee /proc/sys/vm/drop_caches, and do it only on a box you own.
The questions
- Why not double? Name the limiter. Profile in a run you do not report, because profilers slow the work down. On real data, the human runs the profiler from a run request and shares the summary or the flame graph image. For Python code,
py-spy record --subprocesses -o profile.svg -- uv run python script.py. Without--subprocesses, py-spy attaches to theuvwrapper and fails with "Failed to find python version from target process". Or call the venv interpreter directly (.venv/bin/python script.py) and say so. Either form samples the call stack without changing the code. For a Polars query,lf.explain()shows the plan that runs, so you can see whether a filter was pushed down into the scan. Check I/O wait (iostatorvmstat) and CPU per process (top). Watch the load generator too: if the reader saturates the disk first, you measured the disk. If a change did not move the number, the limiter explains why, so find it before you call the change useless. - Was it tuned? Run every side the way production runs it: release builds of compiled extensions, the same engine setting (
engine="streaming"or the default), the same file format and compression, the same partitioning, and the same versions pinned inuv.lock. If one side runs on defaults, you compared configurations, not implementations. A limiter that is a setting (a row-by-row Python loop, a missing index in the database,collect()inside a loop, a debug build) means that side is untuned. Tune it and measure again before you pick a winner. If you cannot tune it, do not pick a winner from that run. When the user is choosing what to adopt, narrowing the claim to the code as it ships today does not fix this, because they adopt the option, not today's settings. - Did it break limits? Do the arithmetic. Compare bytes per second with disk and memory bandwidth, rows per second times cost per row with your cores, and the time saved with the time the changed step took. Removing a step that takes 10 percent of the run can make the run at most about 11 percent faster. A result past a limit measured something other than the work, such as a cache, a skipped scan, or a bug.
- Did it error, and is the output right? Count failures, warnings, and dropped rows. Compare row counts and null counts for both sides, and compare a checksum or a grouped total. A faster query that returns fewer rows measured a filter bug, not a speedup. If the script does not count these, add the count.
- Does it reproduce? Run each side at least 5 times, alternating (A, B, A, B, and so on) so warmup, lazy initialization, caches, and drift favor neither. Report the median and range. Discard nothing silently. A gap smaller than the run-to-run variation is no measurable difference. When the call is close, use a rank-sum test (
scipy.stats.mannwhitneyu) or the harness's own statistics. - Does it matter? Next to any micro result, measure the end-to-end path a user waits on, with realistic data sizes and the same notebook or job the user runs, and report the micro result as a share of the whole. A step that takes 1 percent of a job can make the job at most 1 percent faster, however fast the step gets. Check that the time scales with data volume: run the same measurement at two sizes, such as 1 million and 10 million rows. A line that bends away from linear means the result will not hold at production size.
- Did it even happen? Confirm the work ran inside the timed region. A
LazyFramethat nobody callscollect()on does no work. Asink_*call withlazy=Truereturns a LazyFrame that does no work until you callcollect(). The defaultlazy=Falseruns the query and returns None, so a baresink_parquet(path)does run. A notebook cell that was not re-executed still shows an old output. Check that the rows were written, the bytes were read, and the code used the result. Lazy code and timeouts produce numbers for work that never happened.
Report
- Lead with the verdict: faster, slower, no measurable difference, or inconclusive.
- Give the number with its unit, the run count, the range, the cache state, the data size, and the limiter. For example, "p50 41 s to 33 s on
events(58 million rows, warm cache), median of 7 runs per side, range 32 to 35 s after, bound by CSV parsing on one core." - Call the verdict inconclusive when you claim a difference but cannot name the limiter, when a side ran untuned, when the data size is not stated, or when you could not check questions 4 and 7. Name the gap.
- Keep a PR body to one primary number, per the opening-a-pr playbook of the analyst-mode skill. Put the runs, range, and limiter evidence in a linked artifact or notes file.
Other perf material
- Vet the perf-issue playbook's baseline before the playbook plans from it, and every number after that.
- Vet the hillclimb playbook's harness before it is frozen. The frozen harness then prints error and row counts, so each keep-or-revert checks questions 4 and 7 for free.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

