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.
Install command
npx @skill-hub/cli install sangrokjung-claude-forge-session-wrap
Repository
Skill path: skills/session-wrap
세션 종료 전 자동 정리 스킬. 4개 병렬 subagent가 문서 업데이트, 반복 패턴, 학습 포인트, 후속 작업을 동시 탐지하고, 1개 검증 subagent가 중복 제거 후 사용자에게 선택지를 제시한다. 트리거: /session-wrap, 세션 마무리, 세션 정리, 작업 마무리
Open repositoryBest 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
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`로 외부 채널 동기화를 시작하세요.
```
```