세션 컨텍스트
세션 데이터의 계층 구조와 저장 방식을 설명합니다. (.ai-core v2.1.0 기준)
데이터 계층
세션 데이터는 3계층으로 관리됩니다. 각 계층은 목적이 다릅니다.
1차 원본 (sessions/, projects/) → 로그 원본, 노이즈 포함
2차 원본 (summaries/) → 정제된 요약, 정보 손실 최소화
3차 가공 (필요 시) → 토큰 기반 축약
| 계층 | 위치 | 생성 시점 | 용도 |
|---|---|---|---|
| 1차 | data/context/sessions/ | 매 대화 | 원본 보존 (세션별 전체 대화) |
| 1차 | data/context/projects/ | 매 대화 | 프로젝트별 날짜 기반 집계 |
| 2차 | data/context/summaries/ | stop hook | LLM 컨텍스트 주입 (정제 파일) |
| - | data/context/handoffs/ | stop hook / 수동 | 세션 인계 문서 |
2차 원본의 의미
summaries는 단순 요약이 아닌 정제된 2차 원본입니다. 기존 요약을 재작성하지 않고 새 대화만 증분 추가(append_only)하여 정보 손실을 최소화합니다. Multi-LLM 컨텍스트 전달의 단일 소스로 사용됩니다.
프로젝트 결정 로직
세션 로그를 어느 프로젝트 폴더에 저장할지 결정하는 우선순위입니다. session-save, session-resume, user-prompt-submit.sh 모두 동일한 순서를 따릅니다.
| 순위 | 소스 | 설명 |
|---|---|---|
| 1 | TMUX 세션명 | tmux display-message -p '#S' |
| 2 | PROJECT_FOR_LOG | make claude PROJECT=xxx로 전달 |
| 3 | __default | 위 두 가지 모두 없을 때 기본값 |
# 우선순위 예시:
# tmux 세션 "workspace--quant__how" → 프로젝트 "workspace--quant__how"
# tmux 없음, PROJECT_FOR_LOG=myapp → 프로젝트 "myapp"
# 둘 다 없음 → sessions/에만 기록, projects/에는 미기록
폴더 구조
.ai-core/data/context/
├── current/ # 현재 세션 로그
│ └── log.jsonl
├── current-session.json # 현재 활성 세션 ID
│
├── sessions/ # [1차] 세션 아카이브
│ └── {YYMMDD}_{session_id}/
│ ├── metadata.json
│ ├── log.jsonl # user + assistant 모두 기록
│ └── transcript.jsonl
│
├── projects/ # [1차] 프로젝트별 날짜 기반 집계
│ └── {project_name}/
│ └── 2026-04-10.jsonl
│