| name | adopt-project |
| description | 기존 코드베이스를 nightwalker harness로 채택(brownfield)하는 onboarding workflow — 인벤토리 수집, adoption_mode=brownfield 고정, Increment 0 baseline 확정 |
| user-invocable | true |
Adopt Project
이미 존재하는 코드베이스를 nightwalker harness 위에 올리는 brownfield 온보딩 절차다.
/init-project가 새 프로젝트(greenfield)를 위한 것이라면, /adopt-project는 기존 자산 보존과 Increment 0 (Baseline) 부터 시작하는 것이 핵심이다.
목적
- 기존 코드베이스의 현재 상태(언어, 런타임, 패키지 매니저, 디렉토리 구조, 테스트/CI)를 인벤토리한다.
.nightwalker/session.yaml에 adoption_mode: brownfield를 명시 저장한다.
- 기존 사용자 정책 파일(
.claude/project-*.md, quality_cmd 등)과 매니페스트(package.json, pyproject.toml)를 덮어쓰지 않는다.
- 첫 increment를 Increment 0 (Baseline) 로 두고, 기존 동작 보존 + 하네스 베이스라인 확정을 acceptance로 잡는다.
- 준비가 끝나면
/autopilot이 Increment 0부터 자동으로 plan -> build를 이어서 실행할 수 있게 만든다.
실행 순서
.nightwalker/session.yaml을 먼저 읽는다. 파일이 없으면 adoption_mode: brownfield를 포함한 초기 템플릿을 생성한다. 이미 있으면 adoption_mode를 brownfield로 갱신한다.
- 기존 코드베이스 인벤토리를 정적 분석으로 수집한다. (이 단계에서는 코드를 수정하지 않는다.)
- 파일 트리 상위 구조와 주요 디렉토리
- 패키지 매니페스트:
package.json, pyproject.toml, Cargo.toml, go.mod, pom.xml, build.gradle 등
- 언어/런타임 버전 단서:
.nvmrc, .python-version, rust-toolchain, .tool-versions
- 기존 빌드/테스트/lint 명령: README, Makefile,
package.json scripts, CI 워크플로우 파일
- 기존 CI:
.github/workflows/*.yml, .gitlab-ci.yml, circle.yml 등
- 기존
.claude/ 정책 파일과 quality_cmd/build_cmd/test_cmd 등 자동화 값
- 인벤토리 결과를 토대로 미확정 값을 사용자에게 확인받는다. 사용자가 이미 설정한 값은 그대로 둔다.
- project_goal (기존 코드베이스가 무엇을 하는지)
- target_users
- core_features (현재 제공 중인 기능)
- constraints (호환성, 운영 환경, 마이그레이션 제약 등 brownfield 특유 제약)
project_archetype을 추천한다. 기존 코드 형태를 근거로 자동 추론한 1안을 제시하되, 사용자가 service-app 또는 system-platform 중 하나를 최종 확정한다. 확정값을 session.yaml에 저장한다.
selected_stack은 기존 스택을 그대로 채택하는 것을 1안으로 제시한다. 마이그레이션 의도가 있을 때만 대체 후보를 비교한다. 후보 비교 시 웹 검색으로 최신 생태계 동향을 확인한다.
- 확정값(
adoption_mode=brownfield, project_archetype, selected_stack, 인벤토리 요약)을 session.yaml에 반영한다.
- 아래 명령을 정확히 한 번 실행해 문서/정책을 동기화한다. 이 명령은 step 7에서만 호출한다. 그 이전 단계(인벤토리 수집, archetype 확정, stack 확인 등)에서 상태 확인이나 동기화 목적으로 절대 호출하지 않는다.
.claude/hooks/run-project-onboarding.sh
status=ready이면 docs/architecture.md의 ## Inventory 섹션과 docs/roadmap.md의 ## Increment 0 (Baseline) 블록을 빠르게 검토해 unset/TBD placeholder가 남아 있는지 확인하고 즉시 보완한다. 이 단계에서 run-project-onboarding.sh를 다시 호출하지 않는다. docs 파일을 직접 편집한다.
status=ready이고 allow_midway_user_prompt=false이면 다음 액션 선택을 사용자에게 묻지 않는다. 권장 경로(Increment 0 베이스라인 안정화)를 자동 적용해 곧바로 /autopilot 실행으로 이어간다.
Increment 0 (Baseline) 원칙
service_goal: 기존 동작을 보존한 채 nightwalker harness 위에서 baseline 빌드/테스트/품질 게이트가 그린 상태로 고정된다.
acceptance:
- 기존 테스트가 존재하면 그린.
- 테스트가 없으면 최소 smoke build가 통과.
project-automation.md의 gate 명령이 brownfield 가드를 통해 사용자 값과 충돌하지 않는다.
status: active로 시작.
- Increment 0가 delivered 되어야
/increment로 Increment 1을 정의한다.
산출물
docs/project-goal.md
docs/scope.md
docs/architecture.md (brownfield 모드에서는 ## Inventory 섹션 포함)
docs/stack-decision.md (기존 스택 채택 근거 포함)
docs/roadmap.md (## Increment 0 (Baseline)부터 시작)
docs/execution-plan.md
ONBOARDING_READY.md
완료 조건
.nightwalker/session.yaml의 adoption_mode가 brownfield로 저장된다.
ONBOARDING_READY.md가 생성된다.
status가 ready 또는 proposed로 갱신된다.
docs/architecture.md에 ## Inventory 섹션이, docs/roadmap.md에 ## Increment 0 (Baseline) 블록이 존재한다.
- 사용자가 사전에 설정한
.claude/project-automation.md, .claude/completion-contract.md의 non-unset 값이 보존된다.
status=ready이고 auto_start_autopilot_on_ready=true면 Increment 0부터 autopilot이 자동 시작된다.
- 미확정 항목(인벤토리 placeholder 포함)이 남으면 사용자에게 어떤 값을 확정해야 하는지 명확히 안내한다.