Loading...
Loading...
Use when reviewing Rust code for craft quality, when writing new Rust code that should follow professional patterns, or when the user asks to judge, audit, or improve Rust code against best practices. Covers type design, function signatures, trait architecture, error handling, visibility, macros, testing, and performance patterns.
npx skill4agent add cygnusfear/agent-skills professional-rust-review| File | Contents | When to load |
|---|---|---|
| 47 principles on types, signatures, traits, errors, modules, macros, config, testing, performance, discipline | Dispatching a code surgery worker — the worker reads it as rubric |
| Module layout, facade pattern, privacy ladder, dependency direction, | Dispatching a structural review worker — the worker reads it as rubric |
references/professional-rust.mdreferences/codebase-organization.mdfd -e rswc -lteamsanthropic/claude-opus-4-6references/professional-rust.mdreferences/codebase-organization.mdteamsteams(action: 'delegate', tasks: [
{
text: '<surgeon request — see template A below>',
assignee: 'rust-surgeon',
model: 'anthropic/claude-opus-4-6'
},
{
text: '<zen-master request — see template B below>',
assignee: 'rust-zen-master',
model: 'anthropic/claude-opus-4-6'
}
]){placeholders}# Deep Rust Code Surgery
Read the professional Rust field guide at {skill_dir}/references/professional-rust.md completely first. It contains 47 principles with reasoning and failure modes.
## Target
{description of crates/files to review, with paths}
{any files to EXCLUDE like auto-generated bindings}
## Rules
- Do NOT produce a checklist. Do NOT say '❌ Missing'.
- Do NOT list principles that don't apply.
- Every finding must include BEFORE code and AFTER code from the actual codebase.
- The AFTER code must compile (or be obviously close). No pseudocode.
- Focus on changes that affect SCALABILITY — what makes adding the next feature harder or easier.
## What to Find
Find ALL locations where applying a principle would materially change the code. For each:
1. Show the EXACT current code (file path, line range, the actual code)
2. Explain what principle applies and WHY it matters HERE (not in general)
3. Show the REWRITTEN code — the actual diff
4. Explain what breaks or degrades without the change as the codebase grows
## What to Look For
Don't grep for keywords. READ the code and find:
- A function that takes `String` where `&str` or `impl Into<>` would prevent unnecessary allocation
- An enum matched on externally when methods on the enum would centralize logic
- A struct with `pub` fields mutated from 3 modules when encapsulation would help
- A `HashMap<u64, X>` where a newtype key would prevent mixing up ID types
- A `Result<(), String>` that forces callers to parse strings to understand failures
- A function returning `Option<T>` without `#[must_use]` where callers forget to check
- A hot loop calling a cross-crate function without `#[inline]`
- A type constructed once and never mutated with `String` fields that should be `Box<str>`
- An `.unwrap()` that will panic in production under specific conditions
- A 200+ line function that should be 5 methods on a struct
Read broadly first. Then dive deep.
## Output
Write to {output_path}. Structure each finding as:
# Surgery N: [descriptive title]
**File:** path:line_range
**Principle:** §N — [name]
**Why here:** [specific reasoning for THIS code]
### Before
```rust
[actual current code][rewritten code]
#### Template B: Zen Master
Fill in `{placeholders}`:
pub usepubpub(crate)utils.rshelpers.rsstd_ext/pubunsafe
### Step 4: Present Results
When both workers return, synthesize findings from both into a single report. Summarize the top 5 findings from each worker in a table, then point to the full reports.
If the user wants to act on findings, create tickets for the top-priority items using `tk`.
---
## What the Guides Cover (for reference, do not load into worker prompt)
The 47 principles span 10 areas:
| Part | Principles | Area |
|------|-----------|------|
| I | §1–§7 | Types: newtypes, enums vs bools, hidden inner enums, right-sized types, Box\<str\>, Cow, bytes vs strings |
| II | §8–§13 | Signatures: Into vs AsRef, ?Sized, monomorphization firewall, &mut Self vs self, #[must_use] |
| III | §14–§19 | Traits: minimum surface, iteration style, generics vs trait objects, closure adapters, associated types |
| IV | §20–§25 | Errors: custom vs anyhow, user vs programmer, structured context, mechanical context, bool callbacks |
| V | §26–§29 | Modules: pub(crate), deny(missing_docs), facade crates, types-carry-behavior |
| VI | §30–§32 | Macros: boilerplate only, field-type bounds, dummy impls |
| VII | §33–§35 | Config: private config/public builder/frozen product, two-phase processing, cost-tiered dispatch |
| VIII | §36–§39 | Testing: Result-returning tests, roundtrip testing, behavior not structure, colocated tests |
| IX | §40–§42 | Performance: #[inline], FlatMap, no unnecessary async |
| X | §43–§47 | Discipline: lint config, #[non_exhaustive], documenting omissions, owning critical path, FromStr before serde |
## Common Mistakes
**Checklist mode:** The worker produces a table of "present/absent" for each principle. Useless. The instructions explicitly forbid this — if the worker falls into checklist mode, the dispatch prompt needs sharpening.
**Theoretical findings:** "You could use Cow here." Without showing the current code, the rewrite, and why it matters for THIS codebase, it's noise.
**Too many findings, too shallow:** 15 deep findings beat 47 shallow ones. The worker should read broadly, then pick the 15 highest-impact sites and go deep on each.
**Ignoring auto-generated code:** Always exclude bindings, protobuf output, and other generated files from review scope.