Back to skills
SkillHub ClubShip Full StackFull Stack

session-wrap

세션 종료 전 자동 정리 스킬. 4개 병렬 subagent가 문서 업데이트, 반복 패턴, 학습 포인트, 후속 작업을 동시 탐지하고, 1개 검증 subagent가 중복 제거 후 사용자에게 선택지를 제시한다. 트리거: /session-wrap, 세션 마무리, 세션 정리, 작업 마무리

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
540
Hot score
99
Updated
March 20, 2026
Overall rating
C3.6
Composite score
3.6
Best-practice grade
C61.1

Install command

npx @skill-hub/cli install sangrokjung-claude-forge-session-wrap

Repository

sangrokjung/claude-forge

Skill path: skills/session-wrap

세션 종료 전 자동 정리 스킬. 4개 병렬 subagent가 문서 업데이트, 반복 패턴, 학습 포인트, 후속 작업을 동시 탐지하고, 1개 검증 subagent가 중복 제거 후 사용자에게 선택지를 제시한다. 트리거: /session-wrap, 세션 마무리, 세션 정리, 작업 마무리

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: sangrokjung.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install session-wrap into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/sangrokjung/claude-forge before adding session-wrap to shared team environments
  • Use session-wrap for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: session-wrap
description: |
  세션 종료 전 자동 정리 스킬. 4개 병렬 subagent가 문서 업데이트, 반복 패턴, 학습 포인트, 후속 작업을 동시 탐지하고, 1개 검증 subagent가 중복 제거 후 사용자에게 선택지를 제시한다.
  트리거: /session-wrap, 세션 마무리, 세션 정리, 작업 마무리
argument-hint: '[--dry-run] [--skip-docs] [--skip-learning] [--skip-scout] [--skip-followup]'
---

# /session-wrap 스킬

## 파이프라인 개요

```
입력: /session-wrap [--dry-run] [--skip-docs] [--skip-learning] [--skip-scout] [--skip-followup]

[Phase 0] 컨텍스트 수집
  ├─ git diff --stat (이번 세션 변경사항)
  ├─ ~/.claude/homunculus/observations.jsonl (최근 관찰)
  └─ /tmp/session-wrap/context.md 생성

[Phase 1] 병렬 4개 subagent (Explore, sonnet)
  ├─ doc-updater        → 문서 업데이트 필요 곳 탐지
  ├─ automation-scout   → 반복 패턴 발견 + 스킬 후보 제안
  ├─ learning-extractor → 배운 점 추출 (instinct 후보)
  └─ followup-suggester → 다음 작업 제안

[Phase 2] 순차 1개 subagent (Explore, sonnet)
  └─ duplicate-checker  → Phase 1 결과 중복 제거 + 카테고리 분류

[Phase 3] AskUserQuestion으로 사용자 선택

[Phase 4] 선택된 항목만 실행

[Phase 5] 리포트 출력 + session-wrap-followups.md 기록
```

## 파라미터 파싱

사용자 입력에서 다음을 추출:

| 파라미터 | 기본값 | 설명 |
|---------|--------|------|
| --dry-run | false | 탐지만 수행, 실행하지 않음 (Phase 3에서 중단) |
| --skip-docs | false | doc-updater subagent 생략 |
| --skip-learning | false | learning-extractor subagent 생략 |
| --skip-scout | false | automation-scout subagent 생략 |
| --skip-followup | false | followup-suggester subagent 생략 |

## Phase 0: 컨텍스트 수집

세션 중 변경사항과 관찰 데이터를 수집하여 subagent에 전달할 컨텍스트를 구성한다.

```bash
# 1. Git 변경사항 수집 (git repo인 경우만)
WORK_DIR=$(pwd)
if git -C "$WORK_DIR" rev-parse --is-inside-work-tree 2>/dev/null; then
  git -C "$WORK_DIR" diff --stat HEAD~5..HEAD > /tmp/session-wrap/git-changes.txt 2>/dev/null || true
  git -C "$WORK_DIR" diff --name-only HEAD~5..HEAD > /tmp/session-wrap/changed-files.txt 2>/dev/null || true
  git -C "$WORK_DIR" log --oneline -10 > /tmp/session-wrap/recent-commits.txt 2>/dev/null || true
fi

# 2. 관찰 데이터 수집 (최근 50개)
OBS_FILE="$HOME/.claude/homunculus/observations.jsonl"
if [ -f "$OBS_FILE" ]; then
  tail -50 "$OBS_FILE" > /tmp/session-wrap/recent-observations.jsonl
fi

# 3. 버퍼 데이터 수집 (있으면)
BUFFER_FILE="$HOME/.claude/homunculus/buffer.jsonl"
if [ -f "$BUFFER_FILE" ]; then
  tail -30 "$BUFFER_FILE" > /tmp/session-wrap/recent-buffer.jsonl
fi
```

`/tmp/session-wrap/` 디렉토리를 생성하고 위 수집을 실행한다.

## Phase 1: 병렬 Subagent 실행

4개 subagent를 **동시에** 실행한다. `--skip-*` 플래그로 특정 subagent를 건너뛸 수 있다.

각 subagent 프롬프트는 `references/` 디렉토리에 위치:

| Subagent | 프롬프트 파일 | 출력 파일 |
|----------|-------------|----------|
| doc-updater | `references/prompt-doc-updater.md` | `/tmp/session-wrap/results/doc-updates.json` |
| automation-scout | `references/prompt-automation-scout.md` | `/tmp/session-wrap/results/automation-patterns.json` |
| learning-extractor | `references/prompt-learning-extractor.md` | `/tmp/session-wrap/results/learning-points.json` |
| followup-suggester | `references/prompt-followup-suggester.md` | `/tmp/session-wrap/results/followup-tasks.json` |

### Subagent 실행 패턴

```
# 활성화된 subagent만 필터링
active_agents = [
  ("doc-updater", skip_docs 아니면),
  ("automation-scout", skip_scout 아니면),
  ("learning-extractor", skip_learning 아니면),
  ("followup-suggester", skip_followup 아니면),
]

# 병렬 Task 호출 (Explore, sonnet)
for agent in active_agents:
  Task(
    subagent_type="Explore",
    prompt=Read("references/prompt-{agent}.md") + context_data
  )
```

각 subagent는 결과를 JSON 파일로 `/tmp/session-wrap/results/`에 기록한다.

### 출력 JSON 스키마

모든 subagent의 출력은 동일한 아이템 스키마를 따른다:

```json
{
  "items": [
    {
      "id": "unique-id",
      "source": "doc-updater|automation-scout|learning-extractor|followup-suggester",
      "title": "항목 제목",
      "description": "상세 설명",
      "category": "auto|user|info",
      "priority": "high|medium|low",
      "action": "실행할 구체적 작업 (있으면)",
      "files": ["관련 파일 경로들"]
    }
  ]
}
```

카테고리 분류 기준:
- **auto**: 사용자 확인 없이 자동 실행 가능 (문서 타임스탬프 갱신 등)
- **user**: 사용자 선택이 필요 (스킬 생성, 코드 수정 등)
- **info**: 정보 제공만 (학습 포인트, 통계 등)

## Phase 2: 중복 검증

Phase 1의 모든 결과를 수집하여 duplicate-checker subagent에 전달한다.

프롬프트: `references/prompt-duplicate-checker.md`

역할:
1. 4개 subagent 결과를 병합
2. 의미적으로 중복되는 항목 제거 (더 구체적인 항목 유지)
3. 최종 카테고리 재분류 (auto/user/info)
4. 우선순위 정렬 (high → medium → low)

출력: `/tmp/session-wrap/results/merged-actions.json`

## Phase 3: 사용자 선택

`--dry-run`이면 여기서 중단하고 탐지 결과만 출력한다.

### 표시 형식

