TRENDSHIFT #19 · 2026.05.24 · MVANHORN

CLI Printing Press — 모든 API를
에이전트용 "GOAT CLI"로
인쇄하는 공장

2.4k 스타. /printing-press Notion 한 줄로 어떤 API든 ① Cobra CLI + ② MCP 서버 + ③ Claude Code 스킬 세 개를 동시에 인쇄한다. 핵심 트릭은 단순한 endpoint 래퍼가 아니라 로컬 SQLite 데이터 레이어 + FTS5 풀텍스트 검색 + 도메인 분석 명령까지 자동 생성한다는 것. OpenAPI 스펙이 없으면 브라우저를 직접 띄워 트래픽을 가로채 만들어낸다. ESPN·Google Flights처럼 공식 API가 없는 사이트도 깎아낼 수 있다.

2.4k ★
GitHub stars · 229 forks · 1,243 commits
v4.14.0
May 2026 · 68 releases · MIT
Go 84.7%
+ Go Template 13.8% + Python 1.3%
26 APIs
사전 검증된 카탈로그 (Asana·Stripe·Discord·…)

0먼저, 이게 도대체 뭘 만드는 도구인가

"API 하나당 CLI 한 개"가 아니라, "API 하나당 CLI + MCP + 스킬 세트"를 자동으로 깎아내는 공장.

대부분의 사람들은 swagger-codegen이나 openapi-generator 같은 도구를 안다. OpenAPI 스펙(JSON/YAML)을 던지면 그 API를 부르는 클라이언트 라이브러리를 자동 생성하는 도구다. CLI Printing Press는 같은 입구로 들어오지만 출구가 완전히 다르다.

용어
OpenAPI 스펙
한 API가 어떤 URL을 가지고, 어떤 파라미터를 받고, 어떤 응답을 주는지를 기계가 읽을 수 있는 YAML/JSON 문서로 적어둔 것. Notion·Stripe·GitHub 같은 곳은 공식적으로 제공하고, 일부 사이트(ESPN·Google Flights·도미노피자)는 안 준다 — Printing Press는 후자도 처리한다.

일반적인 코드 제너레이터는 endpoint 하나당 함수 하나를 만들고 끝낸다. Printing Press는 그 위에 네 겹을 더 쌓는다:

비유

일반 제너레이터가 "이 식당의 메뉴판을 그대로 복사한 메뉴판"이라면, Printing Press는 "메뉴판 + 인기 조합 세트 + 손님이 안 시켰지만 좋아할 만한 신메뉴 + 식당 분위기에 맞는 인테리어 가이드"까지 한 번에 인쇄해 주는 공장이다. 메뉴판 베끼는 건 다 한다. 그 위에 가치가 쌓인다.

출력물은 매번 두 개의 실행 파일이다 — <api>-pp-cli(셸 에이전트·사람용)와 <api>-pp-mcp(Claude Desktop·Cursor용). 둘 다 같은 internal/client, 같은 internal/store, 같은 인증 코드를 공유한다. 코드 중복이 없다.

1프로젝트 한 줄 요약

"메뉴판은 다 베끼고, 그 위에 진짜 가치를 인쇄한다."

한 줄 정의

모든 API에는 비밀 정체성이 있다. Printing Press는 그것을 찾아내 GOAT(Greatest Of All Time) CLI를 인쇄한다

입력: API 이름(Notion), URL(postman.com/explore), 또는 HAR 파일. 출력: 검증된 Go CLI + MCP 서버 + Claude Code 슬래시 명령 + 연구 매뉴스크립트 + 품질 점수표.

이 공장은 단순히 코드를 짜는 게 아니라 커뮤니티의 모든 경쟁 도구를 흡수(absorb)하고, 그 위에 SQLite 기반 복합 질의로 초월(transcend)한다. Peter Steinberger가 discrawl·gogcli로 직관적으로 한 일을, 알고리즘으로 자동화한 결과물.

2왜 지금 주목받는가

"AI 에이전트가 일하는 시대에는, 도구의 토큰 효율이 곧 비용이다."

2026년 5월 TrendShift Daily 19위에 진입한 이유는 단순히 "또 다른 CLI 제너레이터"가 아니기 때문이다. 이 도구가 해결하는 진짜 문제는 "AI 에이전트가 API를 호출할 때 토큰을 얼마나 태우느냐"다.

관점 1 / 5

MCP보다 CLI가 100배 토큰 효율적이다

MCP 도구를 LLM에 등록하려면 매번 도구 정의(JSON 스키마)를 컨텍스트에 실어야 한다. 도구가 30개면 30개를 전부. CLI는 다르다 — npx some-cli --help를 한 번 부르면 끝. LLM은 셸 상호작용에 평생 학습돼 있다. 종료 코드 0=성공, --json | jq 합성도 자연스럽다.

관점 2 / 5

지역 SQLite는 API 한계를 우회한다

