Coursmith 코스 생성 및 게시은(는) 무엇을 하나요?
코스는 course.json 파일과 assets/ 디렉토리를 포함하는 폴더로 작성하고, coursmith CLI로 확인한 후 제출합니다. 포털의 리뷰 에이전트가 이를 승인, 수정 요청 또는 거부합니다. 코스가 승인되거나 리뷰 결과를 사용자에게 설명할 때까지 작업이 계속됩니다.
CLI는 npx --yes coursmith@latest <command> --json 명령어로 실행합니다. 공개 npm 패키지에는 CLI와 이 스킬이 포함되어 있습니다. GitHub 액세스나 전역 설치가 필요하지 않습니다. npx가 없는 경우 사용자에게 Node.js 20 이상을 설치하고 /install 가이드를 따르도록 요청하세요. --json 플래그를 사용하면 모든 명령이 하나의 JSON 문서를 출력합니다. 추측하지 말고 이를 읽으세요.
이 스킬 폴더의 참조 파일(해당 단계에 도달할 때 읽으세요):
| 파일 | 용도 |
|---|---|
references/course.schema.json | course.json의 정확한 구조입니다. 알 수 없는 키는 거부됩니다. |
references/block-catalog.md | 유효한 JSON 예제 및 규칙이 포함된 모든 콘텐츠 블록 및 시각 자료입니다. |
references/animation-presets.md | 7가지 애니메이션 프리셋과 각각을 사용할 시기입니다. |
references/writing-guide.md | 리뷰를 통과하는 단계, 용어집 및 퀴즈를 작성하는 방법입니다. |
references/content-policy.md | 허용되지 않는 내용과 민감한 주제를 처리하는 방법입니다. |
examples/sample-course/ | 유효성 검사를 통과하는 완전한 코스입니다. 그 형태를 복사하세요. |
1. 로그인
npx --yes coursmith@latest whoami --json을 실행합니다.username이 출력되면 2단계로 계속합니다.- 그렇지 않으면
npx --yes coursmith@latest login --no-wait --json을 실행합니다. 사용자에게verificationUri와userCode를 보여주고 링크를 열고 코드를 확인한 후 승인을 클릭하도록 요청합니다. - 사용자가 확인하면
npx --yes coursmith@latest login --resume --json을 실행하고logged_in이 출력되는지 확인합니다.
2. 사용자와 코스 협의
한 번의 메시지로 사용자가 아직 제공하지 않은 다음 사항을 요청합니다:
- 주제 및 가능하면 관점이나 대상.
- 코스의 언어(모든 언어 가능, BCP-47 코드 필요:
it,en,pt-BR등). - 난이도:
beginner,intermediate또는advanced. - 선택사항: 원하는 길이(기본 약 30분), 선수 지식, 포함하거나 피해야 할 사항.
references/content-policy.md와 비교하여 주제를 확인합니다. 허용되지 않는 주제이면 그렇게 말하고 중단합니다. 민감한 주제(건강, 법률, 금융, 정치, 종교…)인 경우 중립적인 접근 방식과 면책 조항을 계획합니다.
3. 개요 제안 및 승인 받기
사용자에게 다음을 보여줍니다:
- 제목, 한 줄 부제목, 2~6개의 학습 목표;
- 각각 한 줄 요약과 2
5개의 단계 제목이 있는 36개의 섹션; - 각 단계에 대해 계획한 시각 자료(차트, 다이어그램, 애니메이션 프리셋, 이미지 또는 없음);
- 계획된 퀴즈 질문 수(최소 10개, 모든 섹션을 다루어야 함).
사용자가 동의할 때까지 수정합니다. 그 전에 course.json을 작성하지 마십시오.
4. 코스 작성
코스 이름(케밥 케이스)으로 새 폴더를 만들고 그 안에 course.json과 assets/를 생성합니다. references/course.schema.json을 정확히 따르고 examples/sample-course/course.json의 구조를 복사하세요.
유효성 검사기가 적용하는 규칙(자세한 내용은 references/block-catalog.md 참조):
schemaVersion은"1.0"입니다.courseId를 작성하지 마십시오. CLI가 관리합니다.- 모든 ID는 소문자, 숫자, 대시로 구성되며 코스 전체에서 고유해야 합니다(섹션, 단계, 애셋, 퀴즈 질문).
- 모든 단계에는
title과 최소 하나의 블록이 있습니다. 대부분의 단계에는visual도 있습니다. - 용어집: 모든 섹션에는 해당 섹션에서 소개하는 모든 개념과 사용하는 모든 기술 또는 도메인 용어를 정의하는
glossary가 있습니다. 텍스트에서 각 용어를[[term]]또는[[term|표시 텍스트]](표현이 다른 경우)로 표시합니다(복수형 및 굴절형에는aliases사용). 표시된 용어는 동일한 섹션 또는 이전 섹션에서 정의되어야 합니다. 정의는 자체적으로 완결되어야 하며 코스 언어로 작성되어야 합니다. - 시각 자료: 차트는 인라인
data.values(URL 없음)가 있는 Vega-Lite 사양입니다. 다이어그램은click또는%%{init}%%가 없는 Mermaid입니다. 애니메이션은 7개의 프리셋 중 하나를 사용합니다. 이미지는 ID로 애셋을 참조합니다. - Markdown: 원시 HTML 없음, Markdown 이미지 없음(이미지 블록 사용), 링크는 반드시
https://여야 합니다. - 최종 퀴즈: 최소 10개 질문, 모든 섹션은 최소 하나의 질문(
sectionRef)으로 테스트됩니다. 모든 질문에는explanation이 있습니다. 유형:single,multiple,true_false,ordering(순서 지정 항목은 올바른 순서로 나열되며 포털에서 섞습니다). - 선택적
check질문은 단계 끝에 학습자에게 빠른 피드백을 제공하며 점수에 반영되지 않습니다.
섹션별로 작성하고 언어, 난이도 및 용어를 일관되게 유지합니다(references/writing-guide.md 참조).
5. 애셋 생성
- 커버 이미지는 필수입니다(
meta.coverImage), 이상적으로 1200×630. - 이미지 생성 도구가 있으면 PNG, JPEG 또는 WebP 파일을 생성합니다. 그렇지 않으면 SVG를 수동으로 깔끔하게 작성합니다: 간단한 모양, 명확한 팔레트,
viewBox설정, 스크립트 없음, 외부 링크나 글꼴 없음, 포함된 이미지 없음. highlight-svg애니메이션의 경우 강조할 요소에id속성을 부여합니다.- 모든 파일을
assets/에 직접 넣고kind(image또는svg),file(assets/<name>), 의미 있는alt텍스트와 함께assets[]에 선언합니다. AI 생성 이미지의 경우generatedBy를 채웁니다. - 각 파일은 3MB 미만이어야 하며 전체 번들은 25MB 미만이어야 합니다.
6. 오류가 없을 때까지 검증
npx --yes coursmith@latest validate <folder> --json을 실행합니다. { "ok": ..., "issues": [...] }를 출력하며 각 이슈에는 severity, code, path(예: sections[1].steps[0].blocks[2]) 및 message가 있습니다.
모든 error를 수정한 후 다시 실행합니다. ok가 true가 될 때까지 반복합니다. 비용이 적게 드는 경고(예: glossary.unreferenced: 용어가 사용된 곳에 [[...]]로 표시)도 수정합니다.
7. 제출 및 리뷰 추적
npx --yes coursmith@latest submit <folder> --json을 실행합니다. 코스를 업로드하고submissionId와 함께status: "in_review"를 출력합니다. CLI가 폴더에.coursmith.json을 기록합니다. 이를 유지하십시오. 이후 제출을 동일한 코스에 연결합니다.npx --yes coursmith@latest status --dir <folder> --wait --json을 실행합니다(최대 10분 대기, 상태가 여전히in_review이면 다시 실행).status에 따라 조치합니다:approved: 사용자에게courseUrl을 제공합니다.review.issues의 선택적 제안 사항을 언급합니다.needs_revision:review.issues의 각 이슈에 대해path에서 요소를 열고suggestion을 적용하거나message가 설명하는 내용을 수정한 후 다시 검증하고 제출합니다. 변경한 사항을 사용자에게 알립니다.severity: "warning"인 이슈는 선택 사항입니다.rejected: 사용자에게review.summary를 설명합니다. 동일한 콘텐츠를 다시 제출하지 마십시오.
submit에서 review_in_progress가 보고되면 먼저 status --wait로 현재 리뷰를 기다립니다.
게시된 코스 업데이트
동일한 폴더를 편집하고(.coursmith.json 유지) 다시 제출합니다. 새 버전은 리뷰를 거치는 동안 현재 버전은 온라인 상태를 유지합니다. 단계 ID를 안정적으로 유지하여 학습자의 진행 상황이 유지되도록 합니다.
문제 해결
| CLI 출력 | 조치 사항 |
|---|---|
not_logged_in / 종료 코드 3 | 1단계로 돌아갑니다. |
client_outdated | npx --yes coursmith@latest로 다시 시도하여 npm이 최신 CLI를 가져오도록 합니다. |
submit에서 validation_failed | validate를 실행하고 나열된 이슈를 수정합니다. |
rate_limited | 사용자가 일일 제출 한도에 도달했습니다. 내일 다시 시도하세요. |
assets.content_type / assets.invalid | 파일 내용이 확장자와 일치하지 않거나 손상되었습니다. 다시 내보내세요. |
animation.unknown_element | SVG에 해당 id를 가진 요소가 없습니다(ID는 유지되지만 스크립트와 외부 링크는 제거됩니다). |