oh-my-customcode 0.143.0 → 0.144.0
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.
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/SHOULD-memory-integration.md +42 -0
- package/templates/CLAUDE.md +8 -1
- package/templates/guides/agentmemory-migration/phase-1-coexist.md +261 -0
- package/templates/guides/external-tools/ecc-absorption-decisions.md +232 -0
- package/templates/manifest.json +1 -1
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -381,3 +381,45 @@ MCP tools (claude-mem, episodic-memory) are **orchestrator-scoped** and not inhe
|
|
|
381
381
|
- MCP saves are **non-blocking**: memory failure MUST NOT prevent session from ending
|
|
382
382
|
- If claude-mem unavailable: skip, log warning
|
|
383
383
|
- episodic-memory: no action needed (auto-indexed after session)
|
|
384
|
+
|
|
385
|
+
## Dual-Backend Advisory (AgentMemory + claude-mem)
|
|
386
|
+
|
|
387
|
+
#1169 Phase 1 (COEXIST) 단계에서 두 memory backend 동시 활성 가능:
|
|
388
|
+
|
|
389
|
+
| 상황 | 권장 |
|
|
390
|
+
|------|------|
|
|
391
|
+
| claude-mem 단독 | 기본값 — 현 운영 유지 |
|
|
392
|
+
| AgentMemory 단독 | Phase 2 (SWITCH) 이후 진행 |
|
|
393
|
+
| 둘 다 활성 (COEXIST) | Phase 1 한정 — `memory-aggregator`가 결과 병합 |
|
|
394
|
+
|
|
395
|
+
### 충돌 감지
|
|
396
|
+
|
|
397
|
+
`.mcp.json`에 두 서버(`claude-mem`, `agentmemory`) 동시 등록 시 첫 호출 시점에 advisory 출력 권장:
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
[Advisory] Dual memory backend detected (Phase 1 COEXIST)
|
|
401
|
+
- claude-mem: active (Chroma)
|
|
402
|
+
- agentmemory: active (SQLite)
|
|
403
|
+
Phase 2 SWITCH 진입 전까지 두 backend 유지
|
|
404
|
+
가이드: guides/agentmemory-migration/phase-1-coexist.md
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
이 advisory는 경고가 아닙니다. Phase 1 COEXIST에서는 정상 상태입니다.
|
|
408
|
+
|
|
409
|
+
### Session-End Self-Check (COEXIST 확장)
|
|
410
|
+
|
|
411
|
+
Phase 1 COEXIST 기간 중 세션 종료 시:
|
|
412
|
+
|
|
413
|
+
1. sys-memory-keeper가 MEMORY.md 갱신? → YES: 계속
|
|
414
|
+
2. claude-mem 저장 시도? → YES (기존 항목)
|
|
415
|
+
3. AgentMemory 저장 시도? → YES (COEXIST 추가)
|
|
416
|
+
세 단계 모두 완료 후 사용자에게 확인. 둘 중 하나 실패해도 비차단.
|
|
417
|
+
|
|
418
|
+
### Phase 2 진입 전 필수 조건
|
|
419
|
+
|
|
420
|
+
- 1주 measure 결과 (`scripts/measure-claude-mem-usage.sh`) GO 판정
|
|
421
|
+
- 자산 처리표 사용자 검토 완료 (12 plugin skill 처리 방향 결정)
|
|
422
|
+
- 30분 롤백 절차 검증 (Chroma 백업 + 복원 테스트)
|
|
423
|
+
|
|
424
|
+
Refs: #1169 본문 조치 3 (택1 강제), 조치 4 (롤백 절차),
|
|
425
|
+
`guides/agentmemory-migration/phase-1-coexist.md`.
|
package/templates/CLAUDE.md
CHANGED
|
@@ -245,7 +245,8 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
|
|
|
245
245
|
|
|
246
246
|
| 서버 | 용도 |
|
|
247
247
|
|------|------|
|
|
248
|
-
| claude-mem | 세션 메모리 영속성 (Chroma 기반) |
|
|
248
|
+
| claude-mem | 세션 메모리 영속성 (Chroma 기반) — Phase β (#1169) COEXIST 진행 중 |
|
|
249
|
+
| **agentmemory** | claude-mem 대체 후보 (SQLite 기반, 4-tier consolidation) — Phase 1 COEXIST (#1169) |
|
|
249
250
|
| code-review-graph | Token-efficient AST 기반 context retrieval (8.2× 토큰 절감) — wrapper: `crg-integration` 스킬 (#1171) |
|
|
250
251
|
| semble | Semantic code search via embeddings (98% 토큰 절감, NDCG@10=0.854) — wrapper: `semble-integration` 스킬 (#1173) |
|
|
251
252
|
|
|
@@ -264,6 +265,12 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
|
|
|
264
265
|
npm install -g claude-mem
|
|
265
266
|
claude-mem setup
|
|
266
267
|
|
|
268
|
+
# AgentMemory MCP 설치 (claude-mem 대체 후보, COEXIST)
|
|
269
|
+
pip install agentmemory
|
|
270
|
+
claude mcp add agentmemory -- agentmemory mcp
|
|
271
|
+
# 또는 .mcp.json 수동 편집 (R001 auto-install 금지)
|
|
272
|
+
# Phase 1 COEXIST 가이드: guides/agentmemory-migration/phase-1-coexist.md
|
|
273
|
+
|
|
267
274
|
# CRG MCP 설치 (token efficiency)
|
|
268
275
|
pipx install code-review-graph
|
|
269
276
|
# .mcp.json 에 code-review-graph 서버 수동 추가 (R001 auto-install 금지)
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# AgentMemory Migration — Phase 1: COEXIST (Week 1-2)
|
|
2
|
+
|
|
3
|
+
> **상태**: 활성 — 2026-05-18 시작 (#1169)
|
|
4
|
+
> **다음 단계**: Phase 2 SWITCH (measure 결과 후 GO/NO-GO 결정)
|
|
5
|
+
> **이전 단계**: [measure-step-zero.md](./measure-step-zero.md)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 개요
|
|
10
|
+
|
|
11
|
+
Phase 1 (COEXIST)는 claude-mem과 AgentMemory를 **동시에 운영**하는 단계입니다.
|
|
12
|
+
이 단계에서는 어떤 destructive 변경도 발생하지 않습니다:
|
|
13
|
+
|
|
14
|
+
- claude-mem 기존 Chroma 데이터 유지
|
|
15
|
+
- 12 plugin skill 폐기 없음
|
|
16
|
+
- 어댑터 코드 활성화 없음 (STUB 상태 유지)
|
|
17
|
+
- 자산 처리표 적용 없음
|
|
18
|
+
|
|
19
|
+
목표는 1주간 실제 사용 데이터를 수집하고, AgentMemory 설치와 공존 운영에 익숙해지는 것입니다.
|
|
20
|
+
|
|
21
|
+
| 항목 | Phase 1 (COEXIST) | Phase 2 (SWITCH) |
|
|
22
|
+
|------|-------------------|------------------|
|
|
23
|
+
| claude-mem | 활성 (기존 운영) | 비활성화 예정 |
|
|
24
|
+
| AgentMemory | 설치 후 병렬 활성 | 단독 운영 |
|
|
25
|
+
| 데이터 마이그레이션 | 없음 | 선택적 (측정 후 결정) |
|
|
26
|
+
| 어댑터 코드 | STUB 유지 | 활성화 |
|
|
27
|
+
| 자산 처리표 | 적용 보류 | 사용자 검토 후 적용 |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. AgentMemory 설치
|
|
32
|
+
|
|
33
|
+
> **R001 주의**: auto-install 금지. 아래 명령어를 사용자 로컬에서 수동으로 실행합니다.
|
|
34
|
+
|
|
35
|
+
### 2-1. 패키지 설치
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 옵션 A: pip
|
|
39
|
+
pip install agentmemory
|
|
40
|
+
|
|
41
|
+
# 옵션 B: pipx (격리 환경 권장)
|
|
42
|
+
pipx install agentmemory
|
|
43
|
+
|
|
44
|
+
# 옵션 C: uvx (uv 사용 시)
|
|
45
|
+
uvx agentmemory
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2-2. MCP 서버 등록
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Claude Code CLI로 등록
|
|
52
|
+
claude mcp add agentmemory -- agentmemory mcp
|
|
53
|
+
|
|
54
|
+
# 또는 .mcp.json 수동 편집 (R001 auto-install 금지)
|
|
55
|
+
# {
|
|
56
|
+
# "mcpServers": {
|
|
57
|
+
# "agentmemory": {
|
|
58
|
+
# "command": "agentmemory",
|
|
59
|
+
# "args": ["mcp"]
|
|
60
|
+
# }
|
|
61
|
+
# }
|
|
62
|
+
# }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 2-3. 등록 확인
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
claude mcp list
|
|
69
|
+
# 출력에 agentmemory 서버가 표시되어야 합니다
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 3. COEXIST 정책
|
|
75
|
+
|
|
76
|
+
Phase 1 기간 동안 두 backend는 다음 정책에 따라 공존합니다.
|
|
77
|
+
|
|
78
|
+
### 3-1. 기본 운영 방식
|
|
79
|
+
|
|
80
|
+
| 작업 | 우선 backend | 비고 |
|
|
81
|
+
|------|-------------|------|
|
|
82
|
+
| 기존 메모리 조회 | claude-mem | 기존 Chroma 데이터 유지 |
|
|
83
|
+
| 신규 메모리 저장 | 둘 다 | COEXIST 기간 중 병렬 저장 권장 |
|
|
84
|
+
| 세션 종료 시 저장 | 둘 다 | R011 Session-End Self-Check 참조 |
|
|
85
|
+
|
|
86
|
+
### 3-2. 쿼리 병합 (memory-aggregator)
|
|
87
|
+
|
|
88
|
+
두 backend에서 결과가 반환될 경우 `memory-aggregator` 스킬이 결과를 병합합니다:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
claude-mem.search(query) → 결과 A
|
|
92
|
+
AgentMemory.search(query) → 결과 B
|
|
93
|
+
memory-aggregator → A + B 중복 제거 후 반환
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`memory-aggregator` 스킬이 없는 경우, 두 결과를 순서대로 제시하고 사용자가 선택합니다.
|
|
97
|
+
|
|
98
|
+
### 3-3. 충돌 방지 원칙
|
|
99
|
+
|
|
100
|
+
- claude-mem 기존 데이터를 AgentMemory로 자동 복사하지 않음
|
|
101
|
+
- 두 backend에 동일 키로 저장 시 별개 항목으로 취급
|
|
102
|
+
- 강제 동기화 없음 — Phase 2에서 마이그레이션 여부 결정
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 4. Dual-Backend 충돌 Advisory
|
|
107
|
+
|
|
108
|
+
`.mcp.json`에 두 서버가 동시 등록된 상태를 감지하면 다음 advisory를 출력합니다.
|
|
109
|
+
|
|
110
|
+
### 4-1. 감지 조건
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
.mcp.json 내 서버 목록:
|
|
114
|
+
- "claude-mem" (또는 관련 tool prefix)
|
|
115
|
+
- "agentmemory"
|
|
116
|
+
→ 두 개 동시 존재 시 Phase 1 COEXIST 상태로 간주
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4-2. Advisory 메시지
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
[Advisory] Dual memory backend detected (Phase 1 COEXIST)
|
|
123
|
+
- claude-mem: active (Chroma)
|
|
124
|
+
- agentmemory: active (SQLite)
|
|
125
|
+
현재 Phase 1 COEXIST 정책 적용 중 — 두 backend 병렬 운영
|
|
126
|
+
Phase 2 SWITCH 진입 전까지 두 backend 유지
|
|
127
|
+
가이드: guides/agentmemory-migration/phase-1-coexist.md
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
이 advisory는 경고가 아닙니다. Phase 1에서는 정상 상태입니다.
|
|
131
|
+
|
|
132
|
+
### 4-3. 강제 선택 (사용자 명시 시)
|
|
133
|
+
|
|
134
|
+
사용자가 명시적으로 "agentmemory만 사용" 또는 "claude-mem만 사용"을 요청하는 경우,
|
|
135
|
+
해당 요청을 따르되 자산 처리표 적용 및 어댑터 활성화는 Phase 2 GO 결정 후 진행합니다.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 5. 사용자 행동 계획
|
|
140
|
+
|
|
141
|
+
### 5-1. 1주 measure 루틴 (자동 트리거: 2026-05-25)
|
|
142
|
+
|
|
143
|
+
`scripts/measure-claude-mem-usage.sh` 스크립트를 1주간 실행합니다:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# 수동 실행 (필요 시)
|
|
147
|
+
bash scripts/measure-claude-mem-usage.sh
|
|
148
|
+
|
|
149
|
+
# 결과는 .claude/outputs/sessions/ 에 저장됩니다
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
측정 항목:
|
|
153
|
+
- 일별 호출 횟수 (claude-mem vs AgentMemory)
|
|
154
|
+
- 응답 지연 (p50, p95)
|
|
155
|
+
- 저장 성공/실패율
|
|
156
|
+
- 메모리 용량 (Chroma vs SQLite)
|
|
157
|
+
|
|
158
|
+
### 5-2. GO/NO-GO 결정 기준 (2026-05-25 예정)
|
|
159
|
+
|
|
160
|
+
| 지표 | GO 조건 | NO-GO 조건 |
|
|
161
|
+
|------|---------|------------|
|
|
162
|
+
| 응답 지연 | AgentMemory ≤ claude-mem × 1.2 | AgentMemory > claude-mem × 2.0 |
|
|
163
|
+
| 저장 성공률 | ≥ 99% | < 95% |
|
|
164
|
+
| 운영 안정성 | 1주 무장애 | 크래시 또는 데이터 손실 |
|
|
165
|
+
| 호환성 | 기존 메모리 포맷 읽기 가능 | 포맷 비호환으로 검색 실패 |
|
|
166
|
+
|
|
167
|
+
### 5-3. 지금 할 수 있는 것
|
|
168
|
+
|
|
169
|
+
- AgentMemory 설치 및 MCP 등록 (위 섹션 2 참조)
|
|
170
|
+
- 신규 세션에서 AgentMemory로도 저장해보기 (실험적)
|
|
171
|
+
- measure 스크립트 결과 관찰
|
|
172
|
+
- 자산 처리표 (`guides/agentmemory-migration/asset-disposition.md`) 검토 준비
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 6. Phase 2 진입 조건
|
|
177
|
+
|
|
178
|
+
다음 조건이 모두 충족된 경우에만 Phase 2 (SWITCH)로 진행합니다.
|
|
179
|
+
|
|
180
|
+
### 필수 조건
|
|
181
|
+
|
|
182
|
+
- [ ] 1주 measure 결과 GO 판정 (5-2 기준 충족)
|
|
183
|
+
- [ ] 자산 처리표 사용자 검토 완료 (12 plugin skill 처리 방향 결정)
|
|
184
|
+
- [ ] 30분 롤백 절차 검증 완료
|
|
185
|
+
|
|
186
|
+
### 롤백 절차 검증 (Phase 2 진입 전 필수)
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# 1. Chroma 백업 생성
|
|
190
|
+
cp -r ~/.local/share/claude-mem/chroma ~/.local/share/claude-mem/chroma.bak.$(date +%Y%m%d)
|
|
191
|
+
|
|
192
|
+
# 2. 백업에서 복원 가능 여부 확인
|
|
193
|
+
# (실제 복원 수행하지 않고 절차만 검증)
|
|
194
|
+
ls -la ~/.local/share/claude-mem/chroma.bak.*
|
|
195
|
+
|
|
196
|
+
# 3. AgentMemory SQLite 백업
|
|
197
|
+
cp ~/.local/share/agentmemory/memories.db ~/.local/share/agentmemory/memories.db.bak.$(date +%Y%m%d)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
롤백 소요 시간이 30분 이내임을 확인한 후 Phase 2 진행.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 7. 현 단계 한계 및 금지 사항
|
|
205
|
+
|
|
206
|
+
### 7-1. STUB 상태 유지 (변경 금지)
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
packages/eval-core/src/adapters/agentmemory.ts ← STUB, 활성화 금지
|
|
210
|
+
packages/eval-core/src/db/schema.ts ← 변경 금지
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
이 파일들은 Phase 2 GO 결정 후 별도 사이클에서 수정합니다.
|
|
214
|
+
|
|
215
|
+
### 7-2. 자산 처리표 적용 보류
|
|
216
|
+
|
|
217
|
+
12 plugin skill의 폐기/유지 결정은 measure 결과를 확인한 후 진행합니다:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
.claude/skills/memory-*/ ← 폐기 여부 보류
|
|
221
|
+
.claude/skills/claude-mem-*/ ← 폐기 여부 보류
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 7-3. 데이터 마이그레이션 금지
|
|
225
|
+
|
|
226
|
+
Phase 1에서는 claude-mem Chroma 데이터를 AgentMemory SQLite로 이전하지 않습니다.
|
|
227
|
+
이전은 Phase 2에서 사용자가 명시적으로 승인한 경우에만 진행합니다.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 8. R011과의 관계
|
|
232
|
+
|
|
233
|
+
Phase 1 COEXIST 기간 중 R011 (SHOULD-memory-integration) 적용:
|
|
234
|
+
|
|
235
|
+
| R011 항목 | COEXIST 수정 사항 |
|
|
236
|
+
|-----------|-----------------|
|
|
237
|
+
| Primary: Native auto memory | 변경 없음 |
|
|
238
|
+
| Supplementary: claude-mem | 변경 없음 (계속 사용) |
|
|
239
|
+
| Session-End Self-Check | claude-mem + AgentMemory 둘 다 저장 시도 |
|
|
240
|
+
| Failure Policy | 둘 중 하나 실패해도 비차단 |
|
|
241
|
+
|
|
242
|
+
세션 종료 시 자가 점검 (COEXIST 확장):
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
1. sys-memory-keeper가 MEMORY.md 갱신? → YES
|
|
246
|
+
2. claude-mem 저장 시도? → YES (기존)
|
|
247
|
+
3. AgentMemory 저장 시도? → YES (COEXIST 추가)
|
|
248
|
+
모두 완료 후 사용자에게 확인
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 9. 참고
|
|
254
|
+
|
|
255
|
+
- **이슈**: #1169 (AgentMemory 마이그레이션 계획)
|
|
256
|
+
- **이전 단계**: [measure-step-zero.md](./measure-step-zero.md)
|
|
257
|
+
- **R011**: `.claude/rules/SHOULD-memory-integration.md` (Dual-Backend Advisory 섹션)
|
|
258
|
+
- **관련 기억**: [[project-sequencing-alpha-beta-gamma]]
|
|
259
|
+
- **자산 처리표**: `guides/agentmemory-migration/asset-disposition.md` (Phase 2 전 검토 필요)
|
|
260
|
+
- **measure 스크립트**: `scripts/measure-claude-mem-usage.sh`
|
|
261
|
+
- **롤백 가이드**: #1169 본문 조치 4 (30분 롤백 절차)
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# ECC 흡수 결정 아카이브
|
|
2
|
+
|
|
3
|
+
> **목적**: ECC (Everything Claude Code) 패턴 흡수 검토 이력 보존.
|
|
4
|
+
> 미래 기여자가 "왜 흡수했는가 / 왜 거부했는가"를 재검토 없이 파악할 수 있도록 합니다.
|
|
5
|
+
>
|
|
6
|
+
> 관련 Epic: #1170 (closed), 분리 이슈: #1176
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. 개요
|
|
11
|
+
|
|
12
|
+
oh-my-customcode는 **compilation metaphor**를 핵심 아키텍처 철학으로 채택합니다.
|
|
13
|
+
ECC (Everything Claude Code) 등 외부 도구의 패턴을 흡수할 때, 이 철학과의 정합성이
|
|
14
|
+
흡수 여부의 1차 판단 기준입니다.
|
|
15
|
+
|
|
16
|
+
| 판단 기준 | 설명 |
|
|
17
|
+
|----------|------|
|
|
18
|
+
| metaphor 정합성 | `.claude/` 구조를 컴파일러 metaphor로 강화하는가 |
|
|
19
|
+
| single-maintainer 비용 | 외부 의존성 추적 부담이 감당 가능한가 |
|
|
20
|
+
| 사용자 가치 | 기존 사용자 워크플로우를 개선하는가 |
|
|
21
|
+
| 차별점 영향 | ECC와 직접 경쟁(zero-sum)이 되는가 |
|
|
22
|
+
|
|
23
|
+
본 문서는 v0.142.0 ~ v0.143.0 기간에 검토된 4개 패턴의 결정을 기록합니다.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. 흡수된 패턴 (v0.142.0)
|
|
28
|
+
|
|
29
|
+
### 2-1. sec-agentshield-wrapper (sub-issue #1174)
|
|
30
|
+
|
|
31
|
+
| 항목 | 내용 |
|
|
32
|
+
|------|------|
|
|
33
|
+
| 릴리즈 | v0.142.0 |
|
|
34
|
+
| 흡수 형태 | pre-flight 보안 wrapper skill |
|
|
35
|
+
| 차별점 영향 | **보완** — post-write 자산(CodeQL 등)과 시점 분리 |
|
|
36
|
+
|
|
37
|
+
**결정: ACCEPT**
|
|
38
|
+
|
|
39
|
+
ECC의 `agentshield-wrapper`는 실행 전 입력 검증 레이어를 제공합니다.
|
|
40
|
+
oh-my-customcode의 `sec-codeql-expert`가 post-write 단계에 집중하므로,
|
|
41
|
+
pre-flight 단계를 담당하는 이 패턴은 compilation pipeline을 완성하는
|
|
42
|
+
`compiler → linker → loader` 구조에 자연스럽게 편입됩니다.
|
|
43
|
+
유지보수 비용: 외부 harness 의존 없음, 내부 skill로 완전 소유.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### 2-2. instinct-extractor (sub-issue #1175)
|
|
48
|
+
|
|
49
|
+
| 항목 | 내용 |
|
|
50
|
+
|------|------|
|
|
51
|
+
| 릴리즈 | v0.142.0 |
|
|
52
|
+
| 흡수 형태 | cross-session 패턴 채굴 skill |
|
|
53
|
+
| 차별점 영향 | **보완** — `skill-extractor`와 trigger 분리 |
|
|
54
|
+
|
|
55
|
+
**결정: ACCEPT**
|
|
56
|
+
|
|
57
|
+
`skill-extractor`가 현재 세션의 행동 패턴을 skill로 승격한다면,
|
|
58
|
+
`instinct-extractor`는 누적 세션에서 반복 패턴을 자동 감지합니다.
|
|
59
|
+
두 도구는 trigger가 다릅니다 (단일 세션 vs 누적 히스토리).
|
|
60
|
+
R016 Continuous Improvement 루프를 강화하며, 내부 구조(agent-memory + claude-mem)로
|
|
61
|
+
구현 가능하므로 외부 의존성이 없습니다.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 2-3. manifest-install --profile (sub-issue #1177)
|
|
66
|
+
|
|
67
|
+
| 항목 | 내용 |
|
|
68
|
+
|------|------|
|
|
69
|
+
| 릴리즈 | v0.142.0 |
|
|
70
|
+
| 흡수 형태 | manifest profiles 5종 |
|
|
71
|
+
| 차별점 영향 | **보완** — deactivation 비용 축소 |
|
|
72
|
+
|
|
73
|
+
**결정: ACCEPT**
|
|
74
|
+
|
|
75
|
+
신규 사용자의 진입 비용을 낮추는 profile 기반 설치 패턴입니다.
|
|
76
|
+
`--profile minimal`, `--profile de`, `--profile qa` 등 도메인별 subset을
|
|
77
|
+
한 번에 활성화합니다. deactivation 비용 문제(한 번 설치된 skill이 불필요해도
|
|
78
|
+
삭제 경로가 불명확)를 profile 전환으로 해소합니다.
|
|
79
|
+
cross-harness export 거부(#1176)로 발생하는 진입로 공백을 부분 보완합니다.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 3. 거부된 패턴 — Cross-harness Export (#1176)
|
|
84
|
+
|
|
85
|
+
### 3-1. 개요
|
|
86
|
+
|
|
87
|
+
ECC는 oh-my-customcode의 `.claude/` 구조를 Cursor, Aider, Codex, Opencode 등
|
|
88
|
+
8개 외부 harness 포맷으로 export하는 기능을 제공합니다.
|
|
89
|
+
이 패턴을 oh-my-customcode가 흡수할 경우, 내부에 cross-harness export 레이어가
|
|
90
|
+
추가됩니다.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### 3-2. 분석
|
|
95
|
+
|
|
96
|
+
**R006 compilation metaphor 영향**
|
|
97
|
+
|
|
98
|
+
oh-my-customcode의 아키텍처는 다음 매핑을 따릅니다:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Source code → .claude/skills/
|
|
102
|
+
Build artifacts → .claude/agents/
|
|
103
|
+
Compiler → mgr-sauron (R017)
|
|
104
|
+
Spec → .claude/rules/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
cross-harness export를 흡수하면 이 compiler가 N개의 target backend(Cursor,
|
|
108
|
+
Aider, Codex 등)를 추가로 지원해야 합니다. 이는 **단일 target 컴파일러에서
|
|
109
|
+
multi-target 크로스 컴파일러로의 전환**을 의미합니다.
|
|
110
|
+
|
|
111
|
+
multi-target 전환의 결과:
|
|
112
|
+
- 각 외부 harness의 구조 변경이 oh-my-customcode build system에 직접 영향
|
|
113
|
+
- metaphor의 순수성 훼손 (compiler가 external spec을 추적해야 함)
|
|
114
|
+
- mgr-sauron (R017) 검증 범위가 외부 harness 포맷으로 확장
|
|
115
|
+
|
|
116
|
+
**single-maintainer 비용**
|
|
117
|
+
|
|
118
|
+
외부 harness들은 변동성이 높습니다:
|
|
119
|
+
|
|
120
|
+
| Harness | 변동 리스크 |
|
|
121
|
+
|---------|------------|
|
|
122
|
+
| Cursor | 에이전트 폴더 구조 자주 변경 |
|
|
123
|
+
| Aider | `.aider` 설정 포맷 semi-annual 변경 |
|
|
124
|
+
| Codex | OpenAI 정책 변경 직접 반영 |
|
|
125
|
+
| Opencode | 초기 단계, 구조 unstable |
|
|
126
|
+
|
|
127
|
+
각 harness의 breaking change가 발생할 때마다 R016 (Continuous Improvement)
|
|
128
|
+
워크플로우가 트리거됩니다. single-maintainer 환경에서 이는 **core feature
|
|
129
|
+
개발 시간의 경쟁 비용**이 됩니다.
|
|
130
|
+
|
|
131
|
+
**사용자 가치 trade-off**
|
|
132
|
+
|
|
133
|
+
| 가치 | 유형 |
|
|
134
|
+
|------|------|
|
|
135
|
+
| 신규 사용자 진입로 확장 | 신규 사용자 |
|
|
136
|
+
| 기존 harness 자산 재활용 | 멀티 harness 사용자 |
|
|
137
|
+
| ECC와 기능 중복 | zero-sum 경쟁 |
|
|
138
|
+
|
|
139
|
+
신규 사용자 진입로 문제는 `manifest-install --profile`(#1177)으로 부분 해소됩니다.
|
|
140
|
+
멀티 harness 사용자는 ECC를 직접 사용하는 것이 더 효과적입니다.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 3-3. 결정: REJECT (DEFER 옵션 존재)
|
|
145
|
+
|
|
146
|
+
**권고: REJECT**
|
|
147
|
+
|
|
148
|
+
거부 사유 (우선순위 순):
|
|
149
|
+
|
|
150
|
+
1. **compilation metaphor 순수성 보호**
|
|
151
|
+
cross-harness export는 oh-my-customcode의 핵심 차별점인 compilation metaphor를
|
|
152
|
+
직접 훼손합니다. 이 metaphor는 관심사 분리(R006)의 철학적 기반입니다.
|
|
153
|
+
|
|
154
|
+
2. **ECC와의 zero-sum 경쟁 회피**
|
|
155
|
+
ECC는 이미 이 패턴의 원천(export source)입니다. 흡수하면 동일 기능으로
|
|
156
|
+
경쟁하는 구조가 되며, 두 도구의 차별화가 희석됩니다.
|
|
157
|
+
|
|
158
|
+
3. **single-maintainer R016 부담**
|
|
159
|
+
외부 harness 8개의 변동을 추적하는 비용이 core feature R016 루프에 경쟁합니다.
|
|
160
|
+
현재 기여자 구성(single-maintainer)에서는 감당 불가 수준으로 판단됩니다.
|
|
161
|
+
|
|
162
|
+
4. **진입로 문제 대체 해소**
|
|
163
|
+
#1177 `manifest-install --profile`이 신규 사용자 진입 비용을 낮추는 대안으로
|
|
164
|
+
이미 흡수되었습니다.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### 3-4. 대안 경로 (DEFER 시나리오)
|
|
169
|
+
|
|
170
|
+
다음 조건이 충족될 때 재검토를 권장합니다:
|
|
171
|
+
|
|
172
|
+
| 조건 | 임계값 | 현재 (2026-05-18) |
|
|
173
|
+
|------|--------|------------------|
|
|
174
|
+
| 한국어 사용자 비율 | 50%+ | 미집계 |
|
|
175
|
+
| 외부 기여자 수 | 5명 이상 | 미집계 |
|
|
176
|
+
|
|
177
|
+
DEFER 기간 동안의 cross-tool integration 우회 경로:
|
|
178
|
+
|
|
179
|
+
- **RTK proxy skill**: 기존 infra 활용, Cursor 등에서 oh-my-customcode skill 호출
|
|
180
|
+
- **Codex/Gemini exec skill**: 외부 LLM executor를 skill로 래핑, harness 종속성 없음
|
|
181
|
+
|
|
182
|
+
이 우회 경로는 full export와 동일한 가치를 제공하지 않지만,
|
|
183
|
+
R016 부담 없이 80% 이상의 use case를 커버합니다.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 4. Cross-harness 거부의 의도된 결과
|
|
188
|
+
|
|
189
|
+
이 결정으로 두 도구의 포지셔닝이 명확해집니다:
|
|
190
|
+
|
|
191
|
+
| 도구 | 포지션 |
|
|
192
|
+
|------|--------|
|
|
193
|
+
| **oh-my-customcode** | compilation metaphor pure-play — `.claude/` 생태계 전문화 |
|
|
194
|
+
| **ECC** | cross-harness pragmatist — 다양한 harness 간 이식성 제공 |
|
|
195
|
+
|
|
196
|
+
사용자는 목적에 따라 도구를 선택할 수 있습니다:
|
|
197
|
+
- compilation metaphor 기반 체계적 에이전트 구축 → oh-my-customcode
|
|
198
|
+
- 기존 harness 자산의 이식/통합 → ECC
|
|
199
|
+
|
|
200
|
+
두 도구가 동일한 기능을 제공할 필요가 없으며,
|
|
201
|
+
이 차별화가 각 도구의 장기 지속성에 기여합니다.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 5. KPI 모니터링
|
|
206
|
+
|
|
207
|
+
DEFER 조건 모니터링을 위한 내부 KPI 메모:
|
|
208
|
+
|
|
209
|
+
> 내부 메모: `.claude/agent-memory/sys-memory-keeper/project_ecc_kpi_internal_metrics.md`
|
|
210
|
+
|
|
211
|
+
| KPI | 6개월 목표 | 1년 목표 |
|
|
212
|
+
|-----|-----------|---------|
|
|
213
|
+
| 외부 기여자 수 | 2명 | 5명 |
|
|
214
|
+
| 한국어 사용자 비율 | 30% | 50% |
|
|
215
|
+
| cross-harness export 요청 수 | 10회 이상 → DEFER 재검토 | 30회 이상 → ACCEPT 재검토 |
|
|
216
|
+
|
|
217
|
+
KPI 미달 시: REJECT 유지, 대안 경로 개선 검토.
|
|
218
|
+
KPI 초과 달성 시: R016 워크플로우로 재검토 트리거.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 6. 참고
|
|
223
|
+
|
|
224
|
+
| 항목 | 링크 |
|
|
225
|
+
|------|------|
|
|
226
|
+
| ECC 흡수 Epic | #1170 (closed) |
|
|
227
|
+
| Cross-harness 이슈 | #1176 (standalone, decision-needed) |
|
|
228
|
+
| sec-agentshield-wrapper | #1174 |
|
|
229
|
+
| instinct-extractor | #1175 |
|
|
230
|
+
| manifest-install --profile | #1177 |
|
|
231
|
+
| 시퀀싱 메모 | `.claude/agent-memory/sys-memory-keeper/` → `[[project-sequencing-alpha-beta-gamma]]` |
|
|
232
|
+
| R006 compilation metaphor | `.claude/rules/MUST-agent-design.md` |
|
package/templates/manifest.json
CHANGED