"일주일 동안 블로커 상태인 이슈가 막고 있는 모든 이슈"를 Linear API에서 어떻게 가져올까? 불가능하다. API는 stateless라서 시간 축이 없다. Printing Press가 생성한 linear-pp-cli는 모든 이슈·상태 전환을 로컬 SQLite에 동기화해뒀기 때문에 linear-pp-cli stale --blocker-stuck-days 7 한 줄로 50ms 안에 답한다.

관점 3 / 5

공식 API가 없어도 만들 수 있다

ESPN은 공식 API가 없다. 도미노피자도, Google Flights도 마찬가지다. --har 옵션이나 브라우저 스니핑 모드로 실제 사이트에서 HTTPS 트래픽을 가로채 OpenAPI 스펙을 역공학한다. "클릭해서 사용할 수 있다면 CLI로 만들 수 있다"는 표어가 비유가 아니다.

관점 4 / 5

Steinberger 효과의 자동화

Peter Steinberger는 1인 개발자다. 그가 만든 discrawl(Discord, 11개 명령)이 583★를 얻은 반면 Discord 자체 SDK는 평범하다. 왜? "Discord = 대화 앱"이 아니라 "Discord = 검색 가능한 지식 베이스"라는 비밀 정체성(NOI)을 봤기 때문. Printing Press는 모든 API에 대해 그런 NOI를 자동 추출한다.

관점 5 / 5

2026년 트렌드의 정중앙

같은 시기에 떠오른 esengine/DeepSeek-Reasonix(prefix-cache 최적화)·anthropics/claude-plugins-official(공식 플러그인 디렉토리)·safishamsi/graphify(코드 그래프 스킬)·0xSteph/pentest-ai(MCP 펜테스트)와 정확히 같은 흐름. "에이전트 친화 도구의 자동 생성"이 2026년 OSS 핵심 테마다.

3기술 스택 전체 지도

Go 84.7% + Go 템플릿 13.8% + Python(스킬 헬퍼) + Shell.

레포는 1,243 커밋, 68 릴리즈, 활발한 단일 활동을 보이는 1인 + 일부 컨트리뷰터 프로젝트다. 디렉토리 윤곽을 보면 "코드 생성기 그 자체"와 "생성된 CLI가 사용할 라이브러리"가 잘 분리돼 있다.

cli-printing-press/ ├── .claude-plugin/ Claude Code 플러그인 manifest ├── .claude/ Claude Code 슬래시 명령(/printing-press, /printing-press-polish ...) ├── .entire/ 전체 워크플로 정의(스킬 헬퍼) ├── .github/ GitHub Actions CI (lint.yml · golden.yml · release.yml) ├── .gocache/ Go 빌드 캐시 ├── catalog/ 26개 API 사전 검증 카탈로그 (spec URL · auth type · 카테고리) ├── cmd/ │ └── cli-printing-press/ 메인 진입점 (Go 바이너리) ├── docs/ PIPELINE.md · CURSOR.md · 아키텍처 가이드 ├── internal/ 생성기 코어 (profiler · scorecard · verifier · generator) ├── scripts/ golden.sh · 빌드 헬퍼 ├── skills/ Claude Code Agent Skill SKILL.md 시리즈 ├── testdata/golden/ 골든 출력 픽스처 (deterministic 테스트) ├── AGENTS.md AI 코딩 에이전트용 컨벤션 (=CLAUDE.md 호환) ├── CLAUDE.md Claude Code 컨텍스트 ├── ONBOARDING.md 신규 컨트리뷰터용 가이드 ├── go.mod Go 1.26.3+ ├── greptile.json Greptile 코드 검색 봇 설정 ├── lefthook.yml pre-push 훅 (golangci-lint) └── .goreleaser.yaml 멀티 플랫폼 릴리즈 (macOS · Linux · Windows)

핵심 의존성 — 잘 알려진 Go OSS만 사용

여기서 중요한 건 "생성기"와 "생성된 결과물"의 의존성이 다르다는 점이다. 생성기 자체는 Go로 짜여 있고, 생성된 CLI도 Go 출력물이다. 둘 다 Go 1.26.3+이 필요하다.

용어
Cobra
Go 진영의 사실상 표준 CLI 프레임워크. kubectl·gh·helm이 모두 Cobra로 만들어져 있다. 명령·하위 명령·플래그·자동완성·도움말을 선언적으로 정의. Printing Press가 생성하는 모든 CLI가 Cobra 구조.
용어
SQLite + FTS5
한 파일짜리 임베디드 데이터베이스. FTS5는 SQLite의 풀텍스트 검색 확장으로, "전체 메시지에서 'kubernetes pod oom' 검색"같은 자연어 검색이 10ms 안에 가능. Printing Press가 생성한 CLI는 모두 ~/.config/<api>-pp/data.db 같은 단일 파일에 모든 데이터를 저장.
용어
MCP (Model Context Protocol)
Anthropic이 만든 표준 — LLM 에이전트가 외부 도구를 발견·호출하기 위한 JSON-RPC 프로토콜. Claude Desktop·Cursor·Windsurf 같은 클라이언트가 MCP 서버를 자동으로 찾아낸다. Printing Press는 모든 API에 대해 <api>-pp-mcp 바이너리를 동시에 생성.
용어
Claude Code Skill
Claude Code(Anthropic의 CLI 코딩 에이전트)에 추가할 수 있는 슬래시 명령 + 워크플로 패키지. SKILL.md 한 파일이 본체다. Printing Press의 /printing-press 슬래시 명령이 이 형식. ~/.claude/skills/ 또는 --plugin-dir로 로드한다.

인프라 — Goreleaser + lefthook + 골든 테스트

.goreleaser.yaml macOS(amd64+arm64) · Linux · Windows 멀티 플랫폼 단일 릴리즈 lefthook.yml pre-push 훅 → golangci-lint 자동 실행 .golangci.yml Go 린트 룰셋 (govet · staticcheck · errcheck …) .mergify.yml PR 자동 머지 정책 release-please-config.json conventional commits → 자동 changelog + semver bump scripts/golden.sh deterministic 출력 회귀 테스트 .github/workflows/golden.yml 골든 출력 CI

이 설정 묶음은 단순히 도구가 아니라 "인프라로서의 에이전트 친화성"을 보여준다. 골든 테스트는 "같은 입력에 항상 같은 출력"을 강제해, AI가 코드를 짜더라도 회귀가 발생하면 즉시 잡힌다. 1,243 커밋 동안 안정적으로 굴러간 비결.

4아키텍처 심화 분석

8단계 파이프라인이 한 줄 슬래시 명령 뒤에 숨어 있다.

/printing-press Notion 한 줄을 입력하면 어떤 일이 벌어지는가? 표면에서 보면 30분 안에 두 개의 바이너리가 나온다. 안에서는 8단계 파이프라인이 차례로 굴러간다.

사용자: /printing-press Notion │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 0 Resolve + Reuse (1-3 min) │ │ 이전 연구 재사용 · 토큰 감지 · 스펙/URL 해석 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 1 Research Brief (5-10 min) │ │ API 정체성 · 경쟁자 · 데이터 레이어 · 제품 가설 │ │ → NOI(Non-Obvious Insight) 추출 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 1.5 Ecosystem Absorb Gate (5-10 min) │ │ 모든 MCP/스킬/CLI 기능 카탈로그 → absorb manifest │ │ + 빠진 신기능 자동 제안 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 1.7 Browser-Sniff Gate (2-5 min, 선택) │ │ 스펙 없는 사이트면 브라우저로 트래픽 캡처 │ │ HAR import · 발견 출처(discovery provenance) 기록 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 2 Generate (1-2 min) │ │ 스펙에서 Go CLI + MCP 서버 골격 생성 + 검증 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 3 Build The GOAT (10-20 min) │ │ 흡수한 모든 기능 + 초월 명령 (stale/health/...) │ │ Codex 모드면 Codex CLI에 위임 → Opus 토큰 60%↓ │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 4 Shipcheck (3-8 min) │ │ Dogfood + verify --fix + scorecard 한 묶음 │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ Phase 5 Live Smoke (선택) (2-5 min) │ │ API 키가 있으면 GET-only 라이브 테스트 (mutate X) │ └──────────────────────────────────────────────────────────────┘ │ ▼ 결과물: notion-pp-cli + notion-pp-mcp + research/ + proofs/

핵심 설계 패턴 1: NOI(Non-Obvious Insight) — 모든 CLI의 창의적 DNA

설계 패턴
"이 API의 비밀 정체성은 무엇인가?"라는 강제 질문

Phase 1은 NOI 한 문장을 못 쓰면 통과 못 한다. NOI는 "이 API는 OBVIOUS_THING이 아니라 NON_OBVIOUS_THING이다. 모든 DATA_POINT는 HIDDEN_TRUTH의 신호다"라는 양식. 예 → "Linear는 이슈 트래커가 아니다. 팀 행동 관측소다. 모든 상태 변경은 팀이 실제로 일하는 방식을 드러내는 신호다."

NOI 예시 8선 — 이게 왜 중요한지 한눈에 보인다:

API겉으로실제 정체성(NOI)
Discord채팅 앱검색 가능한 지식 베이스 — 모든 스레드가 제도적 기억
Linear이슈 트래커팀 행동 관측소 — 상태 변경이 일하는 방식의 신호
Stripe결제 처리기비즈니스 건강 모니터 — 실패 결제와 이탈이 PMF 신호
GitHub코드 호스트엔지니어링 문화 지문 — 리뷰 턴어라운드가 출시 패턴 신호
Notion문서 편집기지식 부패 탐지기 — 오래된 페이지가 잊혀진 것 신호
HubSpotCRM관계 메모리 — 거래 단계 전환이 파이프라인 건강 신호
Slack메신저조직 신경계 — 응답 시간과 채널 침묵이 팀 건강 신호
ESPN스포츠 데이터베팅 인텔리전스 — 부상·라인업·배당 변동이 결과 신호

핵심 설계 패턴 2: 창의력 사다리 (Creativity Ladder) — 5단까지 자동 등반

대부분의 코드 제너레이터는 1단에서 멈춘다. Printing Press는 5단까지 올라간다.

무엇자동?예시
1API 래퍼 명령예 (스펙에서)issue create --title "…"
2출력 포맷팅예 (항상)--json --select --csv --dry-run
3로컬 영속성예 (조건부)sync · search · export · tail
4도메인 분석예 (원형에서)stale --days 30 · orphans · load
5행동 통찰예 (원형에서)health(종합 점수) similar(중복 탐지)

3단은 테이블 스테이크(기본). 4단은 discrawl이 사는 곳. 5단은 아직 아무도 안 가본 곳이다.

핵심 설계 패턴 3: 도메인 원형(Archetype) — 자동 분류 + 자동 명령

스펙을 받자마자 분류기가 API를 다섯 가지 원형 중 하나로 분류한다. 그러면 그 원형에 맞는 워크플로 명령이 자동으로 끼워진다.

원형탐지 신호자동 생성 명령
Project Managementissue/task/ticket · assignee · prioritystale · orphans · load · health · similar
Communicationmessage/channel/thread · 스레딩 필드channel-health · message-stats · health · similar
Paymentscharge/payment/invoice · amount/currencyreconcile · revenue · health · similar
Infrastructureserver/deploy/instancehealth · similar
Contentdocument/page/blockhealth · similar

핵심 설계 패턴 4: 두 단계 점수표(Two-tier Scorecard) — Grade A는 85점 이상

각 CLI는 100점 만점 점수표를 받는다. 두 단계로 나뉘어 있다.

TIER 1 — INFRASTRUCTURE (50점)

"패턴이 제대로 박혔는가?"

Output Modes(--json/--csv/--select/--quiet/--compact) · Auth(OAuth + 헤더) · Error Handling(타입드 종료 코드 + 백오프) · Agent-Native(--json/--select/--dry-run/--stdin) · Terminal UX · README · Doctor · Local Cache · Breadth.

TIER 2 — DOMAIN CORRECTNESS (50점)

"코드가 실제로 동작하는가?"

Path Validity(생성된 경로가 스펙에 실재) · Auth Protocol(securitySchemes와 일치) · Data Pipeline(sync가 도메인 특화 UpsertX를 부르는가) · Sync Correctness(실제 리소스/중첩 경로/페이지네이션/증분 커서) · Type Fidelity(문자열 ID, 필수 표시) · Dead Code(미사용 플래그/함수/테이블 없음).

비유

식당 위생 등급에 비유하면 — Tier 1은 "주방 설계와 동선이 제대로인지"이고, Tier 2는 "실제 만드는 음식이 메뉴판과 일치하는지"다. 주방만 멋있어도 안 되고, 음식만 맞아도 안 된다. 둘 다 통과해야 Grade A다. "스코어카드를 위한 게이밍"을 막기 위해 anti-gaming 규칙도 있다.

핵심 설계 패턴 5: 행동 증명(Proof of Behavior)

점수표가 구조를 본다면, 행동 증명은 데이터 흐름을 본다. 4가지 강제 증명:

어떤 증명이라도 실패하면 자동 교정이 데드 코드를 제거하고 재검증한다. 환각된 경로(hallucinated paths)와 auth 불일치는 하드 FAIL 게이트 — 그 자체로 CLI 출시 불가.

5디렉토리 구조 해부

"생성기 본체"와 "생성물의 골격"이 어디서 갈리는가.

이 레포의 디렉토리 윤곽이 중요한 이유는 "이 도구가 만들어내는 것"과 "이 도구 자체의 코드"가 다르기 때문이다. cmd/cli-printing-press는 생성기, internal/은 생성기의 두뇌, skills/는 Claude Code 인터페이스, catalog/는 미리 검증된 API 목록.

경로역할왜 중요한가
cmd/cli-printing-press/Go 바이너리 진입점main.go가 Cobra 명령 트리를 띄움 — generate · scorecard · dogfood · verify · auth doctor · mcp-audit 등 모든 서브명령이 여기서 분기
internal/생성기 코어 (외부 import 금지)Go의 관행 — internal/ 안의 패키지는 같은 모듈 외부에서 import 불가. 생성기 로직과 생성된 CLI 코드가 섞이지 않는 1차 방어선
skills/Claude Code Agent Skillprinting-press/SKILL.md/printing-press 슬래시 명령의 본체. 사람이 슬래시를 치면 Claude가 이 SKILL.md를 읽고 단계별로 cli-printing-press 바이너리를 호출
catalog/26개 API 사전 검증 카탈로그각 API에 대해 spec URL, auth type(Bearer/OAuth/Basic), 카테고리, NOI 후보가 미리 적혀 있음. 첫 사용자가 0초 만에 검증된 결과를 얻을 수 있는 핵심
testdata/golden/골든 출력 픽스처cases/<case-name>/command.txt가 명령을, artifacts.txt가 비교 대상 파일을 지정. scripts/golden.sh verify가 실제 실행 결과와 비교 — 회귀 0의 비결
.claude-plugin/Claude Code 플러그인 매니페스트plugin.json으로 Claude가 이 디렉토리를 플러그인으로 인식. claude --plugin-dir .로 로드
docs/PIPELINE.md9단계 파이프라인 정식 명세위에서 본 8단계 빠른 경로의 풀 버전. 단계마다 입력·출력·게이트·아티팩트가 명시 — 중간에 멈추거나 재개할 때 참조
docs/CURSOR.mdCursor 사용자용 가이드설치된 CLI를 Cursor에 어떻게 붙이고 인증을 어떻게 다루는지 — 다른 에이전트 호환성
AGENTS.md개발자 컨벤션 + 글로서리커밋 스타일, 검증 규칙, AI 자동화 공시 — 컨트리뷰터가 따라야 할 모든 규칙
.goreleaser.yaml릴리즈 빌드macOS(amd64+arm64) + Linux + Windows 단일 명령으로 — Homebrew formula 자동 생성