```
## 세션 정리 항목

### 자동 실행 (auto) - N건
1. [docs] README.md 타임스탬프 갱신
2. [docs] CODEMAPS/backend.md 모듈 추가

### 사용자 선택 필요 (user) - M건
3. [ ] [scout] "API 에러 처리" 패턴 → 스킬 후보
4. [ ] [followup] auth 모듈 리팩토링 제안
5. [ ] [learning] "Supabase RLS 패턴" instinct 생성

### 참고 정보 (info) - K건
6. [learning] 이번 세션에서 3개 새 라이브러리 사용
7. [stats] 변경 파일 12개, 커밋 5개

실행할 항목 번호를 선택하세요 (예: 1,3,4 또는 all 또는 auto-only):
```

AskUserQuestion으로 사용자 입력을 받는다.

- `all`: auto + 모든 user 항목 실행
- `auto-only`: auto 항목만 실행
- `1,3,4`: 특정 번호만 실행
- `none`: 아무것도 실행하지 않음

## Phase 4: 선택 항목 실행

사용자가 선택한 항목을 실행한다:

| 카테고리 | 실행 방식 |
|---------|----------|
| docs 업데이트 | Edit/Write로 직접 수정 |
| scout 스킬 후보 | `/tmp/session-wrap/skill-candidates.md`에 기록 |
| learning instinct | `~/.claude/homunculus/instincts/personal/`에 MD 파일 생성 |
| followup 작업 | `/tmp/session-wrap/session-wrap-followups.md`에 기록 |

## Phase 5: 리포트 출력

### 최종 리포트 형식

```
## Session Wrap 완료

### 실행 결과
- 문서 업데이트: N건 완료
- 스킬 후보 기록: M건
- Instinct 생성: K건
- 후속 작업 기록: L건

### 후속 작업 파일
/tmp/session-wrap/session-wrap-followups.md

### 스킬 후보 파일 (있으면)
/tmp/session-wrap/skill-candidates.md
```

후속 작업 파일(`session-wrap-followups.md`)은 다음 세션 시작 시 `/context-sync`로 로드할 수 있다.

## 에러 처리

| 상황 | 대응 |
|------|------|
| git repo 아님 | git 관련 컨텍스트 생략, 나머지 진행 |
| observations.jsonl 없음 | 관찰 데이터 없이 진행, 경고 표시 |
| subagent 실패 (일부) | 실패 subagent 결과 생략, 나머지로 진행 |
| 결과가 0건 | "정리할 항목이 없습니다" 출력 |
| /tmp 쓰기 불가 | 에러 메시지 출력 후 중단 |

## 관련 파일

| 파일 | 용도 |
|------|------|
| `references/prompt-doc-updater.md` | doc-updater subagent 프롬프트 |
| `references/prompt-automation-scout.md` | automation-scout subagent 프롬프트 |
| `references/prompt-learning-extractor.md` | learning-extractor subagent 프롬프트 |
| `references/prompt-followup-suggester.md` | followup-suggester subagent 프롬프트 |
| `references/prompt-duplicate-checker.md` | duplicate-checker subagent 프롬프트 |
| `references/output-schema.md` | 출력 JSON 스키마 상세 |


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### references/prompt-doc-updater.md

```markdown
# doc-updater subagent 프롬프트

## 역할

이번 세션에서 변경된 코드에 대해 **문서 업데이트가 필요한 곳**을 탐지한다.
직접 수정하지 않고, 필요한 업데이트 목록만 JSON으로 출력한다.

## 입력

- `/tmp/session-wrap/changed-files.txt` — 변경된 파일 목록
- `/tmp/session-wrap/recent-commits.txt` — 최근 커밋 메시지
- `/tmp/session-wrap/git-changes.txt` — git diff 통계

## 탐지 기준

1. **README.md 갱신 필요**: 새 기능 추가, 설치 방법 변경, API 변경
2. **CODEMAPS 갱신 필요**: 새 모듈/파일 추가, 디렉토리 구조 변경
3. **인라인 주석 불일치**: 함수 시그니처 변경 시 JSDoc/주석 미갱신
4. **CHANGELOG 항목 누락**: 사용자 영향 있는 변경인데 CHANGELOG 미갱신
5. **타임스탬프 갱신**: 수정된 문서의 "Last Updated" 날짜

## 조사 절차

1. 변경 파일 목록을 읽는다
2. 각 변경 파일에 대해:
   a. 해당 파일이 속한 모듈의 README/문서가 있는지 확인
   b. 문서가 있으면 변경 내용과 문서가 일치하는지 확인
   c. 새 export/함수가 추가됐으면 문서에 반영 필요 여부 판단
3. 프로젝트 루트의 README.md, CHANGELOG.md 확인
4. docs/ 디렉토리가 있으면 관련 문서 확인

## 출력 형식

반드시 `/tmp/session-wrap/results/doc-updates.json`에 기록:

```json
{
  "items": [
    {
      "id": "doc-001",
      "source": "doc-updater",
      "title": "README.md 설치 섹션 갱신 필요",
      "description": "package.json에 새 의존성 추가됨. README의 Installation 섹션에 반영 필요.",
      "category": "user",
      "priority": "medium",
      "action": "README.md의 ## Installation 섹션에 `npm install new-pkg` 추가",
      "files": ["README.md", "package.json"]
    }
  ]
}
```

## 카테고리 분류 기준

- **auto**: 타임스탬프만 갱신하면 되는 경우
- **user**: 내용 수정이 필요한 경우 (사용자 검토 필요)
- **info**: 문서 상태 정보 (예: "문서 없음" 알림)

## 제약

- 문서를 직접 수정하지 않는다. 탐지만 한다.
- 변경 파일이 없으면 빈 items 배열로 출력한다.
- 각 항목에 관련 파일 경로를 반드시 포함한다.

```

### references/prompt-automation-scout.md

```markdown
# automation-scout subagent 프롬프트

## 역할

이번 세션의 활동에서 **반복 패턴**을 발견하고, 스킬/커맨드로 자동화할 수 있는 후보를 제안한다.

## 입력

- `/tmp/session-wrap/recent-observations.jsonl` — 세션 중 관찰 데이터
- `/tmp/session-wrap/recent-buffer.jsonl` — 버퍼 데이터 (있으면)
- `/tmp/session-wrap/changed-files.txt` — 변경된 파일 목록
- `/tmp/session-wrap/recent-commits.txt` — 최근 커밋 메시지

## 탐지 기준

1. **반복 도구 호출 패턴**: 같은 도구를 비슷한 인자로 3회 이상 호출
2. **수동 반복 작업**: 비슷한 파일을 연속으로 편집하는 패턴
3. **에러→수정 루프**: 같은 유형의 에러를 반복 수정
4. **멀티스텝 워크플로우**: 항상 함께 실행되는 단계 묶음

## 중복 판정

기존 스킬과의 중복을 확인하기 위해:

1. 인벤토리 스캔:
```bash
bash ~/.claude/skills/skill-factory/scripts/scan-inventory.sh --scope all > /tmp/session-wrap/inventory.json
```

2. 유사도 점수 계산:
```bash
python3 ~/.claude/skills/skill-factory/scripts/similarity-scorer.py \
  --candidate "후보 설명" \
  --manifest /tmp/session-wrap/inventory.json \
  --top 3
