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.
> /plugin marketplace add mvanhorn/cli-printing-press> /plugin install cli-printing-press@cli-printing-press
What's inside
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:
Browse the full catalog of printed CLIs at printingpress.dev or in the Printing Press Library, organized by category, most with full MCP servers.
Codex users: see docs/CODEX.md to install the Printing Press skills with --agent codex, verify the install, and understand how that differs from /printing-press <api> codex.
Cursor users: see docs/CURSOR.md for how to install a printed CLI, attach the matching skill, handle auth, and choose CLI vs MCP when your repo does not already document a workflow.
You need both the binary and the Printing Press skills. The skills (/printing-press <app>) are the primary interface; they drive the binary behind the scenes.
The binary alone works (research, generation, verification, scoring) but skips the curated agent loop. The skills alone have nothing to call. Install both.
Prerequisites: Go 1.26.6 or newer, Claude Code or another skills-supported agent, and Node/npm for npx. The skills are tested with Claude Code; install for Codex with --agent codex when you want to try the same slash-command workflow there. Use Claude Code for the best-tested experience.
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash
The installer runs go install for the generator binary, then refreshes all Printing Press skills through skills@latest add --skill '*'. Restart or reload your agent session after it completes so the refreshed skills are loaded.
Use --cli-only or --skills-only when you only want one side:
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash -s -- --cli-only
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash -s -- --skills-only
Claude Code is the default install target. To install or refresh the skills for Codex instead, pass --agent codex:
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash -s -- --skills-only --agent codex
npx -y skills@latest list -g -a codex --json
See docs/CODEX.md for the Codex-specific notes.
Verify with cli-printing-press --version. If install fails, confirm Go 1.26.6 or newer is installed, Node/npm is installed for npx, and $GOPATH/bin is on your PATH.
Older releases installed a generator binary named printing-press. That legacy
entrypoint still works for compatibility, but the canonical generator command is
now cli-printing-press so the public library installer can own
printing-press list, printing-press search, and printing-press install.
Install or update the binary:
go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest
Use Vercel's open-agent-skills CLI to install the Printing Press skills from this repo into a supported agent. Claude Code is the default and tested path:
npx -y skills@latest add mvanhorn/cli-printing-press/skills --skill '*' -g -a claude-code -y
For Codex:
npx -y skills@latest add mvanhorn/cli-printing-press/skills --skill '*' -g -a codex -y
npx -y skills@latest list -g -a codex --json
To refresh the skills later without naming individual skills, rerun the installer in skills-only mode:
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash -s -- --skills-only
Restart or reload the target agent after refreshing skills so the new skill text is loaded.
Once installed, you can start Claude Code from any folder. Codex users should start a fresh Codex session after installing or refreshing skills.
Use this if you're editing the Printing Press itself and want local skill changes to take effect on the next session start.
git clone https://github.com/mvanhorn/cli-printing-press.git
cd cli-printing-press
claude --plugin-dir . # load this repo's skills directly
claude --plugin-dir . -w # ...in a new git worktree (parallel runs)
For a persistent local setup that survives restarts and also loads in background sessions, see Local Plugin Development.
claude
Then inside Claude Code:
/printing-press <app-name>
For example:
/printing-press Notion # Print a CLI for an API by name
/printing-press https://postman.com/explore # ...or point at a website (no spec needed)
/printing-press-reprint notion # Reprint an existing CLI under the latest machine
/printing-press drives the cli-printing-press binary you installed — research, generation, scoring, and shipcheck all run through it. Two parts, one workflow.
One command. Lean loop. Produces a Go CLI plus an MCP server that absorbs every feature from every competing tool, then transcends with compound use cases only possible with local data. REST, GraphQL, or browser-sniffed traffic. No OpenAPI spec required.
Each run produces two binaries (<api>-pp-cli plus <api>-pp-mcp), research documents, verification proofs, and a Quality Score.
By default, active and published output are separated:
~/printing-press/.runstate/<scope>/runs/<run-id>/working/<api>-pp-cli~/printing-press/library/<api>~/printing-press/manuscripts/<api>/<run-id>/research/, proofs/, discovery/, and pipeline/<scope> is derived from the current git checkout path, so parallel worktrees do not stomp on each other. If you pass --output, that overrides the generated CLI location for that command.
/printing-press HubSpot codex # Offload code generation to Codex CLI
/printing-press HubSpot # Standard Opus mode (default)
When you add codex, Phase 3's code generation tasks are delegated to Codex CLI. Claude stays the brain (research, planning, scoring, review). Codex does the hands (writing Go code from scoped prompts). Same quality, 60% fewer Opus tokens. If Codex fails 3 times in a row, the press falls back to doing it locally, no manual intervention needed.
Targeted fix-up. Diagnostics (dogfood, verify, scorecard, output review), fixes verify failures, removes dead code, cleans descriptions and READMEs, offers to publish. Auto-runs as Phase 5.5 of every generation; can also run standalone:
/printing-press-polish notion
When you're happy with a CLI, publish it to the library:
/printing-press-publish linear # Validates, packages, creates PR
After dogfooding a published CLI in a Claude Code session, turn the friction you hit (missing flags, hand-rolled API payloads, silent-null returns) into a PR for the public library. Mines the active session transcript, scopes the patch with you, plans + executes the fix autonomously, scrubs PII, and opens a PR — two checkpoints (scope, PR draft):
/printing-press-amend # auto-detect target CLI from session
/printing-press-amend superhuman # explicit target
Most generators wrap endpoints and stop. Printing Press generates CLIs that understand the domain.
Local-first data layer. High-gravity resources get domain-specific SQLite tables (not JSON blobs), FTS5 full-text search indexes, and incremental sync with cursor tracking. sync pulls data down. search finds it in milliseconds. sql lets power users query directly. All offline, all local.
Machine-owned freshness. Store-backed CLIs can opt into a bounded pre-read refresh via cache.enabled so --data-source auto keeps the local store current without a manual sync. --data-source local and --data-source live give you full control.
Compound commands no wrapper can do. Once data lives in SQLite, commands like stale, health, bottleneck, and reconcile become possible - they join across resources and analyze history. A stateless API wrapper literally cannot do this.
Agent-native by default. Human-friendly tables when you're in a terminal. Auto-JSON when piped, no --json flag needed. --compact drops to high-gravity fields only (60-80% fewer tokens). Typed exit codes (0/2/3/4/5/7) let agents self-correct without parsing error text. --dry-run for safe exploration. Every flag exists because an AI agent will call it thousands of times a day.
No spec? No problem. Don't have an OpenAPI spec? Point the press at a website. It launches a browser, captures traffic, reverse-engineers the API, and generates the spec for you. ESPN, Postman Explore, internal tools - if you can click through it, the press can build a CLI for it.
Dual interface from one spec. Every API gets a Cobra CLI (<api>-pp-cli) and an MCP server (<api>-pp-mcp). Same client, same store, same auth. Shell agents use the CLI. IDE agents use MCP. Zero code duplication.
Showing a partial view of a very large repo.
FAQ
cli-printing-press is a Claude Code plugin with 9 hand-picked skills for cli tools work, indexed on Flowy. Install it with the command on its page. It includes printing-press-amend, printing-press-import, printing-press-output-review. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it