@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.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
- ## 왜 gc-tree인가요?
24
+ ## 문제
29
25
 
30
- AI 에이전트를 진짜 실무에 쓰기 시작하면 repo-local context만으로는 금방 한계가 옵니다.
26
+ Claude Code나 Codex를 매일 씁니다. 그런데 실제 업무는 여러 레포, 제품, 고객사에 걸쳐 있고 — AI 도구는 현재 파일밖에 모릅니다.
31
27
 
32
- 작업이 여러 레포와 여러 워크스트림으로 퍼지기 시작하면 보통 이런 문제가 생깁니다.
28
+ 그래서 매번 이렇게 됩니다:
33
29
 
34
- - 장기 컨텍스트가 프롬프트 안으로 계속 밀려 들어감
35
- - 상관없는 컨텍스트가 다른 레포까지 새어 나감
36
- - 세션을 때마다 같은 설명을 또 해야 함
37
- - 고객사나 제품 지식이 채팅 기록 속에만 숨어 있음
38
- - 작업 전환 때마다 사람 머리로 컨텍스트 스위칭을 직접 해야 함
30
+ - 어떤 레포들이 묶음인지 다시 설명
31
+ - 같은 아키텍처 문서를 프롬프트에 붙여넣기
32
+ - 지난주에 "이미 알던" 컨벤션을 다시 알려주기
33
+ - 현재 레포와 무관한 컨텍스트를 손으로 걷어내기
39
34
 
40
- `gc-tree`는 Codex, Claude Code 같은 AI 코딩 도구를 이미 깊게 쓰고 있고, 이제는 컨텍스트 관리까지 수작업으로 하고 싶지 않은 사람을 위한 도구입니다.
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
- - **summary-first markdown 지식 구조**
59
- 숨겨진 메모리가 아니라 파일에 남기고, 도구는 먼저 짧은 요약부터 읽게 할 수 있습니다.
63
+ **실제로: 쿼리당 전체 컨텍스트의 ~4%만 주입됩니다.** 나머지 96%는 실제로 필요할 때까지 디스크에 남아 토큰 윈도우 밖에 있습니다.
60
64
 
61
65
  ---
62
66
 
63
- ## 설치 & 빠른 시작
67
+ ## 도구가 맞는 사람
64
68
 
65
- ```bash
66
- npm install -g @handsupmin/gc-tree
67
- gctree init
68
- ```
69
+ 다음에 해당하면 gc-tree를 제일 잘 쓸 수 있습니다:
69
70
 
70
- 정도면 시작 준비는 끝입니다.
71
- 그다음부터는 원래 하던 방식대로 개발하면 됩니다. `gc-tree`가 평소 워크플로 바깥에서 글로벌 컨텍스트만 붙여줍니다.
71
+ - **여러 레포**에 걸쳐 일하는 경우 (모노레포 팀, 플랫폼 + 클라이언트 레포, 백엔드 + 프론트엔드 스택)
72
+ - 같은 주에 **여러 제품이나 고객사** 사이를 오가는 경우
73
+ - AI 세션 시작마다 **같은 컨텍스트를 반복 설명**하는 경우
74
+ - AI 도구가 현재 파일뿐 아니라 **컨벤션, 아키텍처, 도메인 지식**도 알길 원하는 경우
72
75
 
73
- - **CLI 명령어:** `gctree`
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
- ```bash
85
- gctree checkout -b client-b
86
- gctree onboard
87
- ```
84
+ 여러 레포, 고객사, 워크스트림이 생기는 순간:
88
85
 
89
- 고객사, 제품, 마이그레이션, 특정 이니셔티브처럼 별도 맥락이 필요한 일은 gc-branch를 따로 파두면 됩니다.
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
- ```bash
94
- gctree update-global-context
95
- ```
98
+ ## 검증된 성능
96
99
 
97
- 작업이 쌓이면 활성 gc-branch에 장기 컨텍스트를 덧붙이세요.
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
- ```bash
102
- gctree update-gc
103
- gctree ugc
104
- ```
110
+ ---
105
111
 
106
- ### 필요할 때만 컨텍스트 불러오기
112
+ ## Claude Code와 Codex 양쪽 모두 검증 완료
107
113
 
108
114
  ```bash
109
- gctree resolve --query "auth token rotation"
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
- **Git 브랜치처럼 여러 컨텍스트를 유지하되, Git 브랜치처럼 매번 신경 필요는 없습니다.**
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
- gctree checkout -b client-b
132
- gctree checkout main
139
+ npm install -g @handsupmin/gc-tree
140
+ gctree init
133
141
  ```
134
142
 