```

3. 판정 기준:
   - SKIP (>=0.8): 이미 존재하는 스킬과 거의 동일 → 항목 제외
   - MERGE (0.6-0.8): 기존 스킬 확장 제안 → category: "user"
   - UPDATE (0.3-0.6): 부분 겹침 → category: "user", 차별점 명시
   - CREATE (<0.3): 새로운 패턴 → category: "user"

## 출력 형식

반드시 `/tmp/session-wrap/results/automation-patterns.json`에 기록:

```json
{
  "items": [
    {
      "id": "scout-001",
      "source": "automation-scout",
      "title": "API 에러 처리 패턴 → 스킬 후보",
      "description": "try/catch + console.error + throw 패턴이 5회 반복됨. error-handler 스킬로 자동화 가능.",
      "category": "user",
      "priority": "medium",
      "action": "skill-candidates.md에 'error-handler' 스킬 후보 기록",
      "files": ["src/api/auth.ts", "src/api/users.ts"],
      "metadata": {
        "pattern_type": "repeated_code",
        "occurrence_count": 5,
        "similarity_verdict": "CREATE",
        "similar_existing": []
      }
    }
  ]
}
```

## 제약

- 스킬을 직접 생성하지 않는다. 후보만 제안한다.
- 관찰 데이터가 없으면 변경 파일 기반으로만 분석한다.
- 기존 스킬과 SKIP 판정 받은 항목은 결과에 포함하지 않는다.

```

### references/prompt-learning-extractor.md

```markdown
# learning-extractor subagent 프롬프트

## 역할

이번 세션에서 **배운 점(learning points)**을 추출하고, instinct 후보로 정리한다.
continuous-learning-v2의 관찰/instinct 아키텍처를 따른다.

## 입력

- `/tmp/session-wrap/recent-observations.jsonl` — 세션 중 관찰 데이터
- `/tmp/session-wrap/recent-buffer.jsonl` — 버퍼 데이터 (있으면)
- `/tmp/session-wrap/recent-commits.txt` — 최근 커밋 메시지
- `/tmp/session-wrap/changed-files.txt` — 변경된 파일 목록

## 탐지 기준

1. **사용자 교정(correction)**: 사용자가 Claude의 제안을 거부/수정한 경우
2. **에러 해결(error resolution)**: 에러를 만나고 해결한 패턴
3. **새 라이브러리/API 사용**: 이번 세션에서 처음 사용한 도구/라이브러리
4. **워크플로우 선호**: 사용자가 특정 순서/방식을 선호한 경우
5. **프로젝트 특성**: 프로젝트 고유의 규칙이나 패턴 발견

## Instinct 형식 참조

continuous-learning-v2 아키텍처:

```yaml
---
id: prefer-functional-style
trigger: "when writing new functions"
confidence: 0.5
domain: "code-style"
source: "session-observation"
---

# Prefer Functional Style

## Action
함수형 패턴을 클래스 기반보다 우선 사용

## Evidence
- 2026-02-22 세션에서 클래스 기반 접근을 함수형으로 교정 관찰
```

## 출력 형식

반드시 `/tmp/session-wrap/results/learning-points.json`에 기록:

```json
{
  "items": [
    {
      "id": "learn-001",
      "source": "learning-extractor",
      "title": "Supabase RLS 패턴 학습",
      "description": "auth.uid() 기반 RLS 정책을 모든 테이블에 적용하는 패턴을 학습함.",
      "category": "user",
      "priority": "low",
      "action": "instinct 파일 생성: prefer-rls-auth-uid.md (confidence: 0.5)",
      "files": [],
      "metadata": {
        "instinct_id": "prefer-rls-auth-uid",
        "trigger": "Supabase 테이블 생성 시",
        "confidence": 0.5,
        "domain": "database",
        "evidence_type": "error_resolution"
      }
    }
  ]
}
```

## 신뢰도(confidence) 기준

| 근거 | 초기 신뢰도 |
|------|-----------|
| 사용자가 직접 교정 | 0.7 |
| 에러 해결 후 패턴 발견 | 0.5 |
| 반복 관찰 (3회 이상) | 0.6 |
| 새 라이브러리 첫 사용 | 0.3 |
| 워크플로우 선호 (1회 관찰) | 0.4 |

## 제약

- instinct 파일을 직접 생성하지 않는다. 후보만 제안한다.
- 이미 존재하는 instinct와 중복이면 "confidence 업데이트 제안"으로 기록한다.
- 관찰 데이터가 없으면 커밋 메시지와 변경 파일 기반으로 추론한다.
- 너무 일반적인 학습 (예: "코드를 잘 작성해야 한다")은 제외한다.

```

