최종 판단
단어 → 문장 → 학습내용은 좋은 출발점이다. 인간이 단서로 기억을 복원하는 방식과 맞고, 평면 전체 검색보다 후보를 빠르게 줄인다. 그러나 이 구조를 유일한 원본 파일이나 직선 연결 리스트로 사용하면 흔한 단서가 수천 기억을 여는 문제, 처음 보는 표현을 놓치는 문제, 오래된 규칙과 위험한 규칙을 함께 꺼내는 문제가 남는다.
권고안은 역할을 분리한다. 실제 사건은 불변 로그에, 검증된 규칙은 버전 스냅샷에, 단어·구·개체·프로젝트·시간·의미 연결은 재생성 가능한 인덱스에 둔다. 검색 결과는 0~3개만 주입하고, 점수가 낮으면 정상적으로 기권한다.
적용 상태: 검색 구조보다 먼저 검증 증거의 신뢰 경계를 수정했다. 이제 프로그램이 출력한 Exit code: 0 문자열, 중첩 상태, 상태 없음은 성공 증거가 되지 않으며 최상위 구조화 종료 코드만 판정에 사용한다.
최근 메모리훅 감사
검증 사실 · 2026-08-14 스냅샷활성 197 · 후보 37 · 폐기 5
64회 노출 중
검증 연결이 매우 적음
롤백 3 · 승인 6
| 기간 | 작업 턴 | 학습 노출 | 적용 | 적용 후 검증 |
|---|---|---|---|---|
| 최근 24시간 | 75 | 23 | 9 | 0 |
| 최근 7일 | 332 | 64 | 43 | 3 |
현재 구조의 장점
- 후보·활성·폐기 상태와 명시적 승인 경로가 있다.
- 제안과 적용을 분리하고, 변경 전후 스냅샷과 롤백 이력을 남긴다.
- 노출·적용·검증을 서로 다른 기록으로 취급한다.
- 여러 작업에서 재현된 학습을 승격하고 사용자 교정 시 강등하는 래칫이 있다.
현재 구조의 병목
- 적용 43건 중 적용 후 검증은 3건으로, 결과 연결이 희박하다.
- 평면 JSONL과 어휘·주제·문맥 점수는 저장량이 늘수록 검사량이 커진다.
- 활성 항목이 197개로 누적되어 중복·충돌·노후화 비용이 커질 수 있다.
- 최대 3개 반환이 “필요할 때 3개”가 아니라 “항상 채우기”가 되면 오염이 늘어난다.
해석: 메모리훅은 단순 저장을 넘어 래칫 구조로 발전했지만, “학습이 실제로 도움이 되었는가”를 객관적으로 연결하는 폐회로가 아직 약하다.
Prime Agent 비교
분석 추론Prime Agent의 접근은 모델 가중치를 반복 재학습하기보다, 기본 지침을 안정적으로 유지하면서 성공·실패 증거에 따라 작은 하니스 보충 규칙을 수정하는 방식이다. 작은 변경, 변경 전 스냅샷, 검증, 롤백이 핵심이다.
| 방식 | 이점 | 핵심 위험 | AEM 판단 |
|---|---|---|---|
| 가중치 재학습 | 모델 내부에 압축 | 비용, 근거 추적, 부분 롤백 | 초기 범위 제외 |
| 대화 전체 재주입 | 정보 손실이 적음 | 토큰·지연·노이즈·지침 오염 | 원문 보관용으로도 제한 |
| 외부 메모리 수정 | 빠름, 버전·롤백 가능 | 오학습의 자기강화 | 증거 래칫과 함께 채택 |
직접 수정인가, 원리 반영인가
Prime Agent가 현재 메모리훅 파일을 직접 수정했다는 증거는 확인되지 않았다. 2026-08-11 비교 대화에서 제안·적용 분리, 수정본, 전후 롤백, 검증 후 승격 구조가 검토되고 사용자가 적용을 승인한 뒤 훅이 변경되었다. 따라서 정확한 표현은 “Prime이 고쳤다”가 아니라 Prime의 자기수정 원리가 승인된 변경안에 반영되었다이다.
Continual Harness 연구도 수정 효과가 모델 능력에 의존하며 약한 수정자는 성능을 떨어뜨릴 수 있음을 지적한다. 자기수정 가능성 자체가 안전성을 보장하지 않는다.
인간 기억 원리
아이디어 평가 · 조건부 채택단어는 주소가 아니라 회상 단서다
부호화 특수성 원리는 저장 당시의 문맥과 회상 단서가 맞을수록 기억을 잘 꺼낼 수 있다고 설명한다. 사용자 제안은 이를 계산 구조로 옮긴다. 단어가 빠른 진입점을 만들고, 문장이 판별 문맥을 복원하며, 학습내용이 재사용 가능한 규칙을 제공한다.
| 기억 원리 | AEM 대응 | 설계 결과 |
|---|---|---|
| 부호화 특수성 | 단어·구 + 문맥 문장 | 저장·검색 문맥을 함께 유지 |
| 단서 과부하 | 문서 빈도·후보 상한 | 흔한 단서의 영향 축소 |
| 보완학습계 | 빠른 사건 로그 + 느린 통합 | 경험과 일반화 분리 |
| 인출 연습 | 사용 영수증 + 결과 검증 | 저장 횟수보다 실제 재사용 평가 |
| 간격 효과 | 서로 다른 작업·시간의 재검증 | 한 번의 성공으로 영구 승격 금지 |
왜 직선 구조로 끝내면 안 되는가
인간의 회상은 단어 하나에서 문장 하나로 이동하는 연결 리스트가 아니다. 여러 단서가 동시에 활성화되고 사건 기억과 일반 지식이 상호 보완적으로 작동한다. 따라서 AEM은 단서 ↔ 맥락 ↔ 학습의 다대다 구조가 되어야 한다.
- 단어: 저장 단위가 아닌 역색인 키.
- 문장: 원본 대화 전체가 아닌 최소 판별 문맥.
- 학습: 사건과 분리된 버전형 규칙.
- 관계: 프로젝트, 도구, 오류 서명, 시간, 권한을 포함한 다중 연결.
가상 작업 시뮬레이션
재실행 완료 · 합성 실험20개 난수 시드, 시드당 방해 항목 2,000개, 9개 질의 유형, 상위 3개 반환 조건으로 세 구조를 비교했다. 정확 일치, 알려진 바꿔쓰기, 지식 갱신, 다중 연결, 흔한 단서, 프로젝트 범위, 권한 출처, 오염 저항, 무관 질의 기권을 포함했다.
| 구조 | Recall@3 | Precision@3 | MRR | 오래된 규칙 | 위험 규칙 | 검사 후보 |
|---|---|---|---|---|---|---|
| current-like-flat | 0.438 | 0.250 | 0.375 | 1.000 | 0.000 | 1,807.7 |
| word-sentence-lesson | 0.956 | 0.527 | 0.850 | 1.000 | 1.000 | 259.1 |
| hybrid-ratchet | 1.000 | 1.000 | 1.000 | 0.000 | 0.000 | 3.1 |
저장량 성장
| 방해 항목 | 평면 | 단어–문장–학습 | 하이브리드 |
|---|---|---|---|
| 200 | 190.0 | 29.2 | 3.1 |
| 2,000 | 1,801.0 | 255.7 | 3.1 |
| 20,000 | 17,930.0 | 2,533.3 | 3.1 |
가장 중요한 반례
등록되지 않은 새로운 바꿔쓰기 5개에서는 Recall@3가 평면 0.0, 단어–문장–학습 0.0, 하이브리드 0.2였다. 정적 단서만으로는 처음 보는 표현을 충분히 이해하지 못한다. 의미 검색은 필요하지만, 희소 검색 신뢰도가 낮을 때만 호출하고 동일한 권한·상태·범위 필터를 거쳐야 한다.
실험 한계 보기
- 데이터와 별칭 규칙이 정답 구조를 일부 반영한다.
- LLM 생성, 실제 Codex 통합, 토큰 비용을 측정하지 않았다.
- 인덱스 생성, 디스크 I/O, 잠금, 전원 차단 복구를 제외했다.
- 현행 훅은 검색 특성을 단순화한 비교군이며 전체 구현을 복제하지 않았다.
따라서 결과는 구현 우선순위를 정하는 알고리즘 수준 근거이며 실서비스 향상을 입증하지 않는다.
P0 검증 결함
재현 후 수정·회귀 검증 완료수정 전 관찰
- 실제로 성공한
node memory-hook.test.js는 학습 검증 증거로 기록되지 않았다. - 프로그램이 일반 출력으로
Exit code: 0을 인쇄하자 검증 성공과 3개 학습 검증이 기록되었다. - 도구 이름은 훅에 정규화된
Bash로 들어왔지만 기존 인식 경로가 이 경계를 일관되게 처리하지 못했다.
원인
구조화된 종료 상태가 없을 때 사용자 프로그램의 stdout 문자열을 도구 종료 코드처럼 신뢰했다. stdout은 검증 대상이 자유롭게 만들 수 있으므로 신뢰 경계가 아니다.
적용된 수정 계약
- 셸 도구는 최상위 정수형
exit_code또는exitCode만 종료 상태로 신뢰한다. - 상태가 없으면
unknown으로 기록하고 승격 점수를 주지 않는다. - 문자열, 중첩 종료 코드, 셸의
isError만으로는 성공을 만들지 않는다. - 실제 성공·실패·시간 초과·상태 없음·출력 위조의 5개 회귀 검사를 둔다.
- 검증 영수증을 작업 추적 ID와 학습 ID에 연결한다.
공식 Hooks 문서의 tool_response는 일반적으로 모델에 보이는 결과이며 별도 종료 상태 필드를 보장하지 않는다. 따라서 텍스트를 추론하지 않고 로컬 훅 입력의 명시적 최상위 구조 필드만 좁게 허용했다.
권고 구조
Dual-store Associative Evidence Ratchet: 빠른 사건 저장과 느린 학습 통합을 분리하고, 다중 단서 검색 결과를 권한·상태·버전·증거로 걸러 낸다.
- 사건작업, 제안, 교정, 도구 결과를 분할 로그에 추가
- 통합중복·충돌·오염을 분리하고 후보 학습 생성
- 래칫독립 증거로 승격·강등·교체·재검증
- 연상 검색단어·구·개체·범위와 조건부 의미 검색
- 영수증0~3개 적용과 구조화 결과를 다시 사건으로 기록
계층별 책임
| 계층 | 책임 | 금지 사항 |
|---|---|---|
| 불변 지침 | 필수 사용자·팀 규칙 | 메모리만을 유일한 원본으로 사용 |
| 사건 로그 | 무슨 일이 있었는지 시간순 보존 | 과거 사건 덮어쓰기 |
| 학습 스냅샷 | 현재 유효한 버전·상태·권한 | 증거 없이 활성화 |
| 연상 인덱스 | 후보를 빠르게 찾는 파생 구조 | 권위 원본으로 취급 |
| 주입 | 임계값을 넘는 0~3개 규칙 제공 | top-k 강제 채움 |
| 증거 래칫 | 사용과 결과를 분리 기록 | 노출을 사용·성공으로 간주 |
확장 정보파일 저장
권고 · 논리적 무한 / 물리적 분할하나의 무한 JSON 배열, 하나의 무한 JSONL, 학습당 한 파일은 모두 장기 운영에서 분명한 한계를 갖는다. 구현된 기준은 월 단위로 회전하는 JSONL 사건 로그, 현재 상태를 담는 버전 스냅샷, 스냅샷별 파생 인덱스다. 파일 크기 조건은 함께 사용하지 않는다.
runtime/stores/<project-id>/ ├─ manifest.json ├─ events/2026/08/ │ └─ events.jsonl ├─ event-ids/ │ └─ ab.jsonl ├─ snapshots/ │ └─ lessons-000042.json ├─ indexes/000042/ │ ├─ cue-index.json │ ├─ phrase-index.json │ ├─ metadata-index.json │ └─ semantic-index.json └─ .write-lock
| 방식 | 장점 | 한계 | 판정 |
|---|---|---|---|
| 단일 JSON 배열 | 사람이 읽기 쉬움 | 추가 시 전체 재작성, 큰 손상 범위 | 거부 |
| 단일 무한 JSONL | 추가 쓰기 단순 | 스캔·잠금·백업·압축 집중 | 거부 |
| 학습당 한 파일 | 개별 diff 쉬움 | 파일 수·메타데이터 비용 | 거부 |
| 분할 로그 + 스냅샷 | 복구·감사·백업·검색 분리 | 매니페스트 게시 규칙 필요 | 채택 |
| SQLite + FTS5 | 쿼리·동시성·전문 검색 | 현재 규모에는 조기 복잡도 | 측정 후 전환 |
| 벡터 저장소 | 새 표현 검색 | 비용·버전·오탐·운영 부담 | 조건부 보조 인덱스 |
단어→문장→학습은 어디에 저장하는가
단어는 cue-index의 키, 문장은 학습 스냅샷의 context_sentence, 학습내용은 버전형 rule로 둔다. 단어 인덱스는 학습 ID를 가리킬 뿐 원본 내용을 복제하지 않는다. 인덱스가 사라져도 스냅샷에서 다시 만들 수 있다.
원자적 게시
- 새 스냅샷과 인덱스를 임시 경로에 완전히 쓴다.
- 파싱, 체크섬, 시퀀스, 스냅샷 ID를 검증한다.
- 최종 이름으로 원자적으로 변경한다.
- 마지막에만
manifest.json포인터를 교체한다. - 이전 버전은 롤백 창 동안 보존한다.
데이터베이스 전환 신호
- 정제된 학습 약 10,000개 초과
- 검색 p95 50ms 초과
- 시작 인덱스 로드 500ms 초과
- 지속적으로 쓰는 프로세스가 2개 이상
위 숫자는 현재 약 239개 학습과 단일 사용자 환경에서 잡은 초기 가정이다. 실제 측정으로 조정해야 한다. 상세 레코드 예시, 복구, 백업, 마이그레이션은 저장 아키텍처 문서에 있다.
장애 정책
검색 편의 기능의 장애와 권한·학습 증거의 장애는 다르게 처리한다. 파생 검색은 축소 운영할 수 있지만, 새 학습 승격은 근거가 없을 때 닫힌 상태로 실패해야 한다.
| 장애 | 읽기·검색 | 학습·승격 | 정책 |
|---|---|---|---|
| 의미 인덱스 불가 | 희소 검색으로 축소 | 의미 신호 없음 표시 | 부분 fail-open |
| 파생 인덱스 손상 | 직전 정상본 또는 재생성 | 재생성 전 보류 | 혼합 |
| 사건 로그 쓰기 실패 | 정상 스냅샷 읽기 | 금지 | 쓰기 fail-closed |
| 검증 상태 없음 | 기존 활성 규칙 사용 | 성공 승격 금지 | 증거 fail-closed |
| 통합기 장애 | 현재 스냅샷 사용 | 사건 축적, 승격 보류 | 계층 격리 |
장애 시 “기억 시스템 전체 중단”과 “무조건 계속 학습” 사이의 하나를 고르는 문제가 아니다. 구성요소가 담당하는 권한에 따라 축소 운영과 승격 중단을 분리한다.
구현 순서
- 완료 · 검증 신뢰 경계stdout 기반 상태 판정을 없애고 구조화 실행 결과와 회귀 검사를 만들었다.
- 완료 · 저장소 이중 기록현행 기록을 유지한 채 월별 사건 로그와 스냅샷을 그림자로 생성한다.
- 완료 · 다중 연상 인덱스단어·구·메타데이터·프로젝트 범위와 기권을 그림자 비교한다.
- 완료 · 느린 통합과 래칫중복·충돌·교체·재검증과 작업 간 증거 집계를 구현했다.
- 완료 · 조건부 의미 검색희소 단서가 불확실할 때만 버전형 의미 인덱스를 사용한다.
전환 기준
기능 구현은 끝났지만 실제 주입은 기존 경로가 담당한다. 누락, 잘못된 주입, 오래된 규칙, 위험 규칙, 기권, 지연을 충분한 실작업 표본으로 비교한 뒤 낮은 영향 범위부터 새 경로를 켠다. 롤백 창이 끝나기 전 기존 스냅샷과 검색 경로를 제거하지 않는다.
반드시 측정할 지표
- Recall@k, Precision@k, MRR, 무관 질의 기권 정확도
- 폐기·대체 규칙 선택률, 권한 없는 규칙 선택률
- 적용 후 작업 성공률과 사용자 교정률
- 검색 p50/p95, 검사 후보 수, 주입 토큰, 의미 검색 호출률
- 손상 탐지율, 스냅샷·인덱스 재생성 시간
구현·통합 검증 결과
0~4단계 코드 및 실제 훅 여정 통과| 단계 | 구현 | 검증 | 운영 상태 |
|---|---|---|---|
| 0 | 최상위 구조화 종료 상태와 작업 루트 고정 | 실패·시간 초과·상태 없음·출력 위조·정상 성공 | 현행 훅 적용 |
| 1 | 월별 JSONL, 전역 ID 인덱스, 원자적 스냅샷 | 교차 월 ID 충돌·멱등 재시도·고아 꼬리 복구 | 그림자 기록 |
| 2 | 단어·구·메타데이터 인덱스와 기권 | 범위·상태·권한 격리와 무관 질의 | 비교 기록 |
| 3 | 중복·충돌 통합과 증거 래칫 | 독립 작업 2건 승격, 교정 강등, 폐기 | API 사용 가능 |
| 4 | 조건부 의미 폴백과 버전형 재색인 | 새 바꿔쓰기·정확 일치·무관 질의·모델 교체 | 로컬 저하 모드 |
| 종단 | 실제 메모리훅→AEM 어댑터→월별 저장소 | 구조화 성공 영수증의 통합 증거 재생 및 stdout 위조 거부 | 기존 주입 권위 유지 |
기본 의미 인덱스는 외부 서비스 없이 동작하는 96차원 부분문자 해시다. 언어 의미 모델과 동등하지 않으며, 실제 임베딩 공급자를 연결할 수 있는 vectorize 경계와 vectorizerId 버전만 제공한다.
보류된 마지막 단계: AEM을 실제 주입 권위로 승격하는 작업. 장기간 그림자 일치율, 누락·오탐, 사용자 교정률, p95 지연과 의미 폴백 호출률이 아직 측정되지 않았으므로 자동 전환하지 않았다.
결정·가정·미확인
결정
- 단어→문장→학습 구조는 다중 연상 인덱스로 채택한다.
- 원본 사건은 분할 추가 전용 로그에 저장한다.
- 현재 학습 상태는 버전 스냅샷으로 분리한다.
- 검증 성공은 구조화된 실행 결과만 인정한다.
- 낮은 신뢰도의 검색은 0개 반환으로 기권한다.
가정
- 초기 운영은 단일 사용자·단일 주 작성자다.
- 정제 학습은 당분간 10,000개보다 작다.
- 사건 로그는 월 단위로만 회전하며 파일 크기 조건은 사용하지 않는다.
- 데이터베이스 전환 성능 임계값은 측정 전 시작값이다.
- 비밀을 제거한 최소 증거 요약으로 재검증 경로를 유지할 수 있다.
미확인
- 실제 작업에서 하이브리드 검색이 사용자 교정을 얼마나 줄이는가
- 한국어·영어 혼합 작업에 적합한 의미 모델과 비용은 무엇인가
- 오래된 사건을 언제 압축·오프라인 보관해야 하는가
- 프로젝트 공통 학습과 전용 학습의 최적 승격 기준은 무엇인가
출처
공식 제품·에이전트 자료
- OpenAI: Memories: 필수 지침과 보조 기억의 분리, 로컬 저장, 추출·통합 단계
- OpenAI: Hooks: 훅의 이벤트 기반 확장 구조
- OpenAI Cookbook: Context personalization: 에이전트 문맥과 개인화 메모리 구성
- Prime Agent README, pinned revision: 자기수정 하니스 설명
- Continual Learning in Agentic Systems: 작업 중 하니스 수정과 능력 의존성
인간 학습·기억 연구
- Tulving & Thomson: Encoding Specificity
- Retrieval cues, cue overload and fan effects
- Complementary Learning Systems
- Test-enhanced learning
- Distributed practice
장기 메모리 평가·검색
공식 Codex 문서는 필수 팀 지침을 AGENTS.md 또는 버전 관리 문서에 두고, 메모리는 보조 회상 계층으로 취급하도록 안내한다. AEM도 이 경계를 유지한다.