@handsupmin/gc-tree 0.1.3 → 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
@@ -1,166 +1,250 @@
1
1
  # gc-tree
2
2
 
3
- AI 코딩 도구를 위한 브랜치 기반 글로벌 컨텍스트 레이어.
3
+ <div align="center">
4
+
5
+ <img src="./logo.png" alt="gc-tree 로고" width="260" />
6
+
7
+ ### 프로젝트 밖까지 이어지는 글로벌 컨텍스트.
8
+
9
+ 기존 AI 도구 위에 오래 가는, 재사용 가능한 컨텍스트 레이어를 얹어보세요.
10
+ Git 브랜치 다루듯 여러 컨텍스트를 나눠 관리할 수 있습니다.
11
+
12
+ [![npm version](https://img.shields.io/npm/v/%40handsupmin%2Fgc-tree)](https://www.npmjs.com/package/@handsupmin/gc-tree)
13
+ [![npm downloads](https://img.shields.io/npm/dm/%40handsupmin%2Fgc-tree)](https://www.npmjs.com/package/@handsupmin/gc-tree)
14
+ [![GitHub stars](https://img.shields.io/github/stars/handsupmin/gc-tree)](https://github.com/handsupmin/gc-tree/stargazers)
15
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/handsupmin/gc-tree/blob/main/LICENSE)
16
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)
4
17
 
5
18
  [English](https://github.com/handsupmin/gc-tree/blob/main/README.md) | [한국어](https://github.com/handsupmin/gc-tree/blob/main/README.ko.md) | [简体中文](https://github.com/handsupmin/gc-tree/blob/main/README.zh.md) | [日本語](https://github.com/handsupmin/gc-tree/blob/main/README.ja.md) | [Español](https://github.com/handsupmin/gc-tree/blob/main/README.es.md)
6
19
 
7
- ## 소개
20
+ </div>
8
21
 
9
- `gctree`는 AI 코딩 도구를 위한 가벼운 **Global Context Tree**입니다.
10
- 장기적으로 유지해야 하는 컨텍스트를 파일 기반으로 명시적으로 관리할 수 있게 해주며, 브랜치 단위로 분리해서 기존 워크플로에 자연스럽게 붙일 수 있습니다.
22
+ ---
11
23
 
12
- 하나의 `AGENTS.md`, `CLAUDE.md`, 혹은 짧은 프롬프트 파일만으로는 부족해질 때 `gctree`는 다음을 도와줍니다.
24
+ ## 문제
13
25
 
14
- - 제품, 고객사, 업무 트랙별로 컨텍스트를 분리하기
15
- - 숨겨진 메모리 대신 markdown 기반의 source-of-truth 문서로 관리하기
16
- - 작은 인덱스와 summary-first 문서 구조로 필요한 컨텍스트를 빠르게 찾기
17
- - 선호하는 LLM CLI를 통해 온보딩과 장기 업데이트를 진행하기
18
- - 특정 gc-branch가 실제로 관련 있는 레포에만 적용되게 하기
26
+ Claude Code나 Codex를 매일 씁니다. 그런데 실제 업무는 여러 레포, 제품, 고객사에 걸쳐 있고 AI 도구는 현재 파일밖에 모릅니다.
19
27
 
20
- ## 간단 특징
28
+ 그래서 매번 이렇게 됩니다:
21
29
 
22
- - **Provider 기반 온보딩**
23
- `gctree init`은 `claude-code`, `codex`, `both` 어떤 provider 모드를 쓸지 묻고, 이어서 응답 언어를 고르게 한 뒤, 그 선택을 저장하고 필요한 명령 표면을 스캐폴딩한 다음 기본 `main` gc-branch 온보딩을 시작합니다.
24
- - **레포 범위 인식 gc-branch**
25
- `~/.gctree/branch-repo-map.json`을 통해 하나의 gc-branch를 특정 레포 집합에만 연결할 수 있습니다. 예를 들어 A는 B/C/D에만 적용하고 F에서는 무시하게 만들 수 있습니다.
26
- - **인터랙티브 범위 가드**
27
- `gctree resolve`가 현재 레포가 아직 이 gc-branch에 매핑되지 않았다고 판단하면, 이번만 진행할지 / 항상 사용할지 / 여기서는 무시할지를 물어볼 수 있습니다.
28
- - **Summary-first 문서 구조**
29
- 도구가 먼저 짧은 요약을 읽고, 필요할 때만 본문을 확장해서 읽을 수 있습니다.
30
- - **가이드형 장기 업데이트**
31
- JSON 파일을 직접 만들지 않아도 같은 provider 흐름으로 글로벌 컨텍스트를 갱신할 수 있습니다.
30
+ - 어떤 레포들이 한 묶음인지 다시 설명
31
+ - 같은 아키텍처 문서를 프롬프트에 붙여넣기
32
+ - 지난주에 "이미 알던" 컨벤션을 다시 알려주기
33
+ - 현재 레포와 무관한 컨텍스트를 손으로 걷어내기
32
34
 
33
- ## 설치 빠른 시작
35
+ 이건 AI 문제가 아닙니다. **컨텍스트 관리 문제**입니다.
34
36
 
35
- ### npm으로 설치
37
+ ---
36
38
 
37
- ```bash
38
- npm install -g @handsupmin/gc-tree
39
- ```
39
+ ## gc-tree가 하는 일
40
40
 
41
- 글로벌 설치 없이 번만 실행하려면:
41
+ `gc-tree`는 **레포 레벨**에 위치합니다. 컨텍스트를 구조화된 마크다운 파일에 저장하고, AI 도구가 매 세션마다 관련된 것만 자동으로 가져오게 합니다.
42
42
 
43
43
  ```bash
44
- npx @handsupmin/gc-tree init
44
+ gctree resolve --query "auth token rotation policy"
45
45
  ```
46
46
 
47
- - **패키지 이름:** `@handsupmin/gc-tree`
48
- - **CLI 명령어:** `gctree`
49
- - **요구 사항:** Node.js 20+
50
- 소스 기반 개발은 [docs/local-development.md](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.md)를 참고하세요.
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
+ ```
51
60
 
52
- ### 빠른 시작
61
+ AI 도구가 올바른 컨텍스트를 가져옵니다. 지식 베이스 전체가 아니라 — 관련된 조각만.
53
62
 
54
- #### 1) gc-tree 초기화
63
+ **실제로: 쿼리당 전체 컨텍스트의 ~4%만 주입됩니다.** 나머지 96%는 실제로 필요할 때까지 디스크에 남아 토큰 윈도우 밖에 있습니다.
55
64
 
56
- ```bash
57
- gctree init
58
- ```
65
+ ---
66
+
67
+ ## 이 도구가 맞는 사람
68
+
69
+ 다음에 해당하면 gc-tree를 제일 잘 쓸 수 있습니다:
70
+
71
+ - **여러 레포**에 걸쳐 일하는 경우 (모노레포 팀, 플랫폼 + 클라이언트 레포, 백엔드 + 프론트엔드 스택)
72
+ - 같은 주에 **여러 제품이나 고객사** 사이를 오가는 경우
73
+ - AI 세션 시작마다 **같은 컨텍스트를 반복 설명**하는 경우
74
+ - AI 도구가 현재 파일뿐 아니라 **컨벤션, 아키텍처, 도메인 지식**도 알길 원하는 경우
75
+
76
+ 레포 하나, 제품 하나에서만 일한다면 굳이 이 도구가 필요 없습니다. `CLAUDE.md`나 `.cursorrules`로 충분합니다.
77
+
78
+ ---
79
+
80
+ ## CLAUDE.md나 cursor rules와 뭐가 다른가요?
81
+
82
+ `CLAUDE.md`는 훌륭합니다 — 레포 하나에서는요.
83
+
84
+ 여러 레포, 고객사, 워크스트림이 생기는 순간:
85
+
86
+ | | `CLAUDE.md` / cursor rules | `gc-tree` |
87
+ |---|---|---|
88
+ | 범위 | 레포 하나 | 여러 레포, 컨텍스트 하나 |
89
+ | 지속성 | 레포 내 파일 | 레포 밖 저장, 세션 간 재사용 |
90
+ | 컨텍스트 전환 | 파일 직접 수정 | `gctree checkout client-b` |
91
+ | 관련성 필터링 | 전부 아니면 없음 | 매칭 문서만 주입 (~4%) |
92
+ | 온보딩 | 손으로 작성 | AI 도구가 가이드 |
93
+ | Codex 지원 | ✅ | ✅ |
94
+ | Claude Code 지원 | ✅ | ✅ |
95
+
96
+ ---
97
+
98
+ ## 검증된 성능
99
+
100
+ 실제 내부 문서 기준 테스트 (Notion 내보내기 4종, 한국어 + 영어 혼합 쿼리):
59
101
 
60
- 명령은 다음을 수행합니다.
102
+ | 지표 | 결과 |
103
+ |---|---|
104
+ | Recall — 관련 쿼리가 올바른 문서를 찾는 비율 | **100%** (16/16) |
105
+ | Precision — 무관 쿼리가 빈 결과를 반환하는 비율 | **80%** (4/5) |
106
+ | F1 점수 | **88.9%** |
107
+ | 쿼리당 주입 토큰 비율 (전체 컨텍스트 대비) | **~4%** |
108
+ | 한국어 + 영어 혼합 쿼리 지원 | ✅ |
61
109
 
62
- - `~/.gctree` 생성
63
- - 기본 `main` gc-branch 생성
64
- - 사용할 provider 모드(`claude-code`, `codex`, `both`) 선택
65
- - `both`를 고르면 이번 온보딩을 어느 provider로 시작할지 한 번 더 선택
66
- - 사용할 언어(`English`, `Korean`, 또는 직접 입력한 언어) 선택
67
- - provider 모드, 실제 온보딩 provider, 언어를 `~/.gctree/settings.json`에 저장
68
- - 현재 환경에 맞는 명령 표면 스캐폴딩
69
- - `main`이 비어 있으면 활성 gc-branch에 대한 가이드형 온보딩 시작
110
+ ---
70
111
 
71
- #### 2) 현재 컨텍스트 조회
112
+ ## Claude Code와 Codex 양쪽 모두 검증 완료
72
113
 
73
114
  ```bash
74
- 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 # 둘 다 한번에
75
118
  ```
76
119
 
77
- 만약 현재 레포가 gc-branch의 매핑 범위 밖이라면, `gctree`는 다음 하나를 고르게 할 수 있습니다.
120
+ 프로바이더 모두 동일한 컨텍스트 저장소를 씁니다. 온보딩하면 어느 도구에서든 사용 가능.
78
121
 
79
- 1. 이번만 진행
80
- 2. 이 레포에서 항상 이 gc-branch 사용
81
- 3. 이 레포에서는 이 gc-branch 무시
122
+ **Claude Code** — `/gc-resolve-context`, `/gc-onboard`, `/gc-update-global-context` 슬래시 커맨드 사용.
82
123
 
83
- 2번 또는 3번을 고르면 `~/.gctree/branch-repo-map.json`이 갱신됩니다.
124
+ **Codex** `$gc-resolve-context`, `$gc-onboard`, `$gc-update-global-context` 스킬 사용. `codex exec`으로 직접 검증됨:
84
125
 
85
- #### 3) 별도 컨텍스트가 필요하면 새 gc-branch 생성
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
+ ```
133
+
134
+ ---
135
+
136
+ ## 설치 & 빠른 시작
86
137
 
87
138
  ```bash
88
- gctree checkout -b client-b
139
+ npm install -g @handsupmin/gc-tree
140
+ gctree init
89
141
  ```
90
142
 
91
- `checkout -b`는 **새로운 빈 gc-branch**를 만듭니다. 기존 브랜치 문서를 복사하지 않습니다.
143
+ `gctree init`이 안내합니다:
144
+ 1. 프로바이더 선택: `claude-code`, `codex`, 또는 `both`
145
+ 2. 현재 레포에 통합 파일 스캐폴딩
146
+ 3. `main` gc-branch 가이드형 온보딩 실행
147
+
148
+ 이후 AI 도구가 계획·구현 전에 `gctree resolve`를 호출하는 법을 자동으로 알게 됩니다.
149
+
150
+ - **CLI:** `gctree`
151
+ - **요구 사항:** Node.js 20+
152
+
153
+ ---
154
+
155
+ ## 자주 쓰는 흐름
92
156
 
93
- #### 4) 비어 있는 gc-branch를 온보딩
157
+ ### 워크스트림마다 별도 컨텍스트
94
158
 
95
159
  ```bash
160
+ gctree checkout -b client-b
96
161
  gctree onboard
97
162
  ```
98
163
 
99
- #### 5) 나중에 장기 컨텍스트 업데이트
164
+ gc-branch는 완전히 독립된 컨텍스트 레인입니다. Git 브랜치처럼 오갈 수 있습니다.
165
+
166
+ ### 필요할 때 관련 컨텍스트 가져오기
100
167
 
101
168
  ```bash
102
- gctree update-global-context
169
+ gctree resolve --query "billing retry policy"
103
170
  ```
104
171
 
105
- 짧은 별칭:
172
+ 매칭된 문서만 반환합니다 — 제목, 요약, 발췌문. 요약만으로 부족할 때만 전체 문서를 읽습니다.
173
+
174
+ ### 컨텍스트 최신 상태 유지
106
175
 
107
176
  ```bash
108
- gctree update-gc
109
- gctree ugc
177
+ gctree update-global-context # 또는: gctree update-gc / gctree ugc
110
178
  ```
111
179
 
112
- 만약 실제 작업을 하다 보니 어떤 레포가 현재 gc-branch에 포함되어야 할 것 같다면, 자연스러운 흐름은 이렇습니다.
180
+ 가이드형 업데이트 플로우 AI 도구가 무엇이 바뀌었는지 물어보고 새 컨텍스트를 gc-branch에 씁니다.
113
181
 
114
- 1. 먼저 레포를 branch repo map에 포함시키고
115
- 2. 그 다음 `gctree update-global-context`로 이 레포가 어떤 역할을 하는지, 왜 중요한지 같은 장기 컨텍스트를 추가
116
-
117
- #### 6) 다시 온보딩하려면 먼저 gc-branch 리셋
182
+ ### 특정 레포에 컨텍스트 범위 지정
118
183
 
119
184
  ```bash
120
- gctree reset-gc-branch --branch client-b --yes
185
+ gctree set-repo-scope --branch client-b --include # 현재 레포 포함
186
+ gctree set-repo-scope --branch client-b --exclude # 현재 레포 제외
121
187
  ```
122
188
 
123
- ### 런타임에서 보이는 provider 명령
189
+ 관계없는 레포에는 컨텍스트가 주입되지 않습니다.
190
+
191
+ ---
192
+
193
+ ## 컨텍스트 저장 구조
124
194
 
125
- 스캐폴딩 이후 런타임에서 보이는 명령은 다음과 같습니다.
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
+ ```
126
210
 
127
- - **Codex:** `$gc-onboard`, `$gc-update-global-context`
128
- - **Claude Code:** `/gc-onboard`, `/gc-update-global-context`
211
+ 컨텍스트는 레포 밖에 저장됩니다 — `.gitignore` 규칙 불필요, 실수로 커밋될 일 없음, 같은 gc-branch를 쓰는 모든 프로젝트에서 재사용 가능.
129
212
 
130
- 이 명령들은 항상 현재 활성 gc-branch가 무엇인지 먼저 밝히고, 사용자가 명시적으로 바꾸라고 하지 않는 한 저장된 언어를 끝까지 유지하면서 컨텍스트를 수집하거나 업데이트해야 합니다.
213
+ ---
131
214
 
132
- ### 핵심 명령 한눈에 보기
215
+ ## 핵심 명령
133
216
 
134
217
  | 목적 | 명령 |
135
- | --- | --- |
136
- | gc-tree 초기화 및 provider 선택 | `gctree init` |
137
- | 현재 gc-branch 확인 | `gctree status` |
138
- | 현재 컨텍스트 검색 | `gctree resolve --query "..."` |
218
+ |---|---|
219
+ | gc-tree 초기화 및 프로바이더 선택 | `gctree init` |
220
+ | 활성 gc-branch 확인 | `gctree status` |
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` |
139
226
  | 레포 범위 규칙 확인 | `gctree repo-map` |
140
- | gc-branch에 레포 포함/제외 설정 | `gctree set-repo-scope --branch <name> --include` / `--exclude` |
141
- | gc-branch 생성/전환 | `gctree checkout <branch>` / `gctree checkout -b <branch>` |
142
- | 비어 있는 gc-branch 온보딩 | `gctree onboard` |
143
- | 활성 gc-branch 장기 업데이트 | `gctree update-global-context` / `gctree update-gc` / `gctree ugc` |
144
- | 다시 온보딩하기 전 gc-branch 초기화 | `gctree reset-gc-branch --branch <name> --yes` |
145
- | 다른 환경에 수동 스캐폴딩 | `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` |
146
230
 
147
- ## 문서
231
+ ---
148
232
 
149
- 자세한 문서는 [`docs/`](https://github.com/handsupmin/gc-tree/tree/main/docs) 아래에 정리되어 있습니다.
233
+ ## 문서
150
234
 
151
235
  - **컨셉** — [`docs/concept.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/concept.ko.md)
152
- `gctree`가 무엇인지, 어떤 문제를 해결하는지, 글로벌 컨텍스트 레이어의 범위를 설명합니다.
153
236
  - **원리** — [`docs/principles.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/principles.ko.md)
154
- gc-branch, 레포 범위, slim index, summary-first 문서, 가이드형 업데이트 원칙을 정리합니다.
155
237
  - **사용방법** — [`docs/usage.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/usage.ko.md)
156
- 표준 CLI 흐름, provider 명령, 레포 범위 동작, 통합 패턴을 안내합니다.
157
- - **로컬 실행방법** — [`docs/local-development.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.ko.md)
158
- 의존성 설치, 로컬 CLI 실행, 변경 검증 방법을 설명합니다.
238
+ - **로컬 개발** [`docs/local-development.ko.md`](https://github.com/handsupmin/gc-tree/blob/main/docs/local-development.ko.md)
239
+
240
+ ---
159
241
 
160
242
  ## 기여하기
161
243
 
162
- 기여는 언제든 환영합니다. 개발 흐름과 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)를 참고하세요.
245
+
246
+ ---
163
247
 
164
248
  ## 라이선스
165
249
 
166
- MIT. 자세한 내용은 [`LICENSE`](https://github.com/handsupmin/gc-tree/blob/main/LICENSE) 참고하세요.
250
+ MIT. [`LICENSE`](https://github.com/handsupmin/gc-tree/blob/main/LICENSE) 참고.