home / skills / pluginagentmarketplace / custom-plugin-rust / rust-cli
npx playbooks add skill pluginagentmarketplace/custom-plugin-rust --skill rust-cliReview the files below or copy the command above to add this skill to your agents.
---
name: rust-cli
description: Build professional CLI applications with clap and TUI
sasmp_version: "1.3.0"
bonded_agent: rust-project-agent
bond_type: SECONDARY_BOND
version: "1.0.0"
---
# Rust CLI Skill
Build professional command-line applications with clap, colored output, and interactive features.
## Quick Start
### Basic CLI with Clap
```toml
[dependencies]
clap = { version = "4", features = ["derive"] }
anyhow = "1"
```
```rust
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "myapp", version, about)]
struct Cli {
#[arg(short, long)]
verbose: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Init { name: String },
Build { #[arg(short, long)] release: bool },
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Init { name } => println!("Creating: {}", name),
Commands::Build { release } => println!("Building..."),
}
Ok(())
}
```
### Colored Output
```rust
use colored::Colorize;
println!("{}", "Success!".green().bold());
println!("{}", "Error!".red());
```
### Progress Bars
```rust
use indicatif::{ProgressBar, ProgressStyle};
let pb = ProgressBar::new(100);
pb.set_style(ProgressStyle::default_bar()
.template("{bar:40} {pos}/{len}")?);
for _ in 0..100 {
pb.inc(1);
}
pb.finish();
```
### Interactive Prompts
```rust
use dialoguer::{Confirm, Input, Select};
let name: String = Input::new()
.with_prompt("Project name")
.interact_text()?;
if Confirm::new().with_prompt("Continue?").interact()? {
// proceed
}
```
## Common Patterns
### Error Handling
```rust
fn main() {
if let Err(e) = run() {
eprintln!("{}: {}", "error".red(), e);
std::process::exit(1);
}
}
```
### Testing CLI
```rust
use assert_cmd::Command;
use predicates::prelude::*;
#[test]
fn test_help() {
Command::cargo_bin("myapp").unwrap()
.arg("--help")
.assert()
.success();
}
```
## Troubleshooting
| Problem | Solution |
|---------|----------|
| Args not parsed | Add `features = ["derive"]` |
| Colors not showing | Check terminal support |
## Resources
- [clap docs](https://docs.rs/clap)
- [Rust CLI Book](https://rust-cli.github.io/book/)