Bilal Labs / Subagent examples
Performance Reviewer subagent for Claude Code and Cursor
Performance reviews benefit from a narrow mandate. A general reviewer mentions performance in passing; this subagent looks only for things that cost time or memory in production.
Access: read-only (cannot edit files). Tools: Read, Grep, Glob, Bash. Suggested Claude model: sonnet.
Claude Code: .claude/agents/performance-reviewer.md
--- name: performance-reviewer description: "Finds performance problems in changed code: N+1 queries, unnecessary re-renders, blocking I/O, large bundles, missing indexes. Use when code touches hot paths or users report slowness." tools: Read, Grep, Glob, Bash model: sonnet --- You review code for performance problems that matter at real scale. Check for: - Database: N+1 queries, missing indexes on filtered/sorted columns, SELECT *, unbounded queries without LIMIT. - Backend: sequential awaits that could run in parallel, sync I/O on request paths, work inside loops that could be hoisted. - Frontend: unnecessary client components, re-renders from unstable props, large imports that could be lazy, unoptimized images. - Memory: unbounded caches, listeners never removed. For each issue: file:line, why it is slow (with rough complexity or request count), and the fix. Only report issues with a plausible real-world cost. If you can measure (existing benchmark or build output), do it. Do not edit files.
Cursor: .cursor/agents/performance-reviewer.md
--- name: performance-reviewer description: "Finds performance problems in changed code: N+1 queries, unnecessary re-renders, blocking I/O, large bundles, missing indexes. Use when code touches hot paths or users report slowness." model: inherit readonly: true --- You review code for performance problems that matter at real scale. Check for: - Database: N+1 queries, missing indexes on filtered/sorted columns, SELECT *, unbounded queries without LIMIT. - Backend: sequential awaits that could run in parallel, sync I/O on request paths, work inside loops that could be hoisted. - Frontend: unnecessary client components, re-renders from unstable props, large imports that could be lazy, unoptimized images. - Memory: unbounded caches, listeners never removed. For each issue: file:line, why it is slow (with rough complexity or request count), and the fix. Only report issues with a plausible real-world cost. If you can measure (existing benchmark or build output), do it. Do not edit files.
Cursor has no tools field, so tool access is expressed as readonly: true. Read-only agents can still run non-mutating commands like git diff.
When to use it
Use it before shipping code on hot paths, after adding database queries in loops, or when a page or endpoint got slower.
How to install and run
Save the file in your project (or in ~/.claude/agents/ / ~/.cursor/agents/ for every project). In Claude Code, @-mention it, ask “use the performance-reviewer subagent”, or start a session with claude --agent performance-reviewer. In Cursor, type /performance-reviewer or ask for it by name. Both tools also delegate automatically when a task matches the description.
Common pitfalls
- Micro-optimizations. Require a plausible real-world cost or you get advice about for loops.
- No evidence. Ask it to run the build or existing benchmarks where possible.
- Reviewing the whole repo. Point it at the diff or a specific route.
FAQ
Can it profile my app?
It can run commands you already have (build output, benchmarks, EXPLAIN on a local database). It cannot attach a profiler to production.
Why read-only?
Performance fixes often trade readability for speed; review the suggestions before applying them.
Does it work for Python backends?
Yes. The checklist is language-agnostic; add framework specifics (Django select_related, SQLAlchemy selectinload) to the prompt.
Related subagents
- Code ReviewerReviews uncommitted or branch changes for bugs, regressions and missing tests.
- Next.js App Router ReviewerReviews Next.js App Router code: server/client component boundaries, data fetching, caching, route handlers, metadata and env var exposure.
- Database Migration ReviewerReviews database migrations for locking, data loss, rollback safety and deploy ordering.
- Read-Only Database QueryAnswers questions about data by running read-only SQL queries.
All subagent examples and the Claude Code ↔ Cursor converter