benchmark
Skill2 starsChanged 4 months agoMITView on GitHub
Performance benchmarking skill — baseline and compare page load times, Core Web Vitals, bundle sizes, and API response times. Use when the user wants to measure performance before and after a change, catch performance regressions in a PR, establish a performance baseline, or understand what is making their app slow.
- Installs packages
95 other projects use a version of this.
Adopted by
Most recently taken up by
- Rojios/everything-claude-codetheir own version, first seen Nov 8, 2026
- accso/ai-context-mcptheir own version, first seen Nov 8, 2026
- timurgaleev/vibestacktheir own version, first seen Nov 8, 2026
- pankaj-mahaur/Agent-Daemontheir own version, first seen Nov 6, 2026
- datafusion-contrib/datafusion-distributedtheir own version, first seen Nov 2, 2026
- menot-you/n-soultheir own version, first seen Nov 1, 2026
Used with
Projects with it also use ios-clean, ios-fix and 9 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.
Saqlain-811Skillios-clean
Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. (gstack)
Also in 5 projects that use this
Saqlain-811Skillios-fix
Autonomous iOS bug fixer. (gstack)
Also in 5 projects that use this
seek888Skillpair-agent
Pair a remote AI agent with your browser. One command generates a setup key and prints instructions the other agent can follow to connect. Works with OpenClaw, Hermes, Codex, Cursor, or any agent that can make HTTP requests. The remote agent gets its own tab with scoped access (read+write by default, admin on request). Use when asked to "pair agent", "connect agent", "share browser", "remote browser", "let another agent use my browser", or "give browser access". (gstack) Voice triggers (speech-to-text aliases): "pair agent", "connect agent", "share my browser", "remote browser access".
Also in 11 projects that use this
ShreyRaviSkilllanding-report
Read-only queue dashboard for workspace-aware ship. Shows which VERSION slots are currently claimed by open PRs, which sibling Conductor workspaces have WIP work likely to ship soon, and what slot /ship would pick next. No mutations — just a snapshot. Use when asked to "landing report", "what's in the queue", "show me open PRs", or "which version do I claim next". (gstack)
Also in 8 projects that use this
timurgaleevSkilldocument-generate
Generate missing docs for a feature, module or project as tutorials, how-tos, reference and explanation.
Also in 7 projects that use this
seek888Skillopen-gstack-browser
Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in. Opens a visible browser window where you can watch every action in real time. The sidebar shows a live activity feed and chat. Anti-bot stealth built in. Use when asked to "open gstack browser", "launch browser", "connect chrome", "open chrome", "real browser", "launch chrome", "side panel", or "control my browser". Voice triggers (speech-to-text aliases): "show me the browser".
Also in 8 projects that use this
- +1 more from Saqlain-811
Other versions95 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 95
- garrytan/gstack★ 141ksame name
- dragonflydb/dragonfly★ 32ksame name
- xtermjs/xterm.js★ 21ksame name
- udecode/plate★ 17ksame name
- Z3Prover/z3★ 13ksame name
- androidx/androidx★ 6.1ksame name
- samchon/typia★ 6ksame name
- PaddlePaddle/FastDeploy★ 3.7ksame name
- zalando/skipper★ 3.3ksame name
- samchon/nestia★ 2.2ksame name
85 more not listed
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 repository48 other files it gives its agents.
- agent-memorySkill
- ai-engineerSkill
- api-designSkill
- autoplanSkill
- backend-devSkill
- brand-guidelinesSkill
- code-reviewerSkill
- commit-messageSkill
- database-architectSkill
- data-engineerSkill
- debuggerSkill
- design-explorerSkill
- devex-engineerSkill
- devops-platformSkill
- doc-coauthoringSkill
- forward-deployment-engineerSkill
- frontend-designSkill
- internal-commsSkill
- java-developmentSkill
- land-and-deploySkill
- mcp-builderSkill
- office-hoursSkill
- pdfSkill
- performance-optimizerSkill
- plan-ceo-reviewSkill
- plan-design-reviewSkill
- plan-eng-reviewSkill
- pptxSkill
- product-engineerSkill
- prompt-engineerSkill
- python-developmentSkill
- qa-engineerSkill
- react-developmentSkill
- release-engineerSkill
- research-agentSkill
- retro-engineerSkill
- safety-guardrailsSkill
- security-engineerSkill
- skill-creatorSkill
- spec-authorSkill
- sre-canarySkill
- system-designSkill
- technical-writerSkill
- test-writerSkill
- theme-factorySkill
- typescript-developmentSkill
- webapp-testingSkill
- xlsxSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 81 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
One change at a time: If two things change between benchmarks, you can't attribute the delta to either.
- Distinctive: line 27
Before any optimization or PR review, establish the baseline.
- Distinctive: line 223
Always produce this table when benchmarking a change:
- Very specific: line 319
Use python scripts/compare_metrics.py baseline.json candidate.json to compare flat JSON metric files in a repeatable way.
“Common” is measured: kept by at least 6 in 10 of the 81 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
Benchmarking without a baseline is noise. A benchmark that can't be reproduced is a guess. Every benchmark in this skill produces a number, a method, and a comparison — not an impression.
Performance is a feature. Regressions ship silently. This skill makes regressions visible before they reach users.
Benchmark Principles
- Measure before you optimize. An optimization without a before measurement is an assumption. Always baseline first.
- Reproduce exactly. A benchmark is only valid if another engineer can reproduce it with the same setup. Document the environment, the command, and the conditions.
- Medians lie. Use percentiles. P50 hides the users who are suffering. Always report P75, P95, and P99 alongside the median.
- Synthetic vs real-user data. Lighthouse in a lab tells you what's possible. RUM (Real User Monitoring) tells you what's happening. Use both.
- One change at a time. If two things change between benchmarks, you can't attribute the delta to either.
- A regression is a regression. A 10% slowdown on a fast page is still a regression. Set thresholds and enforce them.
Step 0: Establish the Baseline
Before any optimization or PR review, establish the baseline. Without it, "after" numbers are meaningless.
# Run Lighthouse baseline (3 runs, take median)
npx lighthouse https://your-app.com/key-page \
--output json \
--output-path ./baseline.json \
--chrome-flags="--headless" \
--throttling-method=simulate \
--preset=desktop
# Run 3 times and average — single runs are noisy
for i in 1 2 3; do
npx lighthouse https://your-app.com/key-page \
--output json \
--output-path "./baseline-run-$i.json" \
--chrome-flags="--headless"
doneRecord in benchmark-baseline.md:
## Baseline — [Page/Endpoint] — [Date] — [Commit SHA]
| Metric | Run 1 | Run 2 | Run 3 | Median |
|--------|-------|-------|-------|--------|
| LCP | | | | |
| INP | | | | |
| CLS | | | | |
| FCP | | | | |
| TTFB | | | | |
| Total JS bundle | | | | |
| Total CSS bundle | | | | |
| Network requests | | | | |
**Environment:** macOS M2 / 6-core CPU throttle / Fast 3G simulation
**Tool:** Lighthouse 12.x / Chrome 124
**URL:** https://your-app.com/key-pageCore Web Vitals — Reference
| Metric | Full Name | Measures | Good | Needs Improvement | Poor |
| LCP | Largest Contentful Paint | Loading | ≤2.5s | 2.5–4.0s | >4.0s |
| INP | Interaction to Next Paint | Interactivity | ≤200ms | 200–500ms | >500ms |
| CLS | Cumulative Layout Shift | Visual stability | ≤0.1 | 0.1–0.25 | >0.25 |
| FCP | First Contentful Paint | Loading start | ≤1.8s | 1.8–3.0s | >3.0s |
| TTFB | Time to First Byte | Server response | ≤800ms | 800ms–1.8s | >1.8s |
Frontend Benchmarking
Lighthouse (automated, reproducible)
# Single page audit
npx lighthouse https://your-app.com \
--output=json,html \
--output-path=./lighthouse-report \
--chrome-flags="--headless --no-sandbox"
# Key metrics to extract from JSON
cat lighthouse-report.report.json | jq '{
lcp: .audits["largest-contentful-paint"].numericValue,
inp: .audits["interaction-to-next-paint"].numericValue,
cls: .audits["cumulative-layout-shift"].numericValue,
fcp: .audits["first-contentful-paint"].numericValue,
ttfb: .audits["server-response-time"].numericValue,
score: .categories.performance.score
}'Bundle Size Analysis
# Next.js
npx next build 2>&1 | grep -A 50 "Route (app)"
# Webpack Bundle Analyzer
npm install --save-dev webpack-bundle-analyzer
# Add to webpack config, then:
npx webpack --profile --json > stats.json
npx webpack-bundle-analyzer stats.json
# Source map explorer (any bundler)
npm install --save-dev source-map-explorer
npx source-map-explorer 'build/static/js/*.js'
# Check for duplicate packages
npx duplicate-package-checker-webpack-pluginBundle Size Regression Check
# Before (on main branch)
git checkout main && npm run build
du -sh .next/static/chunks/*.js | sort -rh | head -10 > bundle-before.txt
# After (on feature branch)
git checkout feature-branch && npm run build
du -sh .next/static/chunks/*.js | sort -rh | head -10 > bundle-after.txt
diff bundle-before.txt bundle-after.txtAPI Benchmarking
Response Time (k6)
// k6-script.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 10 }, // ramp up
{ duration: '1m', target: 10 }, // steady state
{ duration: '10s', target: 0 }, // ramp down
],
thresholds: {
http_req_duration: ['p(95)<500'], // 95% of requests under 500ms
http_req_failed: ['rate<0.01'], // <1% error rate
},
};
export default function () {
const res = http.get('https://your-app.com/api/endpoint', {
headers: { Authorization: `Bearer ${__ENV.API_TOKEN}` },
});
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 200ms': (r) => r.timings.duration < 200,
});
sleep(1);
}# Run benchmark
k6 run k6-script.js
# Compare before/after
k6 run --out json=before.json k6-script.js
# Make the change
k6 run --out json=after.json k6-script.jsQuick curl timing
# Measure individual request timing
curl -o /dev/null -s -w \
"TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\nSize: %{size_download} bytes\n" \
https://your-app.com/api/endpoint
# Run 10 times and get stats
for i in $(seq 1 10); do
curl -o /dev/null -s -w "%{time_total}\n" https://your-app.com/api/endpoint
done | awk '{sum+=$1; if(NR==1||$1<min)min=$1; if($1>max)max=$1} END {printf "min=%.3fs avg=%.3fs max=%.3fs\n", min, sum/NR, max}'Database Query Benchmarking
-- Explain analyze a slow query
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT u.*, o.total
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE u.created_at > NOW() - INTERVAL '30 days'
ORDER BY o.total DESC
LIMIT 100;
-- Check for sequential scans on large tables (should be index scans)
-- Look for: Seq Scan on large_table — this is the red flag
-- Find slow queries in PostgreSQL
SELECT query,
calls,
mean_exec_time::numeric(10,2) AS mean_ms,
max_exec_time::numeric(10,2) AS max_ms,
total_exec_time::numeric(10,2) AS total_ms
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;Before / After Comparison Format
Always produce this table when benchmarking a change:
## Benchmark Results — [Feature/Change] — [Date]
**Commit before:** abc1234
**Commit after:** def5678
**Environment:** [describe exactly]
**Tool:** [Lighthouse 12 / k6 1.0 / custom]
### Core Web Vitals (median of 3 runs)
| Metric | Before | After | Delta | Verdict |
|--------|--------|-------|-------|---------|
| LCP | 2.8s | 2.1s | -25% | ✅ Improved |
| INP | 180ms | 210ms | +17% | ⚠️ Regressed |
| CLS | 0.05 | 0.05 | 0% | ✅ Neutral |
| Perf score | 72 | 81 | +9pts | ✅ Improved |
### Bundle Size
| Asset | Before | After | Delta | Verdict |
|-------|--------|-------|-------|---------|
| main.js | 284KB | 301KB | +6% | ⚠️ Regressed |
| vendor.js | 412KB | 398KB | -3% | ✅ Improved |
| CSS total | 48KB | 48KB | 0% | ✅ Neutral |
### API Response Time (p50 / p95 / p99)
| Endpoint | Before | After | Delta | Verdict |
|----------|--------|-------|-------|---------|
| GET /api/users | 45/120/280ms | 38/95/210ms | -25% | ✅ Improved |
| POST /api/orders | 120/380/950ms | 125/390/960ms | +1% | ✅ Neutral |
### Overall Verdict
🟢 SHIP — performance improved overall. INP regression is within acceptable range (180→210ms, still <200ms threshold). main.js increase (+17KB) is offset by lazy-loading the settings panel.Regression Thresholds
Define these per project. These are sensible defaults:
| Metric | Warning threshold | Block threshold |
| LCP | +10% | +25% or >4.0s |
| INP | +15% | +30% or >500ms |
| CLS | any increase | >0.1 absolute |
| JS bundle | +5% | +15% or +50KB |
| API P95 | +10% | +25% or >1s |
| Lighthouse score | -3pts | -10pts |
CI Integration (Lighthouse CI)
# .github/workflows/lighthouse.yml
name: Lighthouse CI
on: [pull_request]
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci && npm run build
- run: npm run start &
- uses: treosh/lighthouse-ci-action@v11
with:
urls: |
http://localhost:3000/
http://localhost:3000/dashboard
budgetPath: ./lighthouse-budget.json
uploadArtifacts: true
# lighthouse-budget.json
[{
"path": "/*",
"timings": [
{ "metric": "largest-contentful-paint", "budget": 2500 },
{ "metric": "cumulative-layout-shift", "budget": 0.1 }
],
"resourceSizes": [
{ "resourceType": "script", "budget": 400 },
{ "resourceType": "total", "budget": 800 }
]
}]Bundled Resource
Use python scripts/compare_metrics.py baseline.json candidate.json to compare flat JSON metric files in a repeatable way. Read metric-contract.md first to define units and regression thresholds; do not compare incompatible measurements.
Definition of Done — Benchmark
- Baseline established before any change (commit SHA recorded)
- Same environment used for before and after measurements
- Minimum 3 runs taken, median reported (not single run)
- All Core Web Vitals measured (LCP, INP, CLS, FCP, TTFB)
- Bundle sizes measured before and after
- API P50/P95/P99 measured for changed endpoints
- Before/after comparison table produced
- Every metric has a verdict: Improved / Regressed / Neutral
- Any regression explained (is it acceptable? why?)
- Overall ship/hold verdict stated with rationale
- Results committed to
benchmark-results/for historical comparison
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.

