CM - CASS 메모리 시스템
AI 코딩 에이전트를 위한 절차적 메모리. 분산된 세션을 지속적이고 에이전트 간 메모리로 변환합니다. 인간의 전문성 개발을 반영하는 3계층 인지 아키텍처를 사용합니다.
존재 이유
AI 코딩 에이전트는 귀중한 지식을 축적하지만, 다음과 같은 문제가 있습니다:
- 세션에 갇힘 - 세션이 종료되면 컨텍스트 손실
- 에이전트 특화 - Claude는 Cursor가 배운 것을 모름
- 비구조화 - 원시 로그는 실행 가능한 지침이 아님
- 붕괴 위험 - 단순 요약은 중요한 세부 사항을 잃음
이번 달에 여러 에이전트에서 인증 버그를 세 번 해결했을 것입니다. 매번 처음부터 다시 시작했습니다.
CM은 에이전트 간 학습으로 이를 해결합니다: Cursor에서 발견된 패턴이 Claude Code에서 즉시 사용 가능합니다.
3계층 인지 아키텍처
┌─────────────────────────────────────────────────────────────────────┐
│ 에피소드 메모리 (cass) │
│ 모든 에이전트의 원시 세션 로그 — "기본 진실" │
│ Claude Code │ Codex │ Cursor │ Aider │ PI │ Gemini │ ChatGPT │ ...│
└───────────────────────────┬─────────────────────────────────────────┘
│ cass 검색
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 작업 메모리 (Diary) │
│ 구조화된 세션 요약: 성과, 결정 등 │
└───────────────────────────┬─────────────────────────────────────────┘
│ 반영 + 큐레이션 (자동화)
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 절차 메모리 (Playbook) │
│ 신뢰도 추적 및 감소가 적용된 증류 규칙 │
└─────────────────────────────────────────────────────────────────────┘
모든 에이전트의 세션은 공유 메모리에 공급됩니다. Cursor에서 발견된 패턴이 자동으로 다음 세션에서 Claude Code를 돕습니다.
당신이 알아야 할 하나의 명령어
cm context "<작업>" --json
중요하지 않은 작업을 시작하기 전에 실행하세요. 다음을 반환합니다:
- relevantBullets - 작업 관련성에 따라 점수가 매겨진 Playbook의 규칙
- antiPatterns - 문제를 일으킨 것들
- historySnippets - 과거 세션 (자신 및 다른 에이전트)
- suggestedCassQueries - 심층 조사 검색
출처별 기록 필터링
historySnippets[].origin.kind는 "local" 또는 "remote"입니다. 원격 히트는 origin.host를 포함합니다:
{
"historySnippets": [
{
"source_path": "~/.claude/sessions/session-001.jsonl",
"origin": { "kind": "local" }
},
{
"source_path": "/home/user/.codex/sessions/session.jsonl",
"origin": { "kind": "remote", "host": "workstation" }
}
]
}
신뢰도 감소 시스템
규칙은 영원하지 않습니다. 재검증 없이 신뢰도가 감소합니다:
| 메커니즘 | 효과 |
|---|---|
| 90일 반감기 | 피드백 없이 90일마다 신뢰도 절반 감소 |
| 4배 유해 배율 | 실수 한 번이 성공 한 번의 4배 가중치 |
| 성숙도 진행 | candidate → established → proven |
점수 감소 시각화
초기 점수: 10.0 (오늘 10개의 도움이 된 표시)
90일 후 (반감기): 5.0
180일 후: 2.5
270일 후: 1.25
365일 후: 0.78
유효 점수 공식
유효 점수 = 감소된 도움 - (4 × 감소된 유해)
// 여기서 감소 계수 = 0.5 ^ (피드백 이후 일수 / 90)
성숙도 상태 머신
┌──────────┐ ┌─────────────┐ ┌────────┐
│ candidate│──────▶│ established │───▶│ proven │
└──────────┘ └─────────────┘ └────────┘
│ │ │
│ │ (유해 >25%) │
│ ▼ │
│ ┌─────────────┐ │
└────────────▶│ deprecated │◀─────────┘
└─────────────┘
전환 규칙:
| 전환 | 기준 |
|---|---|
candidate → established | 도움 3+회, 유해 비율 <25% |
established → proven | 도움 10+회, 유해 비율 <10% |
any → deprecated | 유해 비율 >25% 또는 명시적 폐기 |
안티패턴 학습
나쁜 규칙은 삭제되지 않습니다. 경고가 됩니다:
"성능을 위해 인증 토큰 캐시"
↓ (유해 표시 3회)
"함정: 만료 검증 없이 인증 토큰을 캐시하지 마십시오"
규칙이 여러 번 유해로 표시되면(유해 비율 >50%, 표시 3회 이상), 자동으로 안티패턴으로 반전됩니다.
ACE 파이프라인 (규칙 생성 방식)
생성기 → 반영기 → 검증기 → 큐레이터
| 단계 | 역할 | LLM? |
|---|---|---|
| 생성기 | 작업 전 컨텍스트 수화 (cm context) | 아니요 |
| 반영기 | 세션에서 패턴 추출 (cm reflect) | 예 |
| 검증기 | cass 기록에 대한 증거 게이트 | 예 |
| 큐레이터 | 결정론적 델타 병합 | 아니요 |
중요: 큐레이터는 반복적 드리프트로 인한 컨텍스트 붕괴를 방지하기 위해 LLM이 없습니다. LLM은 패턴을 제안하고, 결정론적 로직이 이를 관리합니다.
과학적 검증
규칙이 Playbook에 추가되기 전에 cass 기록에 대해 검증됩니다:
제안된 규칙: "인증 디버깅 전에 항상 토큰 만료 확인"
↓
증거 게이트: 이 규칙이 적용된 세션을 cass에서 검색
↓
결과: 5개 세션 발견, 4개 성공적 결과 → 수락
역사적 증거가 없는 규칙은 입증될 때까지 후보로 표시됩니다.
명령어 참조
컨텍스트 검색 (기본 워크플로)
# 주요 명령어 - 중요 작업 전에 실행
cm context "사용자 인증 구현" --json
# 토큰 예산 제한
cm context "버그 수정" --json --limit 5 --no-history
# 작업 공간 필터 사용
cm context "리팩터링" --json --workspace /path/to/project
# 자체 문서화 설명
cm quickstart --json
# 시스템 상태
cm doctor --json
cm doctor --fix # 문제 자동 수정
# 유사 규칙 찾기
cm similar "오류 처리 모범 사례"
Playbook 관리
cm playbook list # 모든 규칙
cm playbook get b-8f3a2c # 규칙 세부 정보
cm playbook add "항상 테스트 먼저 실행" # 규칙 추가
cm playbook add --file rules.json # 파일에서 일괄 추가
cm playbook add --file rules.json --session /path/session.jsonl # 출처 추적
cm playbook remove b-xyz --reason "오래됨" # 제거
cm playbook export > backup.yaml # 내보내기
cm playbook import shared.yaml # 가져오기
cm playbook bootstrap react # 기존 항목에 스타터 적용
cm top 10 # 최고 효과 규칙
cm stale --days 60 # 최근 피드백 없는 규칙
cm why b-8f3a2c # 규칙 출처
cm stats --json # Playbook 상태 메트릭
학습 및 피드백
# 수동 피드백
cm mark b-8f3a2c --helpful
cm mark b-xyz789 --harmful --reason "회귀 발생"
cm undo b-xyz789 # 피드백 되돌리기
# 세션 결과 (위치 기반: 상태, 규칙)
cm outcome success b-8f3a2c,b-def456
cm outcome failure b-x7k9p1 --summary "인증 접근 방식 실패"
cm outcome-apply # Playbook에 적용
# 반영 (일반적으로 자동화)
cm reflect --days 7 --json
cm reflect --session /path/to/session.jsonl # 단일 세션
cm reflect --workspace /path/to/project # 프로젝트별
# 검증
cm validate "널 역참조 전에 항상 확인"
# 규칙에 대한 세션 감사
cm audit --days 30
# 영구적으로 폐기
cm forget b-xyz789 --reason "더 나은 패턴으로 대체됨"
온보딩 (에이전트 네이티브)
기존 에이전트를 사용하는 제로 비용 Playbook 구축:
cm onboard status # 진행 상황 확인
cm onboard gaps # 카테고리 격차
cm onboard sample --fill-gaps # 우선 순위 세션
cm onboard sample --agent claude --days 14 # 에이전트/시간별 필터
cm onboard sample --workspace /path/project # 작업 공간별 필터
cm onboard sample --include-processed # 세션 재분석
cm onboard read /path/session.jsonl --template # 풍부한 컨텍스트
cm onboard mark-done /path/session.jsonl # 처리됨으로 표시
cm onboard reset # 새로 시작
트라우마 가드 (안전 시스템)
cm trauma list # 활성 패턴
cm trauma add "DROP TABLE" --description "대량 삭제" --severity critical
cm trauma heal t-abc --reason "의도된 마이그레이션"
cm trauma remove t-abc
cm trauma scan --days 30 # 트라우마 스캔
cm trauma import shared-traumas.yaml
cm guard --install # Claude Code 후크
cm guard --git # Git 사전 커밋 후크
cm guard --install --git # 둘 다
cm guard --status # 설치 확인
시스템 명령어
cm init # 초기화
cm init --starter typescript # 템플릿 사용
cm init --force # 재초기화 (백업 생성)
cm starters # 템플릿 목록
cm serve --port 3001 # MCP 서버
cm usage # LLM 비용 통계
cm privacy status # 개인 정보 설정
cm privacy enable # 에이전트 간 강화 활성화
cm privacy disable # 강화 비활성화
cm project --format agents.md # AGENTS.md용 내보내기
스타터 Playbook
빈 Playbook으로 시작하는 것은 어렵습니다. 스타터는 선별된 모범 사례를 제공합니다:
cm starters # 사용 가능 목록
cm init --starter typescript # 스타터로 초기화
cm playbook bootstrap react # 기존 Playbook에 적용
내장 스타터
| 스타터 | 초점 | 규칙 수 |
|---|---|---|
| general | 보편적 모범 사례 | 5 |
| typescript | TypeScript/Node.js 패턴 | 4 |
| react | React/Next.js 개발 | 4 |
| python | Python/FastAPI/Django | 4 |
| node | Node.js/Express 서비스 | 4 |
| rust | Rust 서비스 패턴 | 4 |
사용자 정의 스타터
~/.cass-memory/starters/에 YAML 파일 생성:
# ~/.cass-memory/starters/django.yaml
name: django
description: Django 웹 프레임워크 모범 사례
bullets:
- content: "데이터베이스 작업에는 항상 Django의 ORM 사용"
category: database
maturity: established
tags: [django, orm]
인라인 피드백 (작업 중)
코드 주석에 피드백을 남깁니다. 반영 중에 구문 분석됩니다:
// [cass: helpful b-8f3a2c] - 이 규칙이 저를 낭비에서 구해줬습니다
// [cass: harmful b-x7k9p1] - 이 조언은 우리 사용 사례에 맞지 않았습니다
에이전트 프로토콜
1. 시작: cm context "<작업>" --json
2. 작업: 규칙을 따를 때 규칙 ID 참조 (예: "b-8f3a2c 따르는 중...")
3. 피드백: 규칙이 도움/해가 될 때 인라인 주석 남기기
4. 종료: 그냥 완료하세요. 학습은 자동으로 이루어집니다.
다음을 수행할 필요가 없습니다:
cm reflect실행 (자동화가 처리)- 수동으로
cm mark실행 (인라인 주석 사용) - Playbook에 수동으로 규칙 추가
격차 분석 카테고리
| 카테고리 | 키워드 |
|---|---|
debugging | error, fix, bug, trace, stack |
testing | test, mock, assert, expect, jest |
architecture | design, pattern, module, abstraction |
workflow | task, CI/CD, deployment |
documentation | comment, README, API doc |
integration | API, HTTP, JSON, endpoint |
collaboration | review, PR, team |
git | branch, merge, commit |
security | auth, token, encrypt, permission |
performance | optimize, cache, profile |
카테고리 상태 임계값:
| 상태 | 규칙 수 | 우선 순위 |
|---|---|---|
critical | 0개 | 높음 |
underrepresented | 1-2개 | 중간 |
adequate | 3-10개 | 낮음 |
well-covered | 11개 이상 | 없음 |
트라우마 가드: 안전 시스템
"뜨거운 난로" 원칙 — 과거 사건에서 학습하고 재발을 방지합니다.
작동 방식
세션 기록 트라우마 레지스트리 런타임 가드
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ rm -rf /* (실수)│ ──────▶ │ 패턴: rm -rf │ ──────▶ │ 차단됨: 이 명령│
│ "죄송합니다, │ 스캔 │ 심각도: 치명적 │ 후크 │ 이 트라우마 │
│ 실수했습니다." │ │ 세션: abc123 │ │ 패턴과 일치함 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
내장 파멸 패턴 (20개 이상)
| 카테고리 | 예시 |
|---|---|
| 파일 시스템 | rm -rf /, rm -rf ~, 재귀 삭제 |
| 데이터베이스 | DROP DATABASE, TRUNCATE, WHERE 없는 DELETE FROM |
| Git | main/master에 git push --force, git reset --hard |
| 인프라 | terraform destroy -auto-approve, kubectl delete namespace |
| 클라우드 | aws s3 rm --recursive, 파괴적 CloudFormation |
패턴 저장소
| 범위 | 위치 | 목적 |
|---|---|---|
| 전역 | ~/.cass-memory/traumas.jsonl | 개인 패턴 |
| 프로젝트 | .cass/traumas.jsonl | 팀을 위해 저장소에 커밋 |
패턴 수명 주기
- 활성: 일치하는 명령 차단
- 치유됨: 일시적으로 우회 (사유 및 타임스탬프 포함)
- 삭제됨: 제거됨 (다시 추가 가능)
MCP 서버
에이전트 통합을 위해 MCP 서버로 실행:
# 로컬 전용 (권장)
cm serve --port 3001
# 인증 토큰 사용 (루프백이 아닌 경우)
MCP_HTTP_TOKEN="<임의의 값>" cm serve --host 0.0.0.0 --port 3001
노출된 도구
| 도구 | 설명 |
|---|