npx skills add smithery/pluginagentmarketplace --skill go-cli-tools
pluginagentmarketplace/custom-plugin-go · Archived
go-cli-tools
Build production CLI tools with Cobra, Viper, and terminal UI
Installation
npx skills add pluginagentmarketplace/custom-plugin-go --skill go-cli-tools
Stronger alternatives
This repository is archived — consider an actively maintained alternative.
Go concurrency patterns - goroutines, channels, sync primitives
4 installsCore Go programming concepts - syntax, types, interfaces, error handling
2 installsBuild production REST APIs with Go - handlers, middleware, security
2 installsGo testing practices - unit tests, benchmarks, mocks, coverage
2 installsSimilar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Browser automation CLI for AI agents. Use when the user needs to interact with websites, includ…
810.4K installsReview UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "chec…
617.3K installsBuild, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and …
576.5K installsArchitect and provision enterprise Azure infrastructure from workload descriptions. For cloud a…
402.8K installsAlso in this package
Other skills from pluginagentmarketplace/custom-plugin-go.
npx skills add pluginagentmarketplace/custom-plugin-go
More details
Agent compatibility
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Also listed on
Alternate registries and mirrors of this skill.
Repository health
main
Package contents
Files included with this skill beyond the listing page.
-
skill md
SKILL.md4,004 B -
docs
SUMMARY.md81 B
History
- First seen on skills.sh
- First recorded snapshot · 3 installs
SKILL.md
Go CLI Tools Skill
Build professional command-line applications with Go.
Overview
Complete guide for building CLI tools with Cobra, Viper configuration, terminal UI, and cross-platform support.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| framework | string | no | "cobra" | CLI framework |
| config_format | string | no | "yaml" | Config: "yaml", "json", "toml" |
| interactive | bool | no | false | Include interactive prompts |
Core Topics
Cobra Setup
var rootCmd = &cobra.Command{
Use: "myapp",
Short: "My CLI application",
Version: version,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
return initConfig()
},
}
func Execute() int {
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
return 1
}
return 0
}
func init() {
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file")
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output")
}
Subcommands
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Start the server",
RunE: func(cmd *cobra.Command, args []string) error {
port, _ := cmd.Flags().GetInt("port")
return runServer(port)
},
}
func init() {
serveCmd.Flags().IntP("port", "p", 8080, "server port")
rootCmd.AddCommand(serveCmd)
}
Viper Configuration
func initConfig() error {
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
} else {
home, _ := os.UserHomeDir()
viper.AddConfigPath(home)
viper.AddConfigPath(".")
viper.SetConfigName(".myapp")
viper.SetConfigType("yaml")
}
viper.SetEnvPrefix("MYAPP")
viper.AutomaticEnv()
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
return fmt.Errorf("config: %w", err)
}
}
return nil
}
Output Formatting
type OutputFormat string
const (
FormatJSON OutputFormat = "json"
FormatYAML OutputFormat = "yaml"
FormatTable OutputFormat = "table"
)
func PrintOutput(data interface{}, format OutputFormat) error {
switch format {
case FormatJSON:
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
return enc.Encode(data)
case FormatYAML:
out, err := yaml.Marshal(data)
if err != nil {
return err
}
fmt.Print(string(out))
return nil
case FormatTable:
return printTable(data)
default:
return fmt.Errorf("unknown format: %s", format)
}
}
Signal Handling
func runWithGracefulShutdown(fn func(ctx context.Context) error) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
errCh := make(chan error, 1)
go func() {
errCh <- fn(ctx)
}()
select {
case err := <-errCh:
return err
case sig := <-sigCh:
fmt.Printf("\nReceived %s, shutting down...\n", sig)
cancel()
return <-errCh
}
}
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Invalid usage |
| 64 | Command line error |
| 65 | Data format error |
Troubleshooting
Failure Modes
| Symptom | Cause | Fix |
|---|---|---|
| Exit 0 on error | Using Run not RunE | Switch to RunE |
| Flag undefined | Missing init() | Register in init() |
| Config not loaded | Wrong path | Check viper paths |
Usage
Skill("go-cli-tools")