Rust Development
Workflow
For any non-trivial Rust change:
Discover project guidelines — Read CLAUDE.md, AGENTS.md (in repo root and .claude/, .cursor/, .codex/ subdirs), rustfmt.toml, clippy.toml, .clippy.toml, deny.toml, and [workspace.lints] / [lints] sections in Cargo.toml. These rules apply in addition to Core Rules below.
Implement — Delegate to rust-dev:rust-coder agent. It rediscovers guidelines, implements, then verifies its own work with cargo clippy --workspace --tests -- -D warnings and cargo test --workspace before reporting done.
Review — Invoke rust-dev:review-rust-code agent after rust-coder completes. This is mandatory, not optional. Convert findings into TODOs: critical/warning → fix; suggestions → triage.
Fix issues one by one — Delegate each fix to rust-dev:rust-coder. Do not batch unrelated fixes into one delegation.
Final build — cargo build --workspace (or delegate to rust-dev:rust-builder).
Core Rules
- Edition 2024: Always
edition = "2024" in Cargo.toml
- FAIL FAST: Every error MUST propagate with
? or return Err. Logging is NOT handling. See error-handling.md
- Dependency versions: Use
x.x format (e.g., serde = "1.0"). Find latest with python3 scripts/check_crate_version.py <crate>
- Workspace architecture: Root Cargo.toml defines workspace only. Separate crates for lib/cli/client
- Error types:
thiserror (with backtrace) for libraries, anyhow for binaries/tests
- CLI-first config: Never bypass CLI args. Use
from_cli_args(), never Default that reads env
- No
env::set_var in tests: Pass config through function parameters
- Async: Use tokio consistently
- Visibility: Private (default) >
pub(crate) > pub
- No magic numbers: Use
const or CLI args
Adding Dependencies
- Run
python3 scripts/check_crate_version.py <crate-name> to find latest version
- Add to
[workspace.dependencies] in root Cargo.toml with x.x format
- Reference in member crates:
serde = { workspace = true }
Common deps: thiserror = "2.0", anyhow = "1.0", tokio = { version = "1", features = ["full"] }, serde = { version = "1.0", features = ["derive"] }, clap = { version = "4.5", features = ["derive"] }
Creating New Projects
Use the template in assets/workspace-template/:
project/
├── Cargo.toml # Workspace root, no code
├── project/ # Library crate (thiserror)
│ ├── Cargo.toml
│ └── src/lib.rs
└── project-cli/ # Binary crate (anyhow + clap)
├── Cargo.toml
└── src/main.rs
Module Organization
Split modules when file exceeds ~500 lines or tests take 50%+ of file. See module-organization.md for patterns.
Error Handling
The most critical standard. See error-handling.md for full rules and examples.
Quick check: If you see if let Err or match ... Err without return Err or ?, it's a bug.
References
- error-handling.md — FAIL FAST rules, thiserror/anyhow patterns, error chain preservation
- module-organization.md — When/how to split modules, test extraction
- dependency-guide.md — Workspace deps, feature flags, common crates
Scripts
scripts/check_crate_version.py — Query crates.io for latest dependency versions
1---2name: rust-dev3description: This skill should be used when working with Rust code, reviewing Rust code, managing Rust dependencies, creating Rust projects, or fixing Rust compilation errors. It provides strict coding standards (especially FAIL FAST error handling), workspace architecture guidance, dependency management automation, and common Rust patterns.4---5
6# Rust Development
7
8## Workflow
9
10For any non-trivial Rust change:
11
121. **Discover project guidelines** — Read `CLAUDE.md`, `AGENTS.md` (in repo root and `.claude/`, `.cursor/`, `.codex/` subdirs), `rustfmt.toml`, `clippy.toml`, `.clippy.toml`, `deny.toml`, and `[workspace.lints]` / `[lints]` sections in `Cargo.toml`. These rules apply in addition to Core Rules below.
13
142. **Implement** — Delegate to `rust-dev:rust-coder` agent. It rediscovers guidelines, implements, then verifies its own work with `cargo clippy --workspace --tests -- -D warnings` and `cargo test --workspace` before reporting done.
15
163. **Review** — Invoke `rust-dev:review-rust-code` agent after rust-coder completes. This is mandatory, not optional. Convert findings into TODOs: critical/warning → fix; suggestions → triage.
17
184. **Fix issues one by one** — Delegate each fix to `rust-dev:rust-coder`. Do not batch unrelated fixes into one delegation.
19
205. **Final build** — `cargo build --workspace` (or delegate to `rust-dev:rust-builder`).
21
22## Core Rules
23
241. **Edition 2024**: Always `edition = "2024"` in Cargo.toml
252. **FAIL FAST**: Every error MUST propagate with `?` or `return Err`. Logging is NOT handling. See [error-handling.md](references/error-handling.md)
263. **Dependency versions**: Use `x.x` format (e.g., `serde = "1.0"`). Find latest with `python3 scripts/check_crate_version.py <crate>`
274. **Workspace architecture**: Root Cargo.toml defines workspace only. Separate crates for lib/cli/client
285. **Error types**: `thiserror` (with backtrace) for libraries, `anyhow` for binaries/tests
296. **CLI-first config**: Never bypass CLI args. Use `from_cli_args()`, never `Default` that reads env
307. **No `env::set_var` in tests**: Pass config through function parameters
318. **Async**: Use tokio consistently
329. **Visibility**: Private (default) > `pub(crate)` > `pub`
3310. **No magic numbers**: Use `const` or CLI args
34
35## Adding Dependencies
36
371. Run `python3 scripts/check_crate_version.py <crate-name>` to find latest version
382. Add to `[workspace.dependencies]` in root Cargo.toml with `x.x` format
393. Reference in member crates: `serde = { workspace = true }`
40
41Common deps: `thiserror = "2.0"`, `anyhow = "1.0"`, `tokio = { version = "1", features = ["full"] }`, `serde = { version = "1.0", features = ["derive"] }`, `clap = { version = "4.5", features = ["derive"] }`
42
43## Creating New Projects
44
45Use the template in `assets/workspace-template/`:
46
47```
48project/
49├── Cargo.toml # Workspace root, no code
50├── project/ # Library crate (thiserror)
51│ ├── Cargo.toml
52│ └── src/lib.rs
53└── project-cli/ # Binary crate (anyhow + clap)
54 ├── Cargo.toml
55 └── src/main.rs
56```
57
58## Module Organization
59
60Split modules when file exceeds ~500 lines or tests take 50%+ of file. See [module-organization.md](references/module-organization.md) for patterns.
61
62## Error Handling
63
64The most critical standard. See [error-handling.md](references/error-handling.md) for full rules and examples.
65
66**Quick check:** If you see `if let Err` or `match ... Err` without `return Err` or `?`, it's a bug.
67
68## References
69
70- [error-handling.md](references/error-handling.md) — FAIL FAST rules, thiserror/anyhow patterns, error chain preservation
71- [module-organization.md](references/module-organization.md) — When/how to split modules, test extraction
72- [dependency-guide.md](references/dependency-guide.md) — Workspace deps, feature flags, common crates
73
74## Scripts
75
76- `scripts/check_crate_version.py` — Query crates.io for latest dependency versions