Pular para o conteúdo
Skillpedia
Código em geral40 mil · #5389

system-commandline-cli

Ajuda a gerenciar comandos de linha de comando em projetos .NET. Facilita a criação e organização de interfaces de linha de comando.

O que ela faz

Esta ferramenta ajuda a criar e organizar comandos para programas de linha de comando em .NET. Ela define como os comandos, opções e argumentos devem ser estruturados e como eles interagem.

Quando usar

  • ✓Ao criar novos comandos para um programa de linha de comando.
  • ✓Ao adicionar opções ou argumentos a comandos existentes.
  • ✓Ao organizar comandos em grupos lógicos.

Exemplo do que pedir para a IA

“Como eu adiciono uma opção chamada --output que aceita texto a um comando?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/github/awesome-copilot/blob/main/skills/system-commandline-cli/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/system-commandline-cli/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta usa uma estrutura definida para criar classes de comando. Cada comando tem um nome, descrição e pode ter opções (como --verbose) ou argumentos (como um nome de arquivo). As ações do comando são definidas em métodos separados.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add github/awesome-copilot --skill system-commandline-cli

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/system-commandline-cli/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Habilidade de Desenvolvedor CLI do System.CommandLine

Você está trabalhando em um aplicativo CLI .NET construído com System.CommandLine v2.x.x, com destino a .NET 8 ou posterior ou qualquer implementação .NET Standard 2.0, incluindo .NET Framework 4.6.1 ou posterior e .NET Core 2.0 ou posterior. Siga estas regras e padrões estritamente ao criar ou modificar comandos CLI.


Visão Geral da Arquitetura

<CLI Project>/
├── Program.cs                       # Entry point and command invocation
└── Commands/
    ├── CommandBase.cs               # Base class for all commands
    ├── GlobalOptions.cs             # Defines global options for the CLI
    ├── RootCommand.cs               # Registers top-level commands
    └── <Group>/                     # One folder per command group
        ├── <Group>Command.cs        # Parent command that registers its children
        └── <Group><Verb>Command.cs  # Leaf command with its handler

REGRA 1 — Prefira uma Classe Base de Comando Específica do Projeto

Prefira definir uma CommandBase abstrata específica do projeto que herde de System.CommandLine.Command. Comandos concretos devem herdar desta classe base para que o comportamento e as convenções compartilhados permaneçam centralizados.

internal abstract class CommandBase : Command
{
    protected CommandBase(string name, string? description = null)
        : base(name, description)
    {
    }
}

internal sealed class MyCommand : CommandBase
{
    public MyCommand()
        : base("command-name", "Help text shown in --help")
    {
        this.SetAction(CommandHandler);
    }

    private async Task<int> CommandHandler(
        ParseResult parseResult,
        CancellationToken cancellationToken)
    {
        // implementation
        return 0;
    }
}

Quando o projeto já possui uma classe base de comando, preserve suas convenções estabelecidas. Caso contrário, introduza uma quando os comandos precisarem de comportamento compartilhado; aplicações simples podem herdar diretamente de Command quando uma classe base não agrega valor significativo.


REGRA 2 — Opções e Argumentos

Definindo Opções

private readonly Option<string> _myOption;

// In constructor:
_myOption = new Option<string>("--my-option")
{
    Description = "Clear description of what this option does",
    Required = true,   // or false
};
_myOption.Aliases.Add("-m");       // Add a short alias
this.Options.Add(_myOption);

Definindo Argumentos (posicionais)

private readonly Argument<string> _fileArgument;

// In constructor:
_fileArgument = new Argument<string>("file")
{
    Description = "Path to the input file"
};
this.Arguments.Add(_fileArgument);

Lendo Valores em Handlers

// Required option/argument — use GetValue:
var value = parseResult.GetValue(_myOption);

REGRA 3 — Padrão de Handler de Comando

Handlers são métodos async conectados via SetAction:

this.SetAction(CommandHandler);

private async Task<int> CommandHandler(ParseResult parseResult, CancellationToken cancellationToken)
{
    // 1. Read option/argument values
    // 2. Load session settings (if needed)
    // 3. Validate configuration early — fail fast with clear error
    // 4. Execute business logic
    // 5. Output results with Console

    return 0; // or non-zero exit code
}

REGRA 4 — Grupo de Comandos (Pai com Subcomandos)

Um comando de grupo registra filhos, mas não chama SetAction:

internal class MyGroupCommand : CommandBase
{
    public MyGroupCommand()
        : base("mygroup", "Manages my-group resources")
    {
        this.Subcommands.Add(new MyGroupListCommand());
        this.Subcommands.Add(new MyGroupCreateCommand());
        this.Subcommands.Add(new MyGroupDeleteCommand());
    }
}

Um comando pode definir tanto uma ação quanto subcomandos quando a invocação direta tiver um comportamento significativo.


REGRA 5 — Registro

  • Comandos de nível superior → registre em RootCommand.cs:

    this.Subcommands.Add(new MyGroupCommand());
    
  • Subcomandos → registre dentro do construtor do comando pai:

    this.Subcommands.Add(new MyGroupCreateCommand());
    

REGRA 6 — Confirmação do Usuário para Operações Destrutivas

Console.WriteLine("Are you sure you want to delete X? This action cannot be undone. (yes/no)");
var confirmation = Console.ReadLine();
if (confirmation?.ToLower() != "yes" && confirmation?.ToLower() != "y")
{
    Console.WriteLine("Operation cancelled.");
    return 0;
}

…

Perguntas frequentes

O que é um 'System.CommandLine'?

É uma biblioteca do .NET que facilita a criação de aplicativos de linha de comando robustos e fáceis de usar.

Qual a diferença entre Option e Argument?

Opções geralmente começam com '--' (ex: --verbose) e são opcionais ou configuráveis. Argumentos são valores posicionais que o comando espera (ex: um nome de arquivo).

O que é um 'Command Handler'?

É o método que contém a lógica principal do que um comando deve fazer quando é executado.

Detalhes

Descrição original do autor

Use this skill when adding, modifying, or reviewing CLI commands in a .NET project built with System.CommandLine. Triggers include: creating a new CLI command, adding options or arguments, wiring command handlers, registering subcommands, building command groups, or any architecture decision about CLI command structure. Also use when the user mentions 'System.CommandLine', 'CommandBase', 'SetActio

repo: github/awesome-copilot

Popularidade

Estrelas no GitHub
40 mil
Posição no ranking
#5389
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas