Skip to content
Back to skills

Cli Skills

ASecurity

CLI best practices for LlamaFarm. Covers Cobra, Bubbletea, Lipgloss patterns for Go CLI development.

  • 838 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 20, 2026
ai-agentsgotestingapisecurityperformance

Works with

  • terminal
  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 20, 2026

npx -y skills add llama-farm/llamafarm --skill cli-skills --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cli Skills?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cli Skills
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/llama-farm-cli-skills/badge)](https://www.skillsdirectory.com/skills/llama-farm-cli-skills)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cli-skills
description: CLI best practices for LlamaFarm. Covers Cobra, Bubbletea, Lipgloss patterns for Go CLI development.
allowed-tools: Read, Grep, Glob
user-invocable: false
---

# CLI Skills for LlamaFarm

Framework-specific patterns for the LlamaFarm CLI. These guidelines extend the [shared Go skills](../go-skills/SKILL.md) with Cobra, Bubbletea, and Lipgloss best practices.

## Tech Stack

- Go 1.24+
- Cobra (CLI framework)
- Bubbletea (TUI framework)
- Lipgloss (terminal styling)
- Bubbles (TUI components)

## Directory Structure

```
cli/
  cmd/             # Cobra command implementations
    config/        # Configuration types and loading
    orchestrator/  # Service management and process control
    utils/         # Shared utilities (HTTP, output, logging)
    version/       # Version and upgrade handling
  internal/        # Internal packages (not exported)
    tui/           # Reusable TUI components
    buildinfo/     # Build-time information
```

## Quick Reference

### Cobra Commands
- Use `RunE` over `Run` for error handling
- Register flags in `init()` functions
- Use persistent flags for shared options
- Validate arguments with `Args` field

### Bubbletea TUI
- Implement `Init()`, `Update()`, `View()` interface
- Use message types for state changes
- Return `tea.Cmd` for async operations
- Keep state immutable in `Update()`

### Lipgloss Styling
- Define styles as package-level constants
- Use `lipgloss.NewStyle()` for styling
- Handle terminal width dynamically
- Support color themes via style variables

## Shared Go Skills

This skill extends the base Go skills. See:

| Link | Description |
|------|-------------|
| [go-skills/SKILL.md](../go-skills/SKILL.md) | Overview and quick reference |
| [go-skills/patterns.md](../go-skills/patterns.md) | Idiomatic Go patterns |
| [go-skills/concurrency.md](../go-skills/concurrency.md) | Goroutines, channels, sync |
| [go-skills/error-handling.md](../go-skills/error-handling.md) | Error wrapping, sentinels |
| [go-skills/testing.md](../go-skills/testing.md) | Table-driven tests, mocks |
| [go-skills/security.md](../go-skills/security.md) | Input validation, secure coding |

## CLI-Specific Checklists

| File | Description |
|------|-------------|
| [cobra.md](cobra.md) | Cobra command patterns, flags, validation |
| [bubbletea.md](bubbletea.md) | Bubbletea Model/Update/View patterns |
| [performance.md](performance.md) | CLI-specific optimizations |

## Key Patterns in This Codebase

### Command Registration Pattern
```go
var myCmd = &cobra.Command{
    Use:   "mycommand [args]",
    Short: "Brief description",
    Long:  `Extended description with examples.`,
    Args:  cobra.MaximumNArgs(1),
    RunE: func(cmd *cobra.Command, args []string) error {
        // Implementation with error returns
        return nil
    },
}

func init() {
    rootCmd.AddCommand(myCmd)
    myCmd.Flags().StringVar(&flagVar, "flag", "default", "Flag description")
}
```

### TUI Model Pattern
```go
type myModel struct {
    viewport viewport.Model
    textarea textarea.Model
    width    int
    height   int
    err      error
}

func (m myModel) Init() tea.Cmd {
    return tea.Batch(m.textarea.Focus(), doAsyncWork())
}

func (m myModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
    var cmds []tea.Cmd
    switch msg := msg.(type) {
    case tea.WindowSizeMsg:
        m.width = msg.Width
        m.height = msg.Height
    case tea.KeyMsg:
        switch msg.String() {
        case "ctrl+c":
            return m, tea.Quit
        }
    }
    return m, tea.Batch(cmds...)
}

func (m myModel) View() string {
    return lipgloss.JoinVertical(lipgloss.Left,
        m.viewport.View(),
        m.textarea.View(),
    )
}
```

### Output API Pattern
```go
// Use the output API for consistent messaging
utils.OutputInfo("Starting service %s...", serviceName)
utils.OutputSuccess("Service started successfully")
utils.OutputError("Failed to start service: %v", err)
utils.OutputProgress("Downloading model...")
utils.OutputWarning("Service already running")
```

### Service Orchestration Pattern
```go
// Ensure services are running before operations
factory := GetServiceConfigFactory()
config := factory.ServerOnly(serverURL)
orchestrator.EnsureServicesOrExitWithConfig(config, "server")

// Or with multiple services
config := factory.RAGCommand(serverURL)
orchestrator.EnsureServicesOrExitWithConfig(config, "server", "rag", "universal-runtime")
```

## Guidelines

1. **User Experience First**: CLI should feel responsive and provide clear feedback
2. **Graceful Degradation**: Handle missing services, network errors, and timeouts gracefully
3. **Consistent Output**: Use the output API for all user-facing messages
4. **Cross-Platform**: Test on macOS, Linux, and Windows
5. **Terminal Compatibility**: Test with different terminal emulators and sizes

Files in this skill

  • SKILL.md4.8 KB
  • bubbletea.md12.3 KB
  • cobra.md8.4 KB
  • performance.md11.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.