스킬
모든 OpenSpec 스킬: 인자, 생성하는 항목, 응답하는 내용.
스킬은 두 세트로 제공됩니다:
- Core: 기본으로 설치되며, 주요 계획 루프입니다.
- Optional: Profiles를 통해 추가할 때만 설치됩니다.
모든 스킬은 이미 OpenSpec을 사용 중인 프로젝트를 전제로 합니다. 스킬은 무언가를 쓰는 첫 단계에 앞서 해석된 루트가 있는지 확인합니다. 해당 루트가 없을 때의 동작은 스킬에 도달한 경로에 따라 달라집니다:
- 자동 선택: OpenSpec을 지정하지 않은 상태에서 에이전트가 스스로 스킬을 고른 경우입니다. 스킬은 OpenSpec을 제외하고, OpenSpec이 설치되지 않았을 때와 똑같이 요청에 정상적으로 응답합니다.
- 명시적 OpenSpec 요청: OpenSpec을 지정했거나 스킬을 지정했거나 해당 명령을 실행한 경우입니다. 스킬은 쓰기 전에 중단하고 진행 방법을 묻습니다. 여기서
openspec init을 실행하거나,--store <id>로 스토어를 지정하거나, OpenSpec 없이 계속할 수 있습니다. 답변을 기다립니다.
명령은 항상 두 번째 경우입니다. openspec/config.yaml이 이 머신에서 해석할 수 없는 스토어를 지정하는 프로젝트(등록되지 않았거나 store: 줄이 잘못된 경우)는 초기화되지 않은 것으로 처리되지 않습니다. 스킬은 중단하고 수정 방법과 함께 스토어 오류를 표시합니다. 어느 경우에도 스킬이 자체적으로 openspec/ 디렉터리를 만들지 않습니다. 아래 항목은 루트가 마련된 후 각 스킬이 무엇을 하는지 설명합니다.
| 스킬 | 작업 | 유형 |
|---|---|---|
| openspec-explore | 변경 제안이 되기 전에 아이디어 검토 | Core |
| openspec-propose | 모든 계획 아티팩트와 함께 변경 제안을 한 단계로 생성 | Core |
| openspec-apply-change | 변경 제안의 작업 구현 | Core |
| openspec-update-change | 변경 제안의 계획 수정 | Core |
| openspec-sync-specs | 변경 제안의 spec 업데이트를 specs/에 병합 | Core |
| openspec-archive-change | 완료된 변경 제안을 아카이브로 이동 | Core |
| openspec-new-change | 빈 스캐폴드로 변경 제안 시작 | Optional |
| openspec-continue-change | 다음 계획 아티팩트를 한 번에 하나씩 생성 | Optional |
| openspec-ff-change | 구현에 필요한 모든 아티팩트와 함께 변경 제안을 한 번에 생성 | Optional |
| openspec-verify-change | 구현이 계획과 일치하는지 확인 | Optional |
| openspec-bulk-archive-change | 여러 변경 제안을 한 번에 아카이브 | Optional |
| openspec-onboard | 실제 변경 제안 하나를 처음부터 끝까지 수행하며 워크플로 학습 | Optional |
아래 각 항목은 다음 단계를 담당하는 스킬을 명시합니다. 프로필에 해당 스킬이 포함되지 않으면 설치된 파일은 그 스킬을 절대 명시하지 않습니다. 인계는 동등한 openspec 명령이나 사용자에게 하는 일반 요청이 되며, 누락된 스킬을 가리키기 위해서만 존재하는 줄은 아예 작성되지 않습니다. 따라서 보유한 스킬은 항상 보유한 스킬로 인계합니다. 어떤 세트를 사용할지는 Profiles에서 결정됩니다.
openspec-explore
변경 제안이 되기 전에 아이디어를 깊이 고민합니다.
| Contract | Description |
|---|---|
| Arguments | 주제: 맥락 속에서 탐구할 아이디어, 문제, 비교, 또는 기존 변경 제안의 이름. 아무것도 제공하지 않으면 탐구 모드로 진입합니다. |
| Creates | 기본적으로는 아무것도 생성하지 않습니다. 읽기와 조사만 수행합니다. 요청 시 통찰을 캡처합니다: openspec/changes/<name>/ 아래의 새 변경 제안, 또는 기존 변경 제안의 proposal, design, specs, tasks에 대한 업데이트. 코드는 절대 작성하지 않습니다. |
| Response | 필수 출력이 없는 열린 대화. 사고가 정리되면 문제, 접근 방식, 열린 질문, 다음 단계를 요약하고 이를 캡처할지 제안합니다. 결정은 사용자의 몫입니다. 구현은 여기서 시작되지 않습니다. |
openspec-propose
변경 제안을 생성하고 모든 기획 산출물을 한 번에 생성합니다.
| Contract | Description |
|---|---|
| Arguments | kebab-case 이름(add-dark-mode) 또는 일반 설명. 둘 다 제공하지 않으면 묻습니다. |
| Creates | 스키마가 정의하는 모든 산출물을 의존성 순서(spec-driven: proposal, spec deltas, design, tasks)로 openspec/changes/<name>/에 생성합니다. 코드는 절대 작성하지 않습니다. |
| Response | 검토 준비가 된 생성된 산출물과 다음 단계. 여기서 멈춥니다. 구현은 openspec-apply-change를 기다립니다. |
openspec-apply-change
변경 제안의 작업을 구현하며, 완료되거나 차단될 때까지 목록을 진행합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름(add-auth), 선택 사항. 대상이 모호하면 활성 변경 제안을 나열하고 선택을 요청합니다. |
| Creates | 코드: 각 작업이 요구하는 최소한의 변경 사항을 프로젝트 파일에 적용합니다. 변경 제안에서는 sourcePath와 1-based line으로 식별된 추적 파일에서 완료된 각 작업을 체크합니다(- [ ]에서 - [x]로). 스키마는 여러 파일에 걸쳐 작업을 추적할 수 있습니다. |
| Response | 작업별 진행 상황, 그리고 전체 개수(N/M 작업 완료). 모두 완료: openspec-archive-change를 제안합니다. 누락된 산출물로 차단: openspec-continue-change를 가리키거나, 해당 스킬이 설치되지 않은 경우(core profile에는 포함되지 않음) openspec status와 openspec instructions를 가리킵니다. 불분명한 작업이나 오류: 일시 정지하고 묻습니다. |
openspec-update-change
변경 제안의 기존 기획 산출물을 수정하고 서로 간의 일관성을 유지합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름(선택 사항)과 원하는 수정 사항. 수정 사항이 명시되지 않으면 일관성 검토를 실행합니다: 산출물 간의 모순, 누락, 중복을 확인합니다. |
| Creates | 이미 존재하는 산출물 파일을 편집합니다. 한 가지 예외: specs/**/*.md와 같은 glob으로 작성된 산출물 중 이미 하나 이상의 파일이 있는 경우, 경로 확인 후 누락된 동반 파일을 추가할 수 있습니다. 아직 파일이 없는 산출물은 openspec-continue-change의 몫입니다. 해당 스킬이 없으면(core profile에는 포함되지 않음) openspec status와 openspec instructions를 대신 가리킵니다. 코드는 절대 작성하지 않습니다. |
| Response | 각 제안된 수정 사항을 표시하고 확인 후에만 작성하며, 산출물 하나씩 진행합니다. 수정된 내용과 다음 단계로 마무리합니다. 구현은 openspec-apply-change를 기다립니다. |
openspec-sync-specs
변경 제안의 spec 업데이트를 보관하지 않고 specs/에 병합합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름, 선택 사항. delta spec의 일부만 지정하여 그것만 동기화할 수도 있습니다. |
| Creates | 각 delta spec에 대해 openspec/specs/<capability-path>/spec.md를 편집하거나 생성하여 추가, 수정, 제거, 이름 변경된 requirement를 메인 spec에 병합합니다. 코드는 절대 작성하지 않습니다. |
| Response | 업데이트된 spec이 검증된 후, 추가, 수정, 제거, 이름 변경된 requirement의 capability별 요약. 변경 제안은 활성 상태를 유지하며, 보관은 openspec-archive-change를 기다립니다. |
openspec-archive-change
완료된 변경 제안을 보관소로 이동합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름, 선택 사항. |
| Creates | 변경 제안 폴더를 openspec/changes/archive/YYYY-MM-DD-<name>/으로 이동합니다(이름이 이미 날짜로 시작하면 날짜를 추가하지 않음). 승인 시 먼저 미해결 delta spec을 동기화합니다. openspec-sync-specs가 설치되어 있으면 해당 워크플로를 실행합니다. 그렇지 않으면 delta spec을 메인 spec에 직접 병합합니다. 코드는 절대 작성하지 않습니다. |
| Response | 불완전한 산출물이나 작업이 있는 상태에서 보관하기 전에 경고하고 묻고, delta spec이 있으면 동기화 여부를 묻습니다. 이름, 스키마, 보관 위치, spec 동기화 상태, 경고 사항으로 마무리합니다. |
openspec-new-change
변경 제안을 빈 스캐폴드로 시작합니다.
| Contract | Description |
|---|---|
| Arguments | kebab-case 이름(add-user-auth) 또는 일반 설명, 비기본 워크플로를 위한 스키마 이름. 둘 다 제공하지 않으면 무엇을 구축할지 묻습니다. |
| Creates | openspec/changes/<name>/를 빈 스캐폴드로 생성: 아직 산출물 없음, 코드는 절대 작성하지 않습니다. |
| Response | 스캐폴드의 이름과 위치, 워크플로의 산출물 순서, 상태(0/N 완료), 첫 번째 산출물의 템플릿. 산출물 작성은 openspec-continue-change를 기다립니다. |
openspec-continue-change
변경 제안의 다음 기획 산출물을 하나씩 생성합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름, 선택 사항. 여전히 모호하면 가장 최근에 수정된 것 중에서 선택하도록 요청합니다. |
| Creates | 스키마 순서에서 다음으로 준비된 단일 산출물을 변경 제안 폴더에 작성합니다. 실행당 하나의 산출물, 코드는 절대 작성하지 않습니다. |
| Response | 생성된 산출물, 진행 상황(N of M 완료), 그리고 어떤 산출물이 해제되었는지. 기획이 완료되면 알려줍니다. 구현은 openspec-apply-change로 넘어갑니다. |
openspec-ff-change
변경 제안과 구현에 필요한 모든 기획 산출물을 한 번에 생성합니다.
| Contract | Description |
|---|---|
| Arguments | kebab-case 이름 또는 일반 설명. 둘 다 제공하지 않으면 묻습니다. 지정된 변경 제안이 이미 존재하면 대신 이어서 진행할 것을 제안합니다. |
| Creates | openspec/changes/<name>/와 구현에 필요한 모든 기획 산출물을 의존성 순서(spec-driven: proposal, specs, design, tasks)로 생성하며, 건너뛰거나 조건부로 표시된 산출물만 제외합니다. 코드는 절대 작성하지 않습니다. |
| Response | 변경 제안의 이름과 위치, 생성된 각 산출물, 건너뛴 조건부 산출물과 그 이유. 여기서 멈춥니다. 구현은 openspec-apply-change를 기다립니다. |
openspec-verify-change
구현이 변경 제안의 산출물과 일치하는지 확인합니다.
| Contract | Description |
|---|---|
| Arguments | 변경 제안 이름, 선택 사항. 모호할 때는 tasks 산출물이 있는 변경 제안을 나열하며 묻습니다. |
| Creates | 아무것도 생성하지 않습니다. 변경 제안의 산출물과 코드베이스를 읽습니다. 검증은 보고서 전용입니다. |
| Response | 보고서: Completeness, Correctness, Coherence에 대한 스코어카드, 그리고 권장 사항이 포함된 CRITICAL, WARNING, SUGGESTION 이슈, 최종 보관 준비 평가. 아무것도 변경하지 않으며 보관하지 않습니다. |
openspec-bulk-archive-change
여러 변경 제안을 한 번에 보관합니다.
| Contract | Description |
|---|---|
| Arguments | 없음. 활성 변경 제안을 나열하고 원하는 수만큼 선택하도록 요청하며, 전체 선택 옵션을 제공합니다. 활성 변경 제안이 없으면 알려주고 멈춥니다. |
| Creates | 보관되는 변경 제안별로 openspec/changes/archive/YYYY-MM-DD-<name>/(이미 날짜가 있는 이름은 접두사 유지). 각각의 spec delta는 openspec-sync-specs를 통해 먼저 동기화됩니다. 코드는 절대 작성하지 않습니다. |
| Response | 변경 제안별 상태 테이블과 전체 배치에 대한 확인 한 번, 그리고 보관됨, 건너뜀, 실패 요약 및 spec 동기화 결과. 두 변경 제안이 같은 spec을 다룰 때는 코드베이스를 확인하고 구현된 delta를 오래된 순서부터 동기화합니다. |
openspec-onboard
하나의 실제 변경 제안을 처음부터 끝까지 진행하며 워크플로를 배웁니다.
| Contract | Description |
|---|---|
| Arguments | 없음. 코드베이스를 스캔하여 작은 시작 작업을 찾고 하나를 선택하거나 직접 설명하도록 요청합니다. |
| Creates | 선택한 작업에 대한 실제 변경 제안을 산출물 하나씩 생성하고, 구현 확인 후 실제 코드를 작성합니다. 마지막에 변경 제안을 보관합니다. |
| Response | 사용자 입력을 위한 일시 정지와 함께 전체 주기의 안내: 탐구, 생성, 각 산출물 구축, 구현, 보관. 요약과 openspec-propose에 대한 안내로 마무리합니다. 약 15~20분이 소요됩니다. |