К основному содержанию
скилл CX Codex

clap — скилл для Claude Code: что делает и как установить

Скилл помогает проектировать Rust CLI на Clap: от субкоманд и конфигурации до кодов выхода и тестов. Пригодится для новых консольных утилит.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add bobmatnyc/claude-mpm-skills --skill clap -a claude-code
Открыть на GitHub

Что делает 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-code

2Вручную: положить файлы

~/.claude/skills/clap/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/clap/

По шагам, с командами для каждой платформы: Как установить скилл в 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

Похожие скиллы

Все скиллы по теме «Языки программирования» →
Rust CLI taste f Промпт задаёт набор правил, по которым ИИ пишет консольные утилиты на Rust: разбор аргументов, ошибки, вывод, тесты. GP ChatGPT ★ 174 676звёзд репо domain-cli actionbook Задаёт правила архитектуры консольных утилит на Rust: парсинг аргументов через clap и разделение потоков данных и ошибок. CX Codex +1 3 100установок rust-best-practices apollographql Скилл для написания и ревью Rust-кода по хендбуку Apollo GraphQL: заимствование против клонирования, обработка ошибок, тесты. CX Codex +1 21 200установок rust-testing affaan-m Скилл для написания тестов на Rust: юнит-тесты, интеграционные, async, property-based, моки и покрытие. Пригодится, когда ведёшь проект по TDD. CX Codex +1 5 600установок rtk-tdd rtk-ai Скилл ведёт разработку на Rust по циклу Red-Green-Refactor и сам включается для задач с кодом, тестами, рефакторингом и исправлением ошибок. CX Codex +1 2 100установок tdd-rust rtk-ai Скилл для разработки RTK-фильтров по методу TDD. Пишешь тест на реальных данных, реализуешь минимум кода, проверяешь экономию токенов — и фиксируешь формат вывода снимком через insta. CX Codex +1 1 400установок

Из того же набора97

ecto-patterns Скилл подсказывает агенту, как писать схемы, changesets, миграции и транзакции в Ecto для Phoenix-приложений на Elixir. CX Codex +1 336установок writing-plans Скилл превращает готовый дизайн в подробный план реализации с короткими задачами, файлами, кодом и проверками. Нужен перед передачей работы инженеру. CX Codex +1 335установок media-transcoding Скилл для пакетной перекодировки видео по готовым пресетам FFmpeg: веб, мобильные, архив. Пригодится, когда надо привести библиотеку роликов к одному формату. CX Codex +1 335установок phoenix-ops Скилл для подготовки Phoenix-приложения к продакшену: релизы, runtime-конфиг, кластеризация, телеметрия и защита эндпоинтов. CX Codex +1 331установок pre-merge Скилл-чеклист, который прогоняет типы, линтер и тесты до коммита, до PR и до мержа в main. Пригодится, когда не хочется ловить поломки уже в ревью. CX Codex +1 330установок vb6-legacy Скилл для работы с классическим VB6: подсказывает, как переносить код в VB.NET и вызывать COM-объекты без утечек памяти. CX Codex +1 329установок vercel-overview Скилл-справочник по Vercel: проекты, CLI, переменные окружения, Git-интеграция, REST API и вебхуки. Пригодится, когда агент планирует деплой или разбирается в настройках проекта. CX Codex +1 328установок flexlayout-react Скилл для ИИ-агента, который помогает собирать докинг-интерфейсы на flexlayout-react: перетаскиваемые панели, вкладки, разделители и сохранение раскладки. CX Codex +1 328установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой