Files
gh-hugoduncan-library-skill…/skills/babashka-cli
2025-11-29 18:47:15 +08:00
..
2025-11-29 18:47:15 +08:00
2025-11-29 18:47:15 +08:00
2025-11-29 18:47:15 +08:00
2025-11-29 18:47:15 +08:00

babashka.cli

Turn Clojure functions into CLIs with minimal effort.

Quick Start

(require '[babashka.cli :as cli])

;; Parse basic options
(cli/parse-opts ["--port" "8080"] {:coerce {:port :long}})
;;=> {:port 8080}

;; Parse with subcommands
(cli/parse-args ["deploy" "prod" "--force"]
  {:coerce {:force :boolean}})
;;=> {:cmds ["deploy" "prod"] :opts {:force true}}

Key Features

  • Flexible Syntax: Both :opt and --opt styles supported
  • Type Coercion: Automatic or explicit type conversion
  • Subcommands: Built-in dispatch mechanism
  • Validation: Required options, restrictions, custom validators
  • Collections: Handle repeated options naturally
  • Help Generation: Format specs into help text

Basic Coercion

(cli/parse-opts ["--port" "8080" "--verbose"]
  {:coerce {:port :long :verbose :boolean}})
;;=> {:port 8080 :verbose true}

Aliases

(cli/parse-opts ["-p" "8080" "-v"]
  {:alias {:p :port :v :verbose}
   :coerce {:port :long :verbose :boolean}})
;;=> {:port 8080 :verbose true}

Positional Arguments

(cli/parse-opts ["deploy" "production"]
  {:args->opts [:action :env]})
;;=> {:action "deploy" :env "production"}

Validation

(cli/parse-args ["--port" "8080"]
  {:coerce {:port :long}
   :require [:port :host]
   :validate {:port pos?}})
;; Throws if :host missing or :port not positive

Subcommand Dispatch

(defn deploy [opts]
  (println "Deploying to" (get-in opts [:opts :env])))

(cli/dispatch
  [{:cmds ["deploy"] :fn deploy}]
  ["deploy" "--env" "prod"])

Using the Skill

Invoke with:

claude-code --skill clojure-libraries:babashka.cli

The skill provides comprehensive documentation including:

  • Complete API reference for all functions
  • Coercion types and collection handling
  • Validation and error handling patterns
  • Subcommand routing and dispatch
  • Help text generation
  • Common CLI patterns and recipes

Learning Path

  1. Start with parse-opts for simple option parsing
  2. Use parse-args when you need positional arguments
  3. Add validation with :require, :restrict, :validate
  4. Implement subcommands with dispatch
  5. Generate help text with format-opts

Resources

Installation

;; deps.edn
{:deps {org.babashka/cli {:mvn/version "0.8.60"}}}

;; bb.edn (built-in since babashka 0.9.160)
{:deps {org.babashka/cli {:mvn/version "0.8.60"}}}