# Letta + 위스퍼 비서 조합: 아누 시스템 영향 분석

**분석자**: 아누 (직접 분석)
**분석일**: 2026-03-15

---

## 1. 핵심 컨셉: "위스퍼 비서"란?

Letta의 Subconscious는 **외부 서비스(Letta API)에 의존하는 사이드카 에이전트**다.
우리가 도입하려는 "위스퍼 비서"는 이 개념을 **로컬 파일 기반 + 기존 hook 시스템**으로 재구현한 것이다.

```
제이회장님 ←→ 아누(Opus)
                  ↑ [매 프롬프트마다 브리핑 주입]
              위스퍼 비서 (파일 기반 Python 스크립트)
                  |
                  +-- .done / .done.clear 감시
                  +-- bot-activity.json (팀 상태)
                  +-- task-timers.json (작업 이력)
                  +-- memory/reports/*.md (보고서 캐시)
                  +-- whisper-state.json (세션 간 가이던스)
```

**외부 서비스 불필요. AI 토큰 0원. 순수 파일 읽기 + 포맷팅.**

---

## 2. 현재 Hook 시스템 vs 위스퍼 확장

### 2.1 UserPromptSubmit (아누 세션 - 가장 큰 변화)

**현재 주입 내용:**
- .done 파일 목록 (미처리 완료 작업)
- 이벤트 큐 카운트
- pending_actions 카운트
- 핵심 규칙 4줄

**위스퍼 확장 후:**
```xml
<whisper-briefing>
[팀 상태] 1팀: task-565.1 작업중(gstack분석) | 2팀: 유휴 | 3팀: task-564.1 작업중
[완료 미처리] task-564.1 완료 — 보고서 요약: done-watcher에 cokacdir 추가, 테스트 PASS
[프로젝트 진척]
- InsuWiki: Phase 미시작 (계획서 작성 대기)
- ThreadAuto: Remotion 교체 대기 (카드뉴스는 Pillow 확정)
- 업무자동화: 대시보드 v4.0 운영중, GPU 모니터링 추가됨
[이전 세션 가이던스] Letta+위스퍼 시스템 분석 중. gstack 분석 1팀 위임. 제이회장님이 보고프로세스 정리 논의 중.
[미이행 약속] 2건 — pending_actions.py 참조
</whisper-briefing>
```

**효과:**
- 아누가 `cat task-timers.json`, `ls *.done`, `cat report.md` 등을 읽을 필요 없음
- Opus 토큰 절약: 세션당 약 5~15K 입력 토큰 절감 (파일 읽기 비용)
- 즉시 현황 파악 → 첫 응답부터 정확한 상황 인식

### 2.2 Stop Hook (아누 세션 - 신규 기능)

**현재:** 아누에 대해 아무것도 안 함 (봇 idle 기록만)

**위스퍼 확장 후:**
1. 세션 종료 시 백그라운드 Python 스크립트 실행
2. 현재 팀 상태 스냅샷 저장
3. 다음 세션 가이던스 생성 (파일 기반, AI 불필요):
   - "이 세션에서 task-565.1 위임함, 결과 대기 중"
   - "제이회장님이 보고프로세스 정리 논의 중이었음"
   - "2팀 유휴 — 다음 작업 배정 필요"

**저장 위치:** `memory/whisper/session-guidance.json`

```json
{
  "last_session": "2026-03-15T02:05:00",
  "guidance": "Letta+위스퍼 시스템 분석 중. gstack 분석 1팀 위임 완료.",
  "pending_dispatches": ["task-564.1 완료 확인 필요"],
  "idle_teams": ["dev2-team"],
  "active_discussion": "보고프로세스 정리"
}
```

### 2.3 PreToolUse (경미한 변화)

**현재:** Task tool 멤버 추적

**위스퍼 확장:** dispatch.py 호출 전 팀 상태 재확인
- "이 팀 이미 작업 중" 경고 (충돌 방지)
- 최근 완료된 작업 있으면 알림

### 2.4 SessionStart (신규 hook 추가 검토)

**현재:** 없음

**위스퍼 확장:** 세션 시작 시 전체 상태 초기화
- whisper-state 로드
- 보고서 캐시 갱신
- 장시간 유휴 팀 경고

---

## 3. 시스템 영향 분석

### 3.1 긍정적 영향

#### A. Opus 토큰 절약 (정량)
- 현재: 아누가 .done 감지 → 보고서 읽기 → task-timer 확인 → 팀 상태 확인 → 각각 Read tool 호출
- 예상 토큰: 세션당 5~15K 입력 토큰 (파일 읽기)
- 위스퍼: hook이 사전 컴파일 → 500~1000 토큰으로 동일 정보 전달
- **절약률: 약 80~90%** (상태 확인 관련 토큰)

#### B. 세션 간 연속성 (정성)
- 현재: 세션이 끊기면 컨텍스트 소실. MEMORY.md로 부분 복구.
- 위스퍼: 이전 세션 가이던스가 자동 주입 → "이전에 뭐 하고 있었는지" 즉시 파악
- **효과: 컨텍스트 복원 시간 0초** (현재: 1~3분 소요)

#### C. 보고 누락 방지 (구조적)
- 현재: hook이 .done 파일만 체크. 보고서 내용은 아누가 직접 읽어야 함.
- 위스퍼: hook이 보고서 요약까지 사전 컴파일 → 아누가 읽지 않아도 핵심 파악
- **효과: 보고 누락 원인 중 "아누가 파일 읽기 전에 다른 작업 시작" 제거**

#### D. 유휴 팀 자동 감지
- 현재: 아누가 수동으로 팀 상태 확인
- 위스퍼: 매 프롬프트마다 "2팀 유휴 3시간째" 같은 경고 주입
- **효과: 팀 리소스 낭비 자동 감지**

### 3.2 부정적 영향 / 리스크

#### A. hook 실행 시간 증가
- 현재 UserPromptSubmit: ~100ms
- 위스퍼 확장 후: ~300~500ms (파일 읽기 + 포맷팅)
- **10초 타임아웃 이내. 체감 차이 없음.**

#### B. 컨텍스트 윈도우 소비
- 위스퍼 브리핑이 매 프롬프트마다 주입 → 약 500~1000 토큰 추가 소비
- 긴 세션에서 누적 시 컨텍스트 압박 가능
- **대응: diff 모드 — 변경 없으면 "변경 없음" 한 줄만 주입**

#### C. 상태 파일 정합성
- whisper-state.json 손상 시 잘못된 브리핑 주입 가능
- **대응: JSON 파싱 실패 시 빈 브리핑 → 기존 동작과 동일**

#### D. 보고서 요약 품질
- AI 없이 보고서를 요약하면 핵심 누락 가능
- **대응: SCQA 포맷 활용 — 보고서 첫 줄(S/C/Q/A)만 추출하면 충분**

### 3.3 변경하지 않는 것

- CLAUDE.md: 건드리지 않음 (Letta v1.3.0의 교훈)
- MEMORY.md: 구조 유지. 위스퍼가 보조, MEMORY가 원본
- dispatch.py: 변경 없음
- task-timer.py: 변경 없음
- .done 프로토콜: 변경 없음

---

## 4. 구현 범위 (파일 기준)

### 신규 생성
1. `scripts/whisper-compile.py` — 상태 수집 + 브리핑 컴파일 (토큰 0원)
   - bot-activity.json 읽기
   - task-timers.json에서 active/recent 추출
   - memory/events/*.done 스캔
   - memory/reports/*.md에서 SCQA 첫 줄 추출
   - whisper-state.json에서 이전 가이던스 로드
   - 포맷팅 → stdout 출력

2. `scripts/whisper-save-guidance.py` — Stop hook용 가이던스 저장
   - stdin으로 세션 정보 수신
   - 현재 상태 스냅샷 → whisper-state.json 저장

3. `memory/whisper/session-guidance.json` — 세션 간 가이던스 저장소
4. `memory/whisper/report-cache.json` — 보고서 요약 캐시

### 수정
1. `~/.claude/hooks/user-prompt-submit.sh` — 아누 케이스에 whisper-compile.py 호출 추가
2. `~/.claude/hooks/stop-qc-reminder.sh` — 아누 케이스에 whisper-save-guidance.py 호출 추가
3. `~/.claude/settings.json` — 필요 시 hook 타임아웃 조정

---

## 5. 구현 복잡도 평가

- **Lv.2 기능 구현**: 코드 파악 완료, 설계 명확, 파일/라인 특정 가능
- **예상 작업량**: 2개 Python 스크립트 신규 + 2개 shell 스크립트 수정
- **AI 토큰 비용**: 0원 (순수 파일 기반)
- **외부 의존성**: 없음
- **리스크**: 낮음 (hook 실패 시 기존 동작 유지)

---

## 6. Letta에서 가져오는 개념 매핑

| Letta 개념 | 우리 구현 | 차이점 |
|---|---|---|
| Letta API 에이전트 | whisper-compile.py (로컬) | 외부 서비스 불필요 |
| 메모리 블록 8개 | whisper-state.json 단일 파일 | 단순화. 필요 시 확장 |
| stdout 주입 | hook stdout (이미 사용 중) | 동일 메커니즘 |
| diff 모드 | 변경분만 표시 | 동일 개념 |
| 비동기 워커 (Stop) | whisper-save-guidance.py (bg) | 동일 패턴 |
| 트랜스크립트 학습 | 미도입 (Phase 2 검토) | AI 필요, 비용 발생 |
| self_improvement | 미도입 | 리스크 높음 |

---

## 7. Phase 제안

### Phase 1 (즉시): 기본 위스퍼 시스템
- whisper-compile.py: 팀 상태 + .done + 보고서 요약 + 가이던스
- UserPromptSubmit hook 확장
- 비용: 0원, 리스크: 낮음

### Phase 2 (검토 후): Stop hook 가이던스
- whisper-save-guidance.py: 세션 종료 시 상태 저장
- Stop hook 확장
- 비용: 0원, 리스크: 낮음

### Phase 3 (장기): 트랜스크립트 학습
- 세션 트랜스크립트에서 패턴 자동 추출
- Haiku 호출 필요 (건당 $0.008)
- 리스크: 중간 (잘못된 학습 가능성)
