with one click
performance
// [Debugging] Use when you need to analyze and optimize performance bottlenecks.
// [Debugging] Use when you need to analyze and optimize performance bottlenecks.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | performance |
| version | 2.0.0 |
| description | [Debugging] Use when you need to analyze and optimize performance bottlenecks. |
[BLOCKING] Execute skill steps in declared order. NEVER skip, reorder, or merge steps without explicit user approval. [BLOCKING] Before each step or sub-skill call, update task tracking: set
in_progresswhen step starts, setcompletedwhen step ends. [BLOCKING] Every completed/skipped step MUST include brief evidence or explicit skip reason. [BLOCKING] If Task tools are unavailable, create and maintain an equivalent step-by-step plan tracker with the same status transitions.
Goal: Analyze + optimize perf bottlenecks โ DB queries, API endpoints, frontend rendering.
Workflow:
file:line evidenceKey Rules:
file:line proof$ARGUMENTS
MANDATORY IMPORTANT MUST ATTENTION โ classify BEFORE analyzing. Detection drives: which dimensions apply, which tools to use, which sub-agent to route to.
| Type | Signals | Primary Investigation |
|---|---|---|
| DB query | slow SELECT, missing index, full scan | Query plan + index analysis |
| API latency | slow endpoint, timeout, high p95 | Profiler + call chain trace |
| N+1 queries | loop + DB call, lazy load in serialization | graph trace --direction downstream |
| Memory/OOM | unbounded collections, no paging, blob loads | Row count + memory profiler |
| Frontend render | slow paint, excessive change detection | DevTools perf tab + bundle analysis |
| Distributed | cross-service latency, message bus delays | trace for MESSAGE_BUS edges |
Anti-pattern: same analysis applied regardless of bottleneck type.
For each dimension: state role โ derive failure modes โ apply to bottleneck with file:line evidence.
Think: What data volume loads? Are filters pushed to DB? Do indexes cover all WHERE/JOIN/ORDER BY columns?
GetAll()/ToList()/Find() without Skip/Take or cursorThink: How often does this code execute? What triggers it? Is there call fan-out?
python .claude/scripts/code_graph query callers_of <function> --json โ call frequency + trigger chainpython .claude/scripts/code_graph trace <file> --direction downstream --json โ N+1 cascade, excessive event handlersThink: What loads into memory? Is data bounded? Are projections applied before materialization?
ToList()Think: Are parallel ops sharing non-thread-safe resources? Are sequential ops blocking hot path unnecessarily?
ExecuteInjectScopedAsync (new DI scope per iteration), NEVER ExecuteUowTask (shared DbContext = silent corruption)Include()Think: What triggers change detection? Is data fetched eagerly when lazy suffices? Is bundle size bounded?
OnPush change detection + async pipe for observable streamstrackBy on *ngFor โ prevents full DOM re-rendersMANDATORY IMPORTANT MUST ATTENTION declare Confidence: X% + profiling data + file:line for EVERY claim.
| Confidence | Action |
|---|---|
| โฅ95% | Recommend freely |
| 80-94% | Recommend with caveats |
| 60-79% | List unknowns first |
| <60% | STOP โ gather more evidence |
Route based on detected bottleneck type:
| Bottleneck | Sub-agent |
|---|---|
| DB queries / OOM / backend hot path | performance-optimizer (backend) |
| Security-adjacent (auth queries, PII fields) | security-auditor first, then performance-optimizer |
| Cross-service / caching strategy / architecture | activate arch-performance-optimization skill |
| Frontend bundle / change detection / rendering | performance-optimizer (frontend focus) |
Activate arch-performance-optimization skill for architectural-level decisions.
CRITICAL: Present findings + optimization plan. Wait for explicit user approval before making changes.
MANDATORY: Performance analysis spawns
performance-optimizersub-agent as the Round 1 proactive lead, not just a Round 2 challenger. Rationale:performance-optimizerspecializes in N+1 patterns, query plans, bundle analysis, and memory profiling for both backend (.NET/MongoDB/SQL) and frontend (Angular/RxJS). Main agent synthesizes findings โ it does not lead analysis alone.
performance-optimizer sub-agent (subagent_type: "performance-optimizer") as the analysis lead. Main agent provides scope context; sub-agent drives all dimension analysis and produces the draft optimization plan.performance-optimizer sub-agent โ ZERO memory of Round 1. Challenges Round 1 findings: missed bottlenecks, wrong root cause, premature optimization.performance-optimizer sub-agentAskUserQuestionMANDATORY IMPORTANT MUST ATTENTION โ NO EXCEPTIONS: Not already in workflow โ use
AskUserQuestion:
- Activate
quality-auditworkflow (Recommended) โ performance โ sre-review โ test- Execute
/performancedirectly โ standalone
MANDATORY IMPORTANT MUST ATTENTION after completing, use AskUserQuestion:
[IMPORTANT] Use
TaskCreateto break ALL work into small tasks BEFORE starting. For simple tasks, ask user whether to skip.
docs/project-reference/domain-entities-reference.md โ Domain entity catalog, cross-service sync (read directly when relevant; do not rely on hook-injected conversation text)External Memory: Write intermediate findings + results to
plans/reports/โ prevents context loss, serves as deliverable.
Graph-Assisted Investigation โ MANDATORY when
.code-graph/graph.dbexists.HARD-GATE: MUST ATTENTION run at least ONE graph command on key files before concluding any investigation.
Pattern: Grep finds files โ
trace --direction bothreveals full system flow โ Grep verifies details
Task Minimum Graph Action Investigation/Scout trace --direction bothon 2-3 entry filesFix/Debug callers_ofon buggy function +tests_forFeature/Enhancement connectionson files to be modifiedCode Review tests_foron changed functionsBlast Radius trace --direction downstreamCLI:
python .claude/scripts/code_graph {command} --json. Use--node-mode filefirst (10-30x less noise), then--node-mode functionfor detail.
Incremental Result Persistence โ MANDATORY for all sub-agents or heavy inline steps processing >3 files.
- Before starting: Create report file
plans/reports/{skill}-{date}-{slug}.md- After each file/section reviewed: Append findings to report immediately โ never hold in memory
- Return to main agent: Summary only (per SYNC:subagent-return-contract) with
Full report:path- Main agent: Reads report file only when resolving specific blockers
Why: Context cutoff mid-execution loses ALL in-memory findings. Each disk write survives compaction. Partial results are better than no results.
Report naming:
plans/reports/{skill-name}-{YYMMDD}-{HHmm}-{slug}.md
Sub-Agent Return Contract โ When this skill spawns a sub-agent, the sub-agent MUST return ONLY this structure. Main agent reads only this summary โ NEVER requests full sub-agent output inline.
## Sub-Agent Result: [skill-name] Status: โ PASS | โ ๏ธ PARTIAL | โ FAIL Confidence: [0-100]% ### Findings (Critical/High only โ max 10 bullets) - [severity] [file:line] [finding] ### Actions Taken - [file changed] [what changed] ### Blockers (if any) - [blocker description] Full report: plans/reports/[skill-name]-[date]-[slug].mdMain agent reads
Full reportfile ONLY when: (a) resolving a specific blocker, or (b) building a fix plan. Sub-agent writes full report incrementally (per SYNC:incremental-persistence) โ not held in memory.
Sub-Agent Selection โ Full routing contract:
.claude/skills/shared/sub-agent-selection-guide.mdRule: NEVER usecode-reviewerfor specialized domains (architecture, security, performance, DB, E2E, integration-test, git).
AI Mistake Prevention โ Failure modes to avoid on every task:
Check downstream references before deleting. Deleting components causes documentation and code staleness cascades. Map all referencing files before removal. Verify AI-generated content against actual code. AI hallucinates APIs, class names, and method signatures. Always grep to confirm existence before documenting or referencing. Trace full dependency chain after edits. Changing a definition misses downstream variables and consumers derived from it. Always trace the full chain. Trace ALL code paths when verifying correctness. Confirming code exists is not confirming it executes. Always trace early exits, error branches, and conditional skips โ not just happy path. When debugging, ask "whose responsibility?" before fixing. Trace whether bug is in caller (wrong data) or callee (wrong handling). Fix at responsible layer โ never patch symptom site. Assume existing values are intentional โ ask WHY before changing. Before changing any constant, limit, flag, or pattern: read comments, check git blame, examine surrounding code. Verify ALL affected outputs, not just the first. Changes touching multiple stacks require verifying EVERY output. One green check is not all green checks. Holistic-first debugging โ resist nearest-attention trap. When investigating any failure, list EVERY precondition first (config, env vars, DB names, endpoints, DI registrations, data preconditions), then verify each against evidence before forming any code-layer hypothesis. Surgical changes โ apply the diff test. Bug fix: every changed line must trace directly to the bug. Don't restyle or improve adjacent code. Enhancement task: implement improvements AND announce them explicitly. Surface ambiguity before coding โ don't pick silently. If request has multiple interpretations, present each with effort estimate and ask. Never assume all-records, file-based, or more complex path.
Critical Thinking Mindset โ Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80% to act. Anti-hallucination: Never present guess as fact โ cite sources for every claim, admit uncertainty freely, self-check output for errors, cross-reference independently, stay skeptical of own confidence โ certainty without evidence root of all hallucination.
Sequential Thinking Protocol โ Structured multi-step reasoning for complex/ambiguous work. Use when planning, reviewing, debugging, or refining ideas where one-shot reasoning is unsafe.
Trigger when: complex problem decomposition ยท adaptive plans needing revision ยท analysis with course correction ยท unclear/emerging scope ยท multi-step solutions ยท hypothesis-driven debugging ยท cross-cutting trade-off evaluation.
Format (explicit mode โ visible thought trail):
Thought N/M: [aspect]โ one aspect per thought, state assumptions/uncertaintyThought N/M [REVISION of Thought K]: ...โ when prior reasoning invalidated; state Original / Why revised / ImpactThought N/M [BRANCH A from Thought K]: ...โ explore alternative; converge with decision rationaleThought N/M [HYPOTHESIS]: ...then[VERIFICATION]: ...โ test before actingThought N/N [FINAL]โ only when verified, all critical aspects addressed, confidence >80%Mandatory closers: Confidence % stated ยท Assumptions listed ยท Open questions surfaced ยท Next action concrete.
Stop conditions: confidence <80% on any critical decision โ escalate via AskUserQuestion ยท โฅ3 revisions on same thought โ re-frame the problem ยท branch count >3 โ split into sub-task.
Implicit mode: apply methodology internally without visible markers when adding markers would clutter the response (routine work where reasoning aids accuracy).
Deep-dive: see
/sequential-thinkingskill (.claude/skills/sequential-thinking/SKILL.md) for worked examples (api-design, debug, architecture), advanced techniques (spiral refinement, hypothesis testing, convergence), and meta-strategies (uncertainty handling, revision cascades).
Understand Code First โ HARD-GATE: Do NOT write, plan, or fix until you READ existing code.
- Search 3+ similar patterns (
grep/glob) โ citefile:lineevidence- Read existing files in target area โ understand structure, base classes, conventions
- Run
python .claude/scripts/code_graph trace <file> --direction both --jsonwhen.code-graph/graph.dbexists- Map dependencies via
connectionsorcallers_ofโ know what depends on your target- Write investigation to
.ai/workspace/analysis/for non-trivial tasks (3+ files)- Re-read analysis file before implementing โ never work from memory alone
- NEVER invent new patterns when existing ones work โ match exactly or document deviation
BLOCKED until:
- [ ]Read target files- [ ]Grep 3+ patterns- [ ]Graph trace (if graph.db exists)- [ ]Assumptions verified with evidence
Evidence-Based Reasoning โ Speculation is FORBIDDEN. Every claim needs proof.
- Cite
file:line, grep results, or framework docs for EVERY claim- Declare confidence: >80% act freely, 60-80% verify first, <60% DO NOT recommend
- Cross-service validation required for architectural changes
- "I don't have enough evidence" is valid and expected output
BLOCKED until:
- [ ]Evidence file path (file:line)- [ ]Grep search performed- [ ]3+ similar patterns found- [ ]Confidence level statedForbidden without proof: "obviously", "I think", "should be", "probably", "this is because" If incomplete โ output:
"Insufficient evidence. Verified: [...]. Not verified: [...]."
MUST ATTENTION apply critical thinking โ every claim needs traced proof, confidence >80% to act. Anti-hallucination: never present guess as fact.
MUST ATTENTION apply sequential-thinking โ multi-step Thought N/M, REVISION/BRANCH/HYPOTHESIS markers, confidence % closer; see /sequential-thinking skill.
MUST ATTENTION apply AI mistake prevention โ holistic-first debugging, fix at responsible layer, surface ambiguity before coding, re-read files after compaction.
IMPORTANT MUST ATTENTION follow declared step order for this skill; NEVER skip, reorder, or merge steps without explicit user approval
IMPORTANT MUST ATTENTION for every step/sub-skill call: set in_progress before execution, set completed after execution
IMPORTANT MUST ATTENTION every skipped step MUST include explicit reason; every completed step MUST include concise evidence
IMPORTANT MUST ATTENTION if Task tools unavailable, maintain an equivalent step-by-step plan tracker with synchronized statuses
TaskCreate BEFORE startingfile:line + profiling data for EVERY claim โ Confidence: X% requiredcallers_of + trace --direction downstream for hot pathsAnti-Rationalization:
| Evasion | Rebuttal |
|---|---|
| "Bottleneck is obvious, skip profiling" | Assumption without measurement = guess. Always measure. |
| "Already checked code, no N+1" | Show graph trace output. No proof = no check. |
| "Simple optimization, skip user approval" | User decides complexity. Always present plan first. |
| "Round 2 redundant, Round 1 found everything" | Main agent rationalizes own work. Fresh eyes catch blind spots. |
| "Performance type is clear, skip Phase 0" | Wrong type = wrong dimensions = wasted analysis. Classify first. |
[TASK-PLANNING] Break task into small todo tasks via TaskCreate BEFORE starting.