productivity Claude Code Automation Productivity AI

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.jsoncleanupPeriodDays로 조절 가능

프롬프트 시퀀스 분석

단순히 “자주 하는 요청”을 세는 건 의미가 없습니다. “커밋 푸시해줘”가 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회나 반복됐습니다.

이게 뭘 의미하냐면:

  1. 뭔가 확인하고
  2. 작업하고
  3. 다시 확인하고

수동으로 검증을 반복하고 있다는 뜻입니다.


실패 패턴에서 찾은 인사이트

feedback 카테고리가 연속으로 나타나는 패턴을 분석하니 구체적인 문제가 보였습니다:

"테스트가 여전히 실패해. 환경변수 설정 확인해봤어?" (3회)
"아직 동일한 에러야. 로그 다시 확인해줘" (2회)
"빌드는 성공했는데 배포 후 503 에러가 나" (2회)

같은 문제로 여러 번 막히고 있었습니다. 이건 체계적인 디버깅 프로세스가 필요하다는 신호입니다.


스킬로 만들 가치 판단

분석 결과를 종합하면, 스킬로 만들어야 하는 건 단순 명령어가 아니라 컨텍스트가 필요한 복잡한 작업입니다.

조건설명
컨텍스트 필요프로젝트/상황 파악이 필요
멀티스텝여러 단계가 연속으로 필요
실패 빈도 높음자주 재시도하는 패턴
검증 루프확인→수정→확인 반복

스킬로 만들 가치가 없는 것:

  • 단순 명령어 (“커밋해줘”, “푸시해줘”)
  • 일회성 요청
  • 프롬프트 한 줄로 충분한 작업

추천된 스킬 4개

분석 결과 다음 4개 스킬이 추천되었습니다:

스킬근거왜 스킬이어야 하는가
project-initsetup 60회프로젝트별 보일러플레이트, 설정이 다름
debug-loopverify 루프 44회가설→검증→수정 반복을 체계화
release-prepdeploy 41회버전 범프+CHANGELOG+태그+빌드 검증
feature-specfeature 51회구현 전 스펙 정리+영향 범위 분석

suggest-automation 스킬

이 전체 분석 과정을 스킬로 만들었습니다.

스킬 구조

~/.claude/skills/suggest-automation/
├── SKILL.md # 스킬 정의 (워크플로우)
├── scripts/
│ └── analyze-sequences.py # 세션 데이터 추출
└── references/
└── skill-patterns.md # 스킬 추천 기준

SKILL.md (요약)

---
name: suggest-automation
description: Claude Code 대화 기록을 분석하여 반복 패턴을 찾고
스킬 자동화 기회를 추천한다.
---
# Suggest Automation
## Workflow
1. 세션 데이터 로드 (스크립트)
2. 프롬프트 의도 분류 (Claude)
3. 시퀀스 패턴 분석 (Claude)
4. 스킬 기회 판단
5. 추천 보고
6. 스킬 생성 (skill-creator 연동)
...(중략)...

핵심은 Claude가 직접 분류한다는 점입니다. 스크립트는 세션 데이터 추출만 담당하고, 의도 파악과 패턴 분석은 자연어 이해로 수행합니다.

첨부: 실제 스킬 파일들

SKILL.md - 전체 워크플로우 정의
---
name: suggest-automation
description: 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 json
import re
from collections import Counter, defaultdict
from pathlib import Path
import 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-init
description: 새 프로젝트 또는 기존 프로젝트의 개발 환경을 설정한다.
---

워크플로우:

  1. 프로젝트 분석 (package.json, pyproject.toml 등으로 언어 감지)
  2. 설정 파일 생성 (.gitignore, .editorconfig, 린터 설정)
  3. CLAUDE.md 생성 (AI 어시스턴트용 프로젝트 가이드)
  4. 의존성 설치 및 검증
  5. 결과 보고

2. debug-loop

문제를 체계적으로 해결합니다.

---
name: debug-loop
description: 문제를 체계적으로 분석하고 해결할 때까지 반복한다.
---

워크플로우:

  1. 문제 정의 (증상, 범위, 재현 조건)
  2. 가설 수립 (확률순 정렬)
  3. 검증 루프 (가설→테스트→결과 분석)
  4. 수정 적용 (최소 변경 원칙)
  5. 검증 (회귀 테스트, 엣지 케이스)
  6. 결과 보고

3. release-prep

릴리즈 프로세스를 자동화합니다.

---
name: release-prep
description: 버전 릴리즈를 위한 전체 프로세스를 진행한다.
---

워크플로우:

  1. 현재 상태 확인 (git status, 최근 커밋, 마지막 태그)
  2. 버전 결정 (Semantic Versioning)
  3. CHANGELOG 업데이트
  4. 버전 파일 업데이트
  5. 빌드 및 테스트
  6. 릴리즈 커밋 및 태그
  7. 결과 보고

4. feature-spec

기능 구현 전 스펙을 정리합니다.

---
name: feature-spec
description: 새 기능 구현 전 스펙을 정리하고 구현 계획을 수립한다.
---

워크플로우:

  1. 요구사항 분석 (목적, 범위, 성공 기준)
  2. 기존 코드베이스 분석 (유사 기능, 재사용 컴포넌트)
  3. 설계 (데이터 모델, API, 컴포넌트 구조)
  4. 구현 계획 (Phase별 태스크)
  5. 영향 분석 및 테스트 계획
  6. 스펙 문서 출력
  7. 사용자 확인

스킬 발전시키기

현재는 각 스킬이 SKILL.md만 가지고 있습니다. 이걸 skill-creator 스킬로 발전시킬 수 있습니다.

skill-creator는 Anthropic이 공식 제공하는 스킬 생성 도구입니다. 스킬 구조 초기화, 워크플로우 설계, 참조 문서 관리를 도와줍니다.

~/.claude/skills/debug-loop/
├── SKILL.md # 워크플로우 정의
├── scripts/
│ └── collect-logs.py # 로그 수집 자동화
└── references/
└── common-errors.md # 자주 발생하는 에러 패턴

스킬에 스크립트나 참조 문서를 추가하면:

  • 반복되는 작업을 스크립트로 자동화
  • 도메인 지식을 참조 문서로 축적
  • 더 정교한 워크플로우 구현

결론: 컨텍스트는 이미 쌓여 있다

추상적으로 “뭘 자동화할까?” 고민하는 것보다, 이미 쌓인 데이터를 분석하는 게 빠릅니다.

Claude Code 대화 기록에는 이미 내 작업 패턴이 다 들어있습니다:

  • 자주 반복하는 요청
  • 자주 실패하는 패턴
  • 복잡해서 여러 단계가 필요한 작업

핵심은 프롬프트 시퀀스 분석입니다. 개별 프롬프트가 아니라, 프롬프트들이 이어지는 흐름에서 패턴을 찾아야 진짜 자동화 기회가 보입니다.

이렇게 반복 패턴을 분석하고 스킬을 추천하는 스킬을 만들어두면, 앞으로도 계속 자동화 기회를 발견할 수 있습니다.

Terminal window
# 한 달에 한 번 실행해보세요
/suggest-automation

새로운 반복 패턴이 보이면 스킬로 만들면 됩니다.

관련 콘텐츠

댓글