rust-cargo-assistant
Cargo build system, crate management, and Rust project configuration assistance.
Best use case
rust-cargo-assistant is best used when you need a repeatable AI agent workflow instead of a one-off prompt. It is especially useful for teams working in multi. Cargo build system, crate management, and Rust project configuration assistance.
Cargo build system, crate management, and Rust project configuration assistance.
Users should expect a more consistent workflow output, faster repeated execution, and less time spent rewriting prompts from scratch.
Practical example
Example input
Use the "rust-cargo-assistant" skill to help with this workflow task. Context: Cargo build system, crate management, and Rust project configuration assistance.
Example output
A structured workflow result with clearer steps, more consistent formatting, and an output that is easier to reuse in the next run.
When to use this skill
- Use this skill when you want a reusable workflow rather than writing the same prompt again and again.
When not to use this skill
- Do not use this when you only need a one-off answer and do not need a reusable workflow.
- Do not use it if you cannot install or maintain the related files, repository context, or supporting tools.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/rust-cargo-assistant/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How rust-cargo-assistant Compares
| Feature / Agent | rust-cargo-assistant | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Cargo build system, crate management, and Rust project configuration assistance.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Rust Cargo and Crate Management Skill
Cargo build system, crate management, and Rust project configuration assistance.
## Instructions
You are a Rust and Cargo ecosystem expert. When invoked:
1. **Cargo Management**:
- Initialize and configure Cargo projects
- Manage Cargo.toml and Cargo.lock files
- Configure build profiles and features
- Handle workspace and multi-crate projects
- Use cargo commands effectively
2. **Dependency Management**:
- Add, update, and remove crates
- Handle feature flags and optional dependencies
- Use semantic versioning and version resolution
- Manage dev, build, and target-specific dependencies
- Work with path and git dependencies
3. **Project Setup**:
- Initialize libraries and binaries
- Configure project structure
- Set up testing and benchmarking
- Configure documentation
- Manage cross-compilation
4. **Troubleshooting**:
- Fix dependency resolution errors
- Debug compilation issues
- Handle version conflicts
- Clean build artifacts
- Resolve linker errors
5. **Best Practices**: Provide guidance on Rust project organization, crate publishing, and performance optimization
## Cargo Basics
### Project Initialization
```bash
# Create new binary project
cargo new my-project
# Create new library
cargo new --lib my-lib
# Create project with specific name
cargo new --name my_awesome_project my-project
# Initialize in existing directory
cargo init
# Initialize as library
cargo init --lib
# Project structure created:
# my-project/
# ├── Cargo.toml
# ├── .gitignore
# └── src/
# └── main.rs (or lib.rs for library)
```
### Basic Commands
```bash
# Build project
cargo build
# Build with release optimizations
cargo build --release
# Run project
cargo run
# Run with arguments
cargo run -- arg1 arg2
# Run specific binary
cargo run --bin my-binary
# Check code (faster than build)
cargo check
# Run tests
cargo test
# Run benchmarks
cargo bench
# Generate documentation
cargo doc --open
# Format code
cargo fmt
# Lint code
cargo clippy
# Clean build artifacts
cargo clean
# Update dependencies
cargo update
# Search for crates
cargo search tokio
# Install binary
cargo install ripgrep
```
## Usage Examples
```
@rust-cargo-assistant
@rust-cargo-assistant --init-project
@rust-cargo-assistant --add-dependencies
@rust-cargo-assistant --optimize-build
@rust-cargo-assistant --troubleshoot
@rust-cargo-assistant --publish-crate
```
## Cargo.toml Configuration
### Complete Example
```toml
[package]
name = "my-awesome-project"
version = "0.1.0"
edition = "2021"
authors = ["Your Name <email@example.com>"]
description = "A brief description of the project"
documentation = "https://docs.rs/my-awesome-project"
homepage = "https://github.com/user/my-awesome-project"
repository = "https://github.com/user/my-awesome-project"
readme = "README.md"
license = "MIT OR Apache-2.0"
keywords = ["cli", "tool", "utility"]
categories = ["command-line-utilities"]
rust-version = "1.74.0"
[dependencies]
# Regular dependencies
tokio = { version = "1.35", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
clap = { version = "4.4", features = ["derive"] }
# Optional dependencies (feature-gated)
redis = { version = "0.24", optional = true }
[dev-dependencies]
# Test and benchmark dependencies
criterion = "0.5"
mockall = "0.12"
proptest = "1.4"
[build-dependencies]
# Build script dependencies
cc = "1.0"
[features]
# Feature flags
default = ["json"]
json = ["serde_json"]
cache = ["redis"]
full = ["json", "cache"]
[[bin]]
# Binary configuration
name = "my-app"
path = "src/main.rs"
[lib]
# Library configuration
name = "my_lib"
path = "src/lib.rs"
crate-type = ["lib", "cdylib"] # For FFI
[profile.release]
# Release profile optimization
opt-level = 3
lto = true
codegen-units = 1
strip = true
[profile.dev]
# Development profile
opt-level = 0
debug = true
[workspace]
# Workspace configuration
members = ["crates/*", "examples/*"]
exclude = ["archived/*"]
```
### Dependency Specification
```toml
[dependencies]
# Crates.io dependencies
serde = "1.0" # ^1.0.0 (latest 1.x)
tokio = "1.35.0" # ^1.35.0
regex = "~1.10.0" # >=1.10.0, <1.11.0
# Version operators
reqwest = ">= 0.11, < 0.13"
actix-web = "= 4.4.0" # Exact version
# Git dependencies
my-lib = { git = "https://github.com/user/my-lib" }
my-lib = { git = "https://github.com/user/my-lib", branch = "main" }
my-lib = { git = "https://github.com/user/my-lib", tag = "v1.0.0" }
my-lib = { git = "https://github.com/user/my-lib", rev = "abc123" }
# Path dependencies (local development)
my-local-lib = { path = "../my-local-lib" }
# Features
tokio = { version = "1.35", features = ["full"] }
serde = { version = "1.0", features = ["derive"], default-features = false }
# Optional dependencies
redis = { version = "0.24", optional = true }
# Renamed dependencies
web-framework = { package = "actix-web", version = "4.4" }
# Platform-specific dependencies
[target.'cfg(windows)'.dependencies]
winapi = "0.3"
[target.'cfg(unix)'.dependencies]
nix = "0.27"
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
```
## Project Structure Patterns
### Binary Project
```
my-app/
├── Cargo.toml
├── Cargo.lock
├── src/
│ ├── main.rs
│ ├── lib.rs (optional)
│ ├── config.rs
│ └── utils.rs
├── tests/
│ └── integration_test.rs
├── benches/
│ └── benchmark.rs
├── examples/
│ └── example.rs
└── README.md
```
### Library Project
```
my-lib/
├── Cargo.toml
├── src/
│ ├── lib.rs
│ ├── error.rs
│ └── types.rs
├── tests/
│ └── lib_test.rs
├── benches/
│ └── performance.rs
├── examples/
│ └── basic_usage.rs
└── README.md
```
### Workspace Project
```
workspace/
├── Cargo.toml (workspace root)
├── crates/
│ ├── core/
│ │ ├── Cargo.toml
│ │ └── src/lib.rs
│ ├── api/
│ │ ├── Cargo.toml
│ │ └── src/lib.rs
│ └── cli/
│ ├── Cargo.toml
│ └── src/main.rs
├── examples/
│ └── demo/
│ ├── Cargo.toml
│ └── src/main.rs
└── README.md
```
```toml
# Workspace Cargo.toml
[workspace]
members = [
"crates/core",
"crates/api",
"crates/cli",
]
[workspace.package]
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.74.0"
[workspace.dependencies]
# Shared dependency versions
tokio = { version = "1.35", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
```
## Dependency Management
### Adding Dependencies
```bash
# Add latest version
cargo add serde
# Add with features
cargo add tokio --features full
# Add dev dependency
cargo add --dev proptest
# Add build dependency
cargo add --build cc
# Add optional dependency
cargo add redis --optional
# Add from git
cargo add --git https://github.com/user/repo
# Add specific version
cargo add serde@1.0.193
```
### Updating Dependencies
```bash
# Update all dependencies
cargo update
# Update specific dependency
cargo update serde
# Update to breaking version
cargo upgrade
# Check for outdated dependencies
cargo outdated
# Show dependency tree
cargo tree
# Show dependency tree for specific package
cargo tree -p tokio
# Show duplicate dependencies
cargo tree --duplicates
# Explain why dependency is included
cargo tree -i serde
```
### Managing Features
```toml
[features]
default = ["std"]
std = []
async = ["tokio", "async-trait"]
serde = ["dep:serde", "dep:serde_json"]
full = ["std", "async", "serde"]
```
```bash
# Build with specific features
cargo build --features async
# Build with multiple features
cargo build --features "async,serde"
# Build with all features
cargo build --all-features
# Build with no default features
cargo build --no-default-features
# Build with no default but specific features
cargo build --no-default-features --features std
```
## Build Profiles and Optimization
### Profile Configuration
```toml
[profile.dev]
opt-level = 0 # No optimization
debug = true # Include debug info
split-debuginfo = "unpacked"
debug-assertions = true
overflow-checks = true
lto = false
panic = 'unwind'
incremental = true
codegen-units = 256
[profile.release]
opt-level = 3 # Maximum optimization
debug = false
strip = true # Strip symbols
lto = true # Link-time optimization
codegen-units = 1 # Better optimization
panic = 'abort' # Smaller binary
[profile.release-with-debug]
inherits = "release"
debug = true
strip = false
# Custom profile
[profile.production]
inherits = "release"
lto = "fat"
codegen-units = 1
opt-level = 3
```
```bash
# Build with specific profile
cargo build --profile production
# Release build
cargo build --release
# Development build (default)
cargo build
```
### Size Optimization
```toml
[profile.release]
opt-level = "z" # Optimize for size
lto = true
codegen-units = 1
strip = true
panic = "abort"
[profile.release.package."*"]
opt-level = "z"
```
```bash
# Additional size reduction tools
cargo install cargo-bloat
# Show what's taking space
cargo bloat --release
# Show per-crate sizes
cargo bloat --release --crates
# Use UPX for compression
upx --best --lzma target/release/my-app
```
## Testing and Benchmarking
### Testing
```rust
// src/lib.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 2), 4);
}
#[test]
#[should_panic]
fn test_panic() {
panic!("This test should panic");
}
#[test]
#[ignore]
fn expensive_test() {
// Long-running test
}
}
```
```bash
# Run all tests
cargo test
# Run specific test
cargo test test_add
# Run tests matching pattern
cargo test add
# Run ignored tests
cargo test -- --ignored
# Run with output
cargo test -- --nocapture
# Run tests in single thread
cargo test -- --test-threads=1
# Run doc tests
cargo test --doc
# Run integration tests
cargo test --test integration_test
```
### Integration Tests
```rust
// tests/integration_test.rs
use my_lib::add;
#[test]
fn integration_test() {
assert_eq!(add(5, 5), 10);
}
```
### Benchmarking with Criterion
```toml
[dev-dependencies]
criterion = "0.5"
[[bench]]
name = "my_benchmark"
harness = false
```
```rust
// benches/my_benchmark.rs
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use my_lib::add;
fn benchmark_add(c: &mut Criterion) {
c.bench_function("add", |b| {
b.iter(|| add(black_box(5), black_box(5)))
});
}
criterion_group!(benches, benchmark_add);
criterion_main!(benches);
```
```bash
# Run benchmarks
cargo bench
# Run specific benchmark
cargo bench benchmark_add
# Save baseline
cargo bench -- --save-baseline main
# Compare to baseline
cargo bench -- --baseline main
```
## Common Issues & Solutions
### Issue: Linker Errors
```bash
# Error: linking with `cc` failed
# Solution: Install C compiler
# Ubuntu/Debian
sudo apt-get install build-essential
# macOS (install Xcode Command Line Tools)
xcode-select --install
# Windows (install Visual Studio Build Tools)
# Or use rustup:
rustup toolchain install stable-x86_64-pc-windows-gnu
```
### Issue: Dependency Version Conflicts
```bash
# Check dependency tree
cargo tree
# See all versions of a package
cargo tree -i serde
# Force specific version in Cargo.toml
[dependencies]
serde = "=1.0.193" # Exact version
# Or use workspace to unify versions
[workspace.dependencies]
serde = "1.0"
```
### Issue: Slow Compilation
```bash
# Use sccache for caching
cargo install sccache
export RUSTC_WRAPPER=sccache
# Add to Cargo.toml
[profile.dev]
incremental = true
# Use mold linker (Linux)
sudo apt install mold
export RUSTFLAGS="-C link-arg=-fuse-ld=mold"
# Or add to .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
# Reduce codegen units in dev
[profile.dev]
codegen-units = 128 # Default is 256
```
### Issue: Cargo.lock Conflicts
```bash
# Regenerate lock file
rm Cargo.lock
cargo build
# Update specific dependency
cargo update -p serde
# For libraries: don't commit Cargo.lock
echo "Cargo.lock" >> .gitignore
# For binaries: always commit Cargo.lock
```
### Issue: Out of Disk Space
```bash
# Clean build artifacts
cargo clean
# Clean all projects
cargo cache --autoclean
# Install cargo-cache
cargo install cargo-cache
# Clean registry cache
cargo cache -a
```
## Cross-Compilation
### Setup Target
```bash
# List installed targets
rustup target list --installed
# Add target
rustup target add x86_64-unknown-linux-musl
rustup target add x86_64-pc-windows-gnu
rustup target add aarch64-unknown-linux-gnu
# Build for target
cargo build --target x86_64-unknown-linux-musl
```
### Cross-Compilation Configuration
```toml
# .cargo/config.toml
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
```
### Using Cross
```bash
# Install cross
cargo install cross
# Build with cross
cross build --target x86_64-unknown-linux-musl
cross build --target aarch64-unknown-linux-gnu
# Cross supports many targets out of the box
cross build --target armv7-unknown-linux-gnueabihf
```
## Publishing to Crates.io
### Prepare for Publishing
```toml
[package]
name = "my-crate"
version = "0.1.0"
edition = "2021"
authors = ["Your Name <email@example.com>"]
description = "A brief description (required)"
license = "MIT OR Apache-2.0"
repository = "https://github.com/user/my-crate"
documentation = "https://docs.rs/my-crate"
homepage = "https://github.com/user/my-crate"
readme = "README.md"
keywords = ["cli", "tool"] # Max 5
categories = ["command-line-utilities"] # From crates.io list
# Exclude files from package
exclude = [
"tests/*",
"examples/*",
".github/*",
"*.sh",
]
# Or specify what to include
include = [
"src/**/*",
"Cargo.toml",
"README.md",
"LICENSE*",
]
```
### Publishing Workflow
```bash
# Login to crates.io
cargo login <your-api-token>
# Check package before publishing
cargo package
# List files that will be published
cargo package --list
# Test package
cargo package --verify
# Publish (dry run first)
cargo publish --dry-run
# Publish for real
cargo publish
# Yank a version (remove from new dependencies)
cargo yank --vers 0.1.0
# Un-yank a version
cargo yank --vers 0.1.0 --undo
```
### Versioning Strategy
```bash
# Update version
# In Cargo.toml, update version field
# Breaking changes (0.1.0 -> 1.0.0)
# Major version bump
# New features (1.0.0 -> 1.1.0)
# Minor version bump
# Bug fixes (1.1.0 -> 1.1.1)
# Patch version bump
# Pre-release versions
0.1.0-alpha.1
0.1.0-beta.1
0.1.0-rc.1
```
## Useful Cargo Tools
### cargo-edit
```bash
# Install
cargo install cargo-edit
# Add dependency
cargo add serde
# Remove dependency
cargo rm serde
# Upgrade dependencies
cargo upgrade
```
### cargo-watch
```bash
# Install
cargo install cargo-watch
# Watch and rebuild on changes
cargo watch
# Watch and run tests
cargo watch -x test
# Watch and run
cargo watch -x run
# Clear screen on each run
cargo watch -c -x run
```
### cargo-expand
```bash
# Install
cargo install cargo-expand
# Expand macros
cargo expand
# Expand specific module
cargo expand module::path
```
### cargo-audit
```bash
# Install
cargo install cargo-audit
# Audit dependencies for security vulnerabilities
cargo audit
# Fix vulnerabilities
cargo audit fix
```
### cargo-outdated
```bash
# Install
cargo install cargo-outdated
# Check for outdated dependencies
cargo outdated
# Show detailed information
cargo outdated -v
```
### cargo-tarpaulin (Code Coverage)
```bash
# Install
cargo install cargo-tarpaulin
# Generate coverage report
cargo tarpaulin --out Html
# With verbose output
cargo tarpaulin --verbose --out Html
```
## Advanced Cargo Features
### Build Scripts
```toml
[package]
build = "build.rs"
[build-dependencies]
cc = "1.0"
```
```rust
// build.rs
fn main() {
// Compile C code
cc::Build::new()
.file("src/native/foo.c")
.compile("foo");
// Emit cargo directives
println!("cargo:rerun-if-changed=src/native/foo.c");
println!("cargo:rustc-link-lib=static=foo");
}
```
### Cargo Aliases
```toml
# .cargo/config.toml
[alias]
b = "build"
c = "check"
t = "test"
r = "run"
rr = "run --release"
br = "build --release"
wr = "watch -x run"
```
```bash
# Use aliases
cargo b # Same as cargo build
cargo rr # Same as cargo run --release
```
### Environment Variables
```bash
# Offline mode
cargo build --offline
# Custom registry
export CARGO_REGISTRY_DEFAULT=my-registry
# Custom target directory
export CARGO_TARGET_DIR=/tmp/cargo-target
# Additional rustc flags
export RUSTFLAGS="-C target-cpu=native"
# Build jobs
export CARGO_BUILD_JOBS=4
```
## Best Practices Summary
### Project Organization
- Use workspaces for multi-crate projects
- Keep src/ for source code
- Use tests/ for integration tests
- Use benches/ for benchmarks
- Use examples/ for usage examples
- Include comprehensive README.md
### Dependency Management
- Use semantic versioning
- Commit Cargo.lock for binaries
- Don't commit Cargo.lock for libraries
- Minimize dependencies
- Use features for optional functionality
- Audit dependencies regularly
### Performance
- Use release profile for production
- Enable LTO for smaller binaries
- Consider codegen-units = 1 for optimization
- Use cargo-bloat to analyze binary size
- Profile before optimizing
### Testing
- Write unit tests in each module
- Write integration tests in tests/
- Use doc tests for examples
- Aim for high test coverage
- Run tests in CI/CD
### Publishing
- Follow semver strictly
- Document breaking changes
- Include examples in documentation
- Choose appropriate keywords and categories
- Test package before publishing
- Maintain CHANGELOG.md
## Quick Reference Commands
```bash
# Project management
cargo new <name> # Create new project
cargo init # Initialize in current dir
cargo build # Build project
cargo run # Build and run
cargo check # Check without building
# Dependencies
cargo add <crate> # Add dependency
cargo update # Update dependencies
cargo tree # Show dependency tree
# Testing and quality
cargo test # Run tests
cargo bench # Run benchmarks
cargo fmt # Format code
cargo clippy # Lint code
cargo doc --open # Generate and open docs
# Maintenance
cargo clean # Clean build artifacts
cargo publish # Publish to crates.io
cargo install <crate> # Install binary
# Advanced
cargo build --release # Optimized build
cargo build --target <target> # Cross-compile
cargo package # Create package for publishing
```
## Notes
- Always commit Cargo.lock for binaries and applications
- Use workspaces to share dependencies across crates
- Enable LTO and optimize codegen-units for production
- Run cargo clippy regularly for better code quality
- Use cargo fmt to maintain consistent style
- Audit dependencies for security vulnerabilities
- Test on multiple platforms before releasing
- Follow semantic versioning strictly
- Document all public APIs thoroughly
- Use features for optional functionalityRelated Skills
github-release-assistant
Generate bilingual GitHub release documentation (README.md + README.zh.md) from repo metadata and user input, and guide release prep with git add/commit/push. Use when the user asks to write or polish README files, create bilingual docs, prepare a GitHub release, or mentions release assistant/README generation.
image-assistant
配图助手 - 把文章/模块内容转成统一风格、少字高可读的 16:9 信息图提示词;先定“需要几张图+每张讲什么”,再压缩文案与隐喻,最后输出可直接复制的生图提示词并迭代。
ralph-tui-create-beads-rust
Convert PRDs to beads for ralph-tui execution using beads-rust (br CLI). Creates an epic with child beads for each user story. Use when you have a PRD and want to use ralph-tui with beads-rust as the task source. Triggers on: create beads, convert prd to beads, beads for ralph, ralph beads, br beads.
systems-programming-rust-project
You are a Rust project architecture expert specializing in scaffolding production-ready Rust applications. Generate complete project structures with cargo tooling, proper module organization, testing
rust-pro
Master Rust 1.75+ with modern async patterns, advanced type system features, and production-ready systems programming. Expert in the latest Rust ecosystem including Tokio, axum, and cutting-edge crates. Use PROACTIVELY for Rust development, performance optimization, or systems programming.
rust-async-patterns
Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. Use when building async Rust applications, implementing concurrent systems, or debugging async code.
llm-application-dev-ai-assistant
You are an AI assistant development expert specializing in creating intelligent conversational interfaces, chatbots, and AI-powered applications. Design comprehensive AI assistant solutions with natur
azure-storage-blob-rust
Azure Blob Storage SDK for Rust. Use for uploading, downloading, and managing blobs and containers. Triggers: "blob storage rust", "BlobClient rust", "upload blob rust", "download blob rust", "container rust".
azure-keyvault-secrets-rust
Azure Key Vault Secrets SDK for Rust. Use for storing and retrieving secrets, passwords, and API keys. Triggers: "keyvault secrets rust", "SecretClient rust", "get secret rust", "set secret rust".
azure-keyvault-keys-rust
Azure Key Vault Keys SDK for Rust. Use for creating, managing, and using cryptographic keys. Triggers: "keyvault keys rust", "KeyClient rust", "create key rust", "encrypt rust", "sign rust".
azure-keyvault-certificates-rust
Azure Key Vault Certificates SDK for Rust. Use for creating, importing, and managing certificates. Triggers: "keyvault certificates rust", "CertificateClient rust", "create certificate rust", "import certificate rust".
azure-identity-rust
Azure Identity SDK for Rust authentication. Use for DeveloperToolsCredential, ManagedIdentityCredential, ClientSecretCredential, and token-based authentication. Triggers: "azure-identity", "DeveloperToolsCredential", "authentication rust", "managed identity rust", "credential rust".