생성된 CLI의 디렉토리 구조 (참고)

위는 "생성기" 디렉토리. 그럼 /printing-press Notion의 결과로 나오는 notion-pp-cli 디렉토리는 어떻게 생겼을까?

notion-pp-cli/ ├── cmd/ │ ├── notion-pp-cli/ Cobra 명령 트리 (CLI 진입점) │ └── notion-mcp/ MCP 서버 진입점 ├── internal/ │ ├── client/ Notion API HTTP 클라이언트 │ ├── store/ SQLite + FTS5 데이터 레이어 │ │ ├── pages.go UpsertPage · SearchPage · QueryPage │ │ ├── blocks.go │ │ └── migrations/ SQL 마이그레이션 │ ├── commands/ stale.go · health.go · similar.go ... │ └── auth/ OAuth + Bearer 토큰 처리 ├── docs/ 생성된 README 쿡북 ├── tools-manifest.json 선언된 환경 변수 → auth doctor가 검사 ├── .printing-press.json Provenance 매니페스트 (어느 스펙·어느 버전으로 생성됐는지) ├── .goreleaser.yaml 이 CLI의 릴리즈 설정 ├── Homebrew formula tap에 자동 등록 └── .github/workflows/ CI · 최소 1 테스트 파일/패키지 보장

이 구조는 모든 CLI가 똑같다. 어떤 API든 같은 골격. 그게 점수표와 검증을 자동화할 수 있는 이유다. 한 번 검증기를 짜두면 모든 생성물에 적용된다.

6학습 포인트 (기술별)

이 레포에서 실제로 무엇을 배울 수 있는가.

단순히 도구를 쓰는 게 아니라 이 레포의 코드를 읽으면서 얻을 수 있는 것들이다. 각 기술별로 "왜 그렇게 짰는지"가 명시돼 있어서 학습 자료로도 좋다.

학습 1 / 7

Go로 CLI 만드는 정공법 (Cobra + Goreleaser)

Cobra 명령 트리, persistent flags vs local flags, Goreleaser로 멀티 플랫폼 릴리즈 + Homebrew 자동 등록, lefthook 프리푸시 훅, golangci-lint 룰셋. kubectl·gh 같은 큰 도구를 만드는 모든 패턴이 들어 있다. 실습 아이디어: 자기 회사 내부 API 하나를 골라 같은 구조로 작은 CLI를 직접 짜본다 — 명령 3개부터.

학습 2 / 7

SQLite + FTS5 풀텍스트 검색 (Go 진영)

왜 JSON 블롭이 아니라 도메인 특화 컬럼인가? 왜 FTS5인가? cursor 기반 페이지네이션, batch SQLite 트랜잭션, pragma 튜닝, --since 증분 sync, --concurrency 병렬 워커. 실습 아이디어: 자기 Notion 워크스페이스 100페이지를 SQLite에 동기화하고 FTS5로 검색해 본다 — 200줄 안에 가능.

학습 3 / 7

MCP 서버 작성 (Go 버전)

Anthropic의 MCP 표준이 어떻게 생겼는지, Go로 어떻게 서버를 구현하는지, readOnlyHint·destructiveHint·idempotentHint 같은 메타데이터를 어떻게 활용하는지. CLI 코드와 MCP 코드가 어떻게 internal/client·internal/store를 공유하는지. 실습 아이디어: 작은 API(예: GitHub Search) 하나로 CLI + MCP 두 바이너리를 직접 손으로 짜본다.

학습 4 / 7

OpenAPI 스펙에서 코드 생성 (Go Template)

Go의 text/template 표준 라이브러리로 13.8%를 차지하는 템플릿 파일들. 스펙을 받으면 어떻게 명령 트리·핸들러·SQL DDL을 생성하는지. 도메인 원형 감지가 어떻게 동작하는지. 실습 아이디어: 간단한 OpenAPI YAML로 5개 명령을 가진 작은 CLI를 직접 템플릿으로 생성해본다.

