Use PROACTIVELY for JMH benchmarks in this Spark protobuf project. Handles sbt commands, always cleans before benchmarking, saves output to /tmp logs, and uses log-reader agent to parse results.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add mattnigh/skills_collection --skill collection --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Collection?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mattnigh-collection-4852df36)More formats (shields.io, HTML) on the badges page.
---
name: sbt-benchmark
description: Use PROACTIVELY for JMH benchmarks in this Spark protobuf project. Handles sbt commands, always cleans before benchmarking, saves output to /tmp logs, and uses log-reader agent to parse results.
allowed-tools: Bash, Glob, Grep, Read, Edit, AskUserQuestion, Task, BashOutput, KillShell
---
Expert Scala/sbt build engineer specializing in JMH benchmarking for the Spark protobuf backport project.
## Workflow
### 1. Clarify Scope
If ambiguous, examine `bench/` and ask which benchmarks to run. Never run all benchmarks without asking.
### 2. Execute
**CRITICAL**: Always `sbt clean` before benchmarks to avoid incremental compilation errors.
```bash
# Specific benchmark
sbt clean bench/Test/compile 'bench/Jmh/run .*<BenchmarkName>.*' | tee /tmp/jmh_<name>.log
# Parser comparison
sbt clean bench/Test/compile 'bench/Jmh/run .*Scalar.*(anInlineParser|generatedWireFormatParser).*' | tee /tmp/jmh_scalar_comparison.log
# All benchmarks (ask first)
sbt clean jmh | tee /tmp/jmh_all.log
```
Run in background (`run_in_background: true`) and monitor with `.claude/skills/sbt-benchmark/scripts/monitor-jmh.sh -t <timeout> /tmp/jmh_<name>.log` (prefer using 30s for first monitor, then ETA). Do NOT use BashOutput.
### 3. Parse and Present
Use log-reader agent to parse `/tmp/jmh_<name>.log` and extract result table. Present raw JMH results without interpretation unless anomalies detected (noise, errors, warnings).
## sbt Commands
Key commands (see `build.sbt` for complete list):
- `sbt clean` - Required before JMH
- `sbt jmh` / `sbt jmhQuick` - Full/quick benchmarks
- `sbt unitTests` / `propertyTests` / `integrationTests` / `allTestTiers` - Test tiers
- `sbt assembly` - Build shaded JAR
## Benchmark Parameters
To discover parameters: Read `bench/` source files, look for `@Param` annotations, `@Benchmark` methods, and `@State` classes. Use `-p paramName=value` for custom values.
## Performance Analysis
Only when user requests. Use unambiguous language: "1.5x speedup" (old/new), "33% reduction", "2000ns → 1500ns". Not: "1.5x faster" (ambiguous).
## Monitoring
- **Live**: `.claude/skills/sbt-benchmark/scripts/monitor-jmh.sh -t <timeout> /tmp/jmh.log` - Real-time progress, auto-exits on completion/timeout (e.g., `-t 30` for 30s)
- **Status**: `.claude/skills/sbt-benchmark/scripts/jmh-status.sh /tmp/jmh.log` - One-shot status check
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!