CI
Golden
Release
Go
License
시간과 돈보다 가치 있는 것은 없습니다. AI 에이전트의 세계에서 그것은 속도와 토큰 지출입니다. 잘 설계된 CLI는 에이전트에게 근육 기억(muscle memory)과 같습니다. 문서를 찾아 헤맬 필요도 없고, 잘못된 방향으로 빠질 일도, 낭비되는 토큰도 없습니다. 저희는 세상 최고의 에이전트를 위한 CLIs를 출력하는 Printing Press를 만들었습니다.
공식 API 문서를 읽고, 인기 있는 커뮤니티 CLI와 MCP 서버를 모두 연구하며, 아무도 공개하지 않은 API(Google Flights나 Dominos 같은 것)를 웹에서 감지하고, Peter Steinberger가 discrawl과 gogcli로 증명한 파워 유저 플레이북(power-user playbook)—로컬 SQLite, 복합 명령어(compound commands), 에이전트 네이티브 플래그—을 적용합니다. 이 모든 것을 융합하여 어떤 API나 웹사이트에 대해서도 토큰 효율적인 Go CLI와 Claude Code 스킬, 그리고 MCP 서버를 출력합니다.
오늘 설치 가능한 세 가지 CLIs:
- ESPN (공식 API 없음으로 감지): "오늘 밤 NBA 플레이오프 경기 실시간 점수, 시리즈 상태, 각 팀의 리딩 스코어 선수 통계, 지난 24시간 동안의 부상 또는 라인업 뉴스." 모든 것을 한 번의 호출로 반환합니다.
- flight-goat (Kayak 비정차 검색 + 감지된 Google Flights): "시애틀에서 출발하여 8시간 이상 걸리는 4인승 비정차 항공편, 12월 24일부터 1월 1일까지, 가장 저렴한 순서로." 두 소스를 하나의 쿼리로 연결했습니다.
- linear-pp-cli (로컬 SQLite 미러에 대해 50ms): "블로커가 일주일 동안 정체된 모든 차단된 이슈." API가 답변할 수 없는 복합 쿼리입니다.
printingpress.dev 또는 Printing Press Library에서 출력된 전체 CLI 카탈로그를 확인하세요. 여기서는 카테고리별로 정리되어 있으며, 대부분은 완전한 MCP 서버를 갖추고 있습니다.
Codex 사용자: Printing Press 스킬을 --agent codex를 사용하여 설치하고, 설치를 확인하며, /printing-press <api> codex와 어떻게 다른지 알아보려면 docs/CODEX.md를 참조하세요.
Cursor 사용자: 레포지토리가 이미 워크플로우를 문서화하고 있지 않은 경우에 CLI 대 MCP 중 무엇을 선택해야 하는지, 인쇄된 CLI를 설치하고, 일치하는 스킬을 연결하며, 인증(auth)을 처리하는 방법은 docs/CURSOR.md를 참조하세요.
설치 (Install)
**바이너리(binary)**와 Printing Press 스킬 둘 다 필요합니다. 스킬(/printing-press <app>)이 주 인터페이스이며, 백그라운드에서 바이너리를 구동합니다.
바이너리만으로도 작동하지만(연구, 생성, 검증, 점수화), 큐레이션된 에이전트 루프는 건너뜁니다. 스킬만으로는 호출할 것이 없습니다. 둘 다 설치하세요.
사전 요구 사항 (Prerequisites): Go 1.26.10 이상, Claude Code 또는 다른 skills-지원 에이전트, 그리고 npx를 위한 Node/npm. 스킬은 Claude Code로 테스트되었으므로, 같은 슬래시 명령어 워크플로우를 Codex에서 사용하려면 --agent codex와 함께 설치하세요. 최상의 테스트 경험을 위해 Claude Code를 사용하세요.
1. 설치 (Install)
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash
설치 프로그램은 생성기 바이너리(generator binary)에 대해 go install을 실행한 다음, skills@latest add --skill '*'를 통해 모든 Printing Press 스킬을 새로 고칩니다. 완료된 후 에이전트 세션을 재시작하거나 다시 로드하여 새로 고쳐진 스킬들이 로드되도록 하세요.
한쪽만 원하는 경우 --cli-only 또는 --skills-only를 사용하세요:
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가 기본 설치 대상입니다. 대신 Codex의 스킬을 설치하거나 새로 고치려면 --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
Codex에 대한 특정 참고 사항은 docs/CODEX.md를 참조하세요.
cli-printing-press --version으로 확인하세요. 설치가 실패하면 Go 1.26.10 이상이 설치되었는지, npx용 Node/npm이 설치되었는지, 그리고 $GOPATH/bin이 PATH에 포함되어 있는지 확인하세요.
이전 버전에서는 printing-press라는 이름의 생성기 바이너리가 설치되었습니다. 이 레거시 진입점(entrypoint)은 호환성을 위해 여전히 작동하지만, 표준 생성기 명령어는 이제 cli-printing-press입니다. 따라서 공개 라이브러리 설치 프로그램은 printing-press list, printing-press search, 및 printing-press install을 소유할 수 있습니다.
<details>
<summary><b>수동 설치 (Manual install)</b></summary>
바이너리를 설치하거나 업데이트하세요:
go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest
Vercel의 open-agent-skills CLI를 사용하여 이 리포지토리의 Printing Press 스킬을 지원되는 에이전트에 설치하세요. Claude Code가 기본적이고 테스트된 경로입니다:
npx -y skills@latest add mvanhorn/cli-printing-press/skills --skill '*' -g -a claude-code -y
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
나중에 개별 스킬 이름을 지정하지 않고 스킬을 새로 고치려면, 스킬 전용 모드(skills-only mode)로 설치 프로그램을 다시 실행하세요:
curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash -s -- --skills-only
스킬을 새로 고친 후에는 새로운 스킬 텍스트가 로드되도록 대상 에이전트를 다시 시작하거나 리로드하세요.
</details>
설치한 후에는 어떤 폴더에서든 Claude Code를 시작할 수 있습니다. Codex 사용자는 스킬을 설치하거나 새로 고친 후 새 Codex 세션을 시작해야 합니다.
<details>
<summary><b>개발자 경로: 클론된 곳에서 스킬 로드 (Developer path: load skills from a clone)</b></summary>
이것은 Printing Press 자체를 수정하고 로컬 스킬 변경 사항을 다음 세션 시작 시 적용하고 싶을 때 사용하세요.
git clone https://github.com/mvanhorn/cli-printing-press.git
cd cli-printing-press
claude --plugin-dir .
...
재시작에도 살아남고 백그라운드 세션에서도 로드되는 영구적인 로컬 설정을 보려면 Local Plugin Development를 참조하세요.
2. 인쇄 세션 시작하기
그다음 Claude Code 내부에서:
예시:
/printing-press Notion # 이름으로 API에 대한 CLI를 인쇄합니다
/printing-press https://postman.com/explore # ...또는 웹사이트를 지정합니다 (명세 필요 없음)
/printing-press-reprint notion # 최신 기계를 사용하여 기존 CLI를 재인쇄합니다
/printing-press는 설치한 cli-printing-press 바이너리를 구동하며, 리서치(research), 생성(generation), 스코어링(scoring), 그리고 shipcheck까지 모두 이 과정을 통해 실행됩니다. 두 부분으로 구성된 하나의 워크플로우입니다.
하나의 명령어. 간결한 루프. Go CLI와 모든 경쟁 도구의 기능을 흡수하고, 로컬 데이터로만 가능한 복합 사용 사례를 통해 초월하는 MCP 서버를 생성합니다. REST, GraphQL 또는 브라우저 스니핑 트래픽을 처리합니다. OpenAPI 명세가 필요하지 않습니다.
각 실행은 두 개의 바이너리(<api>-pp-cli와 <api>-pp-mcp), 리서치 문서, 검증 증명(verification proofs), 그리고 품질 점수(Quality Score)를 생성합니다.
<details>
<summary><b id=
<details>
<summary>
<b>Codex 모드 (Opus 토큰 60% 절감)</b>
</summary>
/printing-press HubSpot codex
/printing-press HubSpot
codex를 추가하면, Phase 3의 코드 생성 작업이 Codex CLI로 위임됩니다. Claude는 여전히 두뇌(연구, 계획, 점수 매기기, 검토) 역할을 합니다. Codex가 손(스코프된 프롬프트로부터 Go 코드 작성) 역할을 수행합니다. 품질은 동일하며 Opus 토큰 사용량은 60% 적습니다. 만약 Codex가 연속으로 3번 실패하면, 수동 개입 없이도 시스템이 로컬에서 작업을 처리하도록 폴백됩니다.
</details>
<details>
<summary>
<b>기존 CLI 개선 (폴리싱)</b>
</summary>
대상화된 수정 작업입니다. 진단(dogfood, 검증, 점수표 작성, 출력 검토), 수정 사항은 검증 실패를 해결하고, 사용되지 않는 코드를 제거하며, 설명과 README를 정리하고, 게시할지 여부를 제안합니다. 모든 생성 과정의 Phase 5.5로 자동 실행되며, 독립적으로도 실행할 수 있습니다:
/printing-press-polish notion
</details>
<details>
<summary>
<b>CLI를 라이브러리에 게시</b>
</summary>
CLI에 만족하면, 이를 라이브러리에 게시합니다:
/printing-press-publish linear
</details>
<details>
<summary>
<b>dogfood 세션에서 게시된 CLI 수정</b>
</summary>
Claude Code 세션에서 게시된 CLI를 dogfooding한 후 발견한 마찰 지점(누락된 플래그, 수동으로 작성된 API 페이로드, 조용한 null 반환)을 공개 라이브러리를 위한 PR로 전환합니다. 활성 세션 기록을 분석하고, 사용자와 함께 패치를 스코프하며, 수정 사항을 자율적으로 계획 및 실행하고, PII를 제거한 후, PR을 열어줍니다 — 두 가지 검토 지점(스코프, PR 초안):
/printing-press-amend
/printing-press-amend superhuman
</details>
이러한 CLI가 우수한 이유
대부분의 생성기는 엔드포인트를 감싸고 멈춥니다. Printing Press는 도메인을 이해하는 CLI를 생성합니다.
로컬 우선 데이터 계층(Local-first data layer). 중요도가 높은 리소스들은 도메인별 SQLite 테이블(JSON 블롭 아님), FTS5 전체 텍스트 검색 인덱스, 커서 추적을 통한 증분 동기화 기능을 갖춥니다. sync는 데이터를 가져오고, search는 밀리초 단위로 찾습니다. sql은 파워 유저가 직접 질의할 수 있게 합니다. 모든 것이 오프라인에서, 모두 로컬에서 작동합니다.
머신이 소유한 최신성(Machine-owned freshness). 스토어 기반 CLI는 cache.enabled를 통해 제한적인 사전 읽기 새로고침(bounded pre-read refresh)을 옵션으로 제공하여 --data-source auto가 수동 sync 없이도 로컬 스토어를 최신 상태로 유지하게 합니다. --data-source local과 --data-source live는 완벽한 제어권을 제공합니다.
어떤 래퍼(wrapper)도 할 수 없는 복합 명령어(Compound commands). 데이터가 SQLite에 존재하면, stale, health, bottleneck, reconcile 같은 명령어가 가능해집니다. 이들은 리소스 전반에 걸쳐 조인하고 히스토리를 분석합니다. 상태 비저장형 API 래퍼는 문자 그대로 이것을 할 수 없습니다.
기본적으로 에이전트 네이티브(Agent-native). 터미널에서 작업할 때는 사람이 사용하기 쉬운 테이블 형태를 제공합니다. 파이프 처리 시에는 자동 JSON 형식으로 변환되어 --json 플래그가 필요 없습니다. --compact는 중요도가 높은 필드만 출력하여 토큰 수를 60~80% 줄입니다. 타입 지정된 종료 코드(0/2/3/4/5/7)를 사용하여 에이전트가 파싱 오류 메시지 없이 스스로 수정할 수 있게 합니다. --dry-run은 안전한 탐색을 위해 사용됩니다. 모든 플래그는 AI 에이전트가 하루에 수천 번 호출하기 때문에 존재합니다.
명세서(Spec)가 없어도 괜찮습니다. OpenAPI 명세서가 없나요? 이 프레스를 웹사이트를 향하게 하세요. 브라우저를 실행하고, 트래픽을 캡처하며, API를 리버스 엔지니어링하여 명세서를 생성해 드립니다. ESPN, Postman Explore, 내부 도구 등—클릭할 수 있다면, 이 프레스가 CLI를 구축할 수 있습니다.
하나의 명세서에서 두 가지 인터페이스(Dual interface). 모든 API는 Cobra CLI(<api>-pp-cli)와 MCP 서버(<api>-pp-mcp)를 갖게 됩니다. 동일한 클라이언트, 동일한 스토어, 동일한 인증을 사용합니다. 쉘 에이전트는 CLI를 사용하고, IDE 에이전트는 MCP를 사용합니다. 코드 중복이 없습니다.
느낌(Vibes)에 의존하지 않고 검증됩니다(Verified). 네 가지 기계적 검사—스코어카드, 도그푸드(dogfood), 행동 증명(proof-of-behavior), 실시간 API 스모크 테스트(live API smoke test)—를 통해 배포 전에 환각된 경로, 죽은 플래그, 인증 불일치 및 깨진 데이터 파이프라인을 포착합니다.
자료 출처를 명시합니다. 생성되는 모든 README에는 연구 과정에서 학습한 에코시스템 도구들을 인용한 'Sources and Inspiration' 섹션이 포함됩니다. 우리는 거인들의 어깨 위에 올라섰으며, 이를 밝힙니다.
명백하지 않은 통찰 (The non-obvious insight)
모든 API에는 비밀스러운 정체성이 있습니다. 이 API가 노출하는 데이터는 제작자가 결코 의도하지 않았던 용도로 유용합니다. 인쇄기(printing press)는 그 비밀을 발견하고 이를 중심으로 CLI를 구축합니다.
명백하지 않은 통찰 (Non-Obvious Insight, NOI)이란 한 문장으로 재구성하는 것입니다: