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
Mensagem pronta para colar
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-cliOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/system-commandline-cli/SKILL.md -o SKILL.mdConteú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
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC