Atlas / Skills / mvanhorn / CLI Printing Press

CLI Printing PressBLOCK

skills/mvanhorn/printing-press-catalog

Every API has a secret identity. This finds it, absorbs every feature from every competing tool, then builds the GOAT CLI — designed for AI agents first, with SQLite sync, offline search, and compound insight commands.

Verdict
BLOCK
Grade
F
Trust score
41 /100
Version
3.0.0
Hosts
8 documented
License
MIT
Stars
4,842
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/mvanhorn/cli-printing-press/actions/workflows/lint.yml) [](https://github.com/mvanhorn/cli-printing-press/actions/workflows/golden.yml) [](https://github.com/mvanhorn/cli-printing-press/releases) [](go.mod) [](LICENSE)

Nothing is more valuable than time and money. In a world of AI agents, that's speed and token spend. A well-designed CLI is muscle memory for an agent: no hunting through docs, no wrong turns, no wasted tokens. We built the Printing Press to print the best CLIs in the world for agents.

It reads the official API docs, studies every popular community CLI and MCP server, sniffs the web for the APIs nobody published (think Google Flights or Dominos), and applies the power-user playbook Peter Steinberger proved with discrawl and gogcli - local SQLite, compound commands, agent-native flags. It fuses all of that and prints a token-efficient Go CLI plus a Claude Code skill plus an MCP server for any API or any website.

Three CLIs printed by the press, installable today:

  • ESPN (sniffed, no official API). "Tonight's NBA playoff games with live score, series state, each team's leading scorer's stat line, and any injury or lineup news from the last 24 hours." Returns everything in one call.
  • flight-goat (Kayak nonstop search plus sniffed Google Flights). "Non-stop flights over 8 hours from Seattle for 4 people, Dec 24 to Jan 1, cheapest first." Two sources stitched into one query.
  • linear
Read from source at commit d770270442d0OBSERVED · 2026-10-22
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

git clone https://github.com/mvanhorn/cli-printing-press.git
npx skills add mvanhorn/printing-press-library/cli-skills/pp-shopify -g
npx skills add mvanhorn/printing-press-library/cli-skills/pp-allrecipes -g
git clone [email protected]:mvanhorn/printing-press-library.git "$PUBLISH_REPO_DIR"
git clone https://github.com/mvanhorn/printing-press-library.git "$PUBLISH_REPO_DIR"
git clone "[email protected]:$gh_user/printing-press-library.git" "$PUBLISH_REPO_DIR"
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
openclawmentioned
windsurfmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: printing-press-amend
description: >
  Amend a published CLI from one of two input sources: (1) dogfood mode mines
  the active Claude Code session transcript for friction (missing flags, hand-
  rolled API payloads, silent-null returns); (2) direct-input mode accepts
  user-supplied asks (rename a command, add commands or feeds, fix a named bug,
  optionally sniff the source site for new endpoints). Confirms scope with the
  user, plans + executes the fix autonomously, scrubs PII, and opens a PR
  against mvanhorn/printing-press-library. Two user-in-loop checkpoints: scope
  after capture, PR draft before open.
  Trigger phrases: "amend the CLI", "submit a patch", "fix what I just
  dogfooded", "open a PR for this CLI", "patch this CLI", "add features to my
  CLI", "rename this command", "add these feeds to <cli>", "sniff for new APIs
  in <cli>", "amend with these ideas", "use printing-press-amend",
  "run printing-press-amend".
version: 0.2.0
min-binary-version: "4.0.0"
context: fork
user-invocable: true
allowed-tools:
  - Bash
  - Read
  - Write
  - Edit
  - Glob
  - Grep
  - AskUserQuestion
---

# /printing-press-amend

Turn a dogfood session into a PR for a printed CLI in the public library.

```bash
/printing-press-amend                 # auto-detect target CLI from session
/printing-press-amend superhuman      # explicit short name
/printing-press-amend superhuman-pp-cli
/printing-press-amend "$PRESS_LIBRARY/superhuman"
```

This skill lives in this repo (the machine) and acts on a printed CLI in the public library. It is sibling to `/printing-press-publish` (adds a new CLI), `/printing-press-polish` (improves a CLI pre-publish), and `/printing-press-retro` (reflects on the machine itself). None of those cover post-publish CLI amendments driven by real-session friction.

The artifact this skill produces is semantically a "patch" (in the git/PR sense), tracked by the public library's `.printing-press-patches/` directory (one file per patch). Inline `// PATCH(...)` source comments are optional navigation aids when they make a customized site easier to grep. The slash-skill name is `amend` to disambiguate from the existing `cli-printing-press patch` binary subcommand (which AST-injects pre-defined features — different mechanism, different intent).

## Setup

Before doing anything else:

<!-- PRESS_SETUP_CONTRACT_START -->
```bash
# 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" && pwd -P)"

# Prefer local build when running from inside the printing-press repo.
_press_repo=false
if [ -x "$_scope_dir/cli-printing-press" ] && [ -d "$_scope_dir/cmd/cli-printing-press" ]; then
  _press_repo=true
  export PATH="$_scope_dir:$PATH"
  echo "Using local build: $_scope_dir/cli-printing-press"
elif ! command -v cli-printing-press >/dev/null 2>&1; then
  if [ -x "$HOME/go/bin/cli-printing-press" ]; then
    echo "cli-printing-press found at ~/go/bin/cli-printing-press but not on PATH."
    echo "Add GOPATH/bin to your PATH:  export PATH=\"\$HOME/go/bin:\$PATH\""
  else
    echo "cli-printing-press binary not found."
    echo "Install with:  go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-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
# `cli-printing-press` invocation. `export PATH` above only affects this one
# Bash tool call; subsequent calls open a fresh shell and resolve bare
# `cli-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/cli-printing-press"
else
  PRINTING_PRESS_BIN="$(command -v cli-printing-press 2>/dev/null || true)"
fi
if ! command -v go >/dev/null 2>&1; then
  echo ""
  echo "[setup-error] Go toolchain not found."
  echo ""
  echo "This Printing Press flow runs Go-based build or validation commands."
  echo "Install Go 1.26.10 or newer from https://go.dev/dl/, then verify with:"
  echo "  go version"
  echo "Then re-run this skill."
  echo ""
  return 1 2>/dev/null || exit 1
fi
echo "PRINTING_PRESS_BIN=$PRINTING_PRESS_BIN"

_pp_semver_lt() {
  if [ -z "${PP_SEMVER_A:-}" ] || [ -z "${PP_SEMVER_B:-}" ]; then
    echo "[setup-error] semver comparison inputs are missing." >&2
    return 2
  fi
  awk -v a="${PP_SEMVER_A:-}" -v b="${PP_SEMVER_B:-}" 'BEGIN {
    split(a, x, "."); split(b, y, ".")
    for (i = 1; i <= 3; i++) {
      if ((x[i] + 0) < (y[i] + 0)) exit 0
      if ((x[i] + 0) > (y[i] + 0)) exit 1
    }
    exit 1
  }'
}

