Claude Code 대화 기록 분석으로 스킬 자동화 기회 찾기
로컬에 쌓이는 Claude Code 대화 기록을 컨텍스트로 활용해 반복 패턴을 찾고, 이를 Claude Skill로 자동화하는 방법.
반복 작업을 자동화하고 싶다
Claude Code로 작업하다 보면 비슷한 요청을 반복하게 됩니다. “이거 스킬로 만들면 편하겠다”는 생각이 들지만, 막상 뭘 만들어야 할지 모르겠습니다.
그런데 생각해보니, 내가 Claude Code랑 나눈 대화들이 로컬에 쌓이고 있습니다. 이걸 컨텍스트로 활용하면 어떨까요?
- 내가 자주 하는 요청이 뭔지
- 어떤 패턴으로 작업하는지
- 어디서 자주 막히는지
이 데이터를 분석하면 진짜 자동화할 가치가 있는 것을 찾을 수 있습니다. 그리고 그 분석 자체도 스킬로 만들면, 앞으로도 계속 자동화 기회를 발견할 수 있겠죠.
로컬의 Claude Code 데이터를 컨텍스트로 사용해 어떤 부분에서 반복작업을 하고 있는지 파악하고, 이를 Claude Skill로 자동화하는 스킬을 만들어보겠습니다.
Claude Code 대화 기록은 어디에?
저장 위치
~/.claude/├── history.jsonl # 모든 대화의 인덱스├── projects/ # 프로젝트별 세션 기록│ └── -Users-name-project/ # 경로가 인코딩됨│ └── {session-id}.jsonl # 각 세션의 상세 대화└── settings.json # 설정파일 형식
JSON Lines (.jsonl) - 각 줄이 독립적인 JSON 객체입니다.
{ "display": "커밋하고 푸시해줘", "timestamp": 1759809496265, "project": "/Users/name/my-project"}프로젝트 경로는 / → -로 인코딩됩니다:
/Users/name/my-project→-Users-name-my-project
데이터 보안
- 로컬에만 저장됨 - Anthropic 서버로 전송되지 않음
- 30일 자동 정리 -
settings.json의cleanupPeriodDays로 조절 가능
프롬프트 시퀀스 분석
단순히 “자주 하는 요청”을 세는 건 의미가 없습니다. “커밋 푸시해줘”가 100번 나와도, 그건 그냥 프롬프트로 하면 되는 거니까요.
진짜 가치있는 건 세션 내 프롬프트 시퀀스입니다. 한 세션에서 프롬프트들이 어떤 흐름으로 이어지는지를 분석해야 합니다.
세션 시작 → 질문 → 수정 요청 → 확인 → 다시 수정 → 확인 → 커밋이런 흐름에서 반복되는 패턴을 찾으면 진짜 자동화 기회가 보입니다.
프롬프트 의도 분류
각 프롬프트를 8개 카테고리로 분류합니다:
| 카테고리 | 의미 | 예시 |
|---|---|---|
start | 새 작업 시작 | ”로그인 기능 만들어줘”, “새 컴포넌트 추가해줘” |
modify | 기존 코드 수정 | ”버튼 색 바꿔줘”, “이 함수 리팩토링해줘” |
verify | 결과 검증 | ”빌드 돌려봐”, “테스트 결과 보여줘” |
fix | 문제 해결 | ”에러 왜 나지?”, “이거 안 돼” |
continue | 작업 계속 | ”응”, “좋아 진행해”, “ok” |
commit | 저장/배포 | ”커밋해줘”, “푸시해”, “배포해” |
question | 질문 | ”이거 뭐야?”, “왜 이렇게 동작해?” |
feedback | 부정적 피드백 | ”아니 그게 아니라”, “다시 해줘”, “별로야” |
이 분류는 Claude가 직접 수행합니다. 프롬프트의 실제 의도를 파악해야 의미있는 패턴이 보이기 때문입니다.
“로그인 기능 만들어줘”와 “버튼 색 바꿔줘”는 표면적으론 비슷해 보이지만, 하나는 start(새 기능)고 하나는 modify(기존 수정)입니다. Claude는 맥락을 보고 판단합니다.
시퀀스 추출
연속된 3~5개 프롬프트의 카테고리 패턴을 추출합니다:
verify → other → verify (44회)start → start → verify (33회)question → other → verify (28회)핵심 발견: verify 루프
verify → work → verify 패턴이 44회나 반복됐습니다.
이게 뭘 의미하냐면:
- 뭔가 확인하고
- 작업하고
- 다시 확인하고
수동으로 검증을 반복하고 있다는 뜻입니다.
실패 패턴에서 찾은 인사이트
feedback 카테고리가 연속으로 나타나는 패턴을 분석하니 구체적인 문제가 보였습니다:
"테스트가 여전히 실패해. 환경변수 설정 확인해봤어?" (3회)"아직 동일한 에러야. 로그 다시 확인해줘" (2회)"빌드는 성공했는데 배포 후 503 에러가 나" (2회)같은 문제로 여러 번 막히고 있었습니다. 이건 체계적인 디버깅 프로세스가 필요하다는 신호입니다.
스킬로 만들 가치 판단
분석 결과를 종합하면, 스킬로 만들어야 하는 건 단순 명령어가 아니라 컨텍스트가 필요한 복잡한 작업입니다.
| 조건 | 설명 |
|---|---|
| 컨텍스트 필요 | 프로젝트/상황 파악이 필요 |
| 멀티스텝 | 여러 단계가 연속으로 필요 |
| 실패 빈도 높음 | 자주 재시도하는 패턴 |
| 검증 루프 | 확인→수정→확인 반복 |
스킬로 만들 가치가 없는 것:
- 단순 명령어 (“커밋해줘”, “푸시해줘”)
- 일회성 요청
- 프롬프트 한 줄로 충분한 작업
추천된 스킬 4개
분석 결과 다음 4개 스킬이 추천되었습니다:
| 스킬 | 근거 | 왜 스킬이어야 하는가 |
|---|---|---|
| project-init | setup 60회 | 프로젝트별 보일러플레이트, 설정이 다름 |
| debug-loop | verify 루프 44회 | 가설→검증→수정 반복을 체계화 |
| release-prep | deploy 41회 | 버전 범프+CHANGELOG+태그+빌드 검증 |
| feature-spec | feature 51회 | 구현 전 스펙 정리+영향 범위 분석 |
suggest-automation 스킬
이 전체 분석 과정을 스킬로 만들었습니다.
스킬 구조
~/.claude/skills/suggest-automation/├── SKILL.md # 스킬 정의 (워크플로우)├── scripts/│ └── analyze-sequences.py # 세션 데이터 추출└── references/ └── skill-patterns.md # 스킬 추천 기준SKILL.md (요약)
---name: suggest-automationdescription: Claude Code 대화 기록을 분석하여 반복 패턴을 찾고 스킬 자동화 기회를 추천한다.---
# Suggest Automation
## Workflow1. 세션 데이터 로드 (스크립트)2. 프롬프트 의도 분류 (Claude)3. 시퀀스 패턴 분석 (Claude)4. 스킬 기회 판단5. 추천 보고6. 스킬 생성 (skill-creator 연동)
...(중략)...핵심은 Claude가 직접 분류한다는 점입니다. 스크립트는 세션 데이터 추출만 담당하고, 의도 파악과 패턴 분석은 자연어 이해로 수행합니다.
첨부: 실제 스킬 파일들
SKILL.md - 전체 워크플로우 정의
---name: suggest-automationdescription: Claude Code 대화 기록을 분석하여 반복 패턴을 찾고 스킬 자동화 기회를 추천한다.---
# Suggest Automation
Claude Code 대화 기록(~/.claude/)을 분석하여 반복되는 작업 패턴을 찾고, 스킬로 자동화할 기회를 추천한다.
## Overview
Claude가 직접 대화 기록을 읽고 분석한다. **자연어 이해**로 프롬프트 의도를 파악하고, 맥락을 고려한 패턴을 발견한다.
## Workflow
### Step 1: 세션 데이터 로드
scripts/analyze-sequences.py 스크립트로 세션 데이터를 추출한다.~/.claude/projects/에서 세션별 프롬프트를 추출하여 분석 가능한 형태로 출력한다.
### Step 2: 프롬프트 의도 분류 (Claude)
추출된 프롬프트들을 **Claude가 직접 분류**한다.
**분류 카테고리:**
| 카테고리 | 의미 | 예시 ||---------|------|------|| start | 새 작업 시작 | "로그인 기능 만들어줘" || modify | 기존 코드 수정 | "버튼 색 바꿔줘" || verify | 결과 검증 | "빌드 돌려봐" || fix | 문제 해결 | "에러 왜 나지?" || continue | 작업 계속 | "응", "ok" || commit | 저장/배포 | "커밋해줘" || question | 질문 | "이거 뭐야?" || feedback | 부정적 피드백 | "다시 해줘" |
**분류 시 고려사항:**- 표면적 키워드가 아닌 **실제 의도** 파악- 이전/이후 프롬프트와의 관계 고려
### Step 3: 시퀀스 패턴 분석 (Claude)
분류된 프롬프트들의 **시퀀스 패턴**을 분석한다.
**분석 항목:**- 세션 내 프롬프트 흐름 (예: start → verify → fix → verify)- 반복되는 시퀀스 패턴- 자주 실패/재시도하는 요청- 복잡한 멀티스텝 작업
### Step 4: 스킬 기회 판단
**스킬로 만들 가치가 있는 조건:**
| 조건 | 설명 ||------|------|| 컨텍스트 필요 | 프로젝트/상황 파악이 필요 || 멀티스텝 | 여러 단계가 연속으로 필요 || 실패 빈도 높음 | 자주 재시도하는 패턴 || 검증 루프 | 확인→수정→확인 반복 |
**스킬로 만들 가치가 없는 것:**- 단순 명령어 ("커밋해줘")- 일회성 요청- 프롬프트 한 줄로 충분한 작업
### Step 5: 추천 보고
분석 결과를 다음 형식으로 보고한다:
📊 분석 결과 요약총 대화: N개 | 세션: M개 | 반복 패턴: K개
🔥 높은 가치 (즉시 스킬화 추천)1. [스킬명] - [근거] (N회 반복)
⚡ 중간 가치 (선택적 스킬화)1. [스킬명] - [근거]
🛡️ 가드레일 필요 (실패 방지)1. [패턴] - [실패 횟수]회 재시도 발생
### Step 6: 스킬 생성
사용자가 스킬 생성을 요청하면, **skill-creator 스킬을 사용**하여 정식 스킬 구조로 생성한다.
## References
스킬 추천 기준에 대한 상세 문서는 references/skill-patterns.md 참조.scripts/analyze-sequences.py - 세션 데이터 추출 스크립트
#!/usr/bin/env python3"""Claude Code 세션 시퀀스 분석프롬프트 간 연관관계를 분석하여 고차원 워크플로우 패턴 추출"""
import jsonimport refrom collections import Counter, defaultdictfrom pathlib import Pathimport argparse
def load_sessions(projects_dir: Path, project_filter: str = None) -> list[dict]: """세션별 대화 로드""" sessions = []
# 시스템/내부 메시지 필터링 패턴 system_patterns = [ r'^<(command|local-command|bash|tool)', r'^Caveat:', r'^This (session|slash)', r'^\[Request interrupted', r'^<shell-id>', r'^/compact', r'^/exit', r'^/clear', r'^/mcp', ]
for project_dir in projects_dir.iterdir(): if not project_dir.is_dir(): continue if project_filter and project_filter not in project_dir.name: continue
for session_file in project_dir.glob("*.jsonl"): if session_file.name.startswith("agent-"): continue
session_data = { 'project': project_dir.name, 'session_id': session_file.stem, 'prompts': [], }
try: with open(session_file, 'r', encoding='utf-8') as f: for line in f: try: entry = json.loads(line.strip()) if entry.get('type') == 'user' or 'display' in entry: text = entry.get('message', {}).get('content', '') or entry.get('display', '') if isinstance(text, list): text = ' '.join([t.get('text', '') for t in text if isinstance(t, dict)])
if text and len(text) > 2: is_system = False for pattern in system_patterns: if re.match(pattern, text): is_system = True break if not is_system: session_data['prompts'].append({ 'text': text[:500], 'timestamp': entry.get('timestamp'), }) except json.JSONDecodeError: continue except Exception: continue
if len(session_data['prompts']) >= 3: sessions.append(session_data)
return sessions
def extract_sequences(sessions: list[dict], min_length: int = 3) -> list[dict]: """세션에서 의미있는 시퀀스 추출""" sequences = []
for session in sessions: if len(session['prompts']) < min_length: continue
# 시퀀스 패턴 추출 (연속 3-5개) for i in range(len(session['prompts']) - 2): seq_len = min(5, len(session['prompts']) - i) sequence = session['prompts'][i:i + seq_len]
sequences.append({ 'project': session['project'], 'prompts': [s['text'][:100] for s in sequence], })
return sequences
def find_retry_patterns(sessions: list[dict]) -> list[dict]: """실패 → 재시도 패턴 찾기""" retry_patterns = []
for session in sessions: prompts = session['prompts']
for i in range(len(prompts) - 1): text = prompts[i]['text'].lower()
failure_keywords = ['안됨', '안돼', '에러', '오류', '별로', '다시', '잘못', 'error', 'fail', 'wrong', 'again', 'not working']
if any(kw in text for kw in failure_keywords): retry_patterns.append({ 'trigger': prompts[i]['text'][:100], 'project': session['project'], })
return retry_patterns
def main(): parser = argparse.ArgumentParser(description='Claude Code 세션 시퀀스 분석') parser.add_argument('--project', type=str, help='분석할 프로젝트 필터') parser.add_argument('--projects-dir', type=str, default=str(Path.home() / '.claude' / 'projects')) args = parser.parse_args()
projects_dir = Path(args.projects_dir) if not projects_dir.exists(): print(f"Error: {projects_dir} not found") return
print("세션 로딩 중...", flush=True) sessions = load_sessions(projects_dir, args.project) print(f" → {len(sessions)}개 세션 로드됨")
print("시퀀스 추출 중...", flush=True) sequences = extract_sequences(sessions) print(f" → {len(sequences)}개 시퀀스 추출됨")
print("실패 패턴 분석 중...", flush=True) retries = find_retry_patterns(sessions) print(f" → {len(retries)}개 재시도 패턴 발견됨")
if __name__ == '__main__': main()references/skill-patterns.md - 스킬 추천 기준 문서
# 스킬 추천 패턴 가이드
## 스킬로 만들 가치가 있는 패턴
### 1. 워크플로우 시퀀스 패턴
| 시퀀스 | 의미 | 자동화 기회 ||--------|------|------------|| verify → work → verify | 검증 루프 | 자동 검증 스킬 || start → start → verify | 연속 작업 후 확인 | 작업 후 자동 검증 || fix → verify → fix | 반복 수정 | 가이드라인/가드레일 |
### 2. 실패 패턴
| 패턴 | 원인 | 해결 방안 ||------|------|----------|| "안됨", "다시" 반복 | 명확한 지침 부족 | pre-check 스킬 || 같은 요청 여러 번 | 결과 불만족 | 검증 단계 추가 |
## 스킬 우선순위 결정 기준
### 높은 가치 (우선 구현)
1. **빈도 × 복잡도** 높은 것2. **실패 비용** 높은 것3. **컨텍스트 의존도** 높은 것
### 낮은 가치 (구현 불필요)
1. 프롬프트 한 줄로 충분한 작업2. 일회성 또는 매우 드문 작업3. 이미 빌트인 명령어로 해결 가능한 것
## 스킬 설계 원칙
### Progressive Disclosure
description (항상 로드) → SKILL.md (트리거 시) → references/ (필요 시)
- description: ~100 단어- SKILL.md: <5000 단어- references/: 제한 없음
### 트리거 조건 명확화
description에 포함해야 할 것:- 어떤 요청에 반응하는지- 사용자가 말할 수 있는 구체적 문구만들어진 스킬들
각 스킬은 ~/.claude/skills/스킬명/SKILL.md 구조로 생성되었습니다.
1. project-init
새 프로젝트 설정을 자동화합니다.
---name: project-initdescription: 새 프로젝트 또는 기존 프로젝트의 개발 환경을 설정한다.---워크플로우:
- 프로젝트 분석 (package.json, pyproject.toml 등으로 언어 감지)
- 설정 파일 생성 (.gitignore, .editorconfig, 린터 설정)
- CLAUDE.md 생성 (AI 어시스턴트용 프로젝트 가이드)
- 의존성 설치 및 검증
- 결과 보고
2. debug-loop
문제를 체계적으로 해결합니다.
---name: debug-loopdescription: 문제를 체계적으로 분석하고 해결할 때까지 반복한다.---워크플로우:
- 문제 정의 (증상, 범위, 재현 조건)
- 가설 수립 (확률순 정렬)
- 검증 루프 (가설→테스트→결과 분석)
- 수정 적용 (최소 변경 원칙)
- 검증 (회귀 테스트, 엣지 케이스)
- 결과 보고
3. release-prep
릴리즈 프로세스를 자동화합니다.
---name: release-prepdescription: 버전 릴리즈를 위한 전체 프로세스를 진행한다.---워크플로우:
- 현재 상태 확인 (git status, 최근 커밋, 마지막 태그)
- 버전 결정 (Semantic Versioning)
- CHANGELOG 업데이트
- 버전 파일 업데이트
- 빌드 및 테스트
- 릴리즈 커밋 및 태그
- 결과 보고
4. feature-spec
기능 구현 전 스펙을 정리합니다.
---name: feature-specdescription: 새 기능 구현 전 스펙을 정리하고 구현 계획을 수립한다.---워크플로우:
- 요구사항 분석 (목적, 범위, 성공 기준)
- 기존 코드베이스 분석 (유사 기능, 재사용 컴포넌트)
- 설계 (데이터 모델, API, 컴포넌트 구조)
- 구현 계획 (Phase별 태스크)
- 영향 분석 및 테스트 계획
- 스펙 문서 출력
- 사용자 확인
스킬 발전시키기
현재는 각 스킬이 SKILL.md만 가지고 있습니다. 이걸 skill-creator 스킬로 발전시킬 수 있습니다.
skill-creator는 Anthropic이 공식 제공하는 스킬 생성 도구입니다. 스킬 구조 초기화, 워크플로우 설계, 참조 문서 관리를 도와줍니다.
~/.claude/skills/debug-loop/├── SKILL.md # 워크플로우 정의├── scripts/│ └── collect-logs.py # 로그 수집 자동화└── references/ └── common-errors.md # 자주 발생하는 에러 패턴스킬에 스크립트나 참조 문서를 추가하면:
- 반복되는 작업을 스크립트로 자동화
- 도메인 지식을 참조 문서로 축적
- 더 정교한 워크플로우 구현
결론: 컨텍스트는 이미 쌓여 있다
추상적으로 “뭘 자동화할까?” 고민하는 것보다, 이미 쌓인 데이터를 분석하는 게 빠릅니다.
Claude Code 대화 기록에는 이미 내 작업 패턴이 다 들어있습니다:
- 자주 반복하는 요청
- 자주 실패하는 패턴
- 복잡해서 여러 단계가 필요한 작업
핵심은 프롬프트 시퀀스 분석입니다. 개별 프롬프트가 아니라, 프롬프트들이 이어지는 흐름에서 패턴을 찾아야 진짜 자동화 기회가 보입니다.
이렇게 반복 패턴을 분석하고 스킬을 추천하는 스킬을 만들어두면, 앞으로도 계속 자동화 기회를 발견할 수 있습니다.
# 한 달에 한 번 실행해보세요/suggest-automation새로운 반복 패턴이 보이면 스킬로 만들면 됩니다.
관련 콘텐츠
Claude Code 스킬 중앙 관리: 심볼릭 링크로 깔끔하게
늘어나는 Claude Code 스킬 저장소들을 한 곳에서 관리하고, 프로젝트별로 필요한 스킬만 연결하는 방법.
productivityClaude Code로 일일 기록 자동화하기
ScreenPipe로 하루 활동을 수집하고, Claude Code Skill로 Notion에 자동 저장하는 시스템을 구축한 경험을 공유합니다. MCP에서 curl 기반으로 전환한 시행착오도 포함.
productivityClaude Code 스킬로 블로그 트래픽 리포트 자동화하기
GA 대시보드 들여다보는 대신 /ga-report 한 줄로 트래픽과 성능을 확인합니다. Google Analytics 연동부터 스킬 구현, 실제 성능 개선 사례까지 공유합니다.