printing-press-amend
Amend a published CLI from one of two input sources: (1) dogfood mode mines the active Claude…
Bring a published CLI from the public library into the internal library so it's identical to a freshly-generated copy — module path reverted, manuscripts placed alongside, ready for /printing-press-polish or /printing-press-emboss. Use when the public library has a CLI you don't
$ npx -y skills add mvanhorn/cli-printing-press --skill printing-press-import --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/printing-press-importContext preview
The summary Claude sees to decide when to auto-load this skill.
Bring a published CLI from the public library into the internal library so it's identical to a freshly-generated copy — module path reverted, manuscripts placed alongside, ready for /printing-press-polish or /printing-press-emboss. Use when the public library has a CLI you don't
name: printing-press-import description: > Bring a published CLI from the public library into the internal library so it's identical to a freshly-generated copy — module path reverted, manuscripts placed alongside, ready for /printing-press-polish or /printing-press-emboss. Use when the public library has a CLI you don't have locally, or to recover from a broken/lost internal copy. Trigger phrases: "import the CLI", "bring it into my library", "fetch from public library", "I don't have it locally yet". allowed-tools: - Bash - Read - Glob - Grep - AskUserQuestion created_by: user
Bring a published CLI from the public library ([`mvanhorn/printing-press-library`](https://github.com/mvanhorn/printing-press-library)) into the internal library at `$PRESS_LIBRARY/` so it matches the form the generator would produce. Manuscripts ride along.
/printing-press-import notion /printing-press-import cal.com /printing-press-import allrecipes --from-clone ~/Code/printing-press-library
The internal library is the working copy; the public library is the durable artifact. After import, the CLI is ready for polish, emboss, or re-publish — the publish step will re-apply the module path rewrites.
If the user is asking to polish a CLI and mentions "in/from the public library" or "from the repo", suggest running this skill first.
PRESS_HOME="${PRINTING_PRESS_HOME:-$HOME/printing-press}"
PRESS_LIBRARY="$PRESS_HOME/library"
PRESS_MANUSCRIPTS="$PRESS_HOME/manuscripts"
SCRIPTS_DIR="$(dirname "${BASH_SOURCE[0]:-.}")/references"
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.6 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
_pp_check_disk_space() {
_pp_disk_warn_kb="${PRINTING_PRESS_DISK_WARN_KB:-3145728}"
_pp_disk_fail_kb="${PRINTING_PRESS_DISK_FAIL_KB:-524288}"
case "$_pp_disk_warn_kb$_pp_disk_fail_kb" in
""|*[!0-9]*) return 0 ;;
esac
_pp_disk_path="$PRESS_HOME"
while [ ! -e "$_pp_disk_path" ] && [ "$_pp_disk_path" != "/" ]; do
_pp_disk_path="$(dirname "$_pp_disk_path")"
done
_pp_disk_avail_kb="$(df -Pk "$_pp_disk_path" 2>/dev/null | awk 'BEGIN {
if ((getline header) <= 0 || (getline record) <= 0) exit
field_count = split(record, fields)
if (field_count >= 4) print fields[4]
}')"
case "$_pp_disk_avail_kb" in
""|*[!0-9]*) return 0 ;;
esac
if [ "$_pp_disk_avail_kb" -lt "$_pp_disk_fail_kb" ]; then
echo ""
echo "[setup-error] Critically low disk space on the Printing Press workspace volume."
echo "PRESS_DISK_PATH=$_pp_disk_path"
echo "PRESS_DISK_AVAIL_KB=$_pp_disk_avail_kb"
echo "PRESS_DISK_FAIL_KB=$_pp_disk_fail_kb"
echo "Free disk space or set PRINTING_PRESS_HOME to a volume with more room, then re-run this skill."
echo ""
return 1
fi
if [ "$_pp_disk_avail_kb" -lt "$_pp_disk_warn_kb" ]; then
echo ""
echo "[low-disk] Printing Press workspace volume is low on free space."
echo "PRESS_DISK_PATH=$_pp_disk_path"
echo "PRESS_DISK_AVAIL_KB=$_pp_disk_avail_kb"
echo "PRESS_DISK_WARN_KB=$_pp_disk_warn_kb"
echo "This flow may need several GiB for generated files, Go build cache, module downloads, or repository clones."
echo ""
fi
}
_pp_check_disk_space || { return 1 2>/dev/null || exit 1; }The four reference scripts live alongside this SKILL.md under `references/`:
If setup emitted `[low-disk]`, surface the advisory to the user and continue unless setup also emitted `[setup-error]`. `[low-disk]` means this run may need several GiB for repository clones, staged files, backups, Go build cache, or module downloads.
The argument can be anything natural: an API slug (`notion`), a brand name (`cal.com`), an old CLI name (`notion-pp-cli`), or close enough (`Allrecipes`). Resolve via the public library's `registry.json` — which carries `name`, `category`, `api`, `description`, and `path` for every entry, in one fetch.
REGISTRY=$(mktemp) gh api -H "Accept: application/vnd.github.v3.raw" \ repos/mvanhorn/printing-press-library/contents/registry.json \ > "$REGISTRY"
Match in this order:
1. **Exact `name` match** — `jq --arg q "$ARG" '.entries[] | select(.name == $q)' "$REGISTRY"` 2. **Normalized exact** — strip `-pp-cli` suffix, lowercase, dot→hyphen, then exact match 3. **Substring on `name` or `description`** — case-insensitive contains
# Exact:
jq --arg q "$ARG" '.entries[] | select(.name == $q)' "$REGISTRY"
# Normalized exact (after $ARG2 = lowercase, dot→hyphen, suffix-stripped):
jq --arg q "$ARG2" '.entries[] | select(.name == $q)' "$REGISTRY"
# Fuzzy (substring on name or description):
jq --arg q "$ARG2" '.entries[]
| select((.name | ascii_downcase | contains($q | ascii_downcase))
or (.description | ascii_downcase | contains($q | ascii_downcase)))
' "$REGISTRY"If you get one match: use it. If multiple: present at most 4 to the user via `AskUserQuestion` showing `name` + `description` per candidate. If zero: tell the user the public library doesn't have that CLI.
The matched entry gives you everything you need:
**Don't slurp whole files** when reasoning over candidat
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.
Amend a published CLI from one of two input sources: (1) dogfood mode mines the active Claude…
Internal sub-skill: agentic review of a printed CLI's sampled command output for plausibility…
Polish a generated CLI to pass verification and become publish-ready. Runs diagnostics…
Regenerate an existing printed CLI from scratch under the current Printing Press, with prior…
Use when the user asks to retro, run a retrospective, file findings, or improve the Printing…