# CLI 레퍼런스 (@saeroon/cli)

> 이 파일은 코드에서 자동 생성됩니다. **직접 편집하지 마세요.**
> 재생성: `cd hosting-web && npx tsx scripts/gen-docs.ts`
> 진실 = `packages/cli/src/index.ts` 커맨드 등록부. 운영자 전용 내부 커맨드는 제외됩니다.

설치·인증 후 `saeroon <command>` 형태로 사용합니다. 각 커맨드의 전체 옵션·기본값은 `saeroon <command> --help` 가 단일 진실입니다.

```bash
npx @saeroon/cli login
npx @saeroon/cli init
npx @saeroon/cli deploy ./site
```

## 핵심 커맨드

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon login` | API 키 설정 | — |
| `saeroon whoami` | 현재 인증 상태 확인 | — |
| `saeroon init` | 프로젝트 초기화 — 정적 트랙(index.html + 포인터형 CLAUDE.md/.cursorrules). | — |
| `saeroon analyze <url>` | 레퍼런스 URL 분석 (스크린샷 4장 + DOM/CSS 추출 + 비디오 감지 + 인터랙션 감지) | `--output-dir` 분석 결과 출력 디렉토리<br>`--timeout` 페이지 로드 타임아웃 (ms)<br>`--industry` 업종 (cafe, restaurant, salon, law 등 — 비디오 검색 키워드에 사용) |
| `saeroon compare` | 레퍼런스 ↔ 프리뷰 시각 비교 (Playwright 스크린샷) | `--ref` 레퍼런스 URL<br>`--preview` 프리뷰 URL<br>`--output` 출력 파일 경로 (단일 뷰포트)<br>`--output-dir` 출력 디렉토리 (멀티 뷰포트)<br>`--width` 뷰포트 너비 (단일 모드)<br>`--height` 뷰포트 높이 (단일 모드)<br>`--viewports` 비교 뷰포트: all \| mobile,tablet,laptop,desktop |
| `saeroon verify <url> <schema>` | 프리뷰 URL의 템플릿 렌더 검증 (render/behavior/visibility/seo/assets/content/tokens 7 카테고리). V3 default (D-V3UI-7 B), --schema-format v2 legacy alias. | `--viewport` 뷰포트 (예: 1280x800)<br>`--output` JSON 리포트 단일 파일 출력 경로<br>`--output-dir` 리포트 디렉토리 (기본: .saeroon/verify/&lt;timestamp&gt;/). --format과 함께 사용<br>`--format` 출력 포맷 (콤마 구분): json, junit, html. 지정 시 --output-dir에 저장 (기본 .saeroon/verify/&lt;timestamp&gt;/)<br>`--schema-format` 스키마 형식: v3 (default, auto-detect) \| v2 (legacy 강제)<br>`--timeout` 네비게이션 타임아웃 (ms)<br>`--wait-until` domcontentloaded \| load \| networkidle<br>`--json` JSON만 stdout으로 출력 (스피너/요약 비활성)<br>`--verbose` 진행 로그를 stderr로 출력<br>`--allow-host` 추가 허용 호스트 (예: staging.example.com 또는 *.example.com). 여러 번 지정 가능<br>`--allow-insecure` http:// 허용 (기본은 https만, 로컬 개발 전용)<br>`--fail-level` 이 심각도 이상 감지 시 exit 1: error \| warn \| info<br>`--page` 검증할 페이지 경로 (여러 번 지정 가능). 미지정 시 URL의 경로 사용<br>`--all-pages` 스키마의 모든 페이지 순회 검증 (C2)<br>`--audit` V3 Standards Audit 5 차원 실행 (HTML5/CSS-trends/Web-Vitals/WCAG/structured-data, ~30-60s/site, D-AUD-1)<br>`--audit-categories` audit 차원 부분집합 (CSV: html-spec,css-modern,web-vitals,wcag,structured-data)<br>`--no-responsive` V3-Schema-Guardrails L4 — responsive 카테고리 비활성 (default ON, mobile/tablet/desktop multi-viewport scrollWidth + grid stretching + hero overflow + section empty area)<br>`--responsive-viewports` responsive viewports CSV (예: mobile:375x812,tablet:768x1024,desktop:1440x900) |
| `saeroon upload <path>` | 이미지를 Saeroon CDN에 업로드 | `--replace-in` 업로드 후 파일 내 로컬 경로를 CDN URL로 교체<br>`--site-id` 사이트 ID<br>`--api-key` API Key |
| `saeroon deploy [input]` | 사이트 배포. input 미지정 = saeroon.config.json + schema.json. input = .json = schema. input = folder + index.html = static (Static Hosting Track M1). | `--api-key` API Key<br>`--target` 배포 대상: staging\|production (schema 경로 only)<br>`--dry-run` 실제 업로드/배포 없이 에셋 리포트만 출력<br>`--sync-template` Production 배포 후 마켓플레이스 템플릿 버전 자동 동기화 (schema 경로 only)<br>`--format` 스키마 형식: v3 (default, auto-detect) \| v2 (legacy 강제)<br>`--site-id` Static 배포 시 기존 사이트 update (미지정 시 신규 사이트 prompt)<br>`--slug` Static 신규 사이트 생성 시 slug 명시 (비대화형 배포의 권장 경로 — 미지정 시 폴더 이름이 slug 가 된다)<br>`--name` Static 신규 사이트 생성 시 표시 이름 명시 (미지정 시 폴더 이름)<br>`--yes` Static 배포 시 사이트 이름/slug prompt skip (auto default 값)<br>`--pk` publishable key (pk_live_*) — data-pk 로 inject (정적 사이트 회원/게시판 SDK 테넌트 해석)<br>`--allow-no-turnstile` 폼 스팸차단 위젯을 주입하지 않고 배포 (기본 = 항상 주입. 위젯 없이 = 제출 영구 차단 깨진 폼이므로 실서비스 비권장)<br>`--site-type` 서빙 모드 강제: static\|spa (미지정 시 _redirects 루트 캐치올 `/* → /index.html 200` 자동 추론, 없으면 static). Static 배포 전용.<br>`--auto-annotate` 편집 후보를 자동 감지해 **업로드본에만** 4속성 선언 (소스 파일 무수정 → 배포마다 재계산. 영구 선언은 content init 권장). Static 배포 전용.<br>`--no-content` 콘텐츠 편집 단계 전체 건너뛰기 (선언 수확·프로비저닝 안 함). Static 배포 전용.<br>`--content-user-id` 콘텐츠 프로비저닝 감사 주체 userId (기본 = 사이트 소유자). Static 배포 전용.<br>`--content-plan` AI 결정 문서 (시맨틱 field 명·text→rich 승격·크롬 제외). --auto-annotate 와 함께 쓰면 배포마다 같은 키가 나온다. Static 배포 전용. |
| `saeroon publish [schema-path]` | [deprecated] 마켓플레이스에 템플릿 등록 → saeroon template register 사용 _(deprecated)_ | `--api-key` API Key |
| `saeroon diff` | Staging vs Production 스키마 비교 | `--api-key` API Key |

## 그룹 커맨드

### 사이트 (site)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon site list` | 내 사이트 전수 조회 (보관된 사이트 포함). 계정에 남은 적재물 확인 경로. | `--status` 상태 필터: draft \| published \| publishing \| archived<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon site publish <slug>` | 사이트 발행 (Draft → Published). 정적 사이트 첫 발행 경로. slug 또는 siteId(GUID) 허용. | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon site archive <slug>` | 사이트 보관 (→ Archived). 서빙 410 Gone. 되돌릴 수 있다. slug 또는 siteId(GUID) 허용. | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon site restore <slug>` | 보관 사이트 복구 (Archived → Draft). 보관 유지 기간 경과 후에는 불가. | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon site delete <slug>` | 사이트 영구 삭제 (되돌릴 수 없음). 보관(Archived) 상태만 허용 — 활성 사이트는 먼저 site archive. | `--yes` 영구 삭제 확인 (필수)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 기능 연결 (feature)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon feature attach <type>` | 정적 사이트에 feature 활성화 (현재 지원: form · booking. collection = 로드맵. booking 서비스 정의는 booking apply) | `--site` 대상 사이트 ID (cli deploy 응답에 담긴 siteId)<br>`--schema` Form schema 정의 JSON 파일 (FieldsJson) — optional<br>`--settings` Form 설정 JSON 파일 (SettingsJson, notification + submit action) — optional<br>`--name` Form 이름 (default = schema 파일 basename)<br>`--slug` Form slug (default = sanitized schema basename, 사이트 안 unique)<br>`--api-key` API Key |

### 마켓플레이스 템플릿 (template)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon template register` | 소유 사이트를 마켓플레이스 템플릿으로 등록. --static = 정적 자산 배포 등록 (manifest 자동추출 + board fallback) | `--api-key` API Key<br>`--name` 템플릿 이름<br>`--category` 마켓 카테고리 — corporate\|healthcare\|portfolio\|shop\|restaurant\|booking\|blog\|landing\|creative (미지정 시 대화형 선택. 없으면 카테고리 필터에 안 잡힘)<br>`--auto-approve` 플랫폼 운영자 자동 승인+발행 (Creator.IsPlatformOwner=true 또는 Admin role 의무)<br>`--static` 정적 자산 배포 템플릿으로 등록 — FeatureManifest 자동추출 + board fallback (Static Hosting Track)<br>`--site` 소스 사이트 ID (--static, 미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon template sync` | 소스 사이트 스키마를 템플릿에 동기화 + 새 버전 발행 | `--api-key` API Key<br>`--force` 변경 확인 없이 즉시 동기화<br>`--json` JSON 형식으로 출력 |
| `saeroon template status` | 내 템플릿 목록 및 상태 조회 | `--api-key` API Key<br>`--json` JSON 형식으로 출력 |
| `saeroon template update` | 템플릿 메타데이터 수정 | `--api-key` API Key<br>`--name` 템플릿 이름<br>`--description` 설명<br>`--category` 카테고리<br>`--tags` 태그 (콤마 구분)<br>`--price-krw` 가격 KRW<br>`--json` JSON 형식으로 출력 |

### 게시판 템플릿 (board)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon board create` | 사이트에 게시판 직접 생성 (API 키 sk_live_ — 멱등: 동일 슬러그 존재 시 회수) | `--name` **(필수)** 게시판 이름<br>`--slug` **(필수)** 게시판 슬러그 (소문자·숫자·하이픈·밑줄)<br>`--type` 게시판 유형 general\|notice\|gallery<br>`--write-mode` 작성 권한 open\|operatorOnly<br>`--allow-anonymous` 익명 작성 허용 (기본 false)<br>`--description` 게시판 설명<br>`--min-level-to-read` 읽기 최소 레벨<br>`--min-level-to-write` 작성 최소 레벨<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon board list` | 사용 가능한 board template 목록 조회 (System 시드 + User export) | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon board apply <slug>` | 사이트에 board template 적용 (멱등 — 이미 존재 시 재사용) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon board export` | 소스 사이트 board → 신규 BoardTemplate 로 export (registry 보강) | `--board` **(필수)** 소스 board ID<br>`--site` 소스 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--slug` BoardTemplate slug (미지정 시 backend 가 소스 board slug 사용)<br>`--name` BoardTemplate 이름 (미지정 시 소스 board 이름)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 예약 (booking)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon booking list` | 사이트 예약 서비스 정의 조회 (코어+결제 오버레이 병합) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon booking apply <file>` | 매니페스트(JSON)로 예약 서비스 선언적 재조정 (멱등 — key 자연키 upsert, 부재분 비활성) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--allow-empty` 빈 매니페스트(전체 비활성) 허용 — 파괴적 연산 명시 승인<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon booking export` | 사이트 예약 정의 → 재적용 가능 매니페스트 JSON (-o 미지정 시 stdout) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`-o,` 출력 파일 경로 (미지정 시 stdout 으로 순수 JSON)<br>`--json` JSON 형식으로 출력 (파일 저장 시 요약 JSON, exit code 0/1) |

### 회원 tier 쿠폰 (coupon)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon coupon create` | 회원 tier 쿠폰 발급 (--code = 단일·멱등 / --count = 대량). 영구 부여, 서버 단일사용·회수 | `--tier` **(필수)** 부여 등급 Bronze\|Silver\|Gold\|Platinum (정확한 대소문자)<br>`--count` 대량 생성 개수 1~1000 (서버 생성 코드)<br>`--code` 단일 쿠폰 코드 (미지정 시 서버 생성; 지정 시 멱등)<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon coupon list` | 사이트 쿠폰 목록 조회 (tier / status 선택 필터) | `--tier` 등급 필터<br>`--status` 상태 필터 active\|used\|revoked<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon coupon revoke <code>` | 쿠폰 회수 (미사용만, 멱등). 사용된 쿠폰은 회수 불가 | `--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon coupon usage <code>` | 단일 쿠폰 사용내역 (누가 언제 redeem 했는지 + 상태) | `--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 카탈로그 (catalog)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon catalog list` | 사이트 카탈로그 목록 조회 (보관 포함) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog apply <file>` | 매니페스트(JSON)로 카탈로그 정의 선언적 재조정 (멱등 — key 자연키 upsert, 부재분 무접촉) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--prune` 매니페스트에 없는 카탈로그를 보관 — 파괴적 연산 명시 승인 (기본은 무접촉)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog export` | 사이트 카탈로그 정의 → 재적용 가능 매니페스트 JSON (-o 미지정 시 stdout, 보관분 제외) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`-o,` 출력 파일 경로 (미지정 시 stdout 으로 순수 JSON)<br>`--json` JSON 형식으로 출력 (파일 저장 시 요약 JSON, exit code 0/1) |
| `saeroon catalog archive <key>` | 카탈로그 보관 — 공개 목록에서 숨김. 항목과 그 ID 는 그대로 남는다 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog unarchive <key>` | 카탈로그 보관 해제 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog items <key>` | 카탈로그 항목 목록 조회 (은퇴 포함). --manifest 시 재적용 가능 import 매니페스트로 출력 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--manifest` catalog import 로 되먹일 수 있는 매니페스트 형태로 출력 (은퇴 항목 제외)<br>`-o,` --manifest 사용 시 출력 파일 경로 (미지정 시 stdout)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog import <key> <file>` | 매니페스트(JSON)로 항목 일괄 등록 (멱등 — name 자연키 upsert, 부재분 무접촉) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--prune` 매니페스트에 없는 활성 항목을 은퇴 — 파괴적 연산 명시 승인 (기본은 무접촉)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog retire <key> <itemId>` | 항목 은퇴 (soft-delete — 목록에서 숨기되 참조는 보존) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon catalog restore <key> <itemId>` | 항목 은퇴 해제 (복원) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 그룹 정책 (group)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon group list` | 사이트 그룹 정책 목록 조회 (보관 포함) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon group get <policyKey>` | 그룹 정책 단건 조회 — 운영 규칙 + 직위 정의 + 속성 스키마 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon group apply <file>` | 매니페스트(JSON)로 그룹 정책·직위 선언적 재조정 (멱등 — key/roleKey 자연키 upsert, 부재분 무접촉) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--prune` 매니페스트에 없는 정책을 보관하고 직위를 삭제 — 파괴적 연산 명시 승인 (기본은 무접촉)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon group export` | 사이트 그룹 정책 → 재적용 가능 매니페스트 JSON (-o 미지정 시 stdout, 보관분 제외) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`-o,` 출력 파일 경로 (미지정 시 stdout 으로 순수 JSON)<br>`--json` JSON 형식으로 출력 (파일 저장 시 요약 JSON, exit code 0/1) |
| `saeroon group archive <policyKey>` | 그룹 정책 보관 — 신규 그룹 개설만 막힌다. 기존 그룹은 계속 돈다 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon group unarchive <policyKey>` | 그룹 정책 보관 해제 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon group role-delete <policyKey> <roleKey>` | 직위 정의 삭제. 그 직위를 보유한 활성 그룹원이 있으면 409 로 거절된다 | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 콘텐츠 인라인 편집 (content)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon content propose <folder>` | 편집 후보를 스캔해 **AI 판독용 제안 문서**(JSON) 출력. 파일 수정·네트워크 0 — AI 가 시맨틱 이름·rich 승격·제외를 결정해 content init --plan 으로 되돌린다 | `--site` 문서에 기록할 사이트 ID (선택 — 제안은 로컬 스캔이라 로그인 불요)<br>`-o,` 결과를 파일로 저장 (생략 시 stdout)<br>`--no-images` 이미지(img) 후보 제외 — 텍스트만 제안<br>`--interactive-text` 링크·버튼 텍스트도 후보에 포함 (기본 제외 — 오탐 완화) |
| `saeroon content init <folder>` | 정적 폴더의 편집 후보를 스캔·제안 → 확인 후 4속성 선언(HTML 수정) + 현재 값으로 필드 프로비저닝. 재실행 멱등 | `--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--plan` AI 결정 문서 적용 (시맨틱 field 명·text→rich 승격·크롬 제외). 검증 실패 시 아무것도 수정하지 않고 중단<br>`--dry-run` 제안만 출력 — HTML 수정·프로비저닝 안 함<br>`--yes` 확인 프롬프트 건너뛰기 (명시 승인)<br>`--reseed` 저장된 값을 HTML 현재 값으로 되돌림 (기본은 저장값 유지 = 라이브 편집 보존)<br>`--no-images` 이미지(img) 후보 제외 — 텍스트만 선언<br>`--interactive-text` 링크·버튼 텍스트도 후보에 포함 (기본 제외 — 오탐 완화)<br>`--user-id` 감사 주체 userId (기본 = 사이트 소유자)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon content attach <folder>` | 이미 HTML 에 박힌 data-saeroon-editable 4속성만 수확해 프로비저닝 (파일 무수정 — 수작업 선언 납품용) | `--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--dry-run` 수확 결과만 출력 — 프로비저닝 안 함<br>`--yes` 확인 프롬프트 건너뛰기 (명시 승인)<br>`--reseed` 저장된 값을 HTML 현재 값으로 되돌림 (기본은 저장값 유지)<br>`--user-id` 감사 주체 userId (기본 = 사이트 소유자)<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon content resolve` | (ct, pageKey, field) → 엔트리 recordId 해석. MCP/REST 로 편집값을 직접 다루기 전 주소를 찾는 헬퍼 | `--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--ct` ContentType — page \| site<br>`--page` pageKey 로 필터 (예: index · about · __global)<br>`--field` field 로 필터 + 현재 값 표시<br>`--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

### 커스텀 도메인 (domain)

| 커맨드 | 설명 | 옵션 |
|---|---|---|
| `saeroon domain connect <domainId>` | 구매/이전 도메인을 사이트에 연결 (Cloudflare zone 생성 + 네임서버 위임 자동) | `--api-key` API Key<br>`--site` 대상 사이트 ID (미지정 시 saeroon.config.json 의 siteId)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon domain connect-external <siteId> <domain>` | 직접 보유 도메인(BYO) 추가 + 전용 Cloudflare zone 생성 → 네임서버 발급 (operator 로그인 필요) | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon domain verify <domainId>` | 직접 보유 도메인(BYO) 검증/활성화 — zone active 시 검증 + 무료 SSL (operator 로그인 필요) | `--api-key` API Key<br>`--watch` NS/TXT 전파를 폴링하며 활성화될 때까지 대기 (활성화 exit 0 / 타임아웃 exit 1)<br>`--interval` --watch 폴링 간격 (초)<br>`--timeout` --watch 최대 대기 (분)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon domain list` | 내 구매/이전 도메인 목록 (또는 --site 지정 시 해당 사이트 연결 도메인) | `--api-key` API Key<br>`--site` 특정 사이트 연결 도메인만 조회 (미지정 시 saeroon.config.json → 전체 구매 도메인)<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |
| `saeroon domain status <domainId>` | 도메인 상세 + DNS 설정 정보 조회 (검증/SSL/zone/네임서버) | `--api-key` API Key<br>`--json` JSON 형식으로 출력 (stdout = 순수 JSON, exit code 0/1) |

_옵션 상세는 `saeroon <command> --help` 참조._
