clap — скилл для Claude Code: что делает и как установить
Скилл помогает проектировать Rust CLI на Clap: от субкоманд и конфигурации до кодов выхода и тестов. Пригодится для новых консольных утилит.
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a claude-codeЧто делает clap
Скилл задаёт структуру для Rust CLI на Clap. Агент помогает описать аргументы через derive, разделить режимы на субкоманды, добавить общие флаги и один раз разобрать параметры в main. Отдельно рассматриваются проверка значений, понятный help и предсказуемое поведение команд.
Конфигурация собирается по слоям: флаги CLI имеют приоритет над переменными окружения, затем идёт файл конфигурации и значения по умолчанию. Ошибки команд возвращаются через Result и преобразуются в стабильные коды выхода. Для проверки внешнего поведения используется assert_cmd, а для Bash, Zsh и Fish можно подключить clap_complete. Парсинг аргументов нужно оставить в main, иначе библиотечный код получает лишнюю связанность.
Какие задачи решает
- спроектировать Rust CLI с субкомандами
- собрать конфигурацию из CLI, окружения и файла
- назначить стабильные коды выхода для ошибок
- протестировать аргументы, вывод и help бинарника
- сгенерировать shell completions для CLI
Примеры запросов агенту
- Собери Rust CLI на Clap с субкомандами
serveиmigrate, общим флагом--verboseи переменнойMYTOOL_CONFIG. - Настрой приоритет конфигурации: аргумент CLI, переменная окружения, файл и значение по умолчанию.
- Напиши интеграционные тесты через
assert_cmdдля--help, вывода и кода выхода.
Как установить clap
1Через Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a claude-code2Вручную: положить файлы
~/.claude/skills/clap/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/clap/
1Через Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a codex2Вручную: положить файлы
.agents/skills/clap/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a cursor2Вручную: положить файлы
.cursor/skills/clap/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install bobmatnyc/claude-mpm-skills clap2Вручную: положить файлы
.github/skills/clap/SKILL.md1Через Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a gemini-cli2Командой платформы
gemini skills install https://github.com/bobmatnyc/claude-mpm-skills --path toolchains/rust/cli/clapВручную: положить файлы
.devin/skills/clap/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о clap
Как установить clap в Claude Code?
Выполните npx skills add bobmatnyc/claude-mpm-skills --skill clap -a claude-code, затем проверьте файл ~/.claude/skills/clap/SKILL.md.
Что делает скилл clap?
Он помогает создавать тестируемые Rust CLI на Clap с аргументами, субкомандами, конфигурацией, валидацией и кодами выхода.
Какой порядок использует конфигурация?
Сначала применяются флаги CLI, затем переменные окружения, файл конфигурации и значения по умолчанию.
Исходный текст
SKILL.md · MIT
---
name: clap
description: "Build production Rust CLIs with Clap: subcommands, config layering, validation, exit codes, shell completions, and testable command surfaces"
user-invocable: false
disable-model-invocation: true
version: 1.0.0
category: toolchain
author: Claude MPM Team
license: MIT
progressive_disclosure:
entry_point:
summary: "Create ergonomic, testable Rust CLIs using Clap derive, subcommands, and config layering (CLI + env + config file)"
when_to_use: "When building Rust CLI tools that need reliable argument parsing, good help UX, strong validation, and automated tests"
quick_start: "1. Add clap (derive) 2. Define Args + Subcommand 3. Parse once in main 4. Map errors to exit codes 5. Test with assert_cmd"
token_estimate:
entry: 120
full: 4500
context_limit: 700
tags:
- rust
- cli
- clap
- config
- testing
requires_tools: []
---
# Clap (Rust) - Production CLI Patterns
## Overview
Clap provides declarative command-line parsing with strong help output, validation, and subcommand support. Use it to build CLIs with predictable UX and testable execution paths.
## Quick Start
### Minimal CLI
✅ **Correct: derive Parser**
```rust
use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "mytool", version, about = "Example CLI")]
struct Args {
/// Enable verbose output
#[arg(long)]
verbose: bool,
/// Input file path
#[arg(value_name = "FILE")]
input: String,
}
fn main() {
let args = Args::parse();
if args.verbose {
eprintln!("verbose enabled");
}
println!("input={}", args.input);
}
```
❌ **Wrong: parse multiple times**
```rust
fn main() {
let _a = Args::parse();
let _b = Args::parse(); // duplicate parsing and inconsistent behavior
}
```
## Subcommands (real tools)
Model multi-mode CLIs with subcommands and shared global flags.
✅ **Correct: global flags + subcommands**
```rust
use clap::{Parser, Subcommand, ValueEnum};
#[derive(Parser, Debug)]
struct Args {
#[arg(long, global = true)]
verbose: bool,
#[arg(long, global = true, env = "MYTOOL_CONFIG")]
config: Option<String>,
#[command(subcommand)]
cmd: Command,
}
#[derive(Subcommand, Debug)]
enum Command {
Serve { #[arg(long, default_value_t = 3000)] port: u16 },
Migrate { #[arg(long, value_enum, default_value_t = Mode::Up)] mode: Mode },
}
#[derive(Copy, Clone, Debug, ValueEnum)]
enum Mode { Up, Down }
fn main() {
let args = Args::parse();
match args.cmd {
Command::Serve { port } => println!("serve on {}", port),
Command::Migrate { mode } => println!("migrate: {:?}", mode),
}
}
```
## Config layering (CLI + env + config file)
Prefer explicit precedence:
1. CLI flags
2. Environment variables
3. Config file
4. Defaults
✅ **Correct: merge config with CLI overrides**
```rust
use clap::Parser;
use serde::Deserialize;
#[derive(Parser, Debug)]
struct Args {
#[arg(long, env = "APP_PORT")]
port: Option<u16>,
}
#[derive(Deserialize)]
struct FileConfig {
port: Option<u16>,
}
fn effective_port(args: &Args, file: &FileConfig) -> u16 {
args.port.or(file.port).unwrap_or(3000)
}
```
## Exit codes and error handling
Map failures to stable exit codes. Return `Result` from command handlers and centralize printing.
✅ **Correct: command returns Result**
```rust
use std::process::ExitCode;
fn main() -> ExitCode {
match run() {
Ok(()) => ExitCode::SUCCESS,
Err(e) => {
eprintln!("{e}");
ExitCode::from(1)
}
}
}
fn run() -> Result<(), String> {
Ok(())
}
```
## Testing (assert_cmd)
Test the binary surface (arguments, output, exit codes) without coupling to internals.
✅ **Correct: integration test**
```rust
use assert_cmd::Command;
#[test]
fn shows_help() {
Command::cargo_bin("mytool")
.unwrap()
.arg("--help")
.assert()
.success();
}
```
## Shell completions (optional)
Generate completions for Bash/Zsh/Fish.
✅ **Correct: emit completions**
```rust
use clap::{CommandFactory, Parser};
use clap_complete::{generate, shells::Zsh};
use std::io;
fn print_zsh_completions() {
let mut cmd = super::Args::command();
generate(Zsh, &mut cmd, "mytool", &mut io::stdout());
}
```
## Anti-Patterns
- Parse arguments in library code; parse once in `main` and pass a typed config down.
- Hide failures behind `unwrap`; return stable exit codes and structured errors.
- Overload one command with flags; use subcommands for distinct modes.
## Resources
- Clap: https://docs.rs/clap
- assert_cmd: https://docs.rs/assert_cmd
- clap_complete: https://docs.rs/clap_complete
© Claude MPM Team · MIT · bobmatnyc/claude-mpm-skills