Agent skill

CLI Development

by cashew-labs in cashew-labs/libretto

Design rules for command-line tools: subcommand-scoped help, actionable success output, debuggable failures, stable output, meaningful exit codes and a --json mode.

MITAuto-check passedDevelopment

Install CLI Development

skills CLI
$ npx skills add cashew-labs/libretto --skill cli-development -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cashew-labs/libretto cli-development --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/cli-development .claude/skills/cli-development && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
cli-development
GitHub stars
904
Token cost
~781 tokens
SKILL.md length
335 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

Design rules for command-line tools: subcommand-scoped help, actionable success output, debuggable failures, stable output, meaningful exit codes and a --json mode.

  • Works in 4 steps: Avoid dead ends. → Make failures diagnosable. → Keep output minimal and context-efficient. → …
  • Creating a new CLI command or subcommand
  • SKILL.md covers Core Principles, Command Contract, Help and Error Pattern and Output Templates, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

The skill sets design principles for building CLIs that stay useful on both success and failure, for humans and for agents. Success output should offer the next step when one exists and say that nothing more is required when it does not. Failures should print the known state, the failed operation, the likely cause, recovery commands and, for syntax errors, usage text.

The command contract asks for deterministic output with stable wording and field names, results on stdout and diagnostics on stderr, a complete structured object on stdout in --json mode, exit code 0 for success and distinct non-zero codes for failure classes, and --dry-run on mutating commands with explicit retry behavior. Each subcommand's help follows a fixed order: purpose, usage, required arguments, optional flags and examples including one failure-recovery example. Root help stays high-level.

Error messages follow an order of summary, known state, recovery options, exact next command and a help hint, and text templates show success with a next step, success without one, and failure with recovery. The implementation checklist begins by defining command boundaries and writing subcommand help before the command logic.

When your agent uses it

  • Creating a new CLI command or subcommand
  • Writing help and usage text for a command-line tool
  • Reviewing a CLI's error output and exit codes
  • Adding a --json or --dry-run mode to an existing command

Example prompts

  • “Add a release publish subcommand to our CLI with proper help text and exit codes.”
  • “Review the error messages in this CLI and make them show recovery commands.”
  • “Add a --json output mode to the status command.”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Avoid dead ends.
  2. Make failures diagnosable.
  3. Keep output minimal and context-efficient.
  4. Scope help to subcommands.

What it can do on your machine

Read from SKILL.md and the folder at commit 41ab782. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

CLI Development loads about 781 tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 335 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~70
When it runs · the whole SKILL.md, loaded when a task matches
~781

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cashew-labs/libretto at commit 41ab782, republished under its MIT licence (© cashew-labs). 335 words, ~781 tokens.

