
rust-systems
Rust systems programming patterns and style guide for building reliable systems software. This skill should be used when writing Rust code, especially for systems programming, CLI tools, or performance-critical applications. Covers project organization with Cargo workspaces, module structure, naming conventions (RFC 430), type/trait patterns (Option, builders, associated types), and error handling with thiserror/anyhow.
Rust systems programming patterns and style guide for building reliable systems software. This skill should be used when writing Rust code, especially for systems programming, CLI tools, or performance-critical applications. Covers project organization with Cargo workspaces, module structure, naming conventions (RFC 430), type/trait patterns (Option, builders, associated types), and error handling with thiserror/anyhow.
Rust Systems Programming Best Practices
Comprehensive Rust patterns and style conventions for systems programming, containing 52 rules across 5 categories. Designed for systems programming, CLI tools, and performance-critical applications.
When to Apply
Reference these guidelines when:
- Writing new Rust code or modules
- Organizing Rust project structure
- Defining custom types, traits, or error handling
- Reviewing Rust code for style consistency
- Building systems tools, CLIs, or daemon processes
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Project Organization | HIGH | org- |
| 2 | Module Structure | HIGH | mod- |
| 3 | Naming Conventions | HIGH | name- |
| 4 | Type & Trait Patterns | HIGH | type- |
| 5 | Error Handling | HIGH | err- |
Quick Reference
1. Project Organization (HIGH)
org-cargo-workspace- Use Cargo Workspace for Multi-Crate Projectsorg-directory-naming- Use snake_case for All Directory Namesorg-binary-library-separation- Separate Binary and Library Cratesorg-feature-domain-grouping- Group Crates by Feature Domainorg-common-crate- Use Dedicated Common Crate for Shared Utilitiesorg-flat-crate-structure- Keep Crate Structure Flat
2. Module Structure (HIGH)
mod-explicit-declarations- Use Explicit Module Declarations in lib.rsmod-colocated-tests- Co-locate Tests as test.rs Filesmod-submodule-organization- Use mod.rs for Multi-File Modulesmod-types-errors-files- Separate Types and Errors into Dedicated Filesmod-reexport-pattern- Use pub use for Clean API Re-exportsmod-conditional-compilation- Use cfg Attributes for Conditional Modules
3. Naming Conventions (HIGH)
name-function-snake-case- Use snake_case for Functions and Methodsname-type-pascal-case- Use PascalCase for Typesname-constant-screaming- Use SCREAMING_SNAKE_CASE for Constantsname-getter-prefix- Prefix Getter Functions with get_name-boolean-predicates- Use is_, has_, should_ for Boolean Predicatesname-constructor-new- Use new for Constructorsname-conversion-to-from- Use to_ and from_ for Conversionsname-type-suffixes- Use Descriptive Suffixes for Type Specializationname-field-unit-suffixes- Include Unit Suffixes in Field Namesname-module-snake-case- Use snake_case for Module Namesname-generic-parameters- Use Descriptive or Single-Letter Generic Parametersname-lifetime-parameters- Use Single Lowercase Letters for Lifetimesname-test-files- Name Test Files as test.rs
4. Type & Trait Patterns (HIGH)
type-option-nullable-fields- Use Optionfor Nullable Fields type-standard-derives- Use Consistent Derive Order for Data Structstype-builder-pattern- Use Builder Pattern with Method Chainingtype-associated-types- Use Associated Types for Related Type Relationshipstype-phantom-data- Use PhantomData for Unused Generic Parameterstype-newtype-pattern- Use Newtype Pattern for Type Safetytype-enum-copy-simple- Derive Copy for Simple Enumstype-enum-variants- Use Enums for Type-Safe Variantstype-trait-impl-grouping- Group Related Trait Implementations Togethertype-bitflags- Use bitflags! for Type-Safe Bit Flagstype-operator-overload- Implement Operator Traits for Domain Typestype-public-fields- Use Public Fields for Data Structstype-async-trait- Use async_trait for Async Trait Methodstype-boxed-trait-objects- Use Boxfor Runtime Polymorphism type-type-aliases- Use Type Aliases for Complex Generics
5. Error Handling (HIGH)
err-thiserror-enum- Use thiserror for Custom Error Typeserr-result-alias- Define Module-Local Result Type Aliaserr-path-context- Include Path Context in IO Errorserr-anyhow-context- Use context() and with_context() for Error Messageserr-bail-validation- Use bail! for Validation Failureserr-graceful-degradation- Use Graceful Degradation for Non-Critical Operationserr-panic-unrecoverable- Reserve panic! for Unrecoverable Situationserr-expect-message- Use expect() with Descriptive Messageserr-source-attribute- Use #[source] for Error Chainingerr-ok-or-else- Use ok_or_else for Expensive Error Constructionerr-two-tier-strategy- Use Two-Tier Error Strategy
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
You Might Also Like
Related Skills

coding-agent
Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.
openclaw
add-uint-support
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
pytorch
at-dispatch-v2
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
pytorch
skill-writer
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
pytorch
implementing-jsc-classes-cpp
Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.
oven-sh
implementing-jsc-classes-zig
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
oven-sh