ralph-mem 0.1.6 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ralph-mem",
3
3
  "description": "Ralph Loop 기반 반복 실행 및 세션 간 컨텍스트 영속성 관리",
4
- "version": "0.1.6",
4
+ "version": "0.1.10",
5
5
  "author": {
6
6
  "name": "roboco-io"
7
7
  },
package/README.ko.md ADDED
@@ -0,0 +1,459 @@
1
+ # ralph-mem
2
+
3
+ [![npm version](https://img.shields.io/npm/v/ralph-mem.svg)](https://www.npmjs.com/package/ralph-mem)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.6-blue.svg)](https://www.typescriptlang.org/)
6
+ [![Bun](https://img.shields.io/badge/Bun-1.0+-black.svg)](https://bun.sh/)
7
+
8
+ Claude Code를 위한 Ralph Loop 기반 지속적 컨텍스트 관리 플러그인
9
+
10
+ ## 개요
11
+
12
+ ralph-mem은 [Geoffrey Huntley](https://ghuntley.com/)의 [Ralph Loop](https://ghuntley.com/ralph/)와 [thedotmack](https://github.com/thedotmack)의 [claude-mem](https://github.com/thedotmack/claude-mem)에서 영감을 받아 시작된 프로젝트입니다.
13
+
14
+ Ralph Loop의 "성공할 때까지 반복" 철학과 claude-mem의 "지능적 컨텍스트 관리"를 결합하여 Claude Code를 위한 지속적 메모리 관리 플러그인을 구현했습니다.
15
+
16
+ ### 해결하는 문제
17
+
18
+ | 문제 | 설명 |
19
+ | ----------------- | -------------------------------------------- |
20
+ | **Context Rot** | 누적된 불필요한 정보로 인한 모델 성능 저하 |
21
+ | **Compaction** | context window 60-70% 초과 시 출력 품질 급락 |
22
+ | **Forgetfulness** | 세션 간 작업 맥락 손실 |
23
+ | **One-shot 실패** | 복잡한 작업에서 단일 시도 성공률 저조 |
24
+
25
+ ## 핵심 기능
26
+
27
+ ### 1. Ralph Loop Engine
28
+
29
+ 성공 기준 달성까지 자동으로 반복 실행합니다.
30
+
31
+ ```bash
32
+ /ralph start "Add user authentication with JWT"
33
+ ```
34
+
35
+ ```mermaid
36
+ flowchart LR
37
+ A[Prompt + Context] --> B[Agent Execute]
38
+ B --> C{Success?}
39
+ C -->|YES| D[Done]
40
+ C -->|NO| E[Append Result]
41
+ E --> A
42
+ ```
43
+
44
+ **지원하는 성공 기준:**
45
+
46
+ - `test_pass` - 테스트 통과 (`npm test`, `pytest`)
47
+ - `build_success` - 빌드 성공
48
+ - `lint_clean` - Lint 오류 없음
49
+ - `type_check` - 타입 체크 통과
50
+ - `custom` - 사용자 정의 명령
51
+
52
+ ### 2. Persistent Memory
53
+
54
+ 세션 간 컨텍스트를 자동으로 저장하고 복원합니다.
55
+
56
+ ```mermaid
57
+ flowchart TB
58
+ A[새 세션 시작] --> B[관련 메모리 검색]
59
+ B --> C[이전 작업 컨텍스트 주입]
60
+ C --> D[세션 진행]
61
+ D --> E[관찰 기록]
62
+ E --> F[세션 종료]
63
+ F --> G[요약 생성 및 저장]
64
+ ```
65
+
66
+ **Lifecycle Hooks:**
67
+
68
+ - `SessionStart` - 관련 메모리 자동 주입
69
+ - `PostToolUse` - 도구 사용 결과 기록
70
+ - `Stop` - 세션 강제 종료 시 정리 작업
71
+ - `SessionEnd` - 세션 요약 생성 및 저장
72
+
73
+ ### 3. Progressive Disclosure
74
+
75
+ 토큰 효율적인 3계층 검색으로 약 10배 토큰 절약:
76
+
77
+ | Layer | 내용 | 토큰 |
78
+ | ------- | -------------------------- | --------------- |
79
+ | Layer 1 | Index (ID + 점수) | 50-100/result |
80
+ | Layer 2 | Timeline (시간순 컨텍스트) | 200-300/result |
81
+ | Layer 3 | Full Details | 500-1000/result |
82
+
83
+ ```bash
84
+ /mem-search "authentication error" # Layer 1
85
+ /mem-search --layer 3 obs-a1b2 # Layer 3
86
+ ```
87
+
88
+ ## 설치
89
+
90
+ ### npm
91
+
92
+ ```bash
93
+ npm install ralph-mem
94
+ ```
95
+
96
+ ### yarn
97
+
98
+ ```bash
99
+ yarn add ralph-mem
100
+ ```
101
+
102
+ ### pnpm
103
+
104
+ ```bash
105
+ pnpm add ralph-mem
106
+ ```
107
+
108
+ ### bun
109
+
110
+ ```bash
111
+ bun add ralph-mem
112
+ ```
113
+
114
+ ### Claude Code 플러그인
115
+
116
+ Claude Code에서 플러그인으로 사용하려면 [roboco-io/plugins](https://github.com/roboco-io/plugins) 마켓플레이스를 통해 설치합니다:
117
+
118
+ 1. 마켓플레이스 추가
119
+ ```
120
+ /plugin marketplace add roboco-io/plugins
121
+ ```
122
+
123
+ 2. 플러그인 설치
124
+ ```
125
+ /plugin install ralph-mem@roboco-plugins
126
+ ```
127
+
128
+ 또는 `/plugin` 명령으로 플러그인 매니저를 열어 UI에서 설치할 수 있습니다.
129
+
130
+ ### 플러그인 업데이트
131
+
132
+ 1. 마켓플레이스 업데이트
133
+ ```
134
+ claude plugin marketplace update roboco-plugins
135
+ ```
136
+
137
+ 2. 플러그인 업데이트
138
+ ```
139
+ claude plugin update ralph-mem@roboco-plugins
140
+ ```
141
+
142
+ 업데이트 후 Claude Code를 재시작하면 변경 사항이 적용됩니다.
143
+
144
+ ## 사용법
145
+
146
+ ### Ralph Loop
147
+
148
+ ```bash
149
+ # Loop 시작 (기본: 테스트 통과까지)
150
+ /ralph start "Implement feature X"
151
+
152
+ # 커스텀 성공 기준으로 시작
153
+ /ralph start "Fix lint errors" --criteria lint_clean
154
+
155
+ # Loop 상태 확인
156
+ /ralph status
157
+
158
+ # Loop 중단
159
+ /ralph stop
160
+ ```
161
+
162
+ ### Memory 검색
163
+
164
+ ```bash
165
+ # 키워드 검색
166
+ /mem-search "JWT authentication"
167
+
168
+ # 특정 관찰 상세 조회
169
+ /mem-search --layer 3 <observation-id>
170
+
171
+ # 시간 범위 검색
172
+ /mem-search "database" --since 7d
173
+ ```
174
+
175
+ ### Memory 관리
176
+
177
+ ```bash
178
+ # 메모리 상태 확인
179
+ /mem-status
180
+
181
+ # 수동 컨텍스트 주입
182
+ /mem-inject "이 프로젝트는 Express + Prisma 기반"
183
+
184
+ # 특정 메모리 제거
185
+ /mem-forget <observation-id>
186
+ ```
187
+
188
+ ### 4. Privacy 기능
189
+
190
+ 민감한 정보를 메모리에서 제외합니다.
191
+
192
+ **`<private>` 태그:**
193
+
194
+ ```bash
195
+ # 태그로 감싼 내용은 저장되지 않습니다
196
+ My API key is <private>sk-1234567890</private>
197
+ # 저장됨: My API key is [PRIVATE]
198
+ ```
199
+
200
+ **설정 기반 제외:**
201
+
202
+ ```yaml
203
+ privacy:
204
+ exclude_patterns:
205
+ - "*.env"
206
+ - "*password*"
207
+ - "*secret*"
208
+ ```
209
+
210
+ ### 5. MCP 도구
211
+
212
+ 스킬 외에 MCP(Model Context Protocol) 도구로도 메모리에 접근할 수 있습니다.
213
+
214
+ | 도구 | 설명 |
215
+ |------|------|
216
+ | `ralph_mem_search` | Progressive Disclosure 기반 검색 |
217
+ | `ralph_mem_timeline` | 특정 관찰 주변 시간순 컨텍스트 |
218
+ | `ralph_mem_get` | 관찰 ID로 전체 상세 조회 |
219
+
220
+ ## 설정
221
+
222
+ `~/.config/ralph-mem/config.yaml`:
223
+
224
+ ```yaml
225
+ ralph:
226
+ max_iterations: 10 # 최대 반복 횟수
227
+ context_budget: 0.6 # context window 사용률 상한
228
+ cooldown_ms: 1000 # 반복 간 대기 시간
229
+ success_criteria:
230
+ - type: test_pass
231
+ command: "npm test"
232
+
233
+ memory:
234
+ auto_inject: true # 세션 시작 시 자동 주입
235
+ max_inject_tokens: 2000 # 주입 최대 토큰
236
+ retention_days: 30 # 메모리 보관 기간
237
+
238
+ privacy:
239
+ exclude_patterns: # 저장 제외 패턴
240
+ - "*.env"
241
+ - "*password*"
242
+ - "*secret*"
243
+ ```
244
+
245
+ ## 동작 원리
246
+
247
+ ralph-mem은 크게 두 가지 모드로 동작합니다:
248
+
249
+ 1. **자동 모드 (Lifecycle Hooks)**: 사용자 개입 없이 백그라운드에서 동작
250
+ 2. **명시적 모드 (Skills/Commands)**: 사용자가 슬래시 명령어로 직접 제어
251
+
252
+ ### Lifecycle Hooks
253
+
254
+ 플러그인이 설치되면 Claude Code의 lifecycle에 자동으로 연결되어 동작합니다.
255
+
256
+ ```mermaid
257
+ sequenceDiagram
258
+ participant CC as Claude Code
259
+ participant Hook as Hook Layer
260
+ participant Core as Core Layer
261
+ participant DB as SQLite
262
+
263
+ CC->>Hook: SessionStart
264
+ Hook->>Core: 관련 메모리 검색
265
+ Core->>DB: FTS5 + Embedding 검색
266
+ DB-->>Core: 이전 컨텍스트
267
+ Core-->>Hook: 검색 결과
268
+ Hook-->>CC: 컨텍스트 자동 주입
269
+
270
+ CC->>Hook: UserPromptSubmit
271
+ Hook->>Core: 쿼리 관련 검색
272
+ Core-->>Hook: 관련 메모리 알림
273
+ Hook-->>CC: 알림 표시 (주입 X)
274
+
275
+ CC->>Hook: PostToolUse
276
+ Hook->>Core: 도구 사용 결과 기록
277
+ Core->>DB: Observation 저장
278
+
279
+ CC->>Hook: SessionEnd
280
+ Hook->>Core: 세션 요약 생성
281
+ Core->>DB: 요약 저장
282
+ ```
283
+
284
+ | Hook | 시점 | 동작 |
285
+ |------|------|------|
286
+ | `SessionStart` | 세션 시작 | 프로젝트 관련 이전 컨텍스트 자동 주입 |
287
+ | `UserPromptSubmit` | 프롬프트 제출 | 관련 메모리 알림 (토큰 절약을 위해 주입하지 않음) |
288
+ | `PostToolUse` | 도구 사용 후 | 쓰기 도구, Bash 명령 결과를 Observation으로 기록 |
289
+ | `SessionEnd` | 세션 종료 | 세션 요약 생성 및 저장 |
290
+
291
+ ### Ralph Loop 동작
292
+
293
+ `/ralph start` 명령으로 활성화되며, 성공 기준 달성까지 자동 반복합니다.
294
+
295
+ ```mermaid
296
+ flowchart LR
297
+ A[Task + Context] --> B[Claude 실행]
298
+ B --> C{성공 판단}
299
+ C -->|YES| D[완료]
300
+ C -->|NO| E[결과 추가]
301
+ E --> F{중단 조건?}
302
+ F -->|NO| A
303
+ F -->|YES| G[실패 + 롤백 안내]
304
+ ```
305
+
306
+ **성공 판단**: Claude가 테스트/빌드 출력을 분석하여 성공 여부를 판단합니다.
307
+
308
+ **Overbaking 방지**: 무한 반복을 방지하기 위한 중단 조건:
309
+
310
+ | 조건 | 기본값 | 설명 |
311
+ |------|--------|------|
312
+ | `maxIterations` | 10 | 최대 반복 횟수 |
313
+ | `maxDurationMs` | 30분 | 최대 실행 시간 |
314
+ | `noProgressThreshold` | 3회 | 진척 없음 허용 횟수 |
315
+
316
+ **스냅샷**: Loop 시작 시 변경 파일을 스냅샷으로 저장하여 실패 시 롤백 가능.
317
+
318
+ ### 검색 엔진
319
+
320
+ 2단계 검색으로 최적의 결과를 반환합니다:
321
+
322
+ 1. **FTS5 전문 검색** (기본): SQLite FTS5를 사용한 빠른 텍스트 검색
323
+ 2. **Embedding 유사도** (폴백): FTS5 결과가 부족할 때 의미 기반 검색
324
+
325
+ **Embedding 모델**: `paraphrase-multilingual-MiniLM-L12-v2`
326
+ - 로컬 실행 (API 호출 없음)
327
+ - 50+ 언어 지원 (한국어, 영어 포함)
328
+ - 384차원, ~278MB
329
+
330
+ ### 데이터 흐름
331
+
332
+ ```mermaid
333
+ flowchart TB
334
+ subgraph Input["입력"]
335
+ Tool[도구 사용 결과]
336
+ Prompt[사용자 프롬프트]
337
+ end
338
+
339
+ subgraph Process["처리"]
340
+ Privacy[Privacy 필터]
341
+ Compress[압축기]
342
+ Embed[Embedding 생성]
343
+ end
344
+
345
+ subgraph Storage["저장"]
346
+ Obs[(Observations)]
347
+ Session[(Sessions)]
348
+ FTS[(FTS5 Index)]
349
+ Vec[(Embedding)]
350
+ end
351
+
352
+ Tool --> Privacy
353
+ Privacy --> Compress
354
+ Compress --> Obs
355
+ Obs --> FTS
356
+ Obs --> Embed
357
+ Embed --> Vec
358
+
359
+ Prompt --> FTS
360
+ Prompt --> Vec
361
+ FTS --> Result[검색 결과]
362
+ Vec --> Result
363
+ ```
364
+
365
+ ### Observation 타입
366
+
367
+ 도구 사용 결과는 타입별로 분류되어 저장됩니다:
368
+
369
+ | 타입 | 설명 | 기록 대상 |
370
+ |------|------|----------|
371
+ | `tool_use` | 도구 사용 결과 | Edit, Write 등 쓰기 도구 |
372
+ | `bash` | 명령 실행 결과 | Bash 명령어 |
373
+ | `error` | 에러 발생 | 모든 에러 (높은 중요도) |
374
+ | `success` | 성공 기록 | 테스트 통과, 빌드 성공 |
375
+ | `note` | 수동 메모 | `/mem-inject`로 주입된 내용 |
376
+
377
+ **중요도 자동 산정**:
378
+ - 에러 발생: 1.0 (최고)
379
+ - 테스트 통과/실패: 0.9
380
+ - 파일 생성/수정: 0.7
381
+ - 일반 명령: 0.5
382
+
383
+ ## 아키텍처
384
+
385
+ ```mermaid
386
+ flowchart TB
387
+ subgraph Plugin["ralph-mem Plugin"]
388
+ subgraph Interface["Interface Layer"]
389
+ Hooks[Hooks]
390
+ Skills[Skills]
391
+ Loop[Loop Engine]
392
+ end
393
+
394
+ subgraph Core["Core Service"]
395
+ Store[Memory Store]
396
+ Search[Search Engine]
397
+ Compress[Compressor]
398
+ end
399
+
400
+ subgraph Storage["Storage"]
401
+ DB[(SQLite + FTS5)]
402
+ end
403
+
404
+ Hooks --> Core
405
+ Skills --> Core
406
+ Loop --> Core
407
+ Core --> DB
408
+ end
409
+ ```
410
+
411
+ ## 프로젝트 구조
412
+
413
+ ```text
414
+ ralph-mem/
415
+ ├── src/
416
+ │ ├── hooks/ # Lifecycle hooks
417
+ │ ├── skills/ # Slash commands
418
+ │ ├── loop/ # Ralph Loop engine
419
+ │ ├── memory/ # Memory store & search
420
+ │ └── db/ # SQLite + FTS5
421
+ ├── prompts/ # AI 프롬프트
422
+ ├── docs/
423
+ │ └── PRD.md # Product Requirements
424
+ └── tests/
425
+ ```
426
+
427
+ ## 기술 스택
428
+
429
+ - **Runtime**: Bun
430
+ - **Language**: TypeScript
431
+ - **Database**: SQLite + FTS5
432
+ - **Testing**: Vitest
433
+
434
+ ## 개발
435
+
436
+ ```bash
437
+ # 의존성 설치
438
+ bun install
439
+
440
+ # 개발 모드
441
+ bun run dev
442
+
443
+ # 테스트
444
+ bun test
445
+
446
+ # 빌드
447
+ bun run build
448
+ ```
449
+
450
+ ## 참고 자료
451
+
452
+ - [Ralph Loop - Geoffrey Huntley](https://ghuntley.com/ralph/)
453
+ - [claude-mem](https://github.com/thedotmack/claude-mem)
454
+ - [Inventing the Ralph Wiggum Loop (Podcast)](https://linearb.io/dev-interrupted/podcast/inventing-the-ralph-wiggum-loop)
455
+ - [The Brief History of Ralph](https://www.humanlayer.dev/blog/brief-history-of-ralph)
456
+
457
+ ## 라이선스
458
+
459
+ MIT