Claude-code-skills ln-653-runtime-performance-auditor
Checks blocking IO in async, unnecessary allocations, sync sleep, string concat in loops, redundant copies. Use when auditing runtime performance.
git clone https://github.com/levnikolaevich/claude-code-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/levnikolaevich/claude-code-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills-catalog/ln-653-runtime-performance-auditor" ~/.claude/skills/levnikolaevich-claude-code-skills-ln-653-runtime-performance-auditor && rm -rf "$T"
skills-catalog/ln-653-runtime-performance-auditor/SKILL.mdPaths: File paths (
,shared/,references/) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root. If../ln-*is missing, fetch files via WebFetch fromshared/.https://raw.githubusercontent.com/levnikolaevich/claude-code-skills/master/skills/{path}
Runtime Performance Auditor (L3 Worker)
Type: L3 Worker
Specialized worker auditing runtime performance anti-patterns in async and general code.
Purpose & Scope
- Audit runtime performance (Priority: MEDIUM)
- Check async anti-patterns, unnecessary allocations, blocking operations
- Write structured findings to file with severity, location, effort, recommendations
- Calculate compliance score (X/10) for Runtime Performance category
Inputs
MANDATORY READ: Load
shared/references/audit_worker_core_contract.md.
Receives
contextStore with: tech_stack, best_practices, codebase_root, output_dir.
Domain-aware: Supports
domain_mode + current_domain.
Workflow
MANDATORY READ: Load
shared/references/two_layer_detection.md for detection methodology.
-
Parse context from contextStore
- Extract tech_stack, best_practices, output_dir
- Determine scan_path
- Detect async framework: asyncio (Python), Node.js async, Tokio (Rust)
-
Scan codebase for violations
- Grep patterns scoped to
scan_path - For Rules 1, 3, 5: detect
blocks first, then check for violations inside themasync def
- Grep patterns scoped to
-
Collect findings with severity, location, effort, recommendation
-
Calculate score using penalty algorithm
-
Write Report: Build full markdown report in memory per
, write toshared/templates/audit_worker_report_template.md
in single Write call{output_dir}/ln-653--global.md -
Return Summary: Return minimal summary to coordinator (see Output Format)
Audit Rules (Priority: MEDIUM)
1. Blocking IO in Async
What: Synchronous file/network operations inside async functions, blocking event loop
Detection (Python):
- Find
functionsasync def - Inside them, grep for blocking calls:
- File:
,open(
,.read_bytes()
,.read_text()
,.write_bytes()
,.write_text()Path(...).(read|write) - Network:
,requests.get
,requests.posturllib.request - Subprocess:
,subprocess.run(subprocess.call(
- File:
- Exclude: calls wrapped in
orawait asyncio.to_thread(...)await loop.run_in_executor(...)
Detection (Node.js):
- Inside
or arrow async, grep forasync function
,fs.readFileSync
,fs.writeFileSyncchild_process.execSync
Severity:
- HIGH: Blocking IO in API request handler (blocks entire event loop)
- MEDIUM: Blocking IO in background task/worker
- Downgrade when: Blocking IO in
/setup/bootstrap (not request path) -> LOW. Small file (<1KB) read in non-hot path -> skip__init__
Recommendation: 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)
2. Unnecessary List Allocation
What: List comprehension where generator expression suffices
Detection:
- allocates list just to count; uselen([x for x in ...])sum(1 for ...)
- allocates list for short-circuit check; useany([x for x in ...])any(x for ...)
- same pattern; useall([x for x in ...])all(x for ...)
- use set comprehensionset([x for x in ...]){x for x in ...}
- use generator directly"".join([x for x in ...])"".join(x for x in ...)
Severity:
- MEDIUM: Unnecessary allocation in hot path (API handler, loop)
- LOW: Unnecessary allocation in infrequent code
Recommendation: Replace
[...] with generator (...) or set comprehension {...}
Effort: S (syntax change only)
3. Sync Sleep in Async
What:
time.sleep() inside async function blocks event loop
Detection:
- Grep for
insidetime\.sleep
blocksasync def - Pattern:
...await some_async_call()
...time.sleep(N)await another_call()
Severity:
- HIGH:
in async API handler (freezes all concurrent requests)time.sleep() - MEDIUM:
in async background tasktime.sleep() - Downgrade when:
in CLI/script (not async server) -> skiptime.sleep
Recommendation: Replace with
await asyncio.sleep(N)
Effort: S (one-line change)
4. String Concatenation in Loop
What: Building string via
+= inside loop (O(n^2) for large strings)
Detection:
- Pattern: variable
,result
,output
,html
withtext
inside+=
/for
loopwhile - Grep for: variable followed by
containing string operand inside loop body+=
Severity:
- MEDIUM: String concat in loop processing large data (>100 iterations)
- LOW: String concat in loop with small iterations (<100)
Recommendation: Use
list.append() + "".join(), or io.StringIO, or f-string with "".join(generator)
Effort: S (refactor to list + join)
5. Missing to_thread
for CPU-Bound
to_threadWhat: CPU-intensive synchronous code in async handler without offloading to thread
Detection:
- Inside
, find CPU-intensive operations:async def- JSON parsing large files:
,json.loads(large_data)json.load(file) - Image processing:
,PIL.Image.opencv2.imread - Crypto:
,hashlibbcrypt.hashpw - XML/HTML parsing:
,lxml.etree.parseBeautifulSoup( - Large data transformation without await points
- JSON parsing large files:
- Exclude: operations already wrapped in
or executorasyncio.to_thread()
Severity:
- MEDIUM: CPU-bound operation in async handler (blocks event loop proportionally to data size)
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)
6. Redundant Data Copies
What: Unnecessary
.copy(), list(), dict() when data is only read, not mutated
Detection:
wheredata = list(items)
is only iterated (never modified)data
whereconfig = config_dict.copy()
is only readconfig
whereresult = dict(original)
is returned without modificationresult
Severity:
- LOW: Redundant copy in most contexts (minor memory overhead)
- MEDIUM: Redundant copy of large data in hot path
Recommendation: Remove unnecessary copy; pass original if not mutated
Effort: S (remove copy call)
Scoring Algorithm
MANDATORY READ: Load
shared/references/audit_worker_core_contract.md and shared/references/audit_scoring.md.
Output Format
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)
Critical Rules
MANDATORY READ: Load
shared/references/audit_worker_core_contract.md.
- Do not auto-fix: Report only
- Async context required: Rules 1, 3, 5 apply ONLY inside async functions
- Exclude wrappers: Do not flag calls already wrapped in
/to_threadrun_in_executor - Context-aware: Small files (<1KB) read synchronously may be acceptable
- Exclude tests: Do not flag test utilities or test fixtures
Definition of Done
MANDATORY READ: Load
shared/references/audit_worker_core_contract.md.
- contextStore parsed successfully (including output_dir)
- scan_path determined
- Async framework detected (asyncio/Node.js async/Tokio)
- All 6 checks completed:
- blocking IO, unnecessary allocations, sync sleep, string concat, CPU-bound, redundant copies
- Findings collected with severity, location, effort, recommendation
- Score calculated using penalty algorithm
- Report written to
(atomic single Write call){output_dir}/ln-653--global.md - Summary written per contract
Reference Files
- Audit output schema:
shared/references/audit_output_schema.md
Version: 1.0.0 Last Updated: 2026-02-04