Agent Skills: Go CLI Skill

CLI application patterns and best practices

command-lineclibest-practicesgoapplication-patterns
developmentID: pluginagentmarketplace/custom-plugin-go/go-cli

Skill Files

Browse the full folder contents for go-cli.

Download Skill

Loading file tree…

skills/go-cli/SKILL.md

Skill Metadata

Name
go-cli
Description
CLI application patterns and best practices

Go CLI Skill

Supplementary CLI patterns and utilities.

Overview

Additional CLI patterns for argument parsing, progress indicators, and user interaction.

Parameters

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | feature | string | yes | - | Feature: "progress", "prompt", "color" |

Core Topics

Argument Validation

var cmd = &cobra.Command{
    Use:   "process [file]",
    Args:  cobra.ExactArgs(1),
    RunE: func(cmd *cobra.Command, args []string) error {
        file := args[0]
        if _, err := os.Stat(file); os.IsNotExist(err) {
            return fmt.Errorf("file not found: %s", file)
        }
        return process(file)
    },
}

Progress Bar

func DownloadWithProgress(url, dest string) error {
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    file, err := os.Create(dest)
    if err != nil {
        return err
    }
    defer file.Close()

    bar := progressbar.DefaultBytes(resp.ContentLength, "downloading")
    _, err = io.Copy(io.MultiWriter(file, bar), resp.Body)
    return err
}

Interactive Prompt

func ConfirmAction(message string) bool {
    reader := bufio.NewReader(os.Stdin)
    fmt.Printf("%s [y/N]: ", message)

    input, _ := reader.ReadString('\n')
    input = strings.TrimSpace(strings.ToLower(input))

    return input == "y" || input == "yes"
}

Colored Output

import "github.com/fatih/color"

var (
    successColor = color.New(color.FgGreen).SprintFunc()
    errorColor   = color.New(color.FgRed).SprintFunc()
    warnColor    = color.New(color.FgYellow).SprintFunc()
)

func PrintSuccess(msg string) {
    fmt.Println(successColor("✓"), msg)
}

func PrintError(msg string) {
    fmt.Fprintln(os.Stderr, errorColor("✗"), msg)
}

Troubleshooting

Failure Modes

| Symptom | Cause | Fix | |---------|-------|-----| | Colors not showing | No TTY | Check isatty | | Input hangs | Stdin closed | Handle EOF |

Usage

Skill("go-cli")