학습 5 / 7

브라우저 트래픽 스니핑 + HAR 분석

공식 API가 없는 사이트에서 어떻게 트래픽을 잡고, HAR(HTTP Archive) 파일을 어떻게 파싱해서 OpenAPI를 역공학하는지. 적응형 rate limiting(처음엔 느리게, 성공이면 가속, 429면 백오프). 실습 아이디어: Chrome DevTools의 Network 탭에서 좋아하는 사이트의 트래픽을 HAR로 저장하고 직접 분석해본다 — 그 사이트의 비공식 API가 보인다.

학습 6 / 7

골든 테스트(Deterministic Output Testing)

testdata/golden/ + scripts/golden.sh 패턴 — 코드 제너레이터처럼 "출력이 같아야 한다"가 핵심인 도구에서 회귀 테스트가 어떻게 작동하는지. 머신 특정 경로 정규화, 결정적 JSON 포매팅, 알려진 provenance 필드(타임스탬프) 정규화. 실습 아이디어: 자기가 만든 CLI에 골든 테스트 5개를 추가해본다.

학습 7 / 7

"에이전트 친화 CLI 설계"의 10원칙

Trevin Chow의 "10 Principles for Agent Native CLIs"가 어떻게 코드로 구현되는지 — 파이프 자동 JSON, --compact 60-80% 토큰 절감, 타입드 종료 코드(0/2/3/4/5/7), --dry-run, --no-input, 명확한 에러 메시지(어느 플래그가 잘못됐는지 + 올바른 사용 패턴). 사람용 좋은 CLI는 결국 에이전트용 좋은 CLI다. 실습 아이디어: 자기가 쓰는 CLI 하나를 골라 이 10원칙에 따라 평가해본다 — 점수가 얼마나 나오는가?

7하드웨어/시스템 요구사항

"가벼운 도구치고는 환경이 까다롭다 — Go + Claude Code가 둘 다 필요하다."

이 도구는 코드 생성 + LLM 호출 + 브라우저 자동화를 모두 하기 때문에 환경 요구사항이 명확하다.

요소요구사항비고
OSmacOS · Linux · Windowsregen-merge 서브명령만 Windows 미지원
Go 버전1.26.3 이상꽤 최신 Go가 필요 — go install로 설치
Claude Code필수슬래시 명령(/printing-press)이 메인 인터페이스. 바이너리 단독 사용은 가능하지만 큐레이션 루프 빠짐
Anthropic APIOpus 액세스 권장Codex 모드(/printing-press <api> codex)면 Opus 토큰 60% 절감 — Codex CLI 별도 필요
디스크API당 1~10MB생성된 CLI는 작음. 단, sync된 데이터(Linear 50k 이슈 등)는 별개
네트워크아웃바운드 HTTPS스펙 페치, LLM 호출, 브라우저 스니핑 모두 필요
인증 토큰각 대상 API별Phase 5 라이브 스모크 테스트는 키가 있을 때만 실행 (GET-only, 안전)

토큰 비용 — 솔직한 추정: 표준 Opus 모드로 Phase 0~5를 끝까지 돌리면 한 API당 대략 $10~$30 정도가 든다(API 복잡도에 따라). Codex 모드는 약 40% 수준. Phase 1 연구는 Sonnet으로 충분히 가능하다는 후기도 있다.

8직접 해볼 수 있는 실습 과제

난이도별 5개 — 1번부터 5번까지 사다리 식으로 어려워진다.

실습 1 / 5 · 난이도 ★☆☆☆☆

먼저, 그냥 한번 써본다 — Discord 또는 Stripe

Go 1.26.3과 Claude Code를 설치한 뒤 go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest로 바이너리를 깐다. 레포를 클론해서 claude --plugin-dir .로 진입한 다음 /printing-press Discord를 실행한다. 관찰 포인트: 8단계 파이프라인이 어떻게 흘러가는가, NOI가 무엇으로 추출되는가, 최종 점수가 몇 점인가.

실습 2 / 5 · 난이도 ★★☆☆☆

생성된 CLI를 실제로 일에 쓴다 — Linear 또는 Notion

본인이 매일 쓰는 API(Linear/Notion/Stripe)에 대해 CLI를 생성한 뒤, 일주일 동안 일상 워크플로에 끼워본다. 무엇이 부족한지 — 빠진 플래그, 어색한 인자 이름, null이 그냥 반환되는 상황 — 적어둔다. 관찰 포인트: 도메인 명령(stale · health)이 실제로 유용한가? API 직접 호출보다 빠른가?

실습 3 / 5 · 난이도 ★★★☆☆

/printing-press-amend로 PR 보내기

실습 2에서 발견한 친화점들을 /printing-press-amend 슬래시 명령으로 PR로 바꾼다. 세션 transcript에서 친화점을 자동 추출하고, scope를 함께 정의한 뒤, 실제 PR이 만들어진다. 관찰 포인트: "내가 친 친화점이 PR이 되기까지의 자동화"가 어디까지 되고 어디부터 사람이 개입해야 하는가.