### references/prompt-followup-suggester.md

```markdown
# followup-suggester subagent 프롬프트

## 역할

이번 세션의 작업 맥락을 분석하여 **다음 세션에서 할 작업**을 제안한다.
미완성 작업, 개선 가능 영역, 관련 후속 작업을 식별한다.

## 입력

- `/tmp/session-wrap/recent-commits.txt` — 최근 커밋 메시지
- `/tmp/session-wrap/changed-files.txt` — 변경된 파일 목록
- `/tmp/session-wrap/git-changes.txt` — git diff 통계
- `/tmp/session-wrap/recent-observations.jsonl` — 관찰 데이터 (있으면)

## 탐지 기준

1. **TODO/FIXME 잔존**: 변경 파일에 남아있는 TODO, FIXME, HACK, XXX 주석
2. **미완성 기능**: 부분만 구현된 기능 (빈 함수, stub, placeholder)
3. **테스트 부족**: 새 기능 추가했으나 테스트 파일 미생성
4. **리팩토링 기회**: 큰 파일, 중복 코드, 깊은 중첩
5. **보안 점검 필요**: 인증/인가 관련 변경 시 보안 리뷰 제안
6. **성능 최적화**: 쿼리 최적화, 캐싱 도입 기회
7. **배포 관련**: 마이그레이션 필요, 환경 변수 설정 필요

## 조사 절차

1. 변경 파일 목록을 읽는다
2. 각 변경 파일에서 TODO/FIXME 검색
3. 커밋 메시지에서 "WIP", "TODO", "later" 등 미완성 키워드 탐지
4. 테스트 파일 존재 여부 확인 (변경된 소스 파일 대비)
5. 변경 규모가 큰 파일 식별 (리팩토링 후보)

## 출력 형식

반드시 `/tmp/session-wrap/results/followup-tasks.json`에 기록:

```json
{
  "items": [
    {
      "id": "followup-001",
      "source": "followup-suggester",
      "title": "auth 모듈 테스트 작성",
      "description": "src/auth/login.ts를 새로 추가했으나 테스트 파일이 없음. 단위 테스트 작성 필요.",
      "category": "user",
      "priority": "high",
      "action": "src/auth/__tests__/login.test.ts 생성",
      "files": ["src/auth/login.ts"]
    },
    {
      "id": "followup-002",
      "source": "followup-suggester",
      "title": "TODO 3건 처리",
      "description": "src/api/users.ts:45, src/api/auth.ts:23, src/utils/cache.ts:12에 TODO 주석 잔존.",
      "category": "info",
      "priority": "medium",
      "action": "",
      "files": ["src/api/users.ts", "src/api/auth.ts", "src/utils/cache.ts"]
    }
  ]
}
```

## 우선순위 기준

| 유형 | 우선순위 |
|------|---------|
| 보안 관련 후속 작업 | high |
| 테스트 부족 | high |
| 미완성 기능 (WIP) | high |
| TODO/FIXME 처리 | medium |
| 리팩토링 기회 | medium |
| 성능 최적화 | low |
| 문서화 개선 | low |

## 제약

- 후속 작업을 직접 실행하지 않는다. 제안만 한다.
- 너무 모호한 제안은 제외 (예: "코드를 더 좋게 만들자")
- 각 항목에 구체적인 파일 경로와 행동을 포함한다.
- 변경 파일이 없으면 빈 items 배열로 출력한다.

```

### references/prompt-duplicate-checker.md

