plugins/lisa-expo/skills/ops-performance/SKILL.md
Performance analysis for Expo + serverless backend projects. Runs Lighthouse audits, bundle size analysis, and k6 load tests.
npx skillsauth add codyswanngt/lisa ops-performanceInstall 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.
Analyze application performance.
Argument: $ARGUMENTS — analysis type (lighthouse, bundle, k6, all; default: all) and optional target environment
.)${BACKEND_DIR:-../backend-v2} — set BACKEND_DIR in .claude/settings.local.json if your backend is elsewherepackage.json for lighthouse:check, export:web, analyze:bundle scriptspackage.json for k6:* scriptse2e/constants.ts or .env.* files for environment URLsnpx lighthouse http://localhost:8081 \
--output=json \
--output-path=./lighthouse-local.json \
--chrome-flags='--headless --no-sandbox'
Discover frontend URLs from e2e/constants.ts or .env.* files:
npx lighthouse https://{env_url} \
--output=json \
--output-path=./lighthouse-{env}.json \
--chrome-flags='--headless --no-sandbox'
bun run lighthouse:check
cat lighthouse-{env}.json | jq '{
performance: .categories.performance.score,
accessibility: .categories.accessibility.score,
bestPractices: .categories["best-practices"].score,
seo: .categories.seo.score,
fcp: .audits["first-contentful-paint"].displayValue,
lcp: .audits["largest-contentful-paint"].displayValue,
tbt: .audits["total-blocking-time"].displayValue,
cls: .audits["cumulative-layout-shift"].displayValue,
si: .audits["speed-index"].displayValue
}'
bun run export:web && bun run analyze:bundle
bun run export:web
echo "=== Total Bundle Size ==="
du -sh dist/
echo ""
echo "=== Largest JS Files ==="
find dist -name "*.js" -exec ls -lhS {} + 2>/dev/null | head -20
Discover available k6 scripts from the backend package.json (matching k6:*).
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:smoke
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:load
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:stress
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:spike
cd "${BACKEND_DIR:-../backend-v2}"
bun run k6:docker:smoke
bun run k6:docker:load
| Metric | Score | Rating | |--------|-------|--------| | Performance | 0.85 | GOOD | | Accessibility | 0.92 | GOOD | | Best Practices | 0.88 | GOOD | | SEO | 0.95 | GOOD |
| Metric | Value | Threshold | Status | |--------|-------|-----------|--------| | FCP (First Contentful Paint) | 1.2s | < 1.8s | PASS | | LCP (Largest Contentful Paint) | 2.1s | < 2.5s | PASS | | TBT (Total Blocking Time) | 150ms | < 200ms | PASS | | CLS (Cumulative Layout Shift) | 0.05 | < 0.1 | PASS |
| Category | Size | Notes | |----------|------|-------| | Total dist/ | 4.2 MB | | | Largest chunk | 1.1 MB | vendor.js |
| Metric | Value | |--------|-------| | Requests/sec | 450 | | Avg response time | 120ms | | p95 response time | 350ms | | Error rate | 0.1% |
Include recommendations for any metrics that fall below thresholds.
documentation
Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki.
documentation
Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor.
development
Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them.
testing
Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki.