Convert discovery output (DISCOVERY.md) or a natural-language brief into charter/architecture/ADR-100. Milestones are created by /plan-milestone (ADR-057). Re-run safe with update mode.
Installs into .claude/skills of the current project.
Are you the author of Bootstrap Project?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/kohj1018-bootstrap-project-agentic-dev-harness)
---
name: bootstrap-project
description: Convert discovery output (DISCOVERY.md) or a natural-language brief into charter/architecture/ADR-100. Milestones are created by /plan-milestone (ADR-057). Re-run safe with update mode.
argument-hint: "[project brief or empty (uses DISCOVERY.md)] [--apply]"
disable-model-invocation: true
allowed-tools: Read Glob Grep Write Edit Agent
---
너의 역할은 이 보일러플레이트를 기준으로 새 프로젝트의 초기 문서 세팅을 완료하는 것이다.
입력 우선순위:
1. `$ARGUMENTS`에 brief 내용이 있으면(비어 있지 않으면) 그것을 우선 입력으로 사용한다. `docs/10-charter/DISCOVERY.md`가 함께 있으면 보조 컨텍스트로만 참조하고, 둘이 어긋나면 출력에 명시한다(silent override 금지).
2. `$ARGUMENTS`가 비어 있고 `docs/10-charter/DISCOVERY.md`가 있으면 그것을 입력으로 사용한다.
3. 둘 다 없으면 `/discover-product` 선행 또는 brief 입력을 안내하고 종료한다(강제 진행하지 않는다).
이 skill은 발굴이 아니라 변환을 한다 — 발굴은 `/discover-product`에서.
반드시 먼저 읽을 파일:
- AGENTS.md (CLAUDE.md는 @AGENTS.md import이므로 본문은 AGENTS.md에서 읽는다)
- `docs/00-meta/STRUCTURE.md`
- `docs/00-meta/WORKFLOW.md`
- `docs/00-meta/GUARDRAILS_STRATEGY.md`
- `docs/00-meta/PROJECT_START_CHECKLIST.md`
- `docs/90-decisions/boilerplate/_ADR_GUIDE.md` (ADR-100 작성 시 권장 섹션·area 태그·Mutation Contract 규약)
- `docs/90-decisions/project/README.md` (project ADR 인덱스 — ADR-100 추가 후 한 줄 갱신 대상)
- `brief-template.md`
- `output-checklist.md`
- `examples/career-saas-example.md`
반드시 수행할 일:
1. 입력 회수 — DISCOVERY.md 또는 자연어 입력.
2. 기존 산출물(charter/architecture/ADR-100) 존재 여부 점검.
- 없으면 새로 생성.
- 있으면 **갱신 모드** — 본 skill은 메인 세션에서 실행된다(ADR-050 D1). 기존 산출물 덮어쓰기는 사고 방지를 위해 명시적 승인(`--apply` 또는 사용자 확인)을 요구한다.
- `--apply` 인자가 있으면: 기존 산출물을 읽고 architect로 갱신본을 생성해 즉시 반영한다.
- `--apply` 인자가 없으면: 기존 산출물을 읽고 갱신 제안 diff를 출력에만 표시하고 **종료**한다(파일 수정 없음). 사용자가 검토 후 `/bootstrap-project --apply ...`로 재실행하거나, 메인 세션에서 architect를 직접 호출해 부분 반영한다.
3. 메인 세션이 본 절차를 직접 운전한다(discover-product·bootstrap-design 패턴). 무거운 아키텍처 추론(charter 구조화·ARCHITECTURE 결정·ADR-100 초안)은 `Agent` 도구로 **architect 단발 sub-call**에 위임하고, 반환된 결론을 본 skill이 파일에 반영한다(architect agent의 `model: opus`가 추론 품질을 보장). **단, 설계 결정이 ADR-053 게이트(S1~S4 중 1+)에 걸리면 단발 sub-call 대신 아래 `## 고-stakes 설계 게이트`의 ①~⑤ 절차를 따른다** — 신규 프로젝트 초기 아키텍처(DB·인증·데이터 모델)는 거의 항상 게이트 대상. 종료 후 사용자에게 `/clear` 또는 새 세션 권장.
4. 다음 산출물을 갱신한다.
- `README.md` · `README_ko.md` — **2종 동시 갱신**(한쪽만 고치면 drift. 두 README는 자연어 호출 skill 목록의 SSOT이자 fork 후에도 남는 프로젝트 표지 — ADR-010#amend-3)
- README 하단의 `## License` / `## Contributing` 섹션은 **이 프로젝트의 배포 방식에 맞춰 다시 쓰거나 제거한다** — 아래 `## 결정 마감`의 배포 라이선스 항목 결과를 반영한다. `## Contributing`이 보일러플레이트의 이슈·PR 템플릿을 가리키고 있으면 그 프로젝트의 기여 경로로 교체하거나 섹션을 제거한다.
- `LICENSE` (B·C 에서 **프로젝트 라이선스 부분만** 교체·추가한다. **보일러플레이트 MIT 허가 고지 전문은 어느 선택지에서도 지우지 않으며 삭제를 안내하지도 않는다** — 보존 대상은 저작권 한 줄이 아니라 *허가 고지 전문*이고 fork 는 보일러플레이트의 상당 부분을 포함한다. ADR-060#amend-1 결정 2·3)
- `docs/10-charter/PROJECT_CHARTER.md`
- `docs/20-system/ARCHITECTURE_OVERVIEW.md`
5. 필요하면 다음도 함께 갱신.
- `docs/20-system/DESIGN.md`는 baseline placeholder (presence: conditional). UI 스택 포함 시 `/bootstrap-design`이 본 파일을 채운다. 비-UI는 fork 직후 본 파일 삭제 (본 skill에서는 갱신 X).
- `docs/90-decisions/project/ADR-100-initial-project-decisions.md` — bootstrap 단계의 초기 결정 (project ADR은 100+ 번호 — boilerplate/ADR-002는 legacy reserved). _ADR_GUIDE.md 권장 섹션 + Ratchet evidence label 정합. 스택 선택 ADR은 `/bootstrap-stack`이 별도로 생성한다(`project/ADR-101-stack-selection.md` — 본 skill 책임 아님).
- **ADR-100 작성 시 `docs/90-decisions/project/README.md` 인덱스 표에 한 줄 추가** (인덱스 표 컬럼 양식은 `docs/90-decisions/project/README.md` 본문 표 헤더가 SSOT — _ADR_GUIDE.md "새 ADR 추가 절차" §2 정합).
6. workitem 문서(milestone/feature)는 만들지 않는다 — 마일스톤 생성은 `/plan-milestone` 단일 경로다(ADR-057 결정 1). 종료 출력에서 안내한다.
반드시 지켜야 할 원칙:
- 추측은 사실처럼 쓰지 말고 가정으로 표시한다.
- 스택이 명시되지 않았다면 stack-specific 자동화는 만들지 않는다.
- hooks, CI, lint/test 스크립트는 스택이 명확할 때만 추가한다.
- 상위 문서와 하위 문서의 역할을 섞지 않는다.
- 꼭 필요한 초기 파일만 만든다.
마지막 출력:
- 갱신한 파일 목록
- 핵심 가정
- 남은 미결정 사항 (결정 아닌 품질·형식 지적 — 기존 슬롯 유지)
- **원장 요약**: `closed N건 / deferred M건 / open K건`. open이 있으면 각 항목의 `authority`·필요 시점을 1줄씩 (본문은 `docs/10-charter/DECISION_REGISTER.md`)
- 후속 단계 ([WORKFLOW.md "스킬 종료 시 후속 단계 출력 contract"](../../../docs/00-meta/WORKFLOW.md) 양식 정합 — PROJECT_START_CHECKLIST 의 `/bootstrap-project → /bootstrap-stack → /stack-guard → /bootstrap-design(UI) → /plan-milestone → /plan-workitem` 순서가 SSOT):
- 기본 권장: `/bootstrap-stack <스택 요약>` (스택 미정이면 **무입력**으로 실행 → 리서치+라운드 추천) — 스택 확정이 후속 lifecycle 의 전제 (스택 미정 상태에서 plan 은 가짜 작업).
- 분기 옵션 (해당 시 ≤3):
- 스택이 이미 brief/charter 에 명시됐고 `/bootstrap-stack` + `/stack-guard` 도 끝났다면: `/plan-milestone` — 첫 마일스톤(M1)과 feature 문서를 라운드 협상으로 생성 (ADR-057)
- UI 프로젝트 + 스택 확정 후: `/bootstrap-design` 다음 `/plan-milestone`
- 기획 신뢰도 재확인 원하면: 다른 세션에서 `/validate-discovery --reviewer-tag <tag>` 후 원본에서 `/repair-discovery`
- 프롬프트 동봉 권장:
- charter `## 5. 비목표` 의 핵심 키워드 (다음 plan 라운드의 scope 가드 입력)
- DISCOVERY.md `## 12. Assumption Tracker` 의 *미검증* 가정 중 우선 검증 대상 (있으면)
- 원장의 `status: open` 항목 ID 목록 (사용자가 다음 skill 발화 전 결정해야 할 항목 — 본문은 `docs/10-charter/DECISION_REGISTER.md`)
## 고-stakes 설계 게이트 (ADR-053)
설계 결정이 ADR-053 게이트(S1~S4 중 1+ → full 패널 / S5만 → 리서치-only / 전부 NO → 단발)면, architect 단발 대신: ① researcher 웹 패스(must-or-flag, 오프라인 `Needs Research`) → ② architect 다각도 2~3안 → ③(최상위만) 두 번째 architect 적대 검토(review-doc 미사용·parallel-merge 금지) → **④ 사용자 선택 — ②의 안을 Decision Brief 6블록으로 제시하고 사용자가 고른다(ADR-053#amend-2 / ADR-060 D3)** → ⑤ ARCHITECTURE §7 결정 블록 기록 + 원장 `closed` 등재. 저-stakes는 현행 단발. **S1~S4는 *분석 깊이* 판정이고 *누가 결정하는가*는 원장의 `authority`가 소유한다** — `agent-delegated`로 배정된 결정은 ④를 건너뛰고 라운드 종료 시 일괄 확인 1회에 포함한다. (Codex: 순차 단일 degrade — researcher 인라인/사전 노트.)
## 결정 마감 (ADR-060)
본 skill이 내리거나 발견하는 기획 결정 중 **사용자가 정하거나 승인해야 할 것**을 `docs/10-charter/DECISION_REGISTER.md`에 등재한다 — 대화 출력으로만 두지 않는다.
1. **등재 시점에 `authority`를 확정한다** (ADR-060 D2): 제품 의도·범위·우선순위·사용자 체감·외부 계약·데이터/보안·비용·위험 허용도·비가역 약속 → `user-choice`. 스택·인증·데이터 경계·되돌리기 비싼 구조 → `user-approval`. 승인된 경계 안의 가역적 내부 선택 → `agent-delegated`. **`user-*`를 `agent-delegated`로 낮추려면 사용자 명시 승인 + 항목에 이력 줄이 필요하다.**
1-a. **반드시 등재하는 항목 — 배포 라이선스 (ADR-060#amend-1)**: 저장소에는 보일러플레이트의 `LICENSE`(MIT)가 들어 있다. *"외부 계약 + 비가역 약속"* 이므로 위 1의 정의상 **`authority: user-choice`** 다. **두 축을 분리해** 아래 Decision Brief 로 제시하고, 답이 나오면 README 2종의 `## License`·`## Contributing` 섹션을 처리한다(수행-4).
- **재실행 먼저 (멱등)**: 원장에서 이 항목을 찾고 실제 `LICENSE`·README 상태를 읽는다 — **(i) 없으면** 신규 등재, **(ii) `open` 이면** 중복 등재 없이 재제시, **(iii) `closed` 면** `정본:` 앵커와 파일 상태가 그 결정과 일치하는지만 확인하고 불일치만 보고한다. *"보일러플레이트 MIT가 그대로 있다"* 를 매 실행 전제하지 않는다(본 skill 의 `Re-run safe` 계약 정합).
- **축 1 — 이 프로젝트의 배포 조건 (사용자 선택)**
- **A) 비공개 프로젝트** → 배포 라이선스를 두지 않는다. README `## License` 를 *"비공개 — 배포 라이선스 미설정. 포함된 보일러플레이트는 MIT(`LICENSE`)"* 로 다시 쓴다.
- **B) 공개하지만 오픈소스는 아님** → 권리 보유 고지를 README `## License`(또는 별 파일)에 쓴다. *라이선스 없는 공개 코드는 기본적으로 제3자가 사용할 수 없다.*
- **C) 오픈소스로 공개** → **어느 라이선스인지가 별 결정이다**(MIT 고정 아님). 선택한 라이선스 전문을 프로젝트 라이선스로 두고, 선택·호환성 확인은 `/consult-expert legal` 을 안내한다.
- **축 2 — 보일러플레이트 MIT 고지 (선택 사항이 아니다)**: `LICENSE` 의 MIT 는 *저작권 고지와 **허가 고지 전문**을 사본 또는 상당 부분에 포함*하도록 요구한다. **어느 선택지에서도 그 전문을 지우지 않고 삭제를 안내하지도 않는다.** 비공개 사용에 조건이 어디까지 미치는지·선택 라이선스와 MIT 의 호환성은 **판단하지 않고** `/consult-expert legal` 또는 변호사로 넘긴다(ADR-062 D2 — 법률을 기억으로 단정하지 않는다).
- 되돌리기 비용은 **높다**(공개한 커밋의 라이선스는 소급 철회되지 않는다). 기본 추천은 **A** — 비공개가 기본이고 나중에 C로 올리는 것이 그 역순보다 쉽다.
- **정본**: 닫힌 뒤 결정 본문은 `docs/10-charter/PROJECT_CHARTER.md` `## 7. 제약 조건` 의 배포 라이선스 줄에 적고 원장 항목의 `정본:` 이 그 앵커를 가리킨다 — README·`LICENSE` 는 그 결정의 *투영*이다(`/seal-milestone` 조건 6 이 `정본:` 을 열어 대조하므로 열 자리가 있어야 한다).
2. **등재 범위 (원장을 얇게 유지)**: `user-*` 결정 전부 + 종류 불문 `open`/`deferred`로 남는 항목만 등재한다. **`agent-delegated`는 개별 등재하지 않고** 4의 일괄 확인으로만 처리한다. **코드 품질·형식 지적과 계획 결함은 원장 대상이 아니다** — 기존 `남은 미결정 사항` 출력 슬롯이 그대로 소유한다.
3. **`user-*` 결정은 Decision Brief 6블록으로 제시한다** (ADR-060 D3 / ADR-046#amend-1 — 압축 예외): 배경(왜 지금) → 용어(배경 없이도 이해되게) → 선택지 2~3안(각각 한 줄 요약·이 프로젝트에서의 체감·장점·감수할 것) → 되돌리기 비용 → 추천+근거 → 답변 방법. **라운드당 3~5개 상한**, `skip` 불허(선택 / 추가 설명 / 리서치 요청 / 연기 중 택1). 답변은 평이한 문장으로 재진술해 확인한 뒤 정본에 기록한다.
4. **라운드 종료 시 일괄 확인 1회**: 그 라운드의 `agent-delegated` 결정을 목록으로 제시하고 "바꿀 것 있으면 알려달라"를 1회 확인받는다. 사용자가 뒤집으면 그 항목은 `user-approval`로 원장에 등재한다.
5. **닫히지 않은 항목**: 현재 M 무영향 + 이관 앵커 + 회수 시점 3개를 모두 갖추면 `deferred`, 아니면 `open`으로 남긴다(ADR-060 D4). **앵커 없는 유예는 금지**한다. 현재 M을 막는 사실 조사는 `deferred`가 아니라 `/research-pack` 선행으로 종결한다.
6. 결정 *본문*은 **본 skill이 소유한 정본 문서**(DISCOVERY / Charter / ARCHITECTURE / DESIGN / ADR 중 해당 단계에 존재하는 것)에 쓰고, 원장에는 위치 앵커와 처분 상태만 적는다(ADR-005). 본 skill이 소유하지 않는 문서는 건드리지 않는다.
7. **마일스톤이 아직 없는 단계**(discover/bootstrap)에서는 `영향: (미할당)`으로 등재한다. `/plan-milestone` R1이 triage한다.
## Context 정책 (ADR-019)
`반드시 먼저 읽을 파일`은 *최소 충분*. 추가 ADR/architecture 섹션은 task 본문에서 발화 시 인용 — 사전 fork-load 금지.