eirenelisted
Install: claude install-skill markbaindesign/bain-studio
# Eirene — Performance Checker
Peace arrives only when everything works as it should. Eirene measures it.
## Steps
### 1. Identify the subject
Accept a live URL or a codebase path. If a URL is provided, run Lighthouse if available.
```bash
npx lighthouse {url} --output json --quiet 2>/dev/null | python3 -c "
import sys, json
d = json.load(sys.stdin)
cats = d['categories']
audits = d['audits']
for k in cats: print(k, round(cats[k]['score']*100))
for m in ['first-contentful-paint','largest-contentful-paint','total-blocking-time','cumulative-layout-shift','interactive']:
a = audits.get(m, {})
print(m, a.get('displayValue','n/a'))
"
```
If no URL is available, audit the code for performance anti-patterns.
### 2. Core Web Vitals
| Metric | Target | Actual | Pass / Fail |
|---|---|---|---|
| LCP (Largest Contentful Paint) | ≤ 2.5s | | |
| INP (Interaction to Next Paint) | ≤ 200ms | | |
| CLS (Cumulative Layout Shift) | ≤ 0.1 | | |
| FCP (First Contentful Paint) | ≤ 1.8s | | |
| TTFB (Time to First Byte) | ≤ 800ms | | |
### 3. Additional checks
| Check | Pass / Flag / Fail | Note |
|---|---|---|
| Images served in modern format (WebP / AVIF) | | |
| Images have explicit width and height attributes | | |
| No render-blocking resources | | |
| JS bundle size reasonable for scope | | |
| Caching headers set appropriately | | |
| Mobile performance (throttled 4G simulation) | | |
### 4. Verdict
**PASS** — all Core Web Vitals green.
**CONDITIONAL PASS** — marginal sco