Download SKILL.mdSave it as .claude/skills/cli-development/SKILL.md (or your agent's skills folder).
name
cli-development
description
Design and implement command-line interfaces with subcommand-scoped help, actionable success output, and debuggable failure output. Use when creating or modifying CLI commands, argument parsing, help and usage text, exit codes, or command UX for humans and agents.

CLI Development

Build CLIs that stay actionable in both success and failure paths.

Core Principles

  1. Avoid dead ends.
    • Print next steps when a reasonable next action exists.
    • On terminal completion, state that no further action is required.
  2. Make failures diagnosable.
    • Print known state, failed operation, and likely cause.
    • Include recovery commands and focused help text.
    • Include usage text for argument or syntax errors.
  3. Keep output minimal and context-efficient.
    • Use short defaults.
    • Show detail only when requested by flags or when needed to recover from failure.
  4. Scope help to subcommands.
    • Keep root help high-level.
    • Put detailed flags, examples, and edge cases in subcommand help.

Command Contract

  1. Keep output deterministic.
    • Use stable wording and field names.
    • Avoid random ordering in lists.
  2. Use conventional stream behavior.
    • Write primary result data to stdout.
    • Write diagnostics, warnings, and human-oriented guidance to stderr.
    • In machine mode (--json), print a complete structured success or error object to stdout.
    • Document that automation should capture both stdout and stderr for full logs.
  3. Return meaningful exit codes.
    • 0 for success.
    • Non-zero codes map to clear failure classes.
  4. Support automation.
    • Add machine-readable output mode such as --json.
    • Keep human-readable output as the default.
  5. Support safe execution.
    • Add --dry-run for mutating commands.
    • Make retry behavior explicit.

Help and Error Pattern

Use this pattern for each subcommand:

  1. One-line purpose.
  2. Usage line.
  3. Required arguments.
  4. Optional flags.
  5. Examples, including one failure-recovery example.

When returning an error, format output in this order:

  1. Error summary.
  2. Known state.
  3. Recovery options.
  4. Exact next command.
  5. Relevant subcommand help hint.

Output Templates

Success with next step:

text
Created release r123.
Next: mycli release publish r123

Success without next step:

text
Published release r123.
No further action required.

Failure with recovery:

text
Error: failed to publish release r123 (artifact missing).
Known state: release exists, build step did not produce dist/app.tar.gz.
Try: mycli release build r123
Then: mycli release publish r123
Help: mycli help release publish

Implementation Checklist

  • Define root command and subcommand boundaries.
  • Write subcommand help before command logic.
  • Implement parser and validate required arguments.
  • Implement success and failure output contracts.
  • Verify stream contract: parseable payloads on stdout, diagnostics on stderr.
  • Add tests for success, parser errors, and runtime failures.
  • Verify each failure path includes state and next steps.

© cashew-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/cli-development of cashew-labs/libretto.

Open the folder on GitHubat commit 41ab782

Compare with similar skills

CLI Development next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

CLI Development compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
CLI Development this skillcashew-labs/libretto904—~781Automated safety check: PassMIT
Mole Bug Patternstw93/Mole70k—~2kAutomated safety check: PassGPL-3.0
Native Data FetchingCherryHQ/cherry-studio-app4k6 repos~2.9kAutomated safety check: NotesMIT
Rust Best Practicesfarm-fe/farm5.6k3 repos~1.1kAutomated safety check: PassMIT
R Function Input Validationtidyverse/dplyr5.1k1 repos~2.3kAutomated safety check: PassCustom licence
Next Best Practicesvercel-labs/openreview1.7k18 repos~1kAutomated safety check: PassNone

Similar skills

  • A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.

    70k GitHub stars~2k tokensUpdated today
    DevelopmentAuto-check passed
  • Native Data Fetching

    CherryHQ/cherry-studio-app

    A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.

    4k GitHub starsUsed in 6 repos~2.9k tokens
    DevelopmentAuto-check: notes
  • Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.

    5.6k GitHub starsUsed in 3 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Validates arguments of exported R functions with the standalone check_* type checkers from rlang, in tidyverse style with clear error messages.

    5.1k GitHub starsUsed in 1 repo~2.3k tokens
    DevelopmentAuto-check passed
  • Next Best Practices

    vercel-labs/openreview

    Official

    Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

    1.7k GitHub starsUsed in 18 repos~1k tokens
    DevelopmentAuto-check passed
  • Error Handling

    microsoft/data-formulator

    Official

    统一错误处理系统。在添加 API 端点、修改错误处理、添加前端 API 调用、编写错误相关测试时使用. An agent skill from microsoft/data-formulator.

    18k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed

More from cashew-labs/libretto

All 21 skills in this repo
  • System Prompt Writing Guide

    cashew-labs/libretto

    Lays out a minimal, iteration-first approach to writing system prompts for LLM agents, with model-specific notes for Claude, GPT, Gemini, and Codex.

    904 GitHub stars~570 tokensUpdated 1 mo ago
    Auto-check passed
  • Address PR Review Comments

    cashew-labs/libretto

    Works through the review comments on a pull request one by one: fetches the threads, makes the fixes, runs type-check, build and lint, pushes, and resolves the threads.

    904 GitHub stars~532 tokensUpdated 1 mo ago
    Auto-check passed
  • Drives desktop Electron apps already installed on your machine, such as Slack, Discord or VS Code, by relaunching them with a debugging port and using the Libretto CLI.

    904 GitHub stars~967 tokensUpdated 1 mo ago
    Auto-check passed
  • Merge Conflict Resolver

    cashew-labs/libretto

    Resolves Git merge, rebase and cherry-pick conflicts by reading the PRs behind each side, keeping both intents and asking you when they truly clash.

    904 GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Feature Spec Generator

    cashew-labs/libretto

    Researches the codebase and relevant docs, asks clarifying questions, then writes a spec sheet in specs/ for a significant feature or complex fix.

    904 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Glimpse Changes Walkthrough

    cashew-labs/libretto

    Turns the current session's code changes into a Markdown walkthrough shown in a native Glimpse window, with highlighted code, rendered diffs and review feedback.

    904 GitHub stars~1.5k tokensUpdated 1 mo ago
    Auto-check passed

Categories

Questions about CLI Development

What does CLI Development do?

Design rules for command-line tools: subcommand-scoped help, actionable success output, debuggable failures, stable output, meaningful exit codes and a --json mode. The skill sets design principles for building CLIs that stay useful on both success and failure, for humans and for agents. Success output should offer the next step when one exists and say that nothing more is required when it does not.

When should I use CLI Development?

CLI Development fits situations like: creating a new CLI command or subcommand; writing help and usage text for a command-line tool; reviewing a CLI's error output and exit codes; adding a --json or --dry-run mode to an existing command.

How do I install CLI Development in Claude Code?

Run `npx skills add cashew-labs/libretto --skill cli-development -a claude-code`. Or copy the skill folder (.agents/skills/cli-development in cashew-labs/libretto) into .claude/skills/cli-development in your project. Claude Code loads it when a task matches its description.

How do I install CLI Development in Codex?

Run `npx skills add cashew-labs/libretto --skill cli-development -a codex`. Or copy the skill folder (.agents/skills/cli-development in cashew-labs/libretto) into .agents/skills/cli-development in your project. Codex loads it when a task matches its description.

Can I use CLI Development in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cashew-labs/libretto --skill cli-development -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cli-development, .gemini/skills/cli-development, .github/skills/cli-development and .opencode/skills/cli-development in your project.

What does CLI Development need to run?

SKILL.md names no scripts, command-line tools or credentials: CLI Development is instructions for the agent only.

Does CLI Development access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is CLI Development safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does CLI Development use?

CLI Development is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does CLI Development use?

About 781 tokens (SKILL.md is roughly 3.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to CLI Development?

Skills that share tags, products or a category with CLI Development: Mole Bug Patterns (tw93/Mole, 70k stars), Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Rust Best Practices (farm-fe/farm, 5.6k stars) and R Function Input Validation (tidyverse/dplyr, 5.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains CLI Development?

cashew-labs (a GitHub organization) maintains it in cashew-labs/libretto, which has 904 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on August 21, 2026.

Source: cashew-labs/libretto on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.