_pp_go_version_norm() {
  printf '%s\n' "${PP_GO_VERSION_INPUT:-}" | sed -nE 's/.*go([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1.\2.\4/p' | sed -E 's/\.$/.0/'
}

_pp_check_go_currency() {
  _pp_go_installed="$(PP_GO_VERSION_INPUT="$(go env GOVERSION 2>/dev/null)" _pp_go_version_norm)"
  _pp_go_required="$(PP_GO_VERSION_INPUT="$(go version "$PRINTING_PRESS_BIN" 2>/dev/null)" _pp_go_version_norm)"
  PP_SEMVER_A="$_pp_go_installed"
  PP_SEMVER_B="$_pp_go_required"
  if [ -z "$_pp_go_installed" ] || [ -z "$_pp_go_required" ] || ! _pp_semver_lt; then
    return 0
  fi

  echo ""
  if [ "${GOTOOLCHAIN:-auto}" = "local" ]; then
    echo "[setup-error] Go $_pp_go_required or newer is required by this cli-printing-press binary (installed: $_pp_go_installed)."
    echo "GOTOOLCHAIN=local disables automatic toolchain downloads, so later Go quality gates would fail."
    echo "Install Go $_pp_go_required or newer from https://go.dev/dl/, or unset GOTOOLCHAIN."
    echo ""
    return 1
  fi

  echo "[go-toolchain-old] Go $_pp_go_required or newer is required by this cli-printing-press binary (installed: $_pp_go_installed)."
  echo "PRESS_GO_INSTALLED=$_pp_go_installed"
  echo "PRESS_GO_REQUIRED=$_pp_go_req
05

Trust audit

BLOCKgrade F · trust 41/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (2 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
testdata/golden/expected/generate-learn-loop-api/learn-loop-example/internal/store/candidates.go:255
Exec(query string, args ...any) (sql.Result, error)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.hide_from_user · CWE-94, CWE-1427
skills/printing-press/references/setup-checks.md:116
- If it reports `No installed skills found matching: ...`, continue without blocking. The current skill is already running, so absence from the global open-agent-skills registry usually means this ses
Why it matters. asks the agent to act without the user's knowledge
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
testdata/sniff/sample.har:32
"url": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIG
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/generator/oauth_token_redirect_test.go:132
const secret = "body-borne-client-secret"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/generator/templates/cliutil_oauth_token_test.go.tmpl:40
const secret = "client-secret-must-not-leave-origin"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
internal/authdoctor/fingerprint_test.go:16
{"slack bot token", "xoxb-1234-5678-abcdef", "xoxb..."},
MEDIUMHard-coded secrets · secret.stripe · CWE-798, CWE-321
internal/browsersniff/redact_test.go:219
body := `{"note":"Bearer sk_live_abcdefghijklmnop"}`
MEDIUMPrompt injection · review.misleading_scope · CWE-94, CWE-1427
skills/printing-press-amend/SKILL.md
Read `references/transcript-parsing.md` for the full procedure. Summary of what this sub-section does:
Why it matters. The skill instructs the agent to read the active session transcript and mine it for friction signals, which the package description does not disclose.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
MEDIUMPrivilege escalation / persistence · review.unsafe_action · CWE-269, CWE-250
skills/printing-press-amend/SKILL.md
plans + executes the fix autonomously, scrubs PII, and opens a PR against mvanhorn/printing-press-library.
Why it matters. The skill directs the agent to autonomously open a PR against a public repository without the user's explicit per-PR approval.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWInventory / provenance · inv.hidden_file · CWE-1104
.golangci.yml
.golangci.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yaml
.goreleaser.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mergify.yml
.mergify.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.release-please-manifest.json
.release-please-manifest.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
testdata/golden/expected/dogfood-novel-doc-sync/fixture/cli/.printing-press.json
.printing-press.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
docs/solutions/runtime-errors/mcp-handler-pre-marshaled-body-base64-wire-payload-2026-05-13.md
mcp-handler-pre-marshaled-body-base64-wire-payload-2026-05-13.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
internal/generator/auth_pycookiecheat_argv_test.go:188
hostile := "x\") ) ) or __import__(\"os\").system(\"touch " + sentinel + "\")#"
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
internal/cli/crowd_sniff_test.go:359
{name: "path traversal", api: "../../.ssh/evil", wantErr: "path traversal"},
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.claude/scripts/install-internal-skills.sh:10
REPO_SKILLS="$SCRIPT_DIR/../../skills"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/cli/codex_model_invariant_test.go:27
skillsRoot := "../../skills"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/cli/codex_model_invariant_test.go:61
filepath.Clean("../../internal/cli/codex_model_invariant_test.go"): true,
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/cli/codex_model_invariant_test.go:92
rel := strings.TrimPrefix(path, "../../")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/cli/crowd_sniff_test.go:359
{name: "path traversal", api: "../../.ssh/evil", wantErr: "path traversal"},
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
internal/generator/auth_browser_paths_test.go:47
if _, err := persistedQueryRegistryPath("../../../tmp/exfil.json"); err == nil || !strings.Contains(err.Error(), "must be absolute") {
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
internal/generator/auth_browser_paths_test.go:53
if _, err := persistedQueryRegistryPath("relative-sentinel/exfil.json"); err == nil || !strings.Contains(err.Error(), "must be absolute") {
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
internal/generator/html_challenge_detection_test.go:59
name: "normal Cloudflare page with passive beacon",

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-22 · audit v0.4.1 · source sha d770270442d0full audit observations/trust-audit/skill/mvanhorn__printing-press-catalog.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-22d770270442d0BLOCKF41first audit
07

Questions

What does the printing-press-catalog — mvanhorn/cli-printing-press skill do?

Every API has a secret identity. This finds it, absorbs every feature from every competing tool, then builds the GOAT CLI — designed for AI agents first, with SQLite sync, offline search, and compound insight commands.

Is printing-press-catalog — mvanhorn/cli-printing-press safe to install?

No — not without reading the findings first. The audit graded it F (41/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can printing-press-catalog — mvanhorn/cli-printing-press access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.

Which assistants does printing-press-catalog — mvanhorn/cli-printing-press work with?

Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor, gemini-cli, openclaw and windsurf. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (d770270442d0), read on 2026-10-22. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: CLI Printing Press](https://modelsatlas.com/skills/mvanhorn/printing-press-catalog/badge.svg)](https://modelsatlas.com/skills/mvanhorn/printing-press-catalog/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement