Skip to content
Development
Skill

/cli-skills

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

From plugin
llamafarm
83619 skills1 MCP

Claude Code

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

SKILL.md

cli-skills.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

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

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

// 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

// 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

Read more
@llama-farm
Ships withllamafarm

Enterprise AI capabilities on your own hardware. No cloud required. LlamaFarm is an open-source AI platform that runs entirely on your hardware.

83619 skills1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
836
Star history of llama-farm/llamafarm on GitHub, a chart by star-history.com

Other skills on llamafarm.

code-review

code-review

Comprehensive code review for diffs. Analyzes changed code for security vulnerabilities, anti-patterns, and quality issues.…

commit-push-pr

commit-push-pr

Commit changes, push to GitHub, and open a PR. Includes quality checks (security, patterns, simplification). Use --quick to skip…

common-skills

common-skills

Best practices for the Common utilities package in LlamaFarm. Covers HuggingFace Hub integration, GGUF model management, and…

config-skills

config-skills

Configuration module patterns for LlamaFarm. Covers Pydantic v2 models, JSONSchema generation, YAML processing, and validation.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about cli-skills.

Which coding agents can use cli-skills?
cli-skills installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.