```markdown
# duplicate-checker subagent 프롬프트

## 역할

Phase 1의 4개 subagent 결과를 병합하고, **중복 항목을 제거**한 뒤 최종 카테고리를 분류한다.

## 입력

Phase 1 결과 파일들 (존재하는 것만):
- `/tmp/session-wrap/results/doc-updates.json`
- `/tmp/session-wrap/results/automation-patterns.json`
- `/tmp/session-wrap/results/learning-points.json`
- `/tmp/session-wrap/results/followup-tasks.json`

## 처리 절차

### 1단계: 수집

모든 결과 파일을 읽어 items 배열을 하나로 합친다.
파일이 없거나 파싱 실패한 경우 해당 소스를 건너뛴다.

### 2단계: 중복 제거

두 항목이 **의미적으로 중복**인지 판단:

| 기준 | 중복 판정 |
|------|----------|
| 같은 파일 + 같은 종류의 작업 | 중복 |
| 같은 주제를 다른 관점에서 언급 | 더 구체적인 항목 유지 |
| doc-updater와 followup이 같은 파일 참조 | 더 actionable한 항목 유지 |
| scout와 learning이 같은 패턴 발견 | 둘 다 유지 (역할이 다름) |

중복 제거 시 규칙:
- 더 **구체적인** 항목을 유지한다
- 더 **높은 우선순위** 항목을 유지한다
- 동일 우선순위면 **action이 있는** 항목을 유지한다
- 제거된 항목의 정보는 유지 항목의 description에 병합한다

### 3단계: 카테고리 재분류 + 사용자 표시 설명 생성

최종 카테고리를 확정하고, Phase 3 AskUserQuestion에서 사용자에게 보여줄 설명을 각 항목에 추가한다.

- **auto**: 위험이 없고 자동 실행 가능
  - 타임스탬프 갱신
  - info 수준의 기록
  - 사용자 표시: "자동 실행 (확인 불필요)" 헤더 아래 나열
- **user**: 사용자 판단이 필요
  - 코드/문서 수정 제안
  - 스킬/instinct 생성 제안
  - 고우선순위 후속 작업
  - 사용자 표시: "선택 필요" 헤더 아래 체크박스로 나열
- **info**: 참고만 하면 되는 정보
  - 세션 통계
  - 학습 포인트 중 낮은 confidence
  - 이미 알고 있을 법한 내용
  - 사용자 표시: "참고 정보" 헤더 아래 나열 (선택 불가)

각 항목에 `user_display` 필드를 추가한다. Phase 3에서 사용자에게 직접 표시되는 텍스트:

```json
{
  "user_display": "[docs] README.md 설치 섹션에 새 의존성 반영 — 수정하시겠습니까?"
}
```

user_display 작성 규칙:
- `[source_tag]` 접두사: `[docs]`, `[scout]`, `[learning]`, `[followup]`
- 구체적 행동 요약 (1줄, 50자 이내)
- user 카테고리는 "~하시겠습니까?" 또는 "~할까요?" 어미
- auto 카테고리는 "~합니다" 어미
- info 카테고리는 "~입니다" 어미

### 4단계: 정렬

1. category: auto → user → info
2. category 내에서: priority high → medium → low
3. 같은 priority 내에서: source별 그룹핑

## 출력 형식

반드시 `/tmp/session-wrap/results/merged-actions.json`에 기록:

```json
{
  "total_before_dedup": 15,
  "total_after_dedup": 11,
  "duplicates_removed": 4,
  "by_category": {
    "auto": 3,
    "user": 5,
    "info": 3
  },
  "items": [
    {
      "id": "doc-001",
      "source": "doc-updater",
      "title": "...",
      "description": "...",
      "category": "auto",
      "priority": "medium",
      "action": "...",
      "files": [...],
      "user_display": "[docs] README.md 타임스탬프를 갱신합니다"
    }
  ]
}
```

## 제약

- 항목을 새로 만들지 않는다. Phase 1 결과만 병합/정리한다.
- 모든 원본 소스 정보를 보존한다 (source 필드).
- 제거 사유를 최종 JSON의 주석이 아닌 `duplicates_removed` 카운트로 반영한다.

```

### references/output-schema.md

