Pattern Skills
reopt-state-and-memory-control
상태와 기억 제어
단기 상태와 장기 기억을 분리해 정보 누수와 혼선을 방지한다.
OCLS LAYER
설치
cp skills/patterns/reopt-state-and-memory-control/SKILL.md <your-project>/.claude/skills/reopt-state-and-memory-control/SKILL.md이 레포의 파일을 당신의 프로젝트에 복사하면 Claude Code 세션에서 바로 활성화된다.
markdownskills/patterns/reopt-state-and-memory-control/SKILL.md
---
name: reopt-state-and-memory-control
description: When session state and long-term memory need to be separated. Distinguishing what must outlive the session from temporary state that should be cleared with it. When there's risk of data leakage across sessions.
---
# 상태와 기억 제어 (State and Memory Control)
OCLS 단계: **LAYER** · 단기 상태와 장기 기억을 분리해 정보 누수와 혼선을 방지한다.
## 핵심 규칙
- 세션 범위의 단기 상태와 시스템 범위의 장기 기억 사이에 분명한 경계를 긋는다.
- 단기 상태는 세션 종료 시 자동 소거된다.
- 장기 기억으로 승격할지는 명시적 기준(반복 패턴, 품질 기여 등)이 결정한다.
- 다중 에이전트 환경에서는 공유 기억에 대한 읽기·쓰기 권한을 에이전트별로 정의한다.
- 장시간 실행되는 에이전트는 컨텍스트 윈도우 한계를 다루기 위해 compaction을 사용한다 — 아키텍처 결정, 미해결 버그, 구현 세부는 보존하고 중복된 도구 출력은 버린다.
## 판단 질문
**무엇은 세션에 머물러야 하고, 무엇은 시스템 기억으로 승격되어야 하는가?**
## 적용 체크
1. 단기 상태와 장기 기억의 경계가 코드에 명시되어 있는가?
2. 세션 종료 시 단기 상태가 자동으로 소거되는가?
3. 장기 기억 승격 기준이 선언되어 있는가?
4. 공유 기억의 읽기·쓰기 권한이 에이전트별로 정의되어 있는가?
## 코드 예시
```typescript
// 단기 상태 — 세션 범위 (Redis TTL로 자동 만료)
interface SessionState {
sessionId: string;
currentStep: string;
tempVars: Record<string, unknown>;
// ttl: 30 * 60 (30분 후 자동 삭제)
}
// 장기 기억 — 시스템 범위 (승격 기준 충족 시에만 쓰기 가능)
interface MemoryRecord {
customerId: string;
pattern: string;
evidence: { sessionIds: string[]; count: number };
writtenBy: "qa-agent"; // 권한: QA만 쓰기
createdAt: string;
}
async function promote(observation: Observation) {
if (observation.occurrences < 3) return; // 승격 기준 미충족
await memoryStore.write({
customerId: observation.customerId,
pattern: observation.pattern,
evidence: observation.evidence,
writtenBy: "qa-agent",
createdAt: new Date().toISOString(),
});
}
// Response Agent는 읽기만 가능
const context = await memoryStore.read(customerId); // ✅
await memoryStore.write(...); // ❌ 권한 없음
```
## 안티패턴
**고객 응대**: 분리가 없으면 이전 세션의 "배송 지연" 컨텍스트가 새 세션의 "결제 변경" 응답에 새어 들어가 부적절한 "배송 지연 죄송합니다"를 만든다. 반대로 세션 종료 시 모든 것을 삭제하면 같은 고객이 같은 문제로 다시 왔을 때 같은 제안을 반복하게 된다.
**장시간 실행 코딩 에이전트**: compaction 없이 수백 단계를 실행하면 컨텍스트 윈도우가 포화되어 "아키텍처 결정을 잊고 잘못된 경로를 다시 시도"하는 사고가 발생한다. 아키텍처 결정과 미해결 버그를 보존하고 중복된 도구 출력을 버리는 compaction이 필수다.
## 호출 예시
```
"Response Agent가 세션 간 상태를 누수시키고 있다.
reopt-state-and-memory-control을 적용해 단기 상태(SessionState)와
장기 기억(MemoryRecord)을 분리하고, 승격 기준과 쓰기 권한을 선언해줘."
```
## 관련 패턴
- 컨텍스트 라우팅 — 세션 간 컨텍스트 전달 규칙
- 평가와 가드레일 — 승격 기준의 검증