135
- 하지만 Git과 달리, 이 전환을 사용자가 계속 수동으로 챙길 필요는 없습니다.
143
+ `gctree init`이 안내합니다:
144
+ 1. 프로바이더 선택: `claude-code`, `codex`, 또는 `both`
145
+ 2. 현재 레포에 통합 파일 스캐폴딩
146
+ 3. `main` gc-branch 가이드형 온보딩 실행
136
147
 
137
- 현재 들어와 있는 레포가 활성 컨텍스트의 범위 밖이라면, `gc-tree`는 컨텍스트를 관련 없는 것으로 판단하고 조용히 비켜날 수 있습니다. 덕분에 상관없는 컨텍스트가 엉뚱한 세션으로 새지 않습니다.
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
- `gc-tree`가 없으면 새 AI 세션을 열 때마다 다시 설명해야 합니다.
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
- `gc-tree`가 있으면 레인별로 컨텍스트를 따로 유지하고, 세션을 바꿔도 재사용하고, repo scope 규칙으로 불필요한 컨텍스트 유입도 막을 수 있습니다.
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
- - **gc-branch**
170
- 제품, 고객사, 워크스트림, 도메인 하나를 위한 장기 컨텍스트 레인입니다.
180
+ 가이드형 업데이트 플로우 — AI 도구가 무엇이 바뀌었는지 물어보고 새 컨텍스트를 gc-branch에 씁니다.
171
181
 
172
- - **repo scope**
173
- 어떤 레포에서 이 컨텍스트를 적용할지 결정하는 규칙입니다.
182
+ ### 특정 레포에 컨텍스트 범위 지정
174
183
 
175
- - **provider-guided flow**
176
- JSON을 손으로 쓰는 대신, 선호하는 AI 코딩 도구를 통해 온보딩과 업데이트를 진행하는 방식입니다.
184
+ ```bash
185
+ gctree set-repo-scope --branch client-b --include # 현재 레포 포함
186
+ gctree set-repo-scope --branch client-b --exclude # 현재 레포 제외
187
+ ```
177
188
 
178
- - **context tree**
179
- 내부적으로 `gc-tree`는 브랜치 단위의 파일 기반 지식 트리로 컨텍스트를 관리합니다.
180
- 사용자가 체감하는 가치는 결국 프로젝트 밖까지 이어지는 재사용 가능한 컨텍스트입니다.
189
+ 관계없는 레포에는 컨텍스트가 주입되지 않습니다.
181
190
 
182
191
  ---
183
192
 
184
- ## 런타임에서 보이는 provider 명령
185
-
186
- 스캐폴딩 이후 런타임에서 보이는 명령은 다음과 같습니다.
193
+ ## 컨텍스트 저장 구조
187
194
 
188
- - **Codex:** `$gc-onboard`, `$gc-update-global-context`
189
- - **Claude Code:** `/gc-onboard`, `/gc-update-global-context`
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
- 명령들은 항상 현재 활성 gc-branch가 무엇인지 먼저 밝히고, 사용자가 명시적으로 바꾸라고 하지 않는 저장된 언어를 유지한 채 장기 컨텍스트를 수집하거나 업데이트해야 합니다.
211
+ 컨텍스트는 레포 밖에 저장됩니다 `.gitignore` 규칙 불필요, 실수로 커밋될 없음, 같은 gc-branch를 쓰는 모든 프로젝트에서 재사용 가능.
192
212
 
193
213
  ---
194
214
 
195
- ## 핵심 명령 한눈에 보기
215
+ ## 핵심 명령
196
216
 
197
217
  | 목적 | 명령 |
198
- | --- | --- |
199
- | gc-tree 초기화 및 provider 선택 | `gctree init` |
200
- | 현재 gc-branch 확인 | `gctree status` |
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
- | gc-branch에 레포 포함/제외 설정 | `gctree set-repo-scope --branch <name> --include` / `--exclude` |
204
- | gc-branch 생성/전환 | `gctree checkout <branch>` / `gctree checkout -b <branch>` |
205
- | 비어 있는 gc-branch 온보딩 | `gctree onboard` |
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
- 표준 CLI 흐름, provider 명령, 레포 범위 동작, 통합 패턴을 안내합니다.
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 체크리스트는 영어 문서인 [CONTRIBUTING.md](https://github.com/handsupmin/gc-tree/blob/main/CONTRIBUTING.md)를 참고해주세요.
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. 자세한 내용은 [`LICENSE`](https://github.com/handsupmin/gc-tree/blob/main/LICENSE) 참고하세요.
250
+ MIT. [`LICENSE`](https://github.com/handsupmin/gc-tree/blob/main/LICENSE) 참고.