ワンクリックで
collect-baseline-data
기존 PR들과 Claude Code 세션을 분석하여 하네스 도입 전 baseline 데이터를 수집한다. 하네스 효과 측정의 비교 기준점을 만드는 진단 전용 스킬이다.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
기존 PR들과 Claude Code 세션을 분석하여 하네스 도입 전 baseline 데이터를 수집한다. 하네스 효과 측정의 비교 기준점을 만드는 진단 전용 스킬이다.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use when the user wants to design an in-app user survey or questionnaire — triggers include "인앱 설문", "사용자 설문 만들어줘", "설문 문항 설계", "설문지 만들어줘", "in-app survey", "user survey questionnaire". Produces a Korean questionnaire that enforces The Mom Test and survey validity/reliability principles so any teammate gets consistent, decision-driven surveys.
기획 브레인스토밍 스킬. "아이디어 정리해주세요", "뭘 만들지 같이 고민해주세요", "설계 논의", "디자인 같이 해주세요", "이거 어떻게 만들면 좋을까요?", "기능 구상", "접근법 제안해주세요" 등의 요청 시 트리거. 구현에 들어가기 전에 아이디어를 탐색하고, 접근법을 비교하고, 디자인을 확정하는 협업 대화 스킬. 새로운 기능, 컴포넌트 생성, 기존 동작 변경 등 모든 창작 작업 전에 반드시 이 스킬을 먼저 사용해야 한다. AI Driven Development 파이프라인의 1단계이자 진입점 — 대상 프로젝트와 Memory URL을 확정하여 이후 스킬로 전파한다.
기획 시작 스킬. "기획 시작", "기획 시작해주세요", "플래닝 시작", "새 기획", "기획 킥오프" 등의 요청 시 트리거. plan-1이 확정한 프로젝트의 Memory(용어집·플로우차트)를 로드하고, 기존 플로우/로직과의 정합성을 검사하여 기획 초안을 작성한다. AI Driven Development 파이프라인의 2단계.
기획 Edge Case 검사 스킬. "edge case 검사", "엣지케이스 검토", "예외 상황 검토", "예외 케이스", "edge case 분석" 등의 요청 시 트리거. plan-2 기획 초안에서 Constraint 위반을 먼저 경고하고 누락된 edge case를 식별한다. AI Driven Development 파이프라인의 3단계. 반드시 Step 2(기획 시작)이 완료된 상태에서 사용한다.
기획 UI Layout 스킬. "UI 레이아웃", "화면 구성", "UI 설명", "레이아웃 만들어주세요", "화면 그려주세요" 등의 요청 시 트리거. 사용자가 대략적으로 설명하는 UI를 듣고 텍스트 기반 와이어프레임으로 표현하고, flowchart Memory와 진입 경로 일관성을 검증한다. AI Driven Development 파이프라인의 4단계. 반드시 Step 3(Edge Case 검사)가 완료된 상태에서 사용한다.
HTML 와이어프레임 생성 스킬. "와이어프레임 만들어주세요", "wireframe", "HTML 와이어프레임", "화면 프로토타입" 등의 요청 시 트리거. plan-4(UI Layout)의 화면 정의를 기반으로 B&W HTML 와이어프레임을 단일 파일로 생성한다. AI Driven Development 파이프라인의 5단계. 반드시 Step 4(UI Layout)가 완료된 상태에서 사용한다.
| name | collect-baseline-data |
| description | 기존 PR들과 Claude Code 세션을 분석하여 하네스 도입 전 baseline 데이터를 수집한다. 하네스 효과 측정의 비교 기준점을 만드는 진단 전용 스킬이다. |
| allowed-tools | Read Grep Glob Bash |
하네스 도입 전에 수행된 작업들의 품질 지표를 수치화한다. 수집된 데이터는 하네스 적용 후 동일 작업의 결과와 비교하는 기준점이 된다.
사용자가 제공하는 정보:
05750ea3-8cbe-406f-abb5-a4b40154c160)하네스-After)각 PR에 대해 아래를 추출한다.
변경 규모:
작업 범위:
수집 명령:
gh pr view <PR번호> --json title,body,files,reviews,commentsgh pr diff <PR번호> --statgit log --oneline <base>..<head>각 PR의 리뷰 코멘트를 아래 카테고리로 분류한다.
분류 기준 상세는 references/review-category-guide.md를 참조한다.
| 카테고리 | 정의 | 예시 |
|---|---|---|
| convention_violation | 코딩 컨벤션/스타일 위반 | "여기는 coroutine 써주세요" |
| architecture_violation | 아키텍처/모듈 경계 위반 | "이 모듈에서 직접 import하면 안 됩니다" |
| logic_error | 로직/기능 오류 | "이 조건분기 빠졌습니다" |
| missing_test | 테스트 누락 | "이 케이스 테스트 추가해주세요" |
| naming_issue | 네이밍/가독성 문제 | "이 변수명이 의도를 표현 못 합니다" |
| unnecessary_change | 불필요한 변경 | "이 파일은 건드릴 필요 없었습니다" |
| design_suggestion | 설계 개선 제안 | "이건 인터페이스로 추상화하는 게 낫습니다" |
| approval | 승인/긍정 코멘트 | "LGTM", "좋습니다" |
각 코멘트에 대해 기록:
PR 브랜치의 커밋 히스토리에서 추출한다.
수집 명령:
git log --oneline <base>..<head> | grep -i "fix" | wc -lgit log --oneline <base>..<head> | wc -lgit reflog show <branch> | grep "force" | wc -l사용자가 세션 ID 또는 세션 이름을 제공하면, Claude Code 세션 JSONL 파일을 직접 파싱하여 대화 흐름을 분석한다.
세션 정보가 제공되지 않은 경우, Step 4-대체를 수행한다.
세션 데이터는 아래 경로에 JSONL 형식으로 저장된다.
~/.claude/projects/{프로젝트경로인코딩}/{sessionId}.jsonl
프로젝트 경로 인코딩 규칙: / → -, 맨 앞 - 포함.
예: /Users/jaewoonglee/Documents/Develop/my-project
→ -Users-jaewoonglee-Documents-Develop-my-project
세션 이름으로 찾는 경우 ~/.claude/sessions/*.json에서
name 필드를 검색하여 sessionId를 확인한다.
# 세션 이름으로 sessionId 찾기
cat ~/.claude/sessions/*.json | jq -r 'select(.name == "세션이름") | .sessionId'
# 프로젝트 경로로 세션 목록 찾기
ls ~/.claude/projects/-Users-jaewoonglee-Documents-Develop-{프로젝트명}/
JSONL 파일의 각 라인은 JSON 객체이며, type 필드로 구분한다.
| type | 내용 |
|---|---|
user | 사용자 메시지. message.content[].text에 입력 원문 |
assistant | 에이전트 응답. message.content[]에 텍스트, tool_use 포함 |
custom-title | 세션 제목 |
추출 명령:
# 사용자 메시지만 시간순 추출
cat {sessionId}.jsonl | jq -c 'select(.type == "user") | {timestamp, text: .message.content[0].text}'
# 전체 대화 턴 수
cat {sessionId}.jsonl | jq -c 'select(.type == "user")' | wc -l
# 에이전트 응답 수
cat {sessionId}.jsonl | jq -c 'select(.type == "assistant")' | wc -l
# URL 추출 (피그마, GitHub 등)
cat {sessionId}.jsonl | jq -r 'select(.type == "user") | .message.content[].text' | grep -oE 'https?://[^ )\]\"]+'
아래 항목을 세션 JSONL에서 추출한다.
대화 흐름 분석:
type: "user" 메시지)type: "user" 메시지들)재수정 요청 분석: 사용자 메시지 중 아래 패턴을 재수정 요청으로 분류한다.
각 재수정 요청에 대해 기록:
에이전트 질문 분석:
에이전트 응답 중 사용자에게 질문한 횟수를 추출한다.
type: "assistant" 메시지에서 ?로 끝나는 문장을 식별하고,
그 중 코드베이스에서 확인 가능했던 질문의 비율을 판단한다.
작업 완성도 흐름:
세션 정보가 없는 경우, PR과 커밋 히스토리에서 가능한 범위 내에서 간접 추정한다.
커밋 히스토리 기반 추정:
PR 타임라인 기반 추정:
추정 결과 기록 규칙:
session_metrics와 session_conversation_flow에 가능한 필드만 채운다."data_source": "inferred_from_git" 필드를 추가하여
세션 JSONL에서 직접 추출한 것이 아님을 명시한다.사용자의 원래 작업 요청을 구조화한다.
세션 JSONL이 있으면 첫 번째 type: "user" 메시지에서 추출하고,
없으면 사용자가 제공한 요청 원문을 사용한다.
외부 참조 링크가 비어 있는데 작업 내용이 참조 자료를 필요로 할 가능성이 높은 경우를 감지한다.
UI/디자인 작업 감지 신호:
*Activity.kt, *Fragment.kt, *Screen.kt, *Composable.kt, *.xml(layout)기능 명세 작업 감지 신호:
감지되면 baseline-report.json의 해당 task에 아래를 추가한다:
"missing_reference_warning": {
"detected": true,
"reason": "UI 작업으로 추정되나 피그마/디자인 참조 링크 없음",
"signals": ["요청에 'UI' 키워드", "변경 파일에 *Screen.kt 포함"]
}
감지되지 않으면 "missing_reference_warning": { "detected": false }로 기록한다.
docs/harness-evaluation/baseline-report.json에 저장한다.
{
"generated_at": "ISO 8601 timestamp",
"tasks": [
{
"id": "task-001",
"pr_number": 42,
"original_request": "요청 원문",
"difficulty": "moderate",
"scope": {
"files_changed": 12,
"lines_added": 340,
"lines_deleted": 85,
"modules_affected": ["feature-player", "core-shared"]
},
"review_metrics": {
"total_comments": 8,
"by_category": {
"convention_violation": 3,
"architecture_violation": 1,
"logic_error": 1,
"missing_test": 2,
"naming_issue": 1
},
"by_severity": {
"critical": 1,
"warning": 4,
"suggestion": 3
},
"harness_preventable": {
"yes": 4,
"partial": 2,
"no": 2
}
},
"build_metrics": {
"total_commits": 15,
"fix_commits": 6,
"ci_failures": 2,
"force_pushes": 1
},
"session_metrics": {
"session_ids": ["sessionId-1", "sessionId-2"],
"session_count": 2,
"total_user_messages": 24,
"total_agent_responses": 30,
"avg_turns_per_session": 12,
"user_rejections": 3,
"agent_questions_total": 5,
"unnecessary_questions": 2,
"direction_corrections": 1,
"completion_announced_then_revised": 1
},
"session_conversation_flow": {
"initial_request": "요청 원문 (첫 번째 user 메시지)",
"initial_request_urls": [
"https://www.figma.com/design/...",
"https://github.com/org/repo/issues/42"
],
"follow_up_instructions": [
{
"turn": 3,
"timestamp": "ISO 8601",
"text": "추가 지시 원문",
"type": "scope_addition"
}
],
"revision_requests": [
{
"turn": 7,
"timestamp": "ISO 8601",
"text": "재수정 요청 원문",
"type": "direction_change",
"target": "에이전트가 직전에 한 작업 요약"
}
],
"total_turns_to_completion": 24
},
"implicit_constraints": [
"feature-player 모듈은 feature-billing 직접 참조 금지 (리뷰에서 발견)",
"coroutine 사용 필수 (컨벤션 위반으로 지적됨)"
]
}
],
"summary": {
"total_tasks": 0,
"avg_review_comments": 0,
"avg_harness_preventable_ratio": 0,
"avg_fix_commits_ratio": 0,
"total_implicit_constraints_discovered": 0
}
}