cc-orchestrator-server 0.1.1

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.
Files changed (204) hide show
  1. package/README.ko.md +404 -0
  2. package/README.md +345 -0
  3. package/dist/core/agents/AgentManager.d.ts +35 -0
  4. package/dist/core/agents/AgentManager.d.ts.map +1 -0
  5. package/dist/core/agents/AgentManager.js +225 -0
  6. package/dist/core/agents/AgentManager.js.map +1 -0
  7. package/dist/core/agents/prompts.d.ts +39 -0
  8. package/dist/core/agents/prompts.d.ts.map +1 -0
  9. package/dist/core/agents/prompts.js +591 -0
  10. package/dist/core/agents/prompts.js.map +1 -0
  11. package/dist/core/ast/AstGrepService.d.ts +72 -0
  12. package/dist/core/ast/AstGrepService.d.ts.map +1 -0
  13. package/dist/core/ast/AstGrepService.js +289 -0
  14. package/dist/core/ast/AstGrepService.js.map +1 -0
  15. package/dist/core/ast/index.d.ts +5 -0
  16. package/dist/core/ast/index.d.ts.map +1 -0
  17. package/dist/core/ast/index.js +5 -0
  18. package/dist/core/ast/index.js.map +1 -0
  19. package/dist/core/context/ContextStore.d.ts +31 -0
  20. package/dist/core/context/ContextStore.d.ts.map +1 -0
  21. package/dist/core/context/ContextStore.js +138 -0
  22. package/dist/core/context/ContextStore.js.map +1 -0
  23. package/dist/core/memory/PersistentMemoryStore.d.ts +97 -0
  24. package/dist/core/memory/PersistentMemoryStore.d.ts.map +1 -0
  25. package/dist/core/memory/PersistentMemoryStore.js +335 -0
  26. package/dist/core/memory/PersistentMemoryStore.js.map +1 -0
  27. package/dist/core/models/ModelRouter.d.ts +71 -0
  28. package/dist/core/models/ModelRouter.d.ts.map +1 -0
  29. package/dist/core/models/ModelRouter.js +386 -0
  30. package/dist/core/models/ModelRouter.js.map +1 -0
  31. package/dist/core/models/ModelRouter.test.d.ts +5 -0
  32. package/dist/core/models/ModelRouter.test.d.ts.map +1 -0
  33. package/dist/core/models/ModelRouter.test.js +207 -0
  34. package/dist/core/models/ModelRouter.test.js.map +1 -0
  35. package/dist/core/models/ProviderHealthManager.d.ts +60 -0
  36. package/dist/core/models/ProviderHealthManager.d.ts.map +1 -0
  37. package/dist/core/models/ProviderHealthManager.js +185 -0
  38. package/dist/core/models/ProviderHealthManager.js.map +1 -0
  39. package/dist/core/models/providers/AnthropicProvider.d.ts +29 -0
  40. package/dist/core/models/providers/AnthropicProvider.d.ts.map +1 -0
  41. package/dist/core/models/providers/AnthropicProvider.js +163 -0
  42. package/dist/core/models/providers/AnthropicProvider.js.map +1 -0
  43. package/dist/core/models/providers/GoogleProvider.d.ts +30 -0
  44. package/dist/core/models/providers/GoogleProvider.d.ts.map +1 -0
  45. package/dist/core/models/providers/GoogleProvider.js +215 -0
  46. package/dist/core/models/providers/GoogleProvider.js.map +1 -0
  47. package/dist/core/models/providers/OpenAIProvider.d.ts +29 -0
  48. package/dist/core/models/providers/OpenAIProvider.d.ts.map +1 -0
  49. package/dist/core/models/providers/OpenAIProvider.js +171 -0
  50. package/dist/core/models/providers/OpenAIProvider.js.map +1 -0
  51. package/dist/core/models/providers/index.d.ts +4 -0
  52. package/dist/core/models/providers/index.d.ts.map +1 -0
  53. package/dist/core/models/providers/index.js +4 -0
  54. package/dist/core/models/providers/index.js.map +1 -0
  55. package/dist/core/orchestration/OrchestrationEngine.d.ts +35 -0
  56. package/dist/core/orchestration/OrchestrationEngine.d.ts.map +1 -0
  57. package/dist/core/orchestration/OrchestrationEngine.js +302 -0
  58. package/dist/core/orchestration/OrchestrationEngine.js.map +1 -0
  59. package/dist/core/orchestration/index.d.ts +5 -0
  60. package/dist/core/orchestration/index.d.ts.map +1 -0
  61. package/dist/core/orchestration/index.js +5 -0
  62. package/dist/core/orchestration/index.js.map +1 -0
  63. package/dist/core/prompts/DynamicPromptBuilder.d.ts +39 -0
  64. package/dist/core/prompts/DynamicPromptBuilder.d.ts.map +1 -0
  65. package/dist/core/prompts/DynamicPromptBuilder.js +129 -0
  66. package/dist/core/prompts/DynamicPromptBuilder.js.map +1 -0
  67. package/dist/core/routing/IntentAnalyzer.d.ts +80 -0
  68. package/dist/core/routing/IntentAnalyzer.d.ts.map +1 -0
  69. package/dist/core/routing/IntentAnalyzer.js +362 -0
  70. package/dist/core/routing/IntentAnalyzer.js.map +1 -0
  71. package/dist/core/routing/IntentAnalyzer.test.d.ts +5 -0
  72. package/dist/core/routing/IntentAnalyzer.test.d.ts.map +1 -0
  73. package/dist/core/routing/IntentAnalyzer.test.js +138 -0
  74. package/dist/core/routing/IntentAnalyzer.test.js.map +1 -0
  75. package/dist/core/routing/index.d.ts +2 -0
  76. package/dist/core/routing/index.d.ts.map +1 -0
  77. package/dist/core/routing/index.js +2 -0
  78. package/dist/core/routing/index.js.map +1 -0
  79. package/dist/index.d.ts +7 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +49 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/infrastructure/ConfigLoader.d.ts +39 -0
  84. package/dist/infrastructure/ConfigLoader.d.ts.map +1 -0
  85. package/dist/infrastructure/ConfigLoader.js +221 -0
  86. package/dist/infrastructure/ConfigLoader.js.map +1 -0
  87. package/dist/infrastructure/Logger.d.ts +23 -0
  88. package/dist/infrastructure/Logger.d.ts.map +1 -0
  89. package/dist/infrastructure/Logger.js +73 -0
  90. package/dist/infrastructure/Logger.js.map +1 -0
  91. package/dist/server/MCPServer.d.ts +27 -0
  92. package/dist/server/MCPServer.d.ts.map +1 -0
  93. package/dist/server/MCPServer.js +122 -0
  94. package/dist/server/MCPServer.js.map +1 -0
  95. package/dist/server/handlers/index.d.ts +65 -0
  96. package/dist/server/handlers/index.d.ts.map +1 -0
  97. package/dist/server/handlers/index.js +523 -0
  98. package/dist/server/handlers/index.js.map +1 -0
  99. package/dist/server/tools/definitions.d.ts +8 -0
  100. package/dist/server/tools/definitions.d.ts.map +1 -0
  101. package/dist/server/tools/definitions.js +270 -0
  102. package/dist/server/tools/definitions.js.map +1 -0
  103. package/dist/server/tools/schemas.d.ts +151 -0
  104. package/dist/server/tools/schemas.d.ts.map +1 -0
  105. package/dist/server/tools/schemas.js +63 -0
  106. package/dist/server/tools/schemas.js.map +1 -0
  107. package/dist/types/agent.d.ts +79 -0
  108. package/dist/types/agent.d.ts.map +1 -0
  109. package/dist/types/agent.js +28 -0
  110. package/dist/types/agent.js.map +1 -0
  111. package/dist/types/config.d.ts +26 -0
  112. package/dist/types/config.d.ts.map +1 -0
  113. package/dist/types/config.js +10 -0
  114. package/dist/types/config.js.map +1 -0
  115. package/dist/types/context.d.ts +30 -0
  116. package/dist/types/context.d.ts.map +1 -0
  117. package/dist/types/context.js +9 -0
  118. package/dist/types/context.js.map +1 -0
  119. package/dist/types/errors.d.ts +52 -0
  120. package/dist/types/errors.d.ts.map +1 -0
  121. package/dist/types/errors.js +87 -0
  122. package/dist/types/errors.js.map +1 -0
  123. package/dist/types/index.d.ts +11 -0
  124. package/dist/types/index.d.ts.map +1 -0
  125. package/dist/types/index.js +11 -0
  126. package/dist/types/index.js.map +1 -0
  127. package/dist/types/model.d.ts +72 -0
  128. package/dist/types/model.d.ts.map +1 -0
  129. package/dist/types/model.js +100 -0
  130. package/dist/types/model.js.map +1 -0
  131. package/dist/types/orchestration.d.ts +58 -0
  132. package/dist/types/orchestration.d.ts.map +1 -0
  133. package/dist/types/orchestration.js +12 -0
  134. package/dist/types/orchestration.js.map +1 -0
  135. package/dist/types/tool.d.ts +82 -0
  136. package/dist/types/tool.d.ts.map +1 -0
  137. package/dist/types/tool.js +6 -0
  138. package/dist/types/tool.js.map +1 -0
  139. package/hooks/__pycache__/context_saver_wrapper.cpython-313.pyc +0 -0
  140. package/hooks/__pycache__/todo_enforcer.cpython-313.pyc +0 -0
  141. package/hooks/__pycache__/todo_enforcer_wrapper.cpython-313.pyc +0 -0
  142. package/hooks/__pycache__/ui_qa_wrapper.cpython-313.pyc +0 -0
  143. package/hooks/adapters/__init__.py +15 -0
  144. package/hooks/adapters/base.py +166 -0
  145. package/hooks/adapters/claude_self.py +173 -0
  146. package/hooks/adapters/copilot.py +131 -0
  147. package/hooks/adapters/gemini.py +211 -0
  148. package/hooks/api_key_loader.py +163 -0
  149. package/hooks/api_keys.example.json +3 -0
  150. package/hooks/checkpoint_wrapper.py +137 -0
  151. package/hooks/collect_project_context.py +57 -0
  152. package/hooks/completion_orchestrator.py +341 -0
  153. package/hooks/config.json +84 -0
  154. package/hooks/context_resilience/__init__.py +63 -0
  155. package/hooks/context_resilience/auto_recovery.py +232 -0
  156. package/hooks/context_resilience/cleanup.py +342 -0
  157. package/hooks/context_resilience/config.py +148 -0
  158. package/hooks/context_resilience/protected_context.py +264 -0
  159. package/hooks/context_resilience/semantic_anchors.py +359 -0
  160. package/hooks/context_saver_wrapper.py +236 -0
  161. package/hooks/debate_orchestrator.py +245 -0
  162. package/hooks/intent_extractor.py +126 -0
  163. package/hooks/logs/.ui_qa_debounce_test-ui- +1 -0
  164. package/hooks/logs/checkpoint.log +2 -0
  165. package/hooks/logs/todo-enforcer.log +23 -0
  166. package/hooks/logs/ui-qa.log +6 -0
  167. package/hooks/nul +0 -0
  168. package/hooks/prompts/code.txt +56 -0
  169. package/hooks/prompts/completion_external.txt +46 -0
  170. package/hooks/prompts/completion_self.txt +34 -0
  171. package/hooks/prompts/final.txt +52 -0
  172. package/hooks/prompts/plan.txt +48 -0
  173. package/hooks/prompts/test.txt +49 -0
  174. package/hooks/prompts/ui_qa.txt +58 -0
  175. package/hooks/quota_monitor.py +185 -0
  176. package/hooks/recovery_wrapper.py +108 -0
  177. package/hooks/requirements.txt +2 -0
  178. package/hooks/review_completion_wrapper.py +39 -0
  179. package/hooks/review_orchestrator.py +353 -0
  180. package/hooks/review_test_wrapper.py +34 -0
  181. package/hooks/security.py +125 -0
  182. package/hooks/state/incomplete_75206c5fa4dee77c.json +9 -0
  183. package/hooks/state/incomplete_c10099cbb84d294f.json +11 -0
  184. package/hooks/state/incomplete_test-ses.json +11 -0
  185. package/hooks/state_manager.py +153 -0
  186. package/hooks/summary_saver_wrapper.py +354 -0
  187. package/hooks/test_context_resilience.py +310 -0
  188. package/hooks/todo_enforcer.py +269 -0
  189. package/hooks/todo_enforcer_wrapper.py +192 -0
  190. package/hooks/todo_state_detector.py +87 -0
  191. package/hooks/ui_qa_config.json +48 -0
  192. package/hooks/ui_qa_wrapper.py +329 -0
  193. package/package.json +66 -0
  194. package/scripts/publish.mjs +249 -0
  195. package/scripts/setup.mjs +991 -0
  196. package/scripts/uninstall.mjs +320 -0
  197. package/scripts/update.mjs +203 -0
  198. package/skills/checkpoint/SKILL.ko.md +66 -0
  199. package/skills/checkpoint/SKILL.md +66 -0
  200. package/skills/orchestrate/SKILL.ko.md +363 -0
  201. package/skills/orchestrate/SKILL.md +363 -0
  202. package/skills/ui-qa/SKILL.ko.md +196 -0
  203. package/skills/ui-qa/SKILL.md +196 -0
  204. package/templates/settings.template.json +112 -0
