printing-press-catalog

Browse and install pre-built Go CLIs for popular APIs from the catalog

INSTALLATION
npx skills add https://github.com/mvanhorn/cli-printing-press --skill printing-press-catalog
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

/printing-press-catalog

Deprecated: This skill is superseded by the main /printing-press skill, which now checks the built-in catalog automatically. Use /printing-press <API> instead. For browsing the catalog, use printing-press catalog list in your terminal.

Browse and install pre-built Go CLIs for popular APIs.

Quick Start

/printing-press-catalog

/printing-press-catalog install stripe

/printing-press-catalog search auth

Prerequisites

  • Go 1.26.3 or newer installed
  • printing-press binary on PATH (install with go install github.com/mvanhorn/cli-printing-press/v4/cmd/printing-press@latest)

Setup

Before any other commands, run the setup contract to verify the printing-press binary is on PATH and initialize scope variables:

# min-binary-version: 4.0.0

# Derive scope first — needed for local build detection

_scope_dir="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")"

_scope_dir="$(cd "$_scope_dir" &#x26;&#x26; pwd -P)"

# Prefer local build when running from inside the printing-press repo.

_press_repo=false

if [ -x "$_scope_dir/printing-press" ] &#x26;&#x26; [ -d "$_scope_dir/cmd/printing-press" ]; then

  _press_repo=true

  export PATH="$_scope_dir:$PATH"

  echo "Using local build: $_scope_dir/printing-press"

elif ! command -v printing-press >/dev/null 2>&#x26;1; then

  if [ -x "$HOME/go/bin/printing-press" ]; then

    echo "printing-press found at ~/go/bin/printing-press but not on PATH."

    echo "Add GOPATH/bin to your PATH:  export PATH=\"\$HOME/go/bin:\$PATH\""

  else

    echo "printing-press binary not found."

    echo "Install with:  go install github.com/mvanhorn/cli-printing-press/v4/cmd/printing-press@latest"

  fi

  return 1 2>/dev/null || exit 1

fi

# Resolve and emit the absolute path the agent must use for every later

# `printing-press` invocation. `export PATH` above only affects this one

# Bash tool call; subsequent calls open a fresh shell and resolve bare

# `printing-press` against the user's default PATH, where a stale global

# can silently shadow the local build. The agent captures this marker and

# substitutes the absolute path into every later invocation.

if [ "$_press_repo" = "true" ]; then

  PRINTING_PRESS_BIN="$_scope_dir/printing-press"

else

  PRINTING_PRESS_BIN="$(command -v printing-press 2>/dev/null || true)"

fi

echo "PRINTING_PRESS_BIN=$PRINTING_PRESS_BIN"

PRESS_BASE="$(basename "$_scope_dir" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9_-]/-/g; s/^-+//; s/-+$//')"

if [ -z "$PRESS_BASE" ]; then

  PRESS_BASE="workspace"

fi

PRESS_SCOPE="$PRESS_BASE-$(printf '%s' "$_scope_dir" | shasum -a 256 | cut -c1-8)"

PRESS_HOME="$HOME/printing-press"

PRESS_RUNSTATE="$PRESS_HOME/.runstate/$PRESS_SCOPE"

PRESS_LIBRARY="$PRESS_HOME/library"

mkdir -p "$PRESS_RUNSTATE" "$PRESS_LIBRARY"

After running the setup contract, capture the PRINTING_PRESS_BIN=<abs-path> line from stdout. **Every subsequent printing-press ... invocation in this skill must use that absolute path** (substitute the value, not the literal $PRINTING_PRESS_BIN token) — export PATH above only affects the single Bash tool call it runs in, so later calls open a fresh shell where bare printing-press resolves against the user's default PATH and a stale global can shadow the local build.

After capturing the binary path, check binary version compatibility. Read the min-binary-version field from this skill's YAML frontmatter. Run <PRINTING_PRESS_BIN> version --json and parse the version from the output. Compare it to min-binary-version using semver rules. If the installed binary is older than the minimum, stop immediately and tell the user: "printing-press binary vX.Y.Z is older than the minimum required vA.B.C. Run go install github.com/mvanhorn/cli-printing-press/v4/cmd/printing-press@latest to update."

Generated CLIs are published to $PRESS_LIBRARY/, not to the repo.

Workflows

List Catalog (no arguments)

When invoked with no arguments, list all available CLIs grouped by category.

  • Read all YAML files in catalog/ using Glob + Read
  • Parse each file's name, display_name, description, category fields
  • Group by category and display:
Available CLIs (12 entries):

Payments:

  stripe - Payment processing and financial infrastructure API

  square - Payment processing and commerce API

Auth:

  stytch - Authentication and user management API

Email:

  sendgrid - Email delivery and marketing API

Communication:

  discord - Chat and community platform API

  twilio - Communication APIs for SMS, voice, and messaging

  front - Customer communication platform API

Developer Tools:

  github - Software development platform API

  digitalocean - Cloud infrastructure and developer platform API

Project Management:

  asana - Work management and project tracking API

CRM:

  hubspot - CRM contacts API

Example:

  petstore - Canonical OpenAPI example

Install any CLI: /printing-press-catalog install <name>

Install (install )

When invoked with install <name>:

  • Read catalog/.yaml
  • If file doesn't exist, show error: "No catalog entry for ''. Run /printing-press-catalog to see available CLIs."
  • Extract spec_url from the catalog entry
  • Show preview: "Installing <display_name> CLI from <spec_url>"
  • Download the spec and generate:
CATALOG_TMP_DIR="/tmp/printing-press/catalog"

mkdir -p "$CATALOG_TMP_DIR"

SPEC_TMP="$(mktemp "$CATALOG_TMP_DIR/<name>-spec-XXXXXX.yaml")"

curl -sL -o "$SPEC_TMP" "<spec_url>"

OUTPUT_BASE="$PRESS_LIBRARY/<name>-pp-cli"

OUTPUT_DIR="$OUTPUT_BASE"

i=2

while [ -e "$OUTPUT_DIR" ]; do

  OUTPUT_DIR="${OUTPUT_BASE}-$i"

  i=$((i + 1))

done

printing-press generate \

  --spec "$SPEC_TMP" \

  --output "$OUTPUT_DIR" \

  --validate
  • If all quality gates pass, present the result:
Generated <name>-pp-cli with X resources.

Try it:

  cd "$OUTPUT_DIR"

  go install ./cmd/<name>-pp-cli

  <name>-pp-cli --help

  <name>-pp-cli doctor
  • If gates fail, show the error and suggest: "Try /printing-press <display_name> API for a custom generation with retry support."

Search (search )

When invoked with search <query>:

  • Read all YAML files in catalog/
  • Search name, display_name, description, and category for the query (case-insensitive)
  • Display matching entries

Limitations

  • Large API specs (Stripe, Discord, GitHub) take 30-60 seconds to generate and compile
  • Generated CLIs are truncated to 50 resources / 20 endpoints per resource
  • Catalog entries point to external URLs that may change
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card