skills/empirical-systems-evaluation/SKILL.md
Benchmark multi-agent coordination systems with experiment design, power analysis, human rating protocols, bootstrap confidence intervals, and reproducible reporting. Use for salvage latency, recovery fidelity, coordination overhead, and protocol comparison studies. NOT for ML model benchmarking, web-product A/B testing, survey design, or general-purpose data science.
npx skillsauth add curiositech/windags-skills empirical-systems-evaluationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Design, execute, and report experiments that measure multi-agent coordination systems with statistical rigor. Every claim backed by confidence intervals. Every comparison backed by effect sizes. Every threat to validity stated honestly.
START: "I want to measure X about system Y"
|
+-> Is X a latency / throughput / count?
| YES -> Automated metric (Section 2)
| NO -> Is X a quality judgment (fidelity, correctness, usability)?
| YES -> Human evaluation (Section 3)
| NO -> Is X a binary outcome (crash/no-crash, success/fail)?
| YES -> Proportion test (Section 4)
| NO -> Reconsider what you're measuring.
|
+-> How many conditions are you comparing?
| 1 (just characterizing) -> Descriptive stats + CI (Section 5)
| 2 -> Pairwise test (Section 6)
| 3+ -> Omnibus test + post-hoc (Section 7)
|
+-> Do you have paired or independent observations?
Paired (same scenarios, different systems) -> Paired tests
Independent (different scenarios) -> Independent tests
For latency, throughput, recovery time, message counts, resource usage:
For recovery fidelity, code quality, correctness of salvaged work:
For binary outcomes (crash recovered: yes/no):
Is n >= 30 per group AND expected count >= 5 per cell?
YES -> Chi-squared test or Z-test for proportions
NO -> Fisher's exact test
Report: proportion, 95% CI (Wilson interval, not Wald), and odds ratio with CI.
START: "Which test do I use?"
|
+-> Is the data continuous (latency, throughput)?
| |
| +-> Check normality: Shapiro-Wilk test (n < 50) or
| | Anderson-Darling (n >= 50). Also: inspect Q-Q plot.
| |
| +-> Normal (p > 0.05)?
| | YES -> Check equal variances: Levene's test
| | | Equal? -> t-test (2 groups) or ANOVA (3+)
| | | Unequal? -> Welch's t-test or Welch's ANOVA
| | NO -> Can you transform to normality (log, sqrt)?
| | YES -> Transform, then parametric
| | NO -> Non-parametric:
| | 2 groups paired -> Wilcoxon signed-rank
| | 2 groups independent -> Mann-Whitney U
| | 3+ groups -> Kruskal-Wallis + Dunn's post-hoc
| |
+-> Is the data ordinal (human ratings 1-5)?
| -> Non-parametric always:
| 2 groups paired -> Wilcoxon signed-rank
| 2 groups independent -> Mann-Whitney U
| 3+ groups -> Kruskal-Wallis
|
+-> Is the data counts/proportions?
-> See Section 4
3+ conditions?
|
+-> Run omnibus test first (ANOVA or Kruskal-Wallis)
| p > 0.05? -> STOP. No post-hoc tests. Report null result honestly.
| p <= 0.05? -> Proceed to pairwise post-hoc.
|
+-> How many pairwise comparisons?
k conditions -> k*(k-1)/2 comparisons
Apply Bonferroni correction: alpha_adj = 0.05 / num_comparisons
|
Alternative: Holm-Bonferroni (less conservative, still controls FWER)
Alternative: Tukey's HSD (for ANOVA, all-pairs)
Bonferroni in practice: 3 conditions = 3 comparisons, alpha = 0.0167. 4 conditions = 6 comparisons, alpha = 0.0083. If this feels too strict, Holm-Bonferroni is the standard alternative.
For a two-sample t-test with power = 0.80, alpha = 0.05:
| Expected Effect Size (d) | n per group | |---------------------------|-------------| | Large (d = 0.8) | 26 | | Medium (d = 0.5) | 64 | | Small (d = 0.2) | 394 |
Formula (approximate): n = (Z_alpha/2 + Z_beta)^2 * 2 * sigma^2 / delta^2
For coordination systems, a medium effect (d = 0.5) is the minimum interesting difference. Plan for at least 30 runs per condition as a floor; 50+ preferred.
If you cannot run 30+, state this as a limitation and widen your CI interpretation.
Pilot study approach: Run 10 trials, estimate variance, then calculate the sample size needed for your target effect size. This is always better than guessing.
Use when: distribution is unknown, sample is small, or you want distribution-free CIs (which is almost always).
A comparison is only as strong as the baseline it beats.
| Tier | Description | Example | |------|-------------|---------| | S: State-of-Art | Best known system for this task | Published coordination protocol with code | | A: Strong | Reasonable well-tuned alternative | Round-robin assignment with retry | | B: Naive | Simplest reasonable approach | Random assignment, no recovery | | F: Strawman | Designed to lose | No coordination at all / sleep(random) |
Rules:
Before any result leaves your desk, verify ALL of the following:
What it looks like: Running many statistical tests, trying different subsets, transformations, or exclusion criteria until p < 0.05. Reporting only the "significant" result.
Detection: Ask "was this comparison pre-registered or decided after seeing the data?" If the answer is after, it is exploratory, not confirmatory.
Fix: Pre-register your hypotheses and analysis plan. If you explore post-hoc, label it clearly as exploratory and apply stricter alpha (0.01). Never present exploratory findings as confirmatory.
What it looks like: Comparing your coordination system to "no coordination" and celebrating the win. Or comparing to a deliberately misconfigured alternative.
Detection: Would a skeptical reviewer say "of course it's better than nothing"?
Fix: See Section 10. Include the strongest available alternative. If your system only beats a strawman, that is not a publishable result -- it is a sanity check.
What it looks like: "System A achieved 340ms recovery latency vs 890ms for System B." No standard deviation, no CI, no indication of spread.
Detection: Can a reader assess whether the difference is reliable?
Fix: ALWAYS report: central tendency + spread + CI. For example: "System A: median 340ms (IQR 280-410, 95% CI [310, 370]) vs System B: median 890ms (IQR 720-1100, 95% CI [810, 970]), Mann-Whitney U = 42, p < 0.001, r = 0.83 [0.71, 0.92]."
What it looks like: Testing 10 metrics across 4 conditions, finding 3 "significant" results at p < 0.05. With 10 tests you expect ~0.5 false positives by chance.
Fix: Bonferroni or Holm-Bonferroni. Distinguish pre-registered primary metrics (corrected) from exploratory secondary metrics (uncorrected but flagged).
What it looks like: System A on fast hardware, System B on slow. Or easy scenarios for A, hard for B.
Fix: Same hardware, same scenarios, same network. If infrastructure differs, run both systems on both and analyze as a crossed design.
Every report must address four categories:
| Concept | When to Use | Key Number | |---------|-------------|------------| | Bootstrap CI | Always | B >= 10,000 | | Cohen's d | Continuous, 2 groups | small=0.2, med=0.5, large=0.8 | | Rank-biserial r | Non-parametric, 2 groups | small=0.1, med=0.3, large=0.5 | | Cohen's kappa | Human rater agreement | >= 0.60 to proceed | | Bonferroni | k comparisons | alpha / k | | Holm-Bonferroni | k comparisons (less conservative) | Ordered p-values | | Power 0.80 + d=0.5 | Two-sample t-test | n = 64 per group | | Shapiro-Wilk | Normality check | n < 50 | | Mann-Whitney U | 2 independent groups, non-normal | -- | | Wilcoxon signed-rank | 2 paired groups, non-normal | -- | | Kruskal-Wallis | 3+ groups, non-normal | -- | | Wilson interval | CI for proportions | Always prefer over Wald |
flowchart TD
A[Incoming request for Empirical Systems Evaluation] --> B{Within this skill's scope?}
B -->|No| C[Redirect using NOT-for boundaries]
B -->|Yes| D[Assess inputs, constraints, and current state]
D --> E{Which path fits best?}
E -->|Plan or design| F[Choose the simplest viable pattern]
E -->|Migration or change| G[Protect compatibility and rollout safety]
E -->|Debug or evaluate| H[Localize the failing boundary first]
F --> I[Apply the domain-specific guidance below]
G --> I
H --> I
I --> J[Validate against the quality gates]
Use this as the first-pass routing model:
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.