@handsupmin/gc-tree 0.1.4 → 0.2.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/README.es.md +133 -118
- package/README.ja.md +135 -120
- package/README.ko.md +137 -122
- package/README.md +138 -123
- package/README.zh.md +135 -119
- package/dist/src/resolve.js +40 -6
- package/package.json +9 -2
package/README.ko.md
CHANGED
|
@@ -19,217 +19,232 @@ Git 브랜치 다루듯 여러 컨텍스트를 나눠 관리할 수 있습니다
|
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
|
-
실제 업무가 여러 레포, 제품, 고객사, 워크플로에 걸쳐 있는 개발자를 위해 만들었습니다.
|
|
23
|
-
|
|
24
|
-
`gc-tree`는 AI 코딩 도구에 **레포 바깥 레벨의 재사용 가능한 컨텍스트 레이어**를 붙여줍니다. 오래 가는 맥락은 유지하고, 관련 있는 레포에서만 적용하고, 지금 레포와 무관할 때는 조용히 빠집니다.
|
|
25
|
-
|
|
26
22
|
---
|
|
27
23
|
|
|
28
|
-
##
|
|
24
|
+
## 문제
|
|
29
25
|
|
|
30
|
-
|
|
26
|
+
Claude Code나 Codex를 매일 씁니다. 그런데 실제 업무는 여러 레포, 제품, 고객사에 걸쳐 있고 — AI 도구는 현재 파일밖에 모릅니다.
|
|
31
27
|
|
|
32
|
-
|
|
28
|
+
그래서 매번 이렇게 됩니다:
|
|
33
29
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
- 작업 전환 때마다 사람 머리로 컨텍스트 스위칭을 직접 해야 함
|
|
30
|
+
- 어떤 레포들이 한 묶음인지 다시 설명
|
|
31
|
+
- 같은 아키텍처 문서를 또 프롬프트에 붙여넣기
|
|
32
|
+
- 지난주에 "이미 알던" 컨벤션을 다시 알려주기
|
|
33
|
+
- 현재 레포와 무관한 컨텍스트를 손으로 걷어내기
|
|
39
34
|
|
|
40
|
-
|
|
35
|
+
이건 AI 문제가 아닙니다. **컨텍스트 관리 문제**입니다.
|
|
41
36
|
|
|
42
37
|
---
|
|
43
38
|
|
|
44
|
-
##
|
|
39
|
+
## gc-tree가 하는 일
|
|
45
40
|
|
|
46
|
-
-
|
|
47
|
-
제품, 고객사, 워크스트림마다 컨텍스트 레인을 따로 유지할 수 있습니다.
|
|
41
|
+
`gc-tree`는 **레포 위 레벨**에 위치합니다. 컨텍스트를 구조화된 마크다운 파일에 저장하고, AI 도구가 매 세션마다 관련된 것만 자동으로 가져오게 합니다.
|
|
48
42
|
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
```bash
|
|
44
|
+
gctree resolve --query "auth token rotation policy"
|
|
45
|
+
```
|
|
51
46
|
|
|
52
|
-
|
|
53
|
-
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"gc_branch": "main",
|
|
50
|
+
"matches": [
|
|
51
|
+
{
|
|
52
|
+
"title": "인증 & 세션 컨벤션",
|
|
53
|
+
"score": 4,
|
|
54
|
+
"summary": "모든 요청에서 JWT rotation, refresh token은 httpOnly 쿠키에 저장, access token TTL 15분",
|
|
55
|
+
"excerpt": "## 인증 플로우\nAccess token: 15분 TTL, 매 인증 요청마다 rotation..."
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
Codex, Claude Code, 혹은 둘 다를 써서 컨텍스트를 처음 만들고 계속 다듬을 수 있습니다.
|
|
61
|
+
AI 도구가 올바른 컨텍스트를 가져옵니다. 지식 베이스 전체가 아니라 — 관련된 조각만.
|
|
57
62
|
|
|
58
|
-
|
|
59
|
-
숨겨진 메모리가 아니라 파일에 남기고, 도구는 먼저 짧은 요약부터 읽게 할 수 있습니다.
|
|
63
|
+
**실제로: 쿼리당 전체 컨텍스트의 ~4%만 주입됩니다.** 나머지 96%는 실제로 필요할 때까지 디스크에 남아 토큰 윈도우 밖에 있습니다.
|
|
60
64
|
|
|
61
65
|
---
|
|
62
66
|
|
|
63
|
-
##
|
|
67
|
+
## 이 도구가 맞는 사람
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
npm install -g @handsupmin/gc-tree
|
|
67
|
-
gctree init
|
|
68
|
-
```
|
|
69
|
+
다음에 해당하면 gc-tree를 제일 잘 쓸 수 있습니다:
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
- **여러 레포**에 걸쳐 일하는 경우 (모노레포 팀, 플랫폼 + 클라이언트 레포, 백엔드 + 프론트엔드 스택)
|
|
72
|
+
- 같은 주에 **여러 제품이나 고객사** 사이를 오가는 경우
|
|
73
|
+
- AI 세션 시작마다 **같은 컨텍스트를 반복 설명**하는 경우
|
|
74
|
+
- AI 도구가 현재 파일뿐 아니라 **컨벤션, 아키텍처, 도메인 지식**도 알길 원하는 경우
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
- **요구 사항:** Node.js 20+
|
|
75
|
-
|
|
76
|
-
소스 기반 개발은 [docs/local-development.ko.md](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.ko.md)를 참고하세요.
|
|
76
|
+
레포 하나, 제품 하나에서만 일한다면 굳이 이 도구가 필요 없습니다. `CLAUDE.md`나 `.cursorrules`로 충분합니다.
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
80
|
-
##
|
|
80
|
+
## CLAUDE.md나 cursor rules와 뭐가 다른가요?
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
`CLAUDE.md`는 훌륭합니다 — 레포 하나에서는요.
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
gctree checkout -b client-b
|
|
86
|
-
gctree onboard
|
|
87
|
-
```
|
|
84
|
+
여러 레포, 고객사, 워크스트림이 생기는 순간:
|
|
88
85
|
|
|
89
|
-
|
|
86
|
+
| | `CLAUDE.md` / cursor rules | `gc-tree` |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| 범위 | 레포 하나 | 여러 레포, 컨텍스트 하나 |
|
|
89
|
+
| 지속성 | 레포 내 파일 | 레포 밖 저장, 세션 간 재사용 |
|
|
90
|
+
| 컨텍스트 전환 | 파일 직접 수정 | `gctree checkout client-b` |
|
|
91
|
+
| 관련성 필터링 | 전부 아니면 없음 | 매칭 문서만 주입 (~4%) |
|
|
92
|
+
| 온보딩 | 손으로 작성 | AI 도구가 가이드 |
|
|
93
|
+
| Codex 지원 | ✅ | ✅ |
|
|
94
|
+
| Claude Code 지원 | ✅ | ✅ |
|
|
90
95
|
|
|
91
|
-
|
|
96
|
+
---
|
|
92
97
|
|
|
93
|
-
|
|
94
|
-
gctree update-global-context
|
|
95
|
-
```
|
|
98
|
+
## 검증된 성능
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
실제 내부 문서 기준 테스트 (Notion 내보내기 4종, 한국어 + 영어 혼합 쿼리):
|
|
98
101
|
|
|
99
|
-
|
|
102
|
+
| 지표 | 결과 |
|
|
103
|
+
|---|---|
|
|
104
|
+
| Recall — 관련 쿼리가 올바른 문서를 찾는 비율 | **100%** (16/16) |
|
|
105
|
+
| Precision — 무관 쿼리가 빈 결과를 반환하는 비율 | **80%** (4/5) |
|
|
106
|
+
| F1 점수 | **88.9%** |
|
|
107
|
+
| 쿼리당 주입 토큰 비율 (전체 컨텍스트 대비) | **~4%** |
|
|
108
|
+
| 한국어 + 영어 혼합 쿼리 지원 | ✅ |
|
|
100
109
|
|
|
101
|
-
|
|
102
|
-
gctree update-gc
|
|
103
|
-
gctree ugc
|
|
104
|
-
```
|
|
110
|
+
---
|
|
105
111
|
|
|
106
|
-
|
|
112
|
+
## Claude Code와 Codex 양쪽 모두 검증 완료
|
|
107
113
|
|
|
108
114
|
```bash
|
|
109
|
-
gctree
|
|
115
|
+
gctree scaffold --host claude-code # CLAUDE.md 스니펫 + /gc-onboard, /gc-update-global-context 설치
|
|
116
|
+
gctree scaffold --host codex # AGENTS.md 스니펫 + $gc-onboard, $gc-update-global-context 설치
|
|
117
|
+
gctree scaffold --host both # 둘 다 한번에
|
|
110
118
|
```
|
|
111
119
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
---
|
|
120
|
+
두 프로바이더 모두 동일한 컨텍스트 저장소를 씁니다. 한 번 온보딩하면 어느 도구에서든 사용 가능.
|
|
115
121
|
|
|
116
|
-
|
|
122
|
+
**Claude Code** — `/gc-resolve-context`, `/gc-onboard`, `/gc-update-global-context` 슬래시 커맨드 사용.
|
|
117
123
|
|
|
118
|
-
**
|
|
124
|
+
**Codex** — `$gc-resolve-context`, `$gc-onboard`, `$gc-update-global-context` 스킬 사용. `codex exec`으로 직접 검증됨:
|
|
119
125
|
|
|
120
|
-
|
|
126
|
+
```
|
|
127
|
+
gctree status → gc_branch: main, doc_count: 2
|
|
128
|
+
gctree resolve --query 'NestJS DTO plainToInstance'
|
|
129
|
+
→ "백엔드 코딩 컨벤션" 매칭 (score: 3)
|
|
130
|
+
→ DTO: class-transformer plainToInstance, class-validator 필수
|
|
131
|
+
→ 에러 처리: HttpException 기반 커스텀 예외, raw Error throw 금지
|
|
132
|
+
```
|
|
121
133
|
|
|
122
|
-
|
|
123
|
-
- 제품 라인
|
|
124
|
-
- 플랫폼 팀
|
|
125
|
-
- 함께 움직이는 백엔드 + 프론트엔드 스택
|
|
126
|
-
- 일시적인 이니셔티브나 마이그레이션
|
|
134
|
+
---
|
|
127
135
|
|
|
128
|
-
|
|
136
|
+
## 설치 & 빠른 시작
|
|
129
137
|
|
|
130
138
|
```bash
|
|
131
|
-
|
|
132
|
-
gctree
|
|
139
|
+
npm install -g @handsupmin/gc-tree
|
|
140
|
+
gctree init
|
|
133
141
|
```
|
|
134
142
|
|
|
135
|
-
|
|
143
|
+
`gctree init`이 안내합니다:
|
|
144
|
+
1. 프로바이더 선택: `claude-code`, `codex`, 또는 `both`
|
|
145
|
+
2. 현재 레포에 통합 파일 스캐폴딩
|
|
146
|
+
3. `main` gc-branch 가이드형 온보딩 실행
|
|
136
147
|
|
|
137
|
-
|
|
148
|
+
이후 AI 도구가 계획·구현 전에 `gctree resolve`를 호출하는 법을 자동으로 알게 됩니다.
|
|
138
149
|
|
|
139
|
-
|
|
150
|
+
- **CLI:** `gctree`
|
|
151
|
+
- **요구 사항:** Node.js 20+
|
|
140
152
|
|
|
141
153
|
---
|
|
142
154
|
|
|
143
|
-
##
|
|
144
|
-
|
|
145
|
-
예를 들어 이런 식으로 일한다고 해봅시다.
|
|
155
|
+
## 자주 쓰는 흐름
|
|
146
156
|
|
|
147
|
-
|
|
148
|
-
- 고객사 레포 두 개
|
|
149
|
-
- 사내 툴링 레포 하나
|
|
157
|
+
### 워크스트림마다 별도 컨텍스트
|
|
150
158
|
|
|
151
|
-
|
|
159
|
+
```bash
|
|
160
|
+
gctree checkout -b client-b
|
|
161
|
+
gctree onboard
|
|
162
|
+
```
|
|
152
163
|
|
|
153
|
-
-
|
|
154
|
-
- 어떤 레포들이 한 묶음인지
|
|
155
|
-
- 여기서 중요한 워크플로가 뭔지
|
|
156
|
-
- 지금은 어떤 컨텍스트가 오히려 방해가 되는지
|
|
164
|
+
각 gc-branch는 완전히 독립된 컨텍스트 레인입니다. Git 브랜치처럼 오갈 수 있습니다.
|
|
157
165
|
|
|
158
|
-
|
|
166
|
+
### 필요할 때 관련 컨텍스트 가져오기
|
|
159
167
|
|
|
160
|
-
|
|
168
|
+
```bash
|
|
169
|
+
gctree resolve --query "billing retry policy"
|
|
170
|
+
```
|
|
161
171
|
|
|
162
|
-
|
|
163
|
-
> **일의 단위에 맞는 컨텍스트를 올바른 레벨에서 관리하는 것.**
|
|
172
|
+
매칭된 문서만 반환합니다 — 제목, 요약, 발췌문. 요약만으로 부족할 때만 전체 문서를 읽습니다.
|
|
164
173
|
|
|
165
|
-
|
|
174
|
+
### 컨텍스트 최신 상태 유지
|
|
166
175
|
|
|
167
|
-
|
|
176
|
+
```bash
|
|
177
|
+
gctree update-global-context # 또는: gctree update-gc / gctree ugc
|
|
178
|
+
```
|
|
168
179
|
|
|
169
|
-
|
|
170
|
-
제품, 고객사, 워크스트림, 도메인 하나를 위한 장기 컨텍스트 레인입니다.
|
|
180
|
+
가이드형 업데이트 플로우 — AI 도구가 무엇이 바뀌었는지 물어보고 새 컨텍스트를 gc-branch에 씁니다.
|
|
171
181
|
|
|
172
|
-
|
|
173
|
-
어떤 레포에서 이 컨텍스트를 적용할지 결정하는 규칙입니다.
|
|
182
|
+
### 특정 레포에 컨텍스트 범위 지정
|
|
174
183
|
|
|
175
|
-
|
|
176
|
-
|
|
184
|
+
```bash
|
|
185
|
+
gctree set-repo-scope --branch client-b --include # 현재 레포 포함
|
|
186
|
+
gctree set-repo-scope --branch client-b --exclude # 현재 레포 제외
|
|
187
|
+
```
|
|
177
188
|
|
|
178
|
-
|
|
179
|
-
내부적으로 `gc-tree`는 브랜치 단위의 파일 기반 지식 트리로 컨텍스트를 관리합니다.
|
|
180
|
-
사용자가 체감하는 가치는 결국 프로젝트 밖까지 이어지는 재사용 가능한 컨텍스트입니다.
|
|
189
|
+
관계없는 레포에는 컨텍스트가 주입되지 않습니다.
|
|
181
190
|
|
|
182
191
|
---
|
|
183
192
|
|
|
184
|
-
##
|
|
185
|
-
|
|
186
|
-
스캐폴딩 이후 런타임에서 보이는 명령은 다음과 같습니다.
|
|
193
|
+
## 컨텍스트 저장 구조
|
|
187
194
|
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
```
|
|
196
|
+
~/.gctree/
|
|
197
|
+
branches/
|
|
198
|
+
main/
|
|
199
|
+
index.md ← 압축 인덱스, ≤2000자, 먼저 로드됨
|
|
200
|
+
docs/
|
|
201
|
+
auth.md ← 전체 문서, 필요할 때만 읽음
|
|
202
|
+
architecture.md
|
|
203
|
+
client-b/
|
|
204
|
+
index.md
|
|
205
|
+
docs/
|
|
206
|
+
...
|
|
207
|
+
branch-repo-map.json ← 어떤 레포가 어떤 gc-branch에 속하는지
|
|
208
|
+
settings.json ← 선호 프로바이더, 언어
|
|
209
|
+
```
|
|
190
210
|
|
|
191
|
-
|
|
211
|
+
컨텍스트는 레포 밖에 저장됩니다 — `.gitignore` 규칙 불필요, 실수로 커밋될 일 없음, 같은 gc-branch를 쓰는 모든 프로젝트에서 재사용 가능.
|
|
192
212
|
|
|
193
213
|
---
|
|
194
214
|
|
|
195
|
-
## 핵심 명령
|
|
215
|
+
## 핵심 명령
|
|
196
216
|
|
|
197
217
|
| 목적 | 명령 |
|
|
198
|
-
|
|
199
|
-
| gc-tree 초기화 및
|
|
200
|
-
|
|
|
218
|
+
|---|---|
|
|
219
|
+
| gc-tree 초기화 및 프로바이더 선택 | `gctree init` |
|
|
220
|
+
| 활성 gc-branch 확인 | `gctree status` |
|
|
201
221
|
| 활성 컨텍스트 검색 | `gctree resolve --query "..."` |
|
|
222
|
+
| gc-branch 생성 또는 전환 | `gctree checkout <branch>` / `gctree checkout -b <branch>` |
|
|
223
|
+
| 모든 gc-branch 목록 | `gctree branches` |
|
|
224
|
+
| 빈 gc-branch 가이드형 온보딩 | `gctree onboard` |
|
|
225
|
+
| 활성 gc-branch 가이드형 업데이트 | `gctree update-global-context` / `gctree ugc` |
|
|
202
226
|
| 레포 범위 규칙 확인 | `gctree repo-map` |
|
|
203
|
-
|
|
|
204
|
-
| gc-branch
|
|
205
|
-
|
|
|
206
|
-
| 활성 gc-branch 장기 업데이트 | `gctree update-global-context` / `gctree update-gc` / `gctree ugc` |
|
|
207
|
-
| 다시 온보딩하기 전 gc-branch 초기화 | `gctree reset-gc-branch --branch <name> --yes` |
|
|
208
|
-
| 다른 환경에 수동 스캐폴딩 | `gctree scaffold --host codex --target /path/to/repo` |
|
|
227
|
+
| 현재 레포 포함/제외 설정 | `gctree set-repo-scope --branch <name> --include` / `--exclude` |
|
|
228
|
+
| 재온보딩 전 gc-branch 초기화 | `gctree reset-gc-branch --branch <name> --yes` |
|
|
229
|
+
| 새 환경 스캐폴딩 | `gctree scaffold --host codex --target /path/to/repo` |
|
|
209
230
|
|
|
210
231
|
---
|
|
211
232
|
|
|
212
233
|
## 문서
|
|
213
234
|
|
|
214
|
-
자세한 문서는 [`docs/`](https://github.com/handsupmin/gc-tree/tree/main/docs) 아래에 정리되어 있습니다.
|
|
215
|
-
|
|
216
235
|
- **컨셉** — [`docs/concept.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/concept.ko.md)
|
|
217
|
-
`gctree`가 무엇인지, 어떤 문제를 해결하는지, 글로벌 컨텍스트 레이어의 범위를 설명합니다.
|
|
218
236
|
- **원리** — [`docs/principles.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/principles.ko.md)
|
|
219
|
-
gc-branch, 레포 범위, slim index, summary-first 문서, 가이드형 업데이트 원칙을 정리합니다.
|
|
220
237
|
- **사용방법** — [`docs/usage.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/usage.ko.md)
|
|
221
|
-
|
|
222
|
-
- **로컬 실행방법** — [`docs/local-development.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.ko.md)
|
|
223
|
-
의존성 설치, 로컬 CLI 실행, 변경 검증 방법을 설명합니다.
|
|
238
|
+
- **로컬 개발** — [`docs/local-development.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.ko.md)
|
|
224
239
|
|
|
225
240
|
---
|
|
226
241
|
|
|
227
242
|
## 기여하기
|
|
228
243
|
|
|
229
|
-
기여는 언제든 환영합니다. 개발 흐름과 PR 체크리스트는
|
|
244
|
+
기여는 언제든 환영합니다. 개발 흐름과 PR 체크리스트는 [CONTRIBUTING.md](https://github.com/handsupmin/gc-tree/blob/main/CONTRIBUTING.md)를 참고하세요.
|
|
230
245
|
|
|
231
246
|
---
|
|
232
247
|
|
|
233
248
|
## 라이선스
|
|
234
249
|
|
|
235
|
-
MIT.
|
|
250
|
+
MIT. [`LICENSE`](https://github.com/handsupmin/gc-tree/blob/main/LICENSE) 참고.
|