package/README.ko.md ADDED
@@ -0,0 +1,404 @@
1
+ # CC Orchestrator
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ [![npm version](https://img.shields.io/npm/v/cc-orchestrator.svg)](https://www.npmjs.com/package/cc-orchestrator)
5
+
6
+ **Claude Code에서 여러 LLM을 병렬로 활용하는 MCP 서버**
7
+
8
+ > [Oh My OpenCode](https://github.com/code-yeongyu/oh-my-opencode)의 멀티모델 오케스트레이션 개념을 Claude Code 환경에 맞게 구현한 프로젝트입니다.
9
+
10
+ ---
11
+
12
+ ## 목차
13
+
14
+ - [개요](#개요)
15
+ - [주요 기능](#주요-기능)
16
+ - [에이전트 시스템](#에이전트-시스템)
17
+ - [빠른 시작](#빠른-시작)
18
+ - [사용 방법](#사용-방법)
19
+ - [Python Hooks](#python-hooks)
20
+ - [Context Resilience Framework](#context-resilience-framework)
21
+ - [도구 목록](#도구-목록)
22
+ - [프로젝트 구조](#프로젝트-구조)
23
+ - [설정](#설정)
24
+ - [제거](#제거)
25
+
26
+ ---
27
+
28
+ ## 개요
29
+
30
+ CC Orchestrator는 Claude Code 환경에서 GPT-5.2, Gemini 3 Pro, Claude Sonnet 4.5 등 다양한 LLM을 **병렬로 활용**할 수 있게 해주는 MCP(Model Context Protocol) 서버입니다.
31
+
32
+ ### 왜 필요한가?
33
+
34
+ - **단일 모델의 한계**: 하나의 LLM으로 모든 작업을 처리하면 각 모델의 강점을 활용하지 못함
35
+ - **병렬 처리의 필요성**: 복잡한 작업을 여러 모델에 동시에 위임하면 효율성 향상
36
+ - **전문화의 이점**: 아키텍처 설계에는 GPT, UI 작업에는 Gemini, 문서 검색에는 Claude가 각각 최적화됨
37
+
38
+ ---
39
+
40
+ ## 주요 기능
41
+
42
+ | 기능 | 설명 |
43
+ |------|------|
44
+ | **멀티모델 병렬 실행** | GPT, Gemini, Claude를 동시에 활용 |
45
+ | **전문 에이전트 시스템** | 역할별 최적화된 모델 자동 선택 |
46
+ | **Cross-Provider Fallback** | API 키 누락/장애 시 다른 제공자로 자동 전환 |
47
+ | **DAG 기반 오케스트레이션** | 의존성 관리 및 자동 워크플로우 |
48
+ | **키워드 트리거** | `ultrawork`, `분석`, `찾아` 등으로 자동 실행 |
49
+ | **컨텍스트 공유** | 에이전트 간 결과 전달 |
50
+ | **Python Hooks** | 코드 리뷰, 완료 오케스트레이션 자동화 |
51
+ | **Orchestrate Skill** | `/orchestrate` 명령으로 복잡한 작업 위임 |
52
+ | **Context Resilience** | `/compact` 후 문맥 손실 방지 및 자동 복구 |
53
+
54
+ ---
55
+
56
+ ## 에이전트 시스템
57
+
58
+ ### 역할-모델 매핑
59
+
60
+ | 역할 | 기본 모델 | Fallback | 용도 |
61
+ |------|----------|----------|------|
62
+ | **arch** | GPT-5.2 | GPT-4o | 아키텍처 설계, 전략적 의사결정, 코드 리뷰 |
63
+ | **canvas** | Gemini 3 Pro | Gemini 2.5 Flash | UI/UX 디자인, 프론트엔드 구현 |
64
+ | **index** | Claude Sonnet 4.5 | Claude Sonnet 4 | 문서 검색, 코드베이스 분석, 구현 사례 조사 |
65
+ | **quill** | Gemini 3 Pro | Gemini 2.5 Flash | 기술 문서 작성, README, API 문서 |
66
+ | **lens** | Gemini 2.5 Flash | Gemini 2.0 Flash | 이미지, PDF, 스크린샷 분석 |
67
+ | **scout** | Claude Sonnet | - | 코드베이스 탐색 (무료) |
68
+
69
+ ### Cross-Provider Fallback
70
+
71
+ API 키가 없거나 제공자 장애 시 **다른 제공자로 자동 전환**됩니다:
72
+
73
+ ```
74
+ arch: OpenAI → Anthropic → Google
75
+ index: Anthropic → Google → OpenAI
76
+ canvas: Google → Anthropic → OpenAI
77
+ quill: Google → Anthropic → OpenAI
78
+ lens: Google → Anthropic → OpenAI
79
+ scout: Anthropic (무료, Claude Sonnet)
80
+ ```
81
+
82
+ **예시:** OpenAI API 키만 있는 경우
83
+ - `arch` → OpenAI 사용 ✓
84
+ - `index` → Anthropic 없음 → OpenAI로 fallback ⚠
85
+ - `canvas` → Google 없음 → OpenAI로 fallback ⚠
86
+
87
+ ---
88
+
89
+ ## 빠른 시작
90
+
91
+ ### 1. 설치 (원라인)
92
+
93
+ ```bash
94
+ npx cc-orch
95
+ ```
96
+
97
+ 또는 수동 설치:
98
+
99
+ ```bash
100
+ git clone https://github.com/zhsks311/cc-orchestrator.git
101
+ cd cc-orchestrator
102
+ npm run setup
103
+ ```
104
+
105
+ 대화형 설치 스크립트가 다음을 자동으로 수행합니다:
106
+ - API 키 입력 (OpenAI, Google, Anthropic)
107
+ - `.env` 파일 생성
108
+ - 의존성 설치 및 빌드
109
+ - **Python Hooks** 설치 (`~/.claude/hooks/`)
110
+ - **Skills** 설치 (`~/.claude/skills/`)
111
+ - **Settings** 업데이트 (`~/.claude/settings.json`)
112
+ - **Claude Desktop Config** 자동 등록
113
+
114
+ ### 2. Claude Code 재시작
115
+
116
+ 설치 완료 후 Claude Code를 재시작하면 모든 기능을 사용할 수 있습니다.
117
+
118
+ ### 설치 및 업데이트 옵션
119
+
120
+ ```bash
121
+ # 원라인 설치
122
+ npx cc-orch
123
+
124
+ # 수동 설치 (미설치 항목만)
125
+ npm run setup
126
+
127
+ # 모든 항목 재설치
128
+ npm run setup -- --force
129
+
130
+ # 업데이트 (최신 버전으로)
131
+ npm run update
132
+
133
+ # 업데이트 확인만
134
+ npm run update -- --check
135
+
136
+ # npx로 업데이트
137
+ npx cc-orch --upgrade
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 사용 방법
143
+
144
+ ### 개별 에이전트 호출
145
+
146
+ 자연어로 에이전트를 호출할 수 있습니다:
147
+
148
+ ```
149
+ "arch한테 이 프로젝트 아키텍처 리뷰해달라고 해"
150
+ "canvas한테 로그인 폼 컴포넌트 만들어줘"
151
+ "index한테 React Query 사용법 찾아줘"
152
+ ```
153
+
154
+ ### 자동 오케스트레이션 (키워드 트리거)
155
+
156
+ 특정 키워드를 사용하면 자동으로 오케스트레이션이 실행됩니다:
157
+
158
+ | 키워드 | 동작 | 실행 에이전트 |
159
+ |--------|------|---------------|
160
+ | `ultrawork` 또는 `ulw` | 최대 병렬 모드 | arch + canvas + index 동시 |
161
+ | `search` 또는 `찾아` | 검색 집중 모드 | index 단독 |
162
+ | `analyze` 또는 `분석` | 심층 분석 모드 | arch → index 순차 |
163
+
164
+ ### Orchestrate Skill
165
+
166
+ `/orchestrate` 명령으로 복잡한 작업을 단계별로 위임:
167
+
168
+ ```
169
+ /orchestrate 새로운 결제 기능 구현
170
+ ```
171
+
172
+ 스킬이 자동으로:
173
+ 1. 작업을 분석하고 단계별로 분해
174
+ 2. 적절한 에이전트에게 각 단계 할당
175
+ 3. 진행 상황 추적 및 보고
176
+
177
+ ---
178
+
179
+ ## Python Hooks
180
+
181
+ `~/.claude/hooks/`에 설치되는 Python 기반 자동화 훅:
182
+
183
+ | 훅 | 트리거 | 기능 |
184
+ |----|--------|------|
185
+ | `collect_project_context.py` | SessionStart | 프로젝트 컨텍스트 자동 수집 |
186
+ | `recovery_wrapper.py` | SessionStart | 이전 세션 컨텍스트 복구 + 데이터 정리 |
187
+ | `context_saver_wrapper.py` | PostToolUse | 파일 수정, Todo 변경 시 컨텍스트 저장 |
188
+ | `checkpoint_wrapper.py` | /checkpoint 스킬 | 수동 체크포인트 생성 |
189
+ | `review_completion_wrapper.py` | PostToolUse (TodoWrite) | 작업 완료 시 Gemini로 코드 리뷰 |
190
+ | `review_test_wrapper.py` | PostToolUse (Bash) | 테스트 실행 후 결과 분석 |
191
+ | `completion_orchestrator.py` | - | 완료 작업 오케스트레이션 |
192
+ | `quota_monitor.py` | - | API 사용량 모니터링 |
193
+
194
+ ### API 키 설정 (Hooks용)
195
+
196
+ Hooks가 외부 모델을 호출하려면 `~/.claude/hooks/api_keys.json` 파일에 API 키를 설정하세요:
197
+
198
+ ```json
199
+ {
200
+ "GEMINI_API_KEY": "your-gemini-api-key"
201
+ }
202
+ ```
203
+
204
+ ---
205
+
206
+ ## Context Resilience Framework
207
+
208
+ `/compact` 명령 후 발생하는 문맥 손실 문제를 해결합니다.
209
+
210
+ ### 문제점
211
+
212
+ Claude Code에서 `/compact`를 실행하면 대화 내역이 요약되면서 다음 정보들이 손실됩니다:
213
+
214
+ | 문제 | 증상 | 영향 |
215
+ |------|------|------|
216
+ | **Skills 망각** | CLAUDE.md, SKILL.md 내용을 잊음 | 프로젝트 규칙/컨벤션 무시 |
217
+ | **파일 경로 손실** | 어떤 파일을 수정 중이었는지 모름 | 작업 연속성 단절 |
218
+ | **실수 반복** | 이미 해결한 에러를 다시 범함 | 시간 낭비, 코드 품질 저하 |
219
+ | **결정사항 무시** | 합의한 설계 방향을 잊음 | 일관성 없는 구현 |
220
+
221
+ ### 해결 전략 (3단계 계층)
222
+
223
+ ```
224
+ ┌─────────────────────────────────────────────────────────────┐
225
+ │ Layer 1: Protected Context (자동) │
226
+ │ - 작업 디렉토리, 스킬 경로, 수정 파일 등 시스템 정보 보호 │
227
+ ├─────────────────────────────────────────────────────────────┤
228
+ │ Layer 2: Semantic Anchors (자동) │
229
+ │ - "결정했어", "해결됨" 등 중요 순간 자동 감지 및 저장 │
230
+ ├─────────────────────────────────────────────────────────────┤
231
+ │ Layer 3: Auto Recovery (자동) │
232
+ │ - 세션 시작 시 이전 컨텍스트 자동 복구 (14일 이내) │
233
+ └─────────────────────────────────────────────────────────────┘
234
+ ```
235
+
236
+ ### Layer 1: Protected Context
237
+
238
+ Claude가 도구를 사용할 때마다 자동으로 핵심 정보를 파일에 저장합니다.
239
+
240
+ **저장되는 정보:**
241
+ - `working_directory` - 현재 프로젝트 경로
242
+ - `active_skills` - 로드된 SKILL.md 경로 목록
243
+ - `active_files` - 수정 중인 파일 경로 (최대 30개)
244
+ - `pending_tasks` - 미완료 작업 목록 (최대 20개)
245
+ - `key_decisions` - 핵심 결정사항 (최대 20개)
246
+ - `resolved_errors` - 해결한 에러 요약 (최대 10개)
247
+
248
+ ### Layer 2: Semantic Anchors
249
+
250
+ 대화 내용에서 중요한 순간을 자동으로 감지하여 저장합니다.
251
+
252
+ | 앵커 타입 | 감지 키워드 (한국어) | 감지 키워드 (영어) |
253
+ |----------|---------------------|-------------------|
254
+ | **DECISION** | 결정, 선택, 이렇게 하자 | decided, choose, let's go with |
255
+ | **ERROR_RESOLVED** | 해결, 수정 완료, 고침 | fixed, resolved, working now |
256
+ | **USER_EXPLICIT** | 기억해, 중요:, 잊지 마 | remember, important:, note: |
257
+ | **FILE_MODIFIED** | (자동) 파일 생성/수정 시 | (자동) Edit/Write 도구 사용 시 |
258
+ | **CHECKPOINT** | /checkpoint 명령 또는 Todo 전체 완료 시 | 자동 생성 |
259
+
260
+ ### Layer 3: Auto Recovery
261
+
262
+ 새 세션이 시작되면 자동으로 이전 컨텍스트를 복구합니다 (14일 이내).
263
+
264
+ ### /checkpoint 스킬
265
+
266
+ 중요한 시점에 명시적으로 컨텍스트를 저장:
267
+
268
+ ```
269
+ /checkpoint "인증 시스템 구현 완료, JWT + refresh token 방식"
270
+ ```
271
+
272
+ ---
273
+
274
+ ## 도구 목록
275
+
276
+ | 도구 | 설명 |
277
+ |------|------|
278
+ | `background_task` | 백그라운드에서 전문 에이전트 실행 |
279
+ | `background_output` | 에이전트 상태 확인 및 결과 조회 |
280
+ | `background_cancel` | 에이전트 취소 |
281
+ | `list_tasks` | 전체 에이전트 조회 |
282
+ | `share_context` | 컨텍스트 공유 |
283
+ | `get_context` | 공유 컨텍스트 조회 |
284
+ | `suggest_agent` | 작업에 적합한 에이전트 추천 |
285
+
286
+ ---
287
+
288
+ ## 프로젝트 구조
289
+
290
+ ```
291
+ cc-orchestrator/
292
+ ├── src/ # TypeScript 소스
293
+ │ ├── core/ # 순수 비즈니스 로직
294
+ │ │ ├── agents/ # 에이전트 관리
295
+ │ │ ├── models/ # 모델 라우팅 및 프로바이더
296
+ │ │ ├── context/ # 컨텍스트 저장소
297
+ │ │ ├── orchestration/ # 오케스트레이션 엔진
298
+ │ │ └── prompts/ # 동적 프롬프트 빌더
299
+ │ ├── server/ # MCP 프로토콜 처리
300
+ │ │ ├── tools/ # 도구 정의 및 스키마
301
+ │ │ └── handlers/ # 요청 핸들러
302
+ │ ├── types/ # 타입 및 에러 정의
303
+ │ └── infrastructure/ # 로깅, 설정 로더
304
+ ├── hooks/ # Python Hooks (→ ~/.claude/hooks/)
305
+ ├── skills/ # Skills (→ ~/.claude/skills/)
306
+ ├── templates/ # 설정 템플릿
307
+ ├── scripts/ # 설치/삭제 스크립트
308
+ └── dist/ # 빌드 결과
309
+ ```
310
+
311
+ ---
312
+
313
+ ## 설정
314
+
315
+ ### Provider 우선순위 설정
316
+
317
+ `~/.cco/config.json` 파일로 제공자 우선순위를 커스터마이징할 수 있습니다:
318
+
319
+ ```json
320
+ {
321
+ "providers": {
322
+ "priority": ["anthropic", "google", "openai"]
323
+ },
324
+ "roles": {
325
+ "arch": {
326
+ "providers": ["anthropic", "openai"]
327
+ },
328
+ "index": {
329
+ "providers": ["google", "anthropic"]
330
+ }
331
+ }
332
+ }
333
+ ```
334
+
335
+ 환경 변수로도 설정 가능:
336
+
337
+ ```bash
338
+ # 전역 우선순위
339
+ export CCO_PROVIDER_PRIORITY=anthropic,google,openai
340
+
341
+ # 역할별 우선순위
342
+ export CCO_ARCH_PROVIDERS=anthropic,openai
343
+ ```
344
+
345
+ ### Context Resilience 설정
346
+
347
+ `~/.claude/hooks/config.json`:
348
+
349
+ ```json
350
+ {
351
+ "context_resilience": {
352
+ "enabled": true,
353
+ "auto_save": true,
354
+ "auto_recover": true,
355
+ "max_anchors": 50,
356
+ "recovery_message_max_length": 2000,
357
+ "cleanup": {
358
+ "enabled": true,
359
+ "session_retention_days": 14,
360
+ "max_anchors_per_session": 50,
361
+ "cleanup_interval_hours": 24
362
+ }
363
+ }
364
+ }
365
+ ```
366
+
367
+ ---
368
+
369
+ ## 제거
370
+
371
+ ```bash
372
+ npm run uninstall
373
+ ```
374
+
375
+ 삭제 옵션:
376
+ 1. **전체 삭제** - 로컬 + Claude 설정
377
+ 2. **로컬만 삭제** - .env + dist + node_modules
378
+ 3. **Claude 설정만 삭제** - hooks, skills, desktop config
379
+
380
+ ---
381
+
382
+ ## 비용 참고
383
+
384
+ | 에이전트 | 비용 | 권장 용도 |
385
+ |----------|------|----------|
386
+ | `scout` | 무료 | 개발 중 테스트, 코드베이스 탐색 |
387
+ | `index` | 저렴 | 문서 검색, 구현 사례 조사 |
388
+ | `arch` | 비쌈 | 아키텍처 설계, 중요 의사결정 |
389
+
390
+ 개발 중에는 `scout` 에이전트 사용을 권장합니다.
391
+
392
+ ---
393
+
394
+ ## 참고 자료
395
+
396
+ - [Oh My OpenCode](https://github.com/code-yeongyu/oh-my-opencode) - 영감을 준 프로젝트
397
+ - [MCP Protocol](https://modelcontextprotocol.io/) - Model Context Protocol 공식 문서
398
+ - [Claude Code](https://claude.ai/claude-code) - Claude Code 공식 페이지
399
+
400
+ ---
401
+
402
+ ## 라이선스
403
+
404
+ MIT License - 자유롭게 사용, 수정, 배포할 수 있습니다.