skills-catalog/ln-653-runtime-performance-auditor/SKILL.md
Checks blocking IO in async, unnecessary allocations, sync sleep, string concat in loops, redundant copies. Use when auditing runtime performance.
npx skillsauth add levnikolaevich/claude-code-skills ln-653-runtime-performance-auditorInstall 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.
Paths: File paths (
shared/,references/,../ln-*) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root. Ifshared/is missing, fetch files via WebFetch fromhttps://raw.githubusercontent.com/levnikolaevich/claude-code-skills/master/skills/{path}.
Type: L3 Worker
Specialized worker auditing runtime performance anti-patterns in async and general code.
MANDATORY READ: Load shared/references/audit_worker_core_contract.md.
MANDATORY READ: Load shared/references/mcp_tool_preferences.md and shared/references/mcp_integration_patterns.md
Receives contextStore with: tech_stack, best_practices, codebase_root, output_dir.
Domain-aware: Supports domain_mode + current_domain.
Use hex-graph first when hotspot detection materially improves runtime findings. Use hex-line first for local code reads when available. If MCP is unavailable, unsupported, or not indexed, continue with built-in Read/Grep/Glob/Bash and state the fallback in the report.
MANDATORY READ: Load shared/references/two_layer_detection.md for detection methodology.
Parse context from contextStore
Scan codebase for violations
scan_pathasync def blocks first, then check for violations inside themCollect findings with severity, location, effort, recommendation
Calculate score using penalty algorithm
Write Report: Build full markdown report in memory per shared/templates/audit_worker_report_template.md, write to {output_dir}/ln-653--global.md in single Write call
Return Summary: Return minimal summary to coordinator (see Output Format)
What: Synchronous file/network operations inside async functions, blocking event loop
Detection (Python):
async def functionsopen(, .read_bytes(), .read_text(), .write_bytes(), .write_text(), Path(...).(read|write)requests.get, requests.post, urllib.requestsubprocess.run(, subprocess.call(await asyncio.to_thread(...) or await loop.run_in_executor(...)Detection (Node.js):
async function or arrow async, grep for fs.readFileSync, fs.writeFileSync, child_process.execSyncSeverity:
__init__/setup/bootstrap (not request path) -> LOW. Small file (<1KB) read in non-hot path -> skipRecommendation: Use aiofiles, asyncio.to_thread(), or loop.run_in_executor() for file operations; use httpx.AsyncClient instead of requests
Effort: S (wrap in to_thread or switch to async library)
What: List comprehension where generator expression suffices
Detection:
len([x for x in ...]) - allocates list just to count; use sum(1 for ...)any([x for x in ...]) - allocates list for short-circuit check; use any(x for ...)all([x for x in ...]) - same pattern; use all(x for ...)set([x for x in ...]) - use set comprehension {x for x in ...}"".join([x for x in ...]) - use generator directly "".join(x for x in ...)Severity:
Recommendation: Replace [...] with generator (...) or set comprehension {...}
Effort: S (syntax change only)
What: time.sleep() inside async function blocks event loop
Detection:
time\.sleep inside async def blocksawait some_async_call() ... time.sleep(N) ... await another_call()Severity:
time.sleep() in async API handler (freezes all concurrent requests)time.sleep() in async background tasktime.sleep in CLI/script (not async server) -> skipRecommendation: Replace with await asyncio.sleep(N)
Effort: S (one-line change)
What: Building string via += inside loop (O(n^2) for large strings)
Detection:
result, output, html, text with += inside for/while loop+= containing string operand inside loop bodySeverity:
Recommendation: Use list.append() + "".join(), or io.StringIO, or f-string with "".join(generator)
Effort: S (refactor to list + join)
to_thread for CPU-BoundWhat: CPU-intensive synchronous code in async handler without offloading to thread
Detection:
async def, find CPU-intensive operations:
json.loads(large_data), json.load(file)PIL.Image.open, cv2.imreadhashlib, bcrypt.hashpwlxml.etree.parse, BeautifulSoup(asyncio.to_thread() or executorSeverity:
Recommendation: Wrap in await asyncio.to_thread(func, *args) (Python 3.9+) or loop.run_in_executor(None, func, *args)
Effort: S (wrap in to_thread)
What: Unnecessary .copy(), list(), dict() when data is only read, not mutated
Detection:
data = list(items) where data is only iterated (never modified)config = config_dict.copy() where config is only readresult = dict(original) where result is returned without modificationSeverity:
Recommendation: Remove unnecessary copy; pass original if not mutated
Effort: S (remove copy call)
MANDATORY READ: Load shared/references/audit_worker_core_contract.md and shared/references/audit_scoring.md.
MANDATORY READ: Load shared/references/audit_worker_core_contract.md and shared/templates/audit_worker_report_template.md.
Write JSON summary per shared/references/audit_summary_contract.md. In managed mode the caller passes both runId and summaryArtifactPath; in standalone mode the worker generates its own run-scoped artifact path per shared contract.
Write report to {output_dir}/ln-653--global.md with category: "Runtime Performance" and checks: blocking_io_in_async, unnecessary_list_allocation, sync_sleep_in_async, string_concat_in_loop, missing_to_thread, redundant_data_copies.
Return summary per shared/references/audit_summary_contract.md.
When summaryArtifactPath is absent, write the standalone runtime summary under .hex-skills/runtime-artifacts/runs/{run_id}/evaluation-worker/{worker}--{identifier}.json and optionally echo the same summary in structured output.
Report written: .hex-skills/runtime-artifacts/runs/{run_id}/audit-report/ln-653--global.md
Score: X.X/10 | Issues: N (C:N H:N M:N L:N)
MANDATORY READ: Load shared/references/audit_worker_core_contract.md.
to_thread/run_in_executorMANDATORY READ: Load shared/references/audit_worker_core_contract.md.
{output_dir}/ln-653--global.md (atomic single Write call)shared/references/audit_output_schema.mdVersion: 1.0.0 Last Updated: 2026-02-04
testing
Audits architecture config boundaries: typed settings, scattered env reads, config leakage, and layer ownership. Use for config architecture.
tools
Finds architecture-level modernization opportunities: obsolete custom mechanisms, overbuilt extension points, and simplifiable architecture. Use when auditing architecture evolution.
development
Builds dependency topology, detects cycles, validates import rules, and calculates coupling metrics. Use when auditing architecture topology.
testing
Checks layer, resource ownership, and orchestration boundaries. Use when auditing architecture boundary enforcement.