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 inCargo.toml. These rules apply in addition to Core Rules below. -
Implement — Delegate to
rust-dev:rust-coderagent. It rediscovers guidelines, implements, then verifies its own work withcargo clippy --workspace --tests -- -D warningsandcargo test --workspacebefore reporting done. -
Review — Invoke
rust-dev:review-rust-codeagent 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 torust-dev:rust-builder).
Core Rules
- Edition 2024: Always
edition = "2024"in Cargo.toml - FAIL FAST: Every error MUST propagate with
?orreturn Err. Logging is NOT handling. See error-handling.md - Dependency versions: Use
x.xformat (e.g.,serde = "1.0"). Find latest withpython3 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,anyhowfor binaries/tests - CLI-first config: Never bypass CLI args. Use
from_cli_args(), neverDefaultthat reads env - No
env::set_varin tests: Pass config through function parameters - Async: Use tokio consistently
- Visibility: Private (default) >
pub(crate)>pub - No magic numbers: Use
constor 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 withx.xformat - 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