```markdown
# 출력 JSON 스키마 상세

## 공통 아이템 스키마

모든 subagent가 동일한 아이템 스키마를 따른다.

```json
{
  "items": [
    {
      "id": "string (필수, 고유 ID: source-NNN 형식)",
      "source": "string (필수, subagent 이름)",
      "title": "string (필수, 1줄 제목)",
      "description": "string (필수, 상세 설명 3줄 이내)",
      "category": "auto | user | info (필수)",
      "priority": "high | medium | low (필수)",
      "action": "string (선택, 실행할 구체적 작업)",
      "files": ["string[] (선택, 관련 파일 절대경로)"],
      "metadata": "object (선택, subagent별 추가 데이터)"
    }
  ]
}
```

## 카테고리 정의

| 카테고리 | 의미 | 실행 방식 | 예시 |
|---------|------|----------|------|
| auto | 자동 실행 가능 | Phase 4에서 무조건 실행 | 타임스탬프 갱신, 통계 기록 |
| user | 사용자 선택 필요 | Phase 3에서 선택지 제시 | 스킬 생성, 코드 수정, instinct 생성 |
| info | 정보 제공만 | Phase 5 리포트에 포함 | 학습 포인트, 세션 통계 |

## 우선순위 정의

| 우선순위 | 의미 | 정렬 순서 |
|---------|------|----------|
| high | 즉시 처리 권장 | 1 (최상위) |
| medium | 시간 여유 있음 | 2 |
| low | 참고용 | 3 (최하위) |

## ID 규칙

- 형식: `{source_prefix}-{NNN}` (3자리 숫자)
- source별 prefix:
  - doc-updater → `doc-`
  - automation-scout → `scout-`
  - learning-extractor → `learn-`
  - followup-suggester → `followup-`
- 예: `doc-001`, `scout-003`, `learn-002`, `followup-005`

## 병합 결과 스키마 (duplicate-checker 출력)

```json
{
  "total_before_dedup": "number (중복 제거 전 항목 수)",
  "total_after_dedup": "number (중복 제거 후 항목 수)",
  "duplicates_removed": "number (제거된 중복 수)",
  "by_category": {
    "auto": "number",
    "user": "number",
    "info": "number"
  },
  "items": [
    "... 공통 아이템 스키마와 동일"
  ]
}
```

## 파일 출력 위치

```
/tmp/session-wrap/
├── context.md                          # Phase 0: 컨텍스트 요약
├── git-changes.txt                     # Phase 0: git diff 통계
├── changed-files.txt                   # Phase 0: 변경 파일 목록
├── recent-commits.txt                  # Phase 0: 최근 커밋
├── recent-observations.jsonl           # Phase 0: 관찰 데이터
├── recent-buffer.jsonl                 # Phase 0: 버퍼 데이터
├── inventory.json                      # automation-scout: 스킬 인벤토리
├── results/
│   ├── doc-updates.json               # Phase 1: doc-updater
│   ├── automation-patterns.json       # Phase 1: automation-scout
│   ├── learning-points.json           # Phase 1: learning-extractor
│   ├── followup-tasks.json            # Phase 1: followup-suggester
│   └── merged-actions.json            # Phase 2: duplicate-checker
├── session-wrap-followups.md           # Phase 5: 후속 작업 목록
└── skill-candidates.md                 # Phase 4: 스킬 후보 (있으면)
```

## 리포트 출력 형식

Phase 5에서 터미널에 표시하는 리포트:

```
## Session Wrap 완료

### 실행 결과
- 문서 업데이트: {N}건 완료
- 스킬 후보 기록: {M}건
- Instinct 생성: {K}건
- 후속 작업 기록: {L}건

### 건너뛴 항목
- 사용자가 선택하지 않음: {X}건
- 중복 제거됨: {Y}건

### 후속 작업 파일
/tmp/session-wrap/session-wrap-followups.md

### 스킬 후보 파일 (있으면)
/tmp/session-wrap/skill-candidates.md

### 다음 세션에서
`/context-sync`로 외부 채널 동기화를 시작하세요.
```

```

session-wrap | SkillHub