---
name: find-session
description: |
  자연어로 이전 Claude Code 세션을 검색하고 요약하는 스킬. agf 키워드 검색과 qmd 의미 검색을 병행하여
  정확도를 높이고, git 커밋 조사와 AI 요약까지 제공한다.
  "세션 찾아줘", "지난번 작업 찾기", "이전에 했던 ~~ 세션", "~~ 작업한 세션 보여줘",
  "세션 검색", "작업 이력", "resume session", "이전 대화 찾기", "그때 세션", "그 세션" 등의
  요청 시 반드시 이 스킬을 사용할 것. /agf나 qmd-search를 직접 호출하기 전에 이 스킬을 먼저 고려할 것.
---

# Find Session

<!-- Execution: interactive (main context). frontmatter `model:` 필드는 main context 호출 시 무시되므로 제거. multi-turn 대화 유지를 위해 sub-agent 위임 안 함. -->

이전 Claude Code 세션을 자연어 설명으로 검색하여 찾고, 상세 정보와 요약을 제공하는 스킬.
agf(키워드 매칭)와 qmd-search(의미 검색)를 병행하여 누락을 최소화한다.

## 워크플로우

### 1단계: 쿼리 분석

사용자의 요청에서 다음 3가지를 추출한다:

| 요소 | 예시 | 필수 여부 |
|------|------|----------|
| **키워드** | "102 파일", "배송아이디", "toss 결제" | 필수 |
| **날짜/기간** | "지난 금요일", "4/3", "이번주", "3월 초" | 없으면 사용자에게 질문 |
| **프로젝트** | "BO-query", "ktown4u-java" | 선택 (현재 프로젝트를 기본값으로) |

**날짜/기간이 없는 경우**, 반드시 사용자에게 물어본다:

> "대략 언제쯤 작업이었나요? (예: 지난주, 4월 초, 3일 전, 잘 모르겠음)"

"잘 모르겠음"이라고 답하면 최근 2주를 기본 범위로 사용한다.

**상대 날짜 변환**: "지난 금요일" → 실제 YYYY-MM-DD로 변환. 오늘 날짜를 기준으로 계산.

### 2단계: 병렬 검색 (서브에이전트 2개 동시 실행)

Agent 도구로 agf 서브에이전트와 qmd 서브에이전트를 **하나의 메시지에서 동시에** 호출한다.
반드시 두 Agent 호출을 **같은 응답**에 포함하여 병렬 실행을 보장할 것.

#### 서브에이전트 A: agf 검색 (키워드 기반)

```
Agent({
  description: "agf 키워드 세션 검색",
  name: "agf-searcher",
  prompt: `아래 조건으로 Claude Code 세션을 검색하고 결과를 보고해주세요.
코드를 작성하지 말고 검색만 수행하세요.

## 검색 조건
- 키워드: {KEYWORD}
- 날짜/기간: {DATE_OR_RANGE}  (없으면 생략)
- 프로젝트: {PROJECT}  (없으면 생략)

## 실행할 명령어
${DATE가 특정 날짜인 경우}
  python3 ~/.claude/skills/agf/list.py {YYYY-MM-DD}
${키워드가 있는 경우}
  python3 ~/.claude/skills/agf/search.py "{KEYWORD}"
${결과가 3건 미만이면 deep 검색 추가}
  python3 ~/.claude/skills/agf/search.py --deep "{KEYWORD}"

여러 키워드가 있으면 가장 특징적인 키워드로 검색.
날짜 list와 키워드 search는 병렬 실행 가능.

## 출력 형식 (반드시 이 형식으로)
### agf 검색 결과
| # | 세션ID(8자) | 프로젝트 | 날짜 | 첫 메시지(50자) |
|---|------------|---------|------|----------------|
| 1 | abcd1234   | ...     | ...  | ...            |

총 N건 발견.
검색 실패 시: "agf 검색 결과 없음" + 실행한 명령어와 에러 메시지`
})
```

#### 서브에이전트 B: qmd 의미 검색

```
Agent({
  description: "qmd 의미 세션 검색",
  name: "qmd-searcher",
  prompt: `아래 쿼리로 Claude Code 세션을 의미 검색하고 결과를 보고해주세요.
코드를 작성하지 말고 검색만 수행하세요.

## 검색 쿼리
"{사용자의 원래 자연어 설명}"

## 실행할 명령어
qmd-search "{사용자의 원래 자연어 설명}" 2>/dev/null | head -20

## 출력 형식 (반드시 이 형식으로)
### qmd 검색 결과
| # | 세션ID(8자) | 프로젝트 | 날짜 | 유사도 | 첫 메시지(50자) |
|---|------------|---------|------|--------|----------------|
| 1 | abcd1234   | ...     | ...  | 0.85   | ...            |

총 N건 발견.
qmd-search 미설치/실패 시: "qmd 검색 불가" + 에러 메시지`
})
```

**중요**: 두 Agent 호출은 반드시 **같은 응답 블록**에 포함하여 병렬 실행할 것.
순차 실행 금지 — 하나가 끝나기를 기다리지 않는다.

### 3단계: 결과 통합

두 서브에이전트가 모두 완료되면 결과를 취합한다.

1. **agf-searcher**와 **qmd-searcher** 결과에서 세션 ID(8자)를 추출
2. 세션 ID 기준으로 **중복 제거** — 양쪽 모두에 있으면 매칭 소스를 `agf+qmd`로 표시
3. 날짜 목록(list)이 있으면 키워드/의미 매칭으로 후보 **필터링**
4. **우선순위 정렬**: `agf+qmd` > `agf only` > `qmd only` (양쪽 매칭이 신뢰도 높음)
5. 후보가 여러 개이면 상위 3-5개를 통합 테이블로 표시:

```markdown
| # | 프로젝트 | 세션 ID | 날짜 | 첫 메시지 | 매칭 소스 |
|---|----------|---------|------|-----------|----------|
| 1 | BO-query | 4c28f92c | 04-03 09:51 | 102 파일 배송아이디... | agf+qmd |
| 2 | dotfiles | 8e3a7b12 | 04-02 14:30 | vis 설치 관련... | qmd |
| 3 | ktown4u  | f1c92d45 | 04-01 10:15 | 배송 로직... | agf |
```

후보가 1개이면 바로 4단계로 진행.
후보가 0개이면 검색 범위를 넓히거나 다른 키워드를 제안.

### 4단계: 세션 상세 + AI 요약

사용자가 세션을 선택하면 (또는 명확한 1건인 경우) 다음을 **병렬로** 실행:

#### A. 세션 데이터 추출 + haiku 요약

`/agf show` 워크플로우를 따른다:

1. 세션 데이터 추출:
```bash
python3 ~/.claude/skills/agf/show.py <SESSION_PREFIX>
```

2. 추출된 대화 데이터(CONV_START~CONV_END)를 haiku 서브에이전트에 전달:

| 파라미터 | 값 |
|---------|-----|
| description | "세션 요약 생성" |
| subagent_type | "general-purpose" |
| model | "haiku" |

프롬프트:
```
아래 Claude Code 세션의 대화 내용을 분석하여 요약해주세요.
코드를 작성하지 말고 분석만 수행하세요.

## 세션 정보
- 프로젝트: {PROJECT_DIR}
- 기간: {START} ~ {END} ({DURATION})

## 대화 내용 (U=사용자, A=어시스턴트)
{CONV_DATA}

## 출력 형식
### 요약
- 이 세션에서 수행한 작업을 3-5개 항목으로 정리
- 각 항목은 "무엇을 했는지"를 1줄로 서술

### 주요 결정사항
- 세션 중 내려진 기술적 결정이 있으면 기록 (없으면 "없음")

### 미완료 작업
- 세션에서 시작했으나 완료되지 않은 작업이 있으면 기록 (없으면 "없음")
```

#### B. git 커밋 조사

메타데이터에서 프로젝트 경로(cwd)를 추출할 수 있으면, 해당 디렉토리에서 세션 기간의 커밋을 조회:

```bash
# 세션 날짜 전후 1일 범위로 조회
git -C <project_path> log --oneline --since="YYYY-MM-DD" --until="YYYY-MM-DD" --all
```

프로젝트 경로를 알 수 없거나 git 저장소가 아니면 이 단계를 건너뛴다.

### 5단계: 통합 출력

```markdown
## 세션 상세: {SESSION_ID_SHORT}...

| 항목 | 값 |
|------|-----|
| 프로젝트 | {PROJECT_DIR} |
| 경로 | {CWD} |
| Git Branch | {GIT_BRANCH} |
| 시작 | {START} |
| 종료 | {END} |
| Duration | {DURATION} |
| 메시지 수 | User {USER_COUNT} / Assistant {ASST_COUNT} |

### AI 요약
{HAIKU_SUBAGENT_RESULT}

### 관련 Git 커밋
{GIT_COMMITS_OR_"해당 없음"}

### 사용자 메시지 목록
{HISTORY_MESSAGES}
```

---

## 에러 처리

| 상황 | 대응 |
|------|------|
| 양쪽 검색 결과 0건 | 키워드를 바꾸거나 기간을 넓혀서 재검색 제안 |
| agf는 0건, qmd만 결과 있음 | qmd 결과만으로 진행 (키워드가 세션 제목에 없을 수 있음) |
| qmd는 0건, agf만 결과 있음 | agf 결과만으로 진행 |
| 세션 ID 매칭 2건 이상 | 후보 목록 표시 후 사용자에게 선택 요청 |
| git 디렉토리 접근 불가 | git 커밋 조사 단계를 건너뜀 |
| qmd-search 미설치/실패 | agf 서브에이전트 결과만으로 진행, 사용자에게 알림 |
| agf 서브에이전트 실패 | qmd 서브에이전트 결과만으로 진행, 사용자에게 알림 |
| 두 서브에이전트 모두 실패 | 에러 내용을 표시하고 수동 검색 명령어를 안내 |
