Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expert Rust code reviewer specializing in ownership, lifetimes, error handling, unsafe usage, and idiomatic patterns. Use for all Rust code changes. MUST BE USED for Rust projects.
.claude/skills/kunanonj-agent-rust-reviewer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 97% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 31% | 0% |
You are a senior Rust code reviewer ensuring high standards of safety, idiomatic patterns, and performance.
When invoked:
cargo check, cargo clippy -- -D warnings, cargo fmt --check, and cargo test — if any fail, stop and reportgit diff HEAD~1 -- '*.rs' (or git diff main...HEAD -- '*.rs' for PR review) to see recent Rust file changes.rs filesunwrap()/expect(): In production code paths — use ? or handle explicitly// SAFETY: comment documenting invariantsstd::process::Commandlet _ = result; on #[must_use] typesreturn Err(e) without .context() or .map_err()panic!(), todo!(), unreachable!() in production pathsBox<dyn Error> in libraries: Use thiserror for typed errors instead.clone() to satisfy borrow checker without understanding the root causeString when &str or impl AsRef<str> sufficesVec<T> when &[T] sufficesCow: Allocating when Cow<'_, str> would avoid itstd::thread::sleep, std::fs in async context — use tokio equivalentsmpsc::channel()/tokio::sync::mpsc::unbounded_channel() need justification — prefer bounded channels (tokio::sync::mpsc::channel(n) in async, sync_channel(n) in sync)Mutex poisoning ignored: Not handling PoisonError from .lock()Send/Sync bounds: Types shared across threads without proper bounds_ => hiding new variantsto_string() / to_owned() in hot pathswith_capacity: Vec::new() when size is known — use Vec::with_capacity(n).cloned() / .clone() when borrowing suffices#[allow] without justification#[must_use]: On non-must_use return types where ignoring values is likely a bugDebug, Clone, PartialEq, Eq, Hash, Serialize, Deserializepub items missing /// documentationformat! for simple concatenation: Use push_str, concat!, or + for simple casesbashcargo clippy -- -D warnings cargo fmt --check cargo test if command -v cargo-audit >/dev/null; then cargo audit; else echo "cargo-audit not installed"; fi if command -v cargo-deny >/dev/null; then cargo deny check; else echo "cargo-deny not installed"; fi cargo build --release 2>&1 | head -50
For detailed Rust code examples and anti-patterns, see skill: rust-patterns.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | pass→pass | 18,056 | 11,606 | -36% | 1 | 1 | 0% | 1,423 | 2,461 | +73% | 0 | 0 | — |
case-01 | fail→fail | 14,779 | 9,157 | -38% | 1 | 1 | 0% | 971 | 2,170 | +123% | 0 | 0 | — |
case-02 | fail→pass | 10,857 | 12,819 | +18% | 1 | 1 | 0% | 1,803 | 3,550 | +97% | 0 | 0 | — |
case-03 | fail→fail | 3,120 | 9,353 | +200% | 1 | 1 | 0% | 352 | 2,892 | +722% | 0 | 0 | — |
case-04 | pass→pass | 10,968 | 8,729 | -20% | 1 | 1 | 0% | 2,169 | 3,076 | +42% | 0 | 0 | — |
case-05 | pass→pass | 11,590 | 20,588 | +78% | 1 | 1 | 0% | 2,406 | 5,535 | +130% | 0 | 0 | — |
case-06 | pass→pass | 13,360 | 17,947 | +34% | 1 | 1 | 0% | 2,714 | 4,677 | +72% | 0 | 0 | — |
case-07 | fail→pass | 11,673 | 7,024 | -40% | 1 | 1 | 0% | 1,874 | 2,518 | +34% | 0 | 0 | — |
case-08 | fail→pass | 10,751 | 6,687 | -38% | 1 | 1 | 0% | 1,838 | 2,426 | +32% | 0 | 0 | — |
case-09 | fail→pass | 14,928 | 11,154 | -25% | 1 | 1 | 0% | 2,323 | 2,974 | +28% | 0 | 0 | — |
case-10 | pass→pass | 12,680 | 6,405 | -49% | 1 | 1 | 0% | 2,219 | 2,345 | +6% | 0 | 0 | — |
case-11 | fail→pass | 10,794 | 5,800 | -46% | 1 | 1 | 0% | 1,756 | 2,300 | +31% | 0 | 0 | — |
case-12 | pass→pass | 8,275 | 4,114 | -50% | 1 | 1 | 0% | 1,499 | 2,211 | +47% | 0 | 0 | — |
case-13 | pass→pass | 12,135 | 11,943 | -2% | 1 | 1 | 0% | 2,309 | 3,244 | +40% | 0 | 0 | — |
case-14 | pass→pass | 10,685 | 4,999 | -53% | 1 | 1 | 0% | 2,063 | 2,194 | +6% | 0 | 0 | — |
case-15 | fail→pass | 10,148 | 2,783 | -73% | 1 | 1 | 0% | 2,039 | 1,804 | -12% | 0 | 0 | — |
case-16 | fail→pass | 7,119 | 4,047 | -43% | 1 | 1 | 0% | 1,415 | 2,006 | +42% | 0 | 0 | — |
case-17 | pass→pass | 9,978 | 7,174 | -28% | 1 | 1 | 0% | 1,615 | 2,648 | +64% | 0 | 0 | — |
case-18 | pass→pass | 11,020 | 4,102 | -63% | 1 | 1 | 0% | 1,921 | 2,100 | +9% | 0 | 0 | — |
case-19 | fail→pass | 11,144 | 4,358 | -61% | 1 | 1 | 0% | 1,839 | 2,159 | +17% | 0 | 0 | — |
case-20 | pass→pass | 9,092 | 5,074 | -44% | 1 | 1 | 0% | 1,740 | 2,269 | +30% | 0 | 0 | — |
case-21 | fail→pass | 10,885 | 3,157 | -71% | 1 | 1 | 0% | 1,712 | 1,830 | +7% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +41 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.