
Printing Press Publish
Open a pull request that publishes a Printing Press–generated CLI into the shared printing-press-library repo after local validation.
Overview
printing-press-publish is an agent skill for the Ship phase that publishes a Printing Press–generated CLI to printing-press-library via a GitHub pull request after local validation.
Install
npx skills add https://github.com/mvanhorn/cli-printing-press --skill printing-press-publishWhat is this skill?
- Publishes by CLI name or alias with optional --from-polish handoff marker
- Enforces direct user-authored /printing-press-publish invocation—blocks unsafe chained continuation from polish Publish
- Supports --skip-live-test=auth-unavailable when live auth cannot run during validation
- Uses Bash, Read, Write, Edit, Glob, Grep, and AskUserQuestion against printing-press-library
- Requires Printing Press binary min-version 4.0.0 before setup or validation
Adoption & trust: 2k installs on skills.sh; 3.1k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have a generated CLI in your local Printing Press library but no repeatable, guarded path to contribute it upstream as a PR without accidentally chaining a dangerous publish from polish.
Who is it for?
Solo builders using Printing Press who already polished or finalized a CLI and want one command to land it in the public library repo.
Skip if: Runs triggered only as a chained continuation from printing-press-polish’s Publish Offer without a fresh /printing-press-publish message, or publishes when you have not generated a CLI locally yet.
When should I use this skill?
User sends a direct /printing-press publish or /printing-press-publish command with a CLI name after the tool is generated (optionally with --from-polish after polish).
What do I get? / Deliverables
After a direct user invocation, the agent validates the CLI and opens or updates a PR on printing-press-library with the publish branch and artifacts in place.
- Branch pushed to printing-press-library fork
- Pull request opened or updated for the named CLI
Recommended Skills
Journey fit
Publishing forks a public library repo, pushes a branch, and opens or updates a PR—classic ship/launch workflow, not day-to-day coding. Launch subphase covers distributing a finished CLI artifact to a community catalog via GitHub, matching the skill’s PR-first publish model.
How it compares
Use instead of hand-rolling fork, branch, and PR steps in GitHub CLI when you already live inside the Printing Press generate–polish–publish loop.
Common Questions / FAQ
Who is printing-press-publish for?
It is for solo and indie builders who generate CLIs with Printing Press and need to contribute a named tool to the printing-press-library repository as a pull request.
When should I use printing-press-publish?
Use it in Ship after a CLI is ready—typically post-polish—with a fresh user message like /printing-press-publish notion-pp-cli or /printing-press-publish notion --from-polish when polish already approved the artifact.
Is printing-press-publish safe to install?
It can fork repos, push branches, and open PRs, so review the Security Audits panel on this Prism page and only run publishes you explicitly author in chat—not auto-chained polish continuations.
Workflow Chain
Requires first: printing press polish
SKILL.md
READMESKILL.md - Printing Press Publish
# /printing-press publish Publish a generated CLI from your local library to the [printing-press-library](https://github.com/mvanhorn/printing-press-library) repo as a pull request. ```bash /printing-press publish notion-pp-cli /printing-press publish notion /printing-press publish notion --from-polish /printing-press publish notion --skip-live-test=auth-unavailable /printing-press publish ``` ## Direct User Invocation Required Publishing can fork `mvanhorn/printing-press-library`, push a branch, and open or update a PR. Before setup or validation, check the invocation context. If this skill was invoked as a chained continuation from `printing-press-polish`'s Publish Offer, including an `AskUserQuestion` answer or auto-resolved polish recommendation, stop immediately and tell the user to send `/printing-press-publish <cli-name> --from-polish` in a fresh message. A fresh user-authored request that explicitly asks to publish is sufficient; do not add another confirmation prompt on top of a direct publish request. If the fresh user-authored request includes `--from-polish`, record `POLISH_HANDOFF=true` for the terminal-state step and ignore that marker when resolving the CLI name. The marker is not a second confirmation and is not passed to `cli-printing-press`; it only preserves standalone polish's old post-publish retro offer after the fresh-turn publish completes. If the fresh user-authored request includes `--skip-live-test=<reason>`, record the exact non-empty reason as `SKIP_LIVE_TEST_REASON` and remove the flag before resolving the CLI name. This is the only supported escape valve for the publish-time live test gate. Use it only for auth-unavailable, known upstream outage, LAN-unreachable hardware APIs, or similarly concrete operator-approved cases; never infer a skip from ordinary latency or from the presence of an older Phase 5 marker. The public library treats `library/<category>/<api-slug>/.printing-press.json` and `manifest.json` as the source of truth for registry-display fields. Do not edit `registry.json`, README catalog cells, or `cli-skills/pp-<api-slug>/SKILL.md` in publish PRs; all three are bot-regenerated post-merge by the library's own workflows. The library's `Fail on changes to generated artifacts` check in `verify-library-conventions.yml` hard-fails any PR — fork or same-repo — whose diff against base touches `registry.json` or `cli-skills/pp-*/SKILL.md`, so a publish that includes either is pre-rejected before review. ## 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