all-deploy은(는) 무엇을 하나요?
프로젝트를 감지하고, 감사하며, 올바른 호스트로 배포하여 확인된 미리보기 → 프로덕션 절차를 제공합니다. 고유한 가치는 CLI를 래핑하는 것이 아니라 감지 → 감사 → 올바른 CLI로 라우팅하는 데 있습니다.
설정 (기본 동작을 변경하려면 이 줄을 편집하세요)
CONFIRMATION_MODE: ask_at_start
# ask_at_start (기본값): 각 클라우드 배포 시작 시 전체 자동 또는 단계별 실행 여부를 묻습니다.
# full_auto: 질문을 건너뜁니다. 감사 → 미리보기 → 프로덕션을 프로덕션 전 5초 ESC 창과 함께 실행합니다.
# always_ask: 질문을 건너뜁니다. 프로덕션 전에 명시적인 "예"가 필요합니다.
VISUAL_VERIFY: false # true → chrome-bridge-automation을 통한 스크린샷 미리보기 (프론트엔드 전용)
ALLOW_DIRTY_TREE: false # true → "HEAD가 깨끗함" 감사 확인을 건너뜁니다.
기본 ask_at_start는 단독 작성자와 커뮤니티 사용자 모두에게 적합합니다. 모드 선택은 런타임으로 이동합니다. full_auto 또는 always_ask로 고정하는 것은 대화형으로 질문에 답할 수 없는 자동화에서 스킬을 래핑할 때만 유용합니다.
엄격한 규칙 (절대 위반하지 마십시오 - 이것은 안전 계약입니다)
- 감사를 절대 우회하거나 완화하지 마십시오. 감사는
full_auto모드에서 사용자의 의도와 라이브 인프라 사이의 유일한 게이트입니다. 검사를 실행할 수 없으면 건너뛰는 이유가 아니라 그 자체가 차단입니다. - 2xx/3xx 상태 확인이 포함된 성공적인 미리보기 전에는 절대 프로덕션에 배포하지 마십시오. 미리보기 → 요약 → 프로덕션. 동일한 세션에서 녹색 미리보기 없이 프로덕션은 없습니다. (일부 정적 대상에는 미리보기 환경이 없습니다(예: GitHub Pages, 브라우저 업로드). 이 경우 녹색 아티팩트는 정확한 게시 디렉토리에서 동일한 방식으로 상태 확인된 로컬
python3 -m http.server실행입니다. 게이트는 필수로 유지되며, 제공되는 위치만 변경됩니다.) - 절대 시크릿을 커밋, 출력 또는 로그에 기록하지 마십시오. 추적된 파일에서 시크릿이 발견되면 중단하고 별도의 사용자 승인 단계로 제거 + 기록 재작성을 안내하십시오. 시크릿 값은 요약, 로그 또는 커밋 메시지에 절대 나타나지 않습니다.
- 절대 타사 CLI를 자동 설치하거나 자동 인증하지 마십시오.
!접두사(예:! vercel login,! railway login)를 사용하여 사용자에게 명령을 전달하십시오. - 절대 대상 CLI를 플래그를 숨기는 사용자 지정 스크립트로 래핑하지 마십시오. 참조 파일은 사용자가 읽고 확인할 수 있는 실제 명령을 문서화합니다.
- 절대 diff를 먼저 보여주지 않고 감사를 통과하도록 코드를 수정하지 마십시오.
.gitignore,.env.example, Dockerfile 스캐폴딩, 포트 바인딩 수정 - 모두 표시되고 적용 전에 승인되어야 합니다. ALLOW_DIRTY_TREE: true가 설정되지 않은 한 절대 더티 작업 트리에서 배포하지 마십시오. 커밋되지 않은 변경 사항은 롤백을 복잡하게 만듭니다.- "잠시만"을 존중하십시오. 미리보기와 프로덕션 사이에 망설임을 나타내는 사용자의 발언(wait/hold/stop/not yet/abort)은 프로덕션 단계를 깨끗하게 중단합니다.
두 가지 모드
사용자의 표현에서 미리 결정하십시오:
- 클라우드 배포 (기본값) — 아래의 0~6단계. 트리거: "deploy", "ship", "push to prod", "get it online", "/all-deploy".
- 로컬 실행 — 0, 1, 2단계 후 로컬 실행 단계. 트리거: "run it locally", "corre esto localmente", "/all-deploy local", "just run it", 또는
--local.
프로젝트 클래스 (클라우드 배포 내에서 결정되며 세 번째 모드가 아님)
클라우드 배포는 두 가지 형태를 포함하며, 클래스는 감지되며 절대 묻지 않습니다:
app(기본값) — 런타임, 시작 명령 및 포트가 있는 서비스.static— 웹사이트: 호스트가 CDN에 복사하는 파일 폴더. 서버, 포트, 런타임이 없습니다. 아래 0.0단계에서 분류됩니다. 0, 2, 3.2, 4, 4.5, 5 및 6단계가 변경됩니다. 전체 조정 세트는references/static-sites.md를 읽으십시오.
로컬 실행 모드에서는 범위가 지정된 감사를 실행합니다(추적된 파일의 시크릿, 시작 명령 존재 여부, 정상적인 포트 바인딩만 확인). 생략: git-remote, 깨끗한 HEAD, npm audit/pip-audit, .env.example 완전성, 환경 변수 전달(전달할 원격이 없음). 그런 다음 감지된 시작 명령(npm run dev / uvicorn main:app --reload --host 0.0.0.0 --port $PORT / docker compose up 등)을 포그라운드에서 실행하고 Monitor를 통해 출력을 스트리밍합니다. 사용자가 로컬 서버도 노출하도록 요청하면 references/targets/cloudflared-tunnel.md로 연결합니다. 이 파일의 다른 모든 내용은 클라우드 배포에 관한 것입니다.
클라우드 배포 워크플로우
모드 선택 (ask_at_start 모드에서 0단계 전에 실행)
이 실행에 대한 유효한 CONFIRMATION_MODE를 결정합니다:
-
사용자의 호출에 명시적 모드 마커가 포함된 경우 이를 채택하고 질문을 건너<0xEB><0x9B><0x84>니다:
full_auto트리거: "auto", "full auto", "auto deploy", "deploy auto", "/all-deploy auto", "yolo".always_ask트리거: "step", "step by step", "one at a time", "confirm each step", "paso a paso", "/all-deploy step".
-
그렇지 않고 위의 구성 블록에서
CONFIRMATION_MODE가full_auto또는always_ask로 고정된 경우 해당 값을 사용하고 질문을 건너<0xEB><0x9B><0x84>니다. -
그렇지 않은 경우 (
ask_at_start, 기본값) 0단계가 실행되기 전에 사용자에게 한 번 묻습니다:"시작하기 전에 — 배포를 어떻게 실행할까요?
1. 전체 자동 — 감사 → 미리보기 → 프로덕션 승격을 순서대로 실행합니다. 프로덕션은 5초 ESC 창 후에 실행됩니다. 2. 단계별 — 감사, 미리보기 및 프로덕션 사이에 확인을 위해 중지합니다.
'auto' 또는 'step'으로 답변해 주세요."
선택된 모드는 이번 실행에만 적용됩니다. 향후 호출 시 다시 질문합니다(트리거 구문을 통해 사용자가 명시적으로 선택하거나 구성 블록이 고정되지 않은 경우).
어느 지점에서든 "Wait" / "stop" / "hold"는 두 모드 모두에서 프로덕션 단계를 중단합니다(엄격한 규칙 8). 차이점은 프로덕션 명령이 실행되기 전에 5초 ESC 창(full_auto)을 얻는지 아니면 명시적인 "yes" 필수 일시 중지(always_ask)를 얻는지입니다.
0.0단계 — 프로젝트 클래스 (먼저 실행, 전제 조건 전에)
루트 또는 dist/, _site/, public/, build/, out/, site/에 HTML 파일이 있고 루트에 package.json, pyproject.toml, requirements.txt, Pipfile, Dockerfile, docker-compose.yml, Procfile, go.mod, Gemfile이 없는 경우 PROJECT_CLASS: static으로 설정합니다. 그렇지 않으면 PROJECT_CLASS: app입니다.
매니페스트 테스트는 index.html도 있는 Vite/Next/Astro 저장소를 앱 파이프라인에 유지하는 방법입니다. static인 경우 지금 references/static-sites.md를 읽으십시오. 해당 단계 표가 아래의 모든 것을 관장합니다.
이것은 의도적으로 0단계보다 먼저 실행됩니다. 전제 조건을 먼저 확인하면 이전에는 필요하지 않은 git 원격이 누락된 HTML 폴더가 튕겨 나갔습니다.
0단계 — 전제 조건 (대상 독립적)
순서대로 확인하십시오. 각 실패는 사용자를 위한 ! 명령으로 중단됩니다.
- Git 저장소.
git rev-parse --is-inside-work-tree를 실행합니다. 저장소가 아니면run locally모드(git이 필요 없음) 또는PROJECT_CLASS: static(정적 사이트는 일반 폴더에서 배포 가능)이 아닌 한 중단합니다. 저장소가 없다고 말하고 계속합니다. 결정은 3.2단계에서 내려집니다. 요청 없이git init을 실행하지 마십시오. - Git 원격 (클라우드 배포 전용).
git remote -v를 실행합니다. 원격이 구성되지 않은 경우 대상이docker-vps(원격 없이 배포 가능) 또는PROJECT_CLASS: static이고 대상이 GitHub Pages 또는 Render가 아닌 경우에만 중단합니다. Cloudflare Pages 직접 업로드 및 Netlify Drop은 저장소가 전혀 필요하지 않습니다. 이 두 번째 조항은 3단계 후에 재평가됩니다. - 언어 경계. v1은 Node 및 Python을 식별합니다. 기본 언어가 Go, Rust, Ruby, Elixir, Bun 또는 Deno인 경우 다음 메시지와 함께 종료합니다: "v1은 Node/Python 에코시스템만 감지합니다. 대상 CLI(
vercel,railway,flyctl,docker)를 직접 실행하십시오. 이 언어에 대한 지원은 v2에서 계획됩니다."PROJECT_CLASS: static인 경우 적용되지 않습니다 — HTML/CSS/JS는 빌드 단계의 유무에 관계없이 항상 범위 내에 있습니다.
대상-CLI 인증은 대상이 선택된 후 3.5단계(아래)에서 확인됩니다.
0.5단계 — 권한 프롬프트 시딩 (첫 번째 실행만)
사용자에게 알립니다: "이 프로젝트에 fewer-permission-prompts 스킬을 한 번 실행하여 배포 허용 목록으로 .claude/settings.json을 시드하십시오. 그렇지 않으면 모든 단계에서 프롬프트가 표시됩니다." 포인터만 제공합니다. 여기서 사용자의 설정을 편집하지 마십시오.
1단계 — 감지
전체 지문 테이블을 보려면 references/project-types.md(스킬 상대 경로 — Claude는 설치된 스킬 디렉토리를 기준으로 해결)를 읽으십시오. 다음을 검사합니다:
- 패키지 관리자 및 매니페스트:
package.json,pnpm-lock.yaml,yarn.lock,package-lock.json,bun.lockb,pyproject.toml,requirements.txt,poetry.lock,uv.lock,Pipfile. - 프레임워크 신호:
next.config.*,vite.config.*,astro.config.*,remix.config.*,nuxt.config.*,svelte.config.*,app/vspages/,FastAPI(),Flask(),app = FastAPI(),server.py가 있는main.py, 루트의index.html. - 런타임 버전:
.nvmrc,.node-version,package.json의engines,.python-version,pyproject.toml의python_version. 장기 실행 대상이 선택되고 런타임이 고정되지 않은 경우 감사가 차단됩니다. - DB / 상태 저장 종속성:
sqlalchemy,psycopg,prisma,mongoose,redis,ioredis,sqlmodel가져오기. 발견되면 *"이 서비스에는 데이터베이스가 필요합니다 — 프로덕션 전에 프로비저닝하십시오"*를 Railway 참조의 Railway 추가 기능 명령과 함께 표시합니다. - 포트 + 시작 명령:
uvicorn,gunicorn,next start,node server.js,python -m ....0.0.0.0바인딩 및$PORT사용을 확인합니다. localhost 전용 바인딩은 장기 실행 대상에서 차단됩니다. - 모노레포:
pnpm-workspace.yaml,turbo.json,nx.json,lerna.json또는 루트package.json의"workspaces"→ 패키지를 열거하고 배포할 항목을 묻습니다. 추측하지 마십시오. - 라이브러리 / CLI (웹 배포가 아님): Node 신호 —
package.json에bin:필드가 있음 또는 (files:배열이 있음 ANDscripts.start가 없음 ANDexpress,fastify,hono,next,koa와 같은 HTTP 프레임워크 가져오기가 없음). Python 신호 —pyproject.toml에[project.scripts]/console_scripts가 있음 AND 선언된 스크립트 또는 가져오기에uvicorn/gunicorn/flask/fastapi가 없음. 라이브러리 신호로main:단독 사용하지 마십시오 — 거의 모든 Node 웹앱도main:을 설정합니다. 깔끔하게 종료합니다: "이것은 패키지처럼 보입니다 —/all-deploy는 npm/PyPI 게시가 아닌 웹 서비스를 대상으로 합니다." - 기존 배포 구성:
vercel.json,railway.toml,fly.toml,Dockerfile,render.yaml— 존중하고, 감사하며, 명시적인 요청 없이 재생성하지 마십시오. - 기존 프로젝트 연결:
.vercel/project.json→ 해당 Vercel 프로젝트 ID를 재사용합니다.project필드가 있는railway.toml→ 재사용합니다. 재배포는 일반적인 경우입니다. 새 프로젝트는 명시적인 "새로 시작"이 필요합니다.
PROJECT_CLASS: static인 경우 프레임워크/런타임/포트/DB/모노레포 지문 감지를 건너<0xEB><0x9B><0x84>니다. 세 가지만 감지합니다: 게시 디렉토리(index.html을 포함하는 폴더 — ., dist/, _site/, public/, build/, out/, site/), 빌드 단계가 있는지 여부, git 저장소가 있는지 여부. 게시 디렉토리 테이블은 references/static-sites.md에 있습니다. 잘못 설정하는 것은 /에서 404를 반환하는 라이브 사이트의 가장 일반적인 원인입니다.
출력: 각각에 대한 한 줄 설명이 있는 분류 블록 및 순위가 매겨진 후보 대상 목록. 전체 대상 순위 지정 루브릭은 references/project-types.md를 참조하십시오.
2단계 — 감사 (엄격, 차단)
이 스킬에 번들된 감사 스크립트(scripts/audit.py)를 현재 프로젝트 디렉토리에 대해 실행합니다. Claude는 로드 시 스킬 경로를 확인합니다. 호출은 다음과 같습니다:
python3 <SKILL_DIR>/scripts/audit.py <project-path>
PROJECT_CLASS: static인 경우:
python3 <SKILL_DIR>/scripts/audit.py <project-path> --profile static --publish-dir <dir> [--target <name>]
이것은 종속성 트리, 시작 명령, 포트 또는 git 원격을 가정하는 모든 검사를 건너<0xEB><0x9B><0x84>고(일반 HTML 폴더에서 잘못된 중요 문제를 발생시킴) 대신 scripts/static_check.py를 실행합니다. 선택한 대상이 github-pages인 경우 --target github-pages를 전달합니다. 이는 실제로 원격이 필요한 유일한 정적 대상이며 .nojekyll 및 루트 상대 경로가 중요한 유일한 대상입니다. 확인 목록은 references/static-sites.md에 있습니다.
여기서 <SKILL_DIR>은 스킬이 설치된 위치(일반적으로 ~/.claude/skills/all-deploy/)이고 <project-path>는 일반적으로 .입니다. 스크립트는 references/audit-checklist.md의 모든 항목을 확인합니다: 추적된 파일의 시크릿, .gitignore 범위, 잠금 파일 무결성, .env.example 완전성(scripts/env_extract.py를 통해), 빌드/시작 스크립트 존재 여부, 포트 바인딩, 깨끗한 HEAD, git-remote 일치, npm audit --production --audit-level=high 또는 pip-audit.
실패 시 중단됩니다. 각 문제에 대해 수정 사항을 diff(해당되는 경우)로 표시하고 적용하기 전에 사용자의 확인을 기다립니다. 자동 모드는 감사를 우회하지 않습니다.
Git 기록 시크릿 스캔은 사용자가 실행하며 자동이 아닙니다. 감사 출력에서 trufflehog git file://. 또는 git log -p -S 'sk_' -S 'AKIA' -S 'ghp_'를 별도의 단계로 표시합니다. 스킬은 절대 git 기록을 재작성하지 않습니다.
3단계 — 대상 선택
1단계의 순위가 매겨진 후보를 한 줄 설명과 함께 제시합니다. 사용자가 선택하거나 "ok"로 최상위 선택을 수락합니다. 지금 대상 참조를 로드합니다:
references/targets/vercel.md— Next, Vite, Astro, Remix, Nuxt, SvelteKit, 정적references/targets/railway.md— FastAPI, Flask, Express, Python 워커, MCP HTTP, Claude Agent SDKreferences/targets/docker-vps.md— 모든 Dockerfile, 상태 저장 워크로드, 자체 호스팅references/targets/cloudflared-tunnel.md— 로컬 개발 노출, 빠른 데모references/targets/cloudflare-pages.md— 정적 사이트; 누군가 돈을 받고 있을 때 기본 선택references/targets/netlify.md— 양식이 필요한 정적 사이트; 드래그 앤 드롭references/targets/github-pages.md— 이미 GitHub에 있는 포트폴리오, 문서, 데모references/targets/render.md— 정적 사이트, 낮은 트래픽
PROJECT_CLASS: static인 경우 후보를 제시하기 전에 references/static-hosting.md를 읽으십시오. 여기에는 비교, 무료 티어 제한, 상업적 사용 매트릭스, 그리고 순위를 실제로 결정하는 질문이 포함되어 있습니다: "이 페이지와 관련하여 누군가 돈을 받고 있습니까?" 예인 경우 Vercel Hobby(사이트 생성, 업데이트 또는 호스팅에 대한 대가를 받는 것은 공정 사용 조건에 따른 상업적 사용임) 및 일반적으로 GitHub Pages도 제거됩니다.
계속...
(참고: 전체 SKILL.md 콘텐츠는 원본에서 잘렸습니다. 필요한 경우 나머지 단계를 번역할 수 있습니다.)