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: 세션 상태와 장기 기억의 분리가 필요할 때. 세션 종료 후 남아야 할 정보와 세션과 함께 정리될 임시 상태를 구분. 세션 간 데이터 누수 우려가 있을 때.
---

# 상태와 기억 제어 (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)을 분리하고, 승격 기준과 쓰기 권한을 정의해줘."
```

## 관련 패턴

- Context Routing — 세션 간 컨텍스트 전달 규칙
- Evaluation and Guardrails — 승격 기준 검증

연결된 패턴

State and Memory Control상태와 기억 제어단기 상태와 장기 기억을 분리해 정보 누수와 혼선을 방지한다.