실습 4 / 5 · 난이도 ★★★★☆

공식 API가 없는 사이트로 CLI 만들기

좋아하는 비공식 사이트(스타크래프트 리플레이 사이트, 한국 기상청, KOSIS 등) 하나를 골라 Chrome DevTools로 트래픽을 HAR로 저장한다. /printing-press --har ./capture.har로 CLI를 만든다. 관찰 포인트: 적응형 rate limiting이 어떻게 작동하는가, 어떤 endpoint가 발견되고 어떤 건 놓치는가, 발견 매뉴스크립트(discovery/)에 무엇이 담기는가.

실습 5 / 5 · 난이도 ★★★★★

새 도메인 원형(Archetype) 기여하기

Project Management·Communication·Payments·Infrastructure·Content 5종 외에 새로운 원형(예: Education / Healthcare / Logistics)을 정의하고, 자동 생성될 워크플로 명령 5개를 설계해 PR로 보낸다. 관찰 포인트: 어떤 API가 새 원형으로 분류돼야 하는가? 새 원형의 NOI 후보를 어떻게 정의하는가? 실력 입증용 PR로 손색이 없다.

9관련 기술 심화 학습 로드맵

"Printing Press를 정복하려면 6주 코스로 가야 한다."

한 번에 다 익히려고 하지 말고, 6주 동안 한 주에 하나씩 깊게 파는 게 효율적이다. 각 주차의 학습은 다음 주를 위한 토대가 된다.

주차주제학습 자료이번 주 산출물
1주차Go + Cobra 기본기Cobra 공식 문서 · gh 소스 코드 리딩 · The Go Programming Language 7장 (인터페이스)3-명령 짜리 작은 CLI
2주차SQLite + FTS5 패턴SQLite FTS5 공식 문서 · Steinberger의 discrawl 코드 리딩 · Go의 database/sql + modernc.org/sqliteNotion 또는 Linear 페이지를 로컬에 sync + 검색하는 200줄 도구
3주차OpenAPI + 코드 생성openapi-generator 소스 코드 · Speakeasy 블로그 · Go text/template 깊이간단한 OpenAPI YAML → 5명령 CLI 자동 생성
4주차MCP 표준 + Anthropic 에이전트 가이드MCP 공식 스펙(spec.modelcontextprotocol.io) · Anthropic 블로그 "Building agents that reach production" · mcp-builder 스킬2주차 결과물에 MCP 서버 인터페이스 추가
5주차에이전트 친화 CLI 10원칙Trevin Chow의 글 · Ramp CLI 사례 · gogcli의 점수표3주차 결과물을 10원칙으로 평가 → 90점 이상 만들기
6주차Printing Press 직접 기여이 레포 클론 · AGENTS.md + docs/PIPELINE.md 완독 · 골든 테스트 추가 PR 1개실습 5 (새 원형) 또는 새 API 카탈로그 추가 PR
Steinberger 추적이 가장 큰 보너스

Peter Steinberger(@steipete)의 X 타임라인과 글은 "에이전트용 CLI를 잘 짜는 직관"을 익히는 가장 빠른 길이다. discrawl·gogcli·peekaboo 같은 그의 작품들이 모두 Printing Press의 영감의 원천 — 코드를 직접 읽으면서 패턴을 익히면 6주 코스가 4주로 단축될 수 있다.

10핵심 키워드 사전

이 레포·문서에서 자주 나오는 용어 한곳에 정리.

