plugins/lisa/skills/performance-review/SKILL.md
Performance review methodology. N+1 queries, inefficient algorithms, memory leaks, missing indexes, unnecessary re-renders, bundle size issues. Evidence-based recommendations.
npx skillsauth add codyswanngt/lisa performance-reviewInstall 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.
Identify bottlenecks, inefficiencies, and scalability risks in code changes.
Structure findings as:
## Performance Analysis
### Critical Issues
Issues that will cause noticeable degradation at scale.
- [issue] -- where in the code, why it matters, estimated impact
### N+1 Query Detection
| Location | Pattern | Fix |
|----------|---------|-----|
| file:line | Description of the N+1 | Eager load / batch / join |
### Algorithmic Complexity
| Location | Current | Suggested | Why |
|----------|---------|-----------|-----|
| file:line | O(n^2) | O(n) | Description |
### Database Concerns
- Missing indexes, unoptimized queries, excessive round trips
### Memory Concerns
- Unbounded growth, large allocations, retained references
### Caching Opportunities
- Computations or queries that could benefit from caching
### Recommendations
- [recommendation] -- priority (critical/warning/suggestion), estimated impact
// Bad: N+1 -- one query per user inside loop
const users = await userRepo.find();
const profiles = await Promise.all(users.map(u => profileRepo.findOne({ userId: u.id })));
// Good: Single query with join or batch
const users = await userRepo.find({ relations: ["profile"] });
// Bad: Recomputes on every call
const getExpensiveResult = () => heavyComputation(data);
// Good: Compute once, reuse
const expensiveResult = heavyComputation(data);
// Bad: Cache grows without limit
const cache = new Map();
const get = (key) => { if (!cache.has(key)) cache.set(key, compute(key)); return cache.get(key); };
// Good: LRU or bounded cache
const cache = new LRUCache({ max: 1000 });
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.