Install any skill in seconds. Free to start, no credit card required.
Get Started Free →스킬 품질 자동 검증 도구. 생성된 스킬의 테스트 케이스를 실행하고 baseline 대비 개선을 측정합니다. A/B 테스트, 회귀 테스트, 체인 테스트 + 4차원 스코어링 루브릭을 단일 스킬에 내장하여 self-contained로 동작합니다. 다음과 같은 요청 시 반드시 이 스킬을 사용하세요: - "스킬 테스트해줘", "스킬 검증", "skill-tester" - "이 스킬 품질 확인해줘", "A/B 테스트" - "스킬 회귀 테스트", "스킬 체인 테스트" - "스킬 루브릭 스코어링", "4차원 평가" - skill-builder Phase 5 이후 검증이 필요할 때 - /harness 커맨드의 test 단계로 진입할 때
.claude/skills/modu-ai-skill-tester/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 124% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 133% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 207% | 0% |
> moai-core | revfactory/harness 테스트 방법론 기반 > single source of truth for: 4차원 스코어링 루브릭, 스킬 체인 검증 프로토콜
skill-builder로 생성된 스킬 또는 기존 스킬의 품질을 검증합니다. harness의 A/B 테스트 방법론을 구현하여 baseline(스킬 없음)과 with-skill(스킬 사용)을 비교하며, 4차원 스코어링 루브릭과 체인 검증 프로토콜을 본문에 직접 포함하여 별도 rules 파일 참조 없이 단독으로 동작합니다.
스킬 테스트 검증 A/B 테스트 baseline 회귀 테스트 체인 테스트 skill-tester 품질 측정 루브릭 스코어링 4차원 평가
1. [로드] → 대상 스킬의 tests/test-cases.yaml 로드
2. [선택] → 테스트 모드 선택 (A/B | 회귀 | 체인 | 루브릭 단독)
3. [실행] → 테스트 프롬프트를 Claude Code에 실행
4. [측정] → 토큰 사용량, 출력 품질, 시간 측정
5. [스코어] → 4차원 루브릭 가중 평균 산출
6. [비교] → baseline vs with-skill 결과 비교
7. [보고] → 스코어 리포트 생성skill-builder Phase 5에서 사용하는 기본 모드입니다.
절차:
| 메트릭 | 측정 방법 | 개선 기준 | |--------|----------|-----------| | 토큰 사용량 | input + output 토큰 | -10% 이상 감소 | | 출력 품질 | 루브릭 스코어 | +0.15 이상 향상 | | 정확성 | assertion 통과율 | 80% 이상 | | 완전성 | 필수 출력 포함 여부 | 100% |
샘플 사이즈 가이드:
| 예상 개선율 | 최소 샘플 수 | |-------------|------------| | >= 20% | 2-3회 | | 10-20% | 3-5회 | | < 10% | 5회 이상 |
스킬 수정 시 기존 테스트 케이스가 여전히 통과하는지 확인합니다.
절차:
회귀 판정:
| 변화 | 판정 | |------|------| | 기존 통과 → 여전히 통과 | PASS | | 기존 통과 → 미통과 | REGRESSION (수정 롤백 필요) | | 기존 미통과 → 통과 | IMPROVEMENT | | 새로운 테스트 추가 | INFO (비교 불가) |
여러 스킬이 순차적으로 연결되는 체인을 테스트합니다. 프로젝트에 정의된 모든 스킬 체인이 검증 대상입니다.
##### 3-1. Chain Definition Format
yamlchain: name: "blog-publishing" description: "Blog post creation → AI slop review → optional media generation" steps: - skill: "moai-content:blog" output_type: "markdown" provides: ["blog_draft"] - skill: "moai-core:ai-slop-reviewer" input_from: ["blog_draft"] output_type: "markdown" provides: ["reviewed_draft"] - skill: "moai-media:higgsfield-image" input_from: ["reviewed_draft"] output_type: "image_url" optional: true provides: ["cover_image"]
##### 3-2. Test Design Rules
Happy Path Test — 전체 체인을 대표 입력으로 실행하고 다음을 검증:
Failure Propagation Test — 각 단계 실패를 시뮬레이션:
Optional Step Test — 선택적 단계가 있는 체인:
Output Compatibility Test — 각 단계 경계에서:
##### 3-3. Test Case Template
markdown## Chain Test: <chain-name> ### TC-1: Happy Path - Input: <대표 프롬프트> - Expected Step 1 output: <설명> - Expected Step 2 output: <설명> - Expected Final output: <설명> - Pass criteria: 모든 단계가 기대 출력 생성, 최종 결과 사용 가능 ### TC-2: Step <N> Failure - Input: <단계 N 실패 유발 프롬프트> - Expected behavior: <체인 정지 / 건너뜀 / 재시도> - Pass criteria: 사용자에게 전달, 데이터 손실 없음 ### TC-3: Optional Step Skip - Input: <선택 단계 트리거 없는 프롬프트> - Expected behavior: <선택 단계 없이 체인 완료> - Pass criteria: 최종 출력이 선택 단계 기여 없이도 유의미함
##### 3-4. Known Chains
| Chain | Steps | Status | |-------|-------|--------| | 사업계획서(PPT) | strategy-planner → pptx-designer → ai-slop-reviewer | 검증 대상 | | 블로그 발행 | blog → ai-slop-reviewer → (optional) higgsfield-image | 검증 대상 | | 제품 랜딩 | copywriting → landing-page → ai-slop-reviewer | 검증 대상 |
##### 3-5. 회귀 통합
체인 내 어떤 스킬이 수정되면:
특정 스킬의 SKILL.md 본문만으로 4차원 스코어링을 수행합니다. A/B 비교 없이 절대 평가가 필요할 때 사용합니다.
> 모든 스킬(신규/수정)은 출시 전 본 루브릭으로 스코어링되어야 합니다.
| 차원 | 가중치 | 핵심 질문 | |------|--------|----------| | Correctness (정확성) | 30% | 출력이 의도한 목적을 달성하는가? | | Completeness (완전성) | 25% | 에지 케이스와 일반 변형을 다루는가? | | Clarity (명확성) | 25% | 사용자가 이해하고 결과를 활용할 수 있는가? | | Efficiency (효율성) | 20% | 출력 품질 대비 토큰 사용량이 적정한가? |
| 점수 | 설명 | |------|------| | 1.0 | 명시된 목적을 사실 오류 없이 완전히 달성. 모든 스킬 내 예시가 정확한 결과 산출. | | 0.75 | 목적 달성하나 형식·스타일에서 경미한 편차. 사실 오류 없음. | | 0.50 | 목적 대부분 달성하나 1-2개 핵심 측면 누락 또는 경미한 부정확성. | | 0.25 | 목적 일부만 다룸. 큰 격차 또는 오류 존재. |
| 점수 | 설명 | |------|------| | 1.0 | 문서화된 모든 use case 처리. 에지 케이스 커버. 에러 경로 문서화. 적용 안 될 때 대체 스킬 명시. | | 0.75 | 핵심 use case 처리. 대부분 에지 케이스 커버. 에러 처리 존재하나 불완전. | | 0.50 | 주요 use case 동작. 에지 케이스 미커버. 에러 처리 최소. | | 0.25 | happy path만 동작. 에지 케이스 처리 없음. 에러 시 silent failure. |
| 점수 | 설명 | |------|------| | 1.0 | 재독 없이 실행 가능. 워크플로우 명확. 출력 형식 예측 가능. 예시가 복사·붙여넣기 사용 가능. | | 0.75 | 1회 독해 후 이해. 1-2 단계에서 미세한 모호성. 예시는 유용하나 변형 필요. | | 0.50 | 섹션 재독 필요. 일부 단계 해석 여지. 예시는 있으나 추상적. | | 0.25 | 워크플로우 혼란. 단계 해석 여지 큼. 구체적 예시 없음. |
| 점수 | 설명 | |------|------| | 1.0 | 출력 품질 대비 토큰 사용 최적. 중복 지시 없음. 점진적 공개 잘 활용. 필요할 때만 로드. | | 0.75 | 토큰 사용 합리적. 경미한 중복 가능. 점진적 공개 대체로 효과적. | | 0.50 | 토큰 사용 필요 대비 높음. 일부 섹션 단축 가능. 점진적 공개 미활용. | | 0.25 | 과도한 토큰 사용. 보일러플레이트 大. 점진적 공개 부재. |
score = (correctness * 0.30) + (completeness * 0.25) + (clarity * 0.25) + (efficiency * 0.20)| 스킬 Tier | 필요 점수 | 평가 | |-----------|-----------|------| | Simple (<50줄) | >= 0.70 | Self-evaluation | | Standard (50-150줄) | >= 0.70 | Self + 권장 peer | | Complex (150줄+) | >= 0.75 | Self + 필수 peer |
통과 점수 확정 전 다음을 확인:
각 스킬의 tests/test-cases.yaml 파일 형식:
yamlskill: <skill-name> version: 2.27.0 test_cases: - id: TC-001 name: "happy-path" prompt: | <사용자 프롬프트> assertions: - type: contains value: "<출력에 포함되어야 할 문자열>" - type: not_contains value: "<출력에 포함되지 않아야 할 문자열>" - type: format value: "<markdown|json|text|html>" quality_threshold: correctness: 0.75 completeness: 0.70 clarity: 0.70 efficiency: 0.60 - id: TC-002 name: "edge-case" prompt: | <경계 조건 프롬프트> assertions: - type: handles_gracefully value: true
테스트 완료 후 생성되는 리포트:
markdown## Skill Test Report: <skill-name> ### Summary - Mode: A/B Test - Date: YYYY-MM-DD - Result: PASS / FAIL ### Scores | Dimension | Baseline | With-Skill | Delta | |-----------|----------|------------|-------| | Correctness | 0.65 | 0.85 | +0.20 | | Completeness | 0.60 | 0.80 | +0.20 | | Clarity | 0.70 | 0.80 | +0.10 | | Efficiency | 0.75 | 0.80 | +0.05 | | **Weighted** | **0.67** | **0.81** | **+0.14** | ### Token Usage - Baseline: XXXX tokens - With-Skill: XXXX tokens - Delta: -XX% ### Assertions - TC-001: PASS (3/3 assertions) - TC-002: PASS (2/2 assertions) ### Anti-Pattern Audit - [x] 중복 없음 - [x] 하드코딩 없음 - [x] 모든 예시 real ### Recommendation <APPROVE for release / NEEDS revision on [dimension]>
예시 1: 신규 스킬 A/B 테스트 > "skill-tester로 sales-playbook 스킬 A/B 테스트해줘"
예시 2: 회귀 테스트 > "blog 스킬 수정했는데 회귀 테스트해줘"
예시 3: 체인 테스트 > "blog → ai-slop-reviewer 체인 테스트 실행해줘"
예시 4: 루브릭 단독 평가 > "kr-gov-grant 스킬을 4차원 루브릭으로만 평가해줘"
| 산출물 | 형식 | 설명 | |--------|------|------| | Score Report | 마크다운 | 4차원 루브릭 스코어 + assertion 결과 + anti-pattern audit | | Test Results | YAML | 테스트 케이스별 상세 결과 |
/cost 명령으로 확인합니다.claude/rules/harness/quality/ 의 동명 파일은 redirect stub이며 본문은 여기를 참조합니다.| 스킬 | 관계 | 설명 | |------|------|------| | skill-builder | before | 스킬 생성 후 테스트 실행 | | skill-template | before | 템플릿 기반 스킬 구조 정의 | | ai-slop-reviewer | alternative | 텍스트 품질 검수 (비기능적) |
| 커맨드 | 설명 | |--------|------| | /harness | new→test→review 자동 연쇄에서 본 스킬을 test 단계로 호출 |
Source: revfactory/harness skill-testing-guide + qa-agent-guide + Pipeline pattern (Apache 2.0) + MoAI adaptation
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 18,977 | 34,976 | +84% | 1 | 1 | 0% | 3,323 | 6,791 | +104% | 0 | 0 | — |
case-02 | fail→pass | 27,636 | 8,391 | -70% | 1 | 1 | 0% | 2,426 | 5,446 | +124% | 0 | 0 | — |
case-03 | fail→pass | 20,110 | 14,439 | -28% | 1 | 1 | 0% | 3,455 | 6,502 | +88% | 0 | 0 | — |
case-04 | fail→pass | 16,402 | 16,226 | -1% | 1 | 1 | 0% | 2,889 | 6,739 | +133% | 0 | 0 | — |
case-05 | fail→pass | 9,317 | 7,984 | -14% | 1 | 1 | 0% | 1,760 | 5,409 | +207% | 0 | 0 | — |
case-06 | fail→pass | 9,258 | 6,752 | -27% | 1 | 1 | 0% | 1,795 | 5,187 | +189% | 0 | 0 | — |
case-07 | fail→pass | 7,239 | 4,144 | -43% | 1 | 1 | 0% | 1,236 | 4,641 | +275% | 0 | 0 | — |
case-08 | fail→pass | 22,615 | 5,489 | -76% | 1 | 1 | 0% | 1,752 | 4,746 | +171% | 0 | 0 | — |
case-09 | pass→pass | 5,643 | 1,820 | -68% | 1 | 1 | 0% | 904 | 4,169 | +361% | 0 | 0 | — |
case-10 | pass→pass | 3,294 | 2,277 | -31% | 1 | 1 | 0% | 412 | 4,215 | +923% | 0 | 0 | — |
case-11 | fail→pass | 5,968 | 2,409 | -60% | 1 | 1 | 0% | 960 | 4,320 | +350% | 0 | 0 | — |
case-12 | fail→pass | 13,534 | 11,537 | -15% | 1 | 1 | 0% | 2,508 | 6,162 | +146% | 0 | 0 | — |
case-13 | pass→pass | 18,166 | 17,096 | -6% | 1 | 1 | 0% | 3,025 | 6,069 | +101% | 0 | 0 | — |
case-14 | pass→pass | 17,775 | 15,014 | -16% | 1 | 1 | 0% | 2,746 | 6,535 | +138% | 0 | 0 | — |
case-15 | fail→pass | 12,386 | 2,603 | -79% | 1 | 1 | 0% | 2,259 | 4,313 | +91% | 0 | 0 | — |
case-16 | pass→pass | 11,006 | 2,812 | -74% | 1 | 1 | 0% | 2,109 | 4,303 | +104% | 0 | 0 | — |
case-17 | fail→pass | 12,002 | 6,832 | -43% | 1 | 1 | 0% | 2,025 | 5,093 | +152% | 0 | 0 | — |
case-18 | fail→pass | 26,939 | 4,433 | -84% | 1 | 1 | 0% | 947 | 4,642 | +390% | 0 | 0 | — |
case-19 | pass→pass | 9,404 | 5,761 | -39% | 1 | 1 | 0% | 1,603 | 4,931 | +208% | 0 | 0 | — |
case-20 | pass→pass | 11,249 | 9,336 | -17% | 1 | 1 | 0% | 2,435 | 5,740 | +136% | 0 | 0 | — |
case-21 | pass→pass | 14,595 | 18,925 | +30% | 1 | 1 | 0% | 2,508 | 7,136 | +185% | 0 | 0 | — |
case-22 | pass→pass | 5,127 | 5,388 | +5% | 1 | 1 | 0% | 917 | 4,848 | +429% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.