용어
NOI (Non-Obvious Insight)
"이 API는 OBVIOUS_THING이 아니라 NON_OBVIOUS_THING이다"라는 한 문장 재구성. Phase 1에서 NOI를 못 쓰면 통과 안 됨. 모든 CLI의 창의적 DNA — Rung 4/5 명령이 여기서 나온다.
용어
Absorb Manifest
Phase 1.5의 결과물. 그 API에 대한 모든 MCP/스킬/CLI/자동화 스크립트의 기능을 행별로 나열한 표. 새 CLI는 이 모든 기능을 매치해야 하고, 그 위에 SQLite·에이전트 친화·MCP 서버까지 더해야 한다.
용어
Creativity Ladder (Rung 1~5)
1=API 래퍼 · 2=출력 포맷 · 3=로컬 영속 · 4=도메인 분석 · 5=행동 통찰. 일반 제너레이터는 1단에서 멈춤, Printing Press는 5단까지 자동 등반.
용어
Domain Archetype
API의 5가지 도메인 분류 — Project Management / Communication / Payments / Infrastructure / Content. 스펙 자동 감지 후 원형에 맞는 워크플로 명령(stale·health·reconcile 등)이 자동 추가.
용어
Shipcheck (Phase 4)
Dogfood(데드 코드 탐지) + verify --fix(자동 수정) + scorecard(점수 평가)를 한 번에 묶은 검증 블록. Phase 4 통과해야 CLI 출시 가능.
용어
Proof of Behavior
구조(syntax) 점검을 넘어 데이터 흐름(semantic)을 점검. Path Proof · Flag Proof · Pipeline Proof · Auth Proof 4종. 환각된 경로·auth 불일치는 하드 FAIL.
용어
Golden Output Harness
testdata/golden/cases/<name>/의 명령을 실행한 결과를 expected/와 비교하는 회귀 테스트. scripts/golden.sh verify가 검증, update가 의도적 변경 시 기준 갱신.
용어
Discovery Provenance
브라우저로 스니핑한 사이트의 경우, 어떤 URL을 방문했고 어떤 endpoint를 발견했고 어떤 응답 샘플이 있는지를 discovery/ 폴더에 전부 보관. 풀 감사 추적(audit trail).
용어
Codex Mode
/printing-press <api> codex로 호출하면 Phase 3 코드 생성을 OpenAI Codex CLI에 위임. Claude는 두뇌(연구·계획·점수)에 집중, Codex가 손(코드 작성)을 맡음. Opus 토큰 60% 절감, 3회 실패 시 자동으로 표준 모드 폴백.
용어
tools-manifest.json
생성된 CLI마다 자신의 환경 변수(어느 토큰이 필요한지)를 선언. cli-printing-press auth doctor가 모든 설치된 CLI의 매니페스트를 읽어 토큰이 설정/미설정/의심스러운지 진단 — 처음 4글자만 노출.
용어
Compound Command
API 자체로는 불가능한 복합 질의. 로컬 SQLite 위에서만 가능 — stale(시간 축), health(여러 메트릭 합성), bottleneck(이슈 관계 그래프), reconcile(charges+subscriptions 조인) 등. Rung 4/5의 핵심.
용어
Typed Exit Code
0=성공 / 2=사용법 오류 / 3=찾을 수 없음 / 4=인증 실패 / 5=API 오류 / 7=레이트 제한. 에러 메시지를 파싱하지 않고 코드만 보고 에이전트가 자가 교정 가능.

11참고 링크

원본 문서·자매 레포·영감의 원천을 한 곳에.

분류이름링크
본체cli-printing-press 메인 레포github.com/mvanhorn/cli-printing-press
본체printingpress.dev 카탈로그 사이트printingpress.dev
본체printing-press-library — 발행된 CLI들github.com/mvanhorn/printing-press-library
본체last30days-skill — 최근성 연구 스킬(같은 저자)github.com/mvanhorn/last30days-skill
영감Peter Steinberger의 discrawl (Discord)github.com/steipete/discrawl
영감Peter Steinberger의 gogcli (Google Workspace)github.com/steipete/gogcli
영감Trevin Chow의 "10 Principles for Agent Native CLIs"trevinsays.com/p/10-principles-for-agent-native-clis
영감Ramp의 에이전트 친화 CLIgithub.com/ramp-public/ramp-cli
관련 표준MCP (Model Context Protocol) 스펙spec.modelcontextprotocol.io
관련 표준Anthropic — Building agents that reach productiondocs.anthropic.com/ko/docs/agents-and-tools/mcp (원래 링크 404 — MCP 공식 문서로 대체)
관련 표준OpenAPI 3.x 스펙spec.openapis.org/oas/v3.1.0
유사 도구Speakeasy (상용 SDK 생성기)speakeasyapi.dev
유사 도구Fern (상용 SDK + 문서 생성기)buildwithfern.com
유사 도구OpenAPI Generator (오픈소스)github.com/OpenAPITools/openapi-generator
한국어 자매 분석esengine/DeepSeek-Reasonix 딥다이브DeepSeek-Reasonix-deep-dive.html
한국어 자매 분석anthropics/claude-plugins-official 딥다이브claude-plugins-official-deep-dive.html
한국어 자매 분석safishamsi/graphify 딥다이브graphify-deep-dive.html
SO WHAT?

오늘 30분 안에 해볼 수 있는 한 가지

  1. Go 1.26.3 + Claude Code 설치 확인. go version·claude --version로 둘 다 깔려 있는지 본다.
  2. 바이너리 설치. go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest 한 줄.
  3. 레포 클론 + 진입. git clone github.com/mvanhorn/cli-printing-presscd해서 claude --plugin-dir ..
  4. 본인이 매일 쓰는 API 하나 골라 인쇄. Notion·Linear·Stripe·GitHub 중 하나. /printing-press <그 API> 한 줄. 30분 ~ 1시간 대기.
  5. 결과물의 NOI를 본다. manuscripts/<api>/<run-id>/research/noi.md에 적혀 있다 — Printing Press가 그 API의 비밀 정체성을 어떻게 봤는지 30초만 읽으면 사고가 확장된다.
분석일: 2026-05-24 · TrendShift Daily 19위 · 2.4k stars · v4.14.0 · 1,243 commits · MIT · Go 84.7%
레포: github.com/mvanhorn/cli-printing-press · 사이트: printingpress.dev
자매 분석: DeepSeek-Reasonix · claude-plugins-official · graphify · awesome-deepseek-agent