Communitygithub.com

Coursmith 코스 생성 및 게시

Coursmith CLI를 사용하여 대화형 코스(단계, 차트, 다이어그램, 애니메이션, 이미지, 섹션별 용어집 및 최종 퀴즈)를 만들고 Coursmith 카탈로그에 게시합니다. 사용자가 Coursmith 코스나 레슨을 생성, 작성, 업데이트, 게시 또는 제출하거나 Coursmith 리뷰를 확인하도록 요청할 때 사용하세요.

Coursmith 코스 생성 및 게시란 무엇인가요?

이 스킬은 Coursmith 플랫폼용 대화형 코스를 생성하고 게시하기 위한 완전한 워크플로우를 제공합니다. 구조화된 폴더(`course.json` + `assets/`)로 코스를 작성하고, Coursmith CLI로 검증 및 제출하며, 포털의 리뷰 에이전트가 승인, 수정 요청 또는 거부할 때까지 리뷰 프로세스를 안내합니다. 이 스킬은 Claude Code, Cursor, Codex와 같은 AI 에이전트 또는 터미널 환경에서 실행되도록 설계되었습니다. `coursmith` npm 패키지에는 CLI와 이 스킬이 포함되어 있으며, 전역 설치나 GitHub 접근 없이 `npx --yes coursmith@latest <command> --json` 명령어로 실행합니다. 주요 기능으로는 코스 주제 협의 및 개요 승인, JSON 스키마 기반 코스 콘텐츠 작성 및 검증, SVG/이미지 애셋 생성(수동 SVG 작성 포함), Vega-Lite 차트, Mermaid 다이어그램, 애니메이션 프리셋 등 다양한 시각 자료 활용, 각 섹션의 용어집 관리 및 최종 퀴즈 생성(10개 이상 문항), 그리고 CLI 기반의 리뷰 상태 확인 및 수정/재제출 프로세스가 포함됩니다. 스킬을 사용하려면 사용자가 Node.js 20 이상이 설치되어 있어야 하며, CLI는 `--json` 플래그로 일관된 JSON 출력을 제공하여 AI 에이전트가 결과를 파싱하기 쉽게 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Uranio/coursmith-plugin/tree/main/plugin/skills/coursmith-course

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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.jsoncourse.json의 정확한 구조입니다. 알 수 없는 키는 거부됩니다.
references/block-catalog.md유효한 JSON 예제 및 규칙이 포함된 모든 콘텐츠 블록 및 시각 자료입니다.
references/animation-presets.md7가지 애니메이션 프리셋과 각각을 사용할 시기입니다.
references/writing-guide.md리뷰를 통과하는 단계, 용어집 및 퀴즈를 작성하는 방법입니다.
references/content-policy.md허용되지 않는 내용과 민감한 주제를 처리하는 방법입니다.
examples/sample-course/유효성 검사를 통과하는 완전한 코스입니다. 그 형태를 복사하세요.

1. 로그인

  1. npx --yes coursmith@latest whoami --json을 실행합니다. username이 출력되면 2단계로 계속합니다.
  2. 그렇지 않으면 npx --yes coursmith@latest login --no-wait --json을 실행합니다. 사용자에게 verificationUri와 userCode를 보여주고 링크를 열고 코드를 확인한 후 승인을 클릭하도록 요청합니다.
  3. 사용자가 확인하면 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개의 학습 목표;
  • 각각 한 줄 요약과 25개의 단계 제목이 있는 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. 제출 및 리뷰 추적

  1. npx --yes coursmith@latest submit <folder> --json을 실행합니다. 코스를 업로드하고 submissionId와 함께 status: "in_review"를 출력합니다. CLI가 폴더에 .coursmith.json을 기록합니다. 이를 유지하십시오. 이후 제출을 동일한 코스에 연결합니다.
  2. npx --yes coursmith@latest status --dir <folder> --wait --json을 실행합니다(최대 10분 대기, 상태가 여전히 in_review이면 다시 실행).
  3. 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 / 종료 코드 31단계로 돌아갑니다.
client_outdatednpx --yes coursmith@latest로 다시 시도하여 npm이 최신 CLI를 가져오도록 합니다.
submit에서 validation_failedvalidate를 실행하고 나열된 이슈를 수정합니다.
rate_limited사용자가 일일 제출 한도에 도달했습니다. 내일 다시 시도하세요.
assets.content_type / assets.invalid파일 내용이 확장자와 일치하지 않거나 손상되었습니다. 다시 내보내세요.
animation.unknown_elementSVG에 해당 id를 가진 요소가 없습니다(ID는 유지되지만 스크립트와 외부 링크는 제거됩니다).

관련 스킬