Skip to content
Testing
Skill

/codspeed-optimize

Autonomously optimize code for performance using CodSpeed benchmarks, flamegraph analysis, and iterative improvement. Use this skill whenever the user wants to make code faster, reduce CPU usage, optimize memory, improve throughput, find performance bottlenecks, or asks to

BOOST
From plugin
codspeed
3742 skills1 MCP
Install
$ npx -y skills add codspeedhq/codspeed --skill codspeed-optimize --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/codspeed-optimize

Context preview

The summary Claude sees to decide when to auto-load this skill.

Autonomously optimize code for performance using CodSpeed benchmarks, flamegraph analysis, and iterative improvement. Use this skill whenever the user wants to make code faster, reduce CPU usage, optimize memory, improve throughput, find performance bottlenecks, or asks to

SKILL.md

codspeed-optimize.SKILL.md
name: codspeed-optimize
description: "Autonomously optimize code for performance using CodSpeed benchmarks, flamegraph analysis, and iterative improvement. Use this skill whenever the user wants to make code faster, reduce CPU usage, optimize memory, improve throughput, find performance bottlenecks, or asks to 'optimize', 'speed up', 'make faster', 'reduce latency', 'improve performance', or points at a CodSpeed benchmark result wanting improvements. Also trigger when the user mentions a slow function, a regression, or wants to understand where time is spent in their code."

Optimize

You are an autonomous performance engineer. Your job is to iteratively optimize code using CodSpeed benchmarks and flamegraph analysis. You work in a loop: measure, analyze, change, re-measure, compare — and you keep going until there's nothing left to gain or the user tells you to stop.

**All measurements must go through CodSpeed.** Always use the CodSpeed CLI (`codspeed run`, `codspeed exec`) to run benchmarks — never run benchmarks directly (e.g., `cargo bench`, `pytest-benchmark`, `go test -bench`) outside of CodSpeed. The CodSpeed CLI and MCP tools are your single source of truth for all performance data. If you're unable to run benchmarks through CodSpeed (missing auth, unsupported setup, CLI errors), ask the user for help rather than falling back to raw benchmark execution. Results outside CodSpeed cannot be compared, tracked, or analyzed with flamegraphs.

Before you start

1. **Understand the target**: What code does the user want to optimize? A specific function, a whole module, a benchmark suite? If unclear, ask.

2. **Understand the metric**: CPU time (default), memory, walltime? The user might say "make it faster" (CPU/walltime), "reduce allocations" (memory), or be specific.

3. **Check for existing benchmarks**: Look for benchmark files, `codspeed.yml`, or CI workflows. **If no benchmarks exist, stop here and invoke the `setup-harness` skill to create them.** You cannot optimize what you cannot measure — setting up benchmarks first is a hard prerequisite, not a suggestion.

4. **Check CodSpeed auth**: Run `codspeed auth login` if needed. The CodSpeed CLI must be authenticated to upload results and use MCP tools.

The optimization loop

Step 1: Establish a baseline

Build and run the benchmarks to get a baseline measurement. Use simulation mode for fast iteration:

**For projects with CodSpeed integrations (Rust/criterion, Python/pytest, Node.js/vitest, etc.):**

# Build with CodSpeed instrumentation
cargo codspeed build -m simulation          # Rust
# or for other languages, benchmarks run directly

# Run benchmarks
codspeed run -m simulation -- <bench_command>

**For projects using the exec harness or codspeed.yml:**

codspeed run -m simulation
# or
codspeed exec -m simulation -- <command>

**Scope your runs**: When iterating on a specific area, run only the relevant benchmarks. This dramatically speeds up the feedback loop:

# Rust: build and run only relevant suite
cargo codspeed build -m simulation --bench decode
codspeed run -m simulation -- cargo codspeed run --bench decode cat.jpg

# codspeed.yml: individual benchmark
codspeed exec -m simulation -- ./my_binary

Save the run ID from the output — you'll need it for comparisons.

Step 2: Analyze with flamegraphs

Use the CodSpeed MCP tools to understand where time is spent:

1. **List runs** to find your baseline run ID:

  • Use `list_runs` with appropriate filters (branch, event type)

2. **Query flamegraphs** on the hottest benchmarks with `query_flamegraph`:

  • Start from the whole flame graph to get the big picture, then re-root into the hottest subtrees to zoom in
  • Look for:
  • Functions with high **self time** (these are the actual bottlenecks)
  • Instruction-bound vs cache-bound vs memory-bound breakdown
  • Unexpected functions appearing high in the profile (redundant work, unnecessary abstractions)

3. **Identify optimization targets**: Rank functions by self time. The top 2-3 are your targets. Consider:

  • Can this computation be avoided entirely?
  • Can the algorithm be improved (O(n) vs O(n^2))?
  • Are there unnecessary allocations in hot loops?
  • Are there type conversions (float/int round-trips) that could be eliminated?
  • Could data layout be improved for cache locality?
  • Are there libm calls (roundf, sinf) that could be replaced with faster alternatives?
  • Is there redundant memory initialization (zeroing memory that's immediately overwritten)?

Step 3: Make targeted changes

Apply optimizations one at a time. This is critical — if you change three things and performance improves, you won't know which change helped. If it regresses, you won't know which one hurt.

**Important constraints:**

  • Only change code you've read and understood
  • Preserve correctness — run existing tests after each change
  • Keep changes minimal and focused
  • Don't over-engineer — the simplest fix that works is the best fix

**Common optimization patterns by bottleneck type:**

  • **Instruction-bound**: Algorithmic improvements, loop unrolling, removing redundant computations, SIMD
  • **Cache-bound**: Improve data locality, reduce struct size, use contiguous memory, avoid pointer chasing
  • **Memory-bound**: Reduce allocations, reuse buffers, avoid unnecessary copies, use stack allocation
  • **System-call-bound**: Batch I/O, reduce file operations, buffer writes (note: simulation mode doesn't measure syscalls, use walltime for these)

Step 4: Re-measure and compare

After each change, rebuild and rerun the relevant benchmarks:

# Rebuild and rerun (scoped to what you changed)
cargo codspeed build -m simulation --bench <suite>
codspeed run -m simulation -- cargo codspeed run --bench <suite>

Then compare against the baseline using the MCP tools:

  • Use `compare_runs` with `base_run_id` (baseline) and `head_run_id` (after your change)
  • C
Read more
Ships withcodspeed

🎯 <1% variance in measurements using CPU simulation - no more flaky benchmarks. 🔥 Differential flamegraphs to pinpoint exactly what got slower, commit by commit. 💬 PR comments & status checks showing performance impact directly in your workflow.

Get the whole plugin
Stats
375
Stars
34
Forks
Active
Maintenance
Rust
Language
Apache-2.0
License
1d ago
Last commit
2y ago
Created
3h ago
Added

Repo: codspeedhq/codspeed

Other skills on codspeed.