cli-jaw 1.7.19 → 1.7.21

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 (77) hide show
  1. package/README.ko.md +183 -441
  2. package/README.md +252 -480
  3. package/README.zh-CN.md +184 -442
  4. package/dist/bin/commands/dispatch.js +1 -1
  5. package/dist/bin/commands/dispatch.js.map +1 -1
  6. package/dist/bin/commands/doctor.js +47 -11
  7. package/dist/bin/commands/doctor.js.map +1 -1
  8. package/dist/bin/commands/serve.js +4 -3
  9. package/dist/bin/commands/serve.js.map +1 -1
  10. package/dist/server.js +43 -21
  11. package/dist/server.js.map +1 -1
  12. package/dist/src/agent/events.js +1 -0
  13. package/dist/src/agent/events.js.map +1 -1
  14. package/dist/src/agent/spawn.js +16 -0
  15. package/dist/src/agent/spawn.js.map +1 -1
  16. package/dist/src/cli/registry.js +1 -0
  17. package/dist/src/cli/registry.js.map +1 -1
  18. package/dist/src/core/claude-install.js +33 -0
  19. package/dist/src/core/claude-install.js.map +1 -0
  20. package/dist/src/core/config.js +5 -0
  21. package/dist/src/core/config.js.map +1 -1
  22. package/dist/src/core/db.js +1 -0
  23. package/dist/src/core/db.js.map +1 -1
  24. package/dist/src/core/employees.js +0 -1
  25. package/dist/src/core/employees.js.map +1 -1
  26. package/dist/src/core/runtime-path.js +3 -0
  27. package/dist/src/core/runtime-path.js.map +1 -1
  28. package/dist/src/core/settings-merge.js +2 -2
  29. package/dist/src/core/settings-merge.js.map +1 -1
  30. package/dist/src/discord/bot.js +123 -107
  31. package/dist/src/discord/bot.js.map +1 -1
  32. package/dist/src/orchestrator/distribute.js +1 -2
  33. package/dist/src/orchestrator/distribute.js.map +1 -1
  34. package/dist/src/orchestrator/pipeline.js +3 -15
  35. package/dist/src/orchestrator/pipeline.js.map +1 -1
  36. package/dist/src/orchestrator/scope.js +9 -3
  37. package/dist/src/orchestrator/scope.js.map +1 -1
  38. package/dist/src/orchestrator/state-machine.js +12 -3
  39. package/dist/src/orchestrator/state-machine.js.map +1 -1
  40. package/dist/src/prompt/builder.js +0 -4
  41. package/dist/src/prompt/builder.js.map +1 -1
  42. package/dist/src/prompt/templates/a1-system.md +2 -2
  43. package/dist/src/prompt/templates/worker-context.md +2 -2
  44. package/dist/src/routes/orchestrate.js +6 -1
  45. package/dist/src/routes/orchestrate.js.map +1 -1
  46. package/dist/src/security/network-acl.js +133 -0
  47. package/dist/src/security/network-acl.js.map +1 -0
  48. package/dist/src/telegram/bot.js +37 -3
  49. package/dist/src/telegram/bot.js.map +1 -1
  50. package/package.json +1 -1
  51. package/public/dist/assets/{constants-Bzu8ZQYX.js → constants-DGOVap6o.js} +1 -1
  52. package/public/dist/assets/{employees-BbOvchcS.js → employees-C0yujZsW.js} +1 -1
  53. package/public/dist/assets/{index-BG6dRmXR.js → index-BWcXMhOZ.js} +4 -4
  54. package/public/dist/assets/{memory-ZuWr4pMd.js → memory-FFmqjyCC.js} +1 -1
  55. package/public/dist/assets/memory-irEuKgdV.js +1 -0
  56. package/public/dist/assets/{render-DJB99y40.js → render-D1FcBRwU.js} +1 -1
  57. package/public/dist/assets/{settings-D1g7w3t4.js → settings-MICU1hXS.js} +1 -1
  58. package/public/dist/assets/settings-my0MZC-q.js +1 -0
  59. package/public/dist/assets/skills--Z8gqYp5.js +1 -0
  60. package/public/dist/assets/{skills-C5kJQVkS.js → skills-BzRE-_tP.js} +1 -1
  61. package/public/dist/assets/{slash-commands-ByfeM4Ot.js → slash-commands-DH53hTco.js} +1 -1
  62. package/public/dist/assets/slash-commands-u5fbLK7K.js +1 -0
  63. package/public/dist/assets/ui-CfUxt-FY.js +1 -0
  64. package/public/dist/assets/{ui-BR_M9U08.js → ui-DZb07Luj.js} +2 -2
  65. package/public/dist/assets/{ws-BgwVESAY.js → ws-PsjiwLxs.js} +2 -2
  66. package/public/dist/index.html +1 -1
  67. package/public/js/constants.ts +0 -1
  68. package/public/js/features/employees.ts +0 -2
  69. package/public/locales/en.json +1 -2
  70. package/public/locales/ko.json +1 -2
  71. package/scripts/install.sh +175 -3
  72. package/dist/src/prompt/templates/research-worker.md +0 -37
  73. package/public/dist/assets/memory-BLIJdS7I.js +0 -1
  74. package/public/dist/assets/settings-DRL_RTEF.js +0 -1
  75. package/public/dist/assets/skills-DDi6QuNI.js +0 -1
  76. package/public/dist/assets/slash-commands-Ds50o_kN.js +0 -1
  77. package/public/dist/assets/ui-hKRh1sfy.js +0 -1
package/README.ko.md CHANGED
@@ -1,18 +1,14 @@
1
1
  <div align="center">
2
2
 
3
- # 🦈 CLI-JAW
3
+ # CLI-JAW
4
4
 
5
- ### 5대 AI 엔진을 품은 나만의 로컬 비서
5
+ ### 이미 결제한 AI 구독, 하나의 비서로.
6
6
 
7
- *Claude, Codex, Gemini... 이제 번갈아 쓰지 마세요.*
8
-
9
- [![Tests](https://img.shields.io/badge/tests-rolling%20inventory-blue)](#-테스트)
7
+ [![npm](https://img.shields.io/npm/v/cli-jaw)](https://npmjs.com/package/cli-jaw)
10
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://typescriptlang.org)
11
9
  [![Node](https://img.shields.io/badge/node-%3E%3D22-blue)](https://nodejs.org)
12
10
  [![License](https://img.shields.io/badge/license-MIT-yellow)](LICENSE)
13
- [![npm](https://img.shields.io/npm/v/cli-jaw)](https://npmjs.com/package/cli-jaw)
14
- [![Docker](https://img.shields.io/badge/Docker-supported-2496ED?logo=docker&logoColor=white)](#-도커--컨테이너-격리)
15
- [![Platforms](https://img.shields.io/badge/platforms-macOS%20%7C%20Linux%20%7C%20WSL%20%7C%20Docker-lightgrey)](#)
11
+ [![Docker](https://img.shields.io/badge/Docker-supported-2496ED?logo=docker&logoColor=white)](#-docker)
16
12
 
17
13
  [English](README.md) / **한국어** / [中文](README.zh-CN.md)
18
14
 
@@ -20,399 +16,190 @@
20
16
 
21
17
  </div>
22
18
 
23
- ## 빠른 링크
24
-
25
- - [설치 & 실행](#-설치--실행-30초) · [AI 엔진 인증](#-ai-엔진-인증) · [CLI-JAW란?](#cli-jaw란-무엇인가요)
26
- - [기능](#비서가-어떤-일을-할-수-있나요) · [스킬](#-스킬-시스템) · [텔레그램](#-텔레그램--내-주머니-속의-비서) · [음성 & STT](#-음성--stt--음성-인식)
27
- - [오케스트레이션](#-멀티-에이전트-오케스트레이션) · [MCP](#-mcp--단일-설정-6개의-ai-엔진) · [CLI 명령어](#️-cli-명령어)
28
- - [멀티 인스턴스](#️-멀티-인스턴스--프로젝트별-독립-환경) · [모델](#-모델) · [Docker](#-docker--컨테이너-격리)
29
- - [개발](#️-개발) · [테스트](#-테스트) · [문서](#-문서) · [문제 해결](#-문제-해결) · [기여하기](#-기여하기)
30
-
31
- <details>
32
- <summary>🪟 <b>Windows 사용자이신가요?</b> — WSL 원클릭 설치</summary>
33
-
34
- **Step 1: WSL 설치** (PowerShell 관리자 권한 — 최초 1회)
35
-
36
- ```powershell
37
- wsl --install
38
- ```
39
-
40
- 안내에 따라 컴퓨터를 재시작하세요. 재부팅 후 시작 메뉴에서 **Ubuntu**를 실행하세요.
41
-
42
- **Step 2: CLI-JAW 설치** (Ubuntu/WSL 터미널에서)
43
-
44
- ```bash
45
- curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/master/scripts/install-wsl.sh | bash
46
- ```
47
-
48
- 스크립트가 필수 패키지(`curl`, `unzip`, `git`), Node.js 22+, CLI-JAW를 자동 설치합니다.
49
-
50
- **Step 3: 쉘 다시 로드** (중요 — PATH 변경 적용)
51
-
52
- ```bash
53
- source ~/.bashrc
54
- ```
55
-
56
- **Step 4: AI 엔진 인증** (하나 선택)
57
-
58
- ```bash
59
- copilot login # GitHub Copilot (무료)
60
- opencode # OpenCode (무료 모델 제공)
61
- claude auth # Anthropic Claude
62
- codex login # OpenAI Codex
63
- gemini # Google Gemini
64
- ```
65
-
66
- **Step 5: 시작하기**
67
-
68
- ```bash
69
- jaw serve
70
- # → http://localhost:3457
71
- ```
72
-
73
- > 💡 스크립트는 [fnm](https://github.com/Schniz/fnm)으로 Node.js를 관리합니다. 이미 `nvm`이 있으면 그걸 사용합니다.
74
-
75
- <details>
76
- <summary>🔧 <b>WSL 문제 해결</b></summary>
19
+ <table>
20
+ <tr><td><b>기존 구독을 그대로 활용</b></td><td>Claude Max, ChatGPT Pro, Copilot, Gemini Advanced — OAuth 라우팅. OpenCode로 아무 모델이나 추가 가능. 토큰 과금 없음.</td></tr>
21
+ <tr><td><b>어디서든 접근</b></td><td>웹 PWA(가상 스크롤, WS 스트리밍) + Mac WebView 앱 + 터미널 TUI + Telegram(음성) + Discord — 5개 인터페이스, 하나의 대화.</td></tr>
22
+ <tr><td><b>3계층 메모리</b></td><td>History Block(최근 세션) + Memory Flush(에피소드, 일일 로그) + Soul & Task Snapshot(정체성, 시맨틱 검색). SQLite FTS5 전문 검색.</td></tr>
23
+ <tr><td><b>멀티에이전트 오케스트레이션</b></td><td>PABCD DB 기반 5단계 FSM. Employee 시스템과 Worker 레지스트리. 파일 충돌 감지 병렬 실행. 모든 단계에서 사용자 승인 필요.</td></tr>
24
+ <tr><td><b>브라우저 및 데스크톱 자동화</b></td><td>Chrome CDP, vision-click, ChatGPT/Grok/Gemini DOM 레퍼런스, Codex App Computer Use 통합, diagram 스킬로 SVG/인터랙티브 시각화.</td></tr>
25
+ <tr><td><b>MCP 설치, 5개 엔진</b></td><td><code>jaw mcp install</code>로 Claude, Codex, Gemini, OpenCode, Copilot에 동시 동기화. 설정 파일 하나.</td></tr>
26
+ <tr><td><b>한국어 지원</b></td><td>한국어/영어/중국어 README. i18n 웹 UI. OfficeCLI를 통한 HWP/HWPX 한글 문서 지원.</td></tr>
27
+ </table>
77
28
 
78
- | 문제 | 해결 방법 |
79
- | --------------------------------------- | ------------------------------------------------------- |
80
- | `unzip: command not found` | 설치 스크립트를 다시 실행하세요 — `unzip`을 자동 설치합니다 |
81
- | `jaw: command not found` (설치 후) | `source ~/.bashrc`로 PATH를 다시 로드하세요 |
82
- | 여전히 `jaw`를 찾을 수 없음 | `export PATH="$(npm config get prefix)/bin:$PATH"` 실행 |
83
- | `npm install -g` 권한 오류 | `sudo chown -R $USER $(npm config get prefix)` 실행 |
84
-
85
- </details>
86
-
87
- </details>
88
-
89
- <details>
90
- <summary>🍎 <b>터미널이 처음이신가요?</b> — 원클릭 Node.js + CLI-JAW 설치</summary>
91
-
92
- **Step 1: 터미널 열기**
93
-
94
- **Finder** → **응용 프로그램** → **유틸리티** → **터미널.app** 을 열어주세요.
95
- (또는 `⌘ Space` 누르고 `터미널` 이라고 입력하세요)
96
-
97
- **Step 2: 아래 내용을 붙여넣고 Enter**
98
-
99
- ```bash
100
- curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/master/scripts/install.sh | bash
101
- ```
102
-
103
- Node.js + CLI-JAW가 자동으로 설치됩니다. 🎉 가 뜰 때까지 기다려주세요.
104
-
105
- **Step 3: 로그인 & 실행**
106
-
107
- ```bash
108
- copilot login # 또는: claude auth / codex login / gemini login
109
- jaw serve
110
- ```
29
+ ---
111
30
 
112
- 브라우저에서 **http://localhost:3457** 을 열면 끝! 🦈
31
+ ## 빠른 링크
113
32
 
114
- </details>
33
+ - [설치](#-설치--실행) · [인증](#-인증) · [인터페이스](#️-어디서-쓰나)
34
+ - [엔진 라우팅](#-엔진-라우팅) · [메모리](#-메모리) · [PABCD](#-오케스트레이션--pabcd) · [스킬](#-스킬)
35
+ - [브라우저 자동화](#-브라우저--데스크톱-자동화) · [MCP](#-mcp) · [메시징](#-메시징)
36
+ - [CLI 명령어](#️-cli-명령어) · [Docker](#-docker) · [문서](#-문서) · [비교](#️-비교)
115
37
 
116
38
  ---
117
39
 
118
- ## 🚀 설치 & 실행 (30초)
40
+ ## 🚀 설치 & 실행
119
41
 
120
42
  ```bash
121
43
  npm install -g cli-jaw
122
44
  jaw serve
123
45
  ```
124
46
 
125
- **끝.** **http://localhost:3457** 열고 바로 채팅하세요. 🦈
126
-
127
- > 🕐 **24시간 돌아가게 만들고 싶으세요?** `jaw service install` — systemd, launchd, Docker 자동 감지.
47
+ **http://localhost:3457**을 열면 끝. Node.js 22+ 및 아래 AI CLI 중 하나 이상 인증 필요.
128
48
 
129
- > **Node.js 22** ([다운로드](https://nodejs.org)) + 아래에서 **AI CLI 최소 1개** 인증 필요.
49
+ > `jaw service install` 부팅 자동 시작 (systemd, launchd, Docker 자동 감지).
130
50
 
131
51
  ---
132
52
 
133
- ## 🔑 AI 엔진 인증
53
+ ## 🔑 인증
134
54
 
135
- **하나만** 있으면 돼요 가진 골라서:
55
+ 하나만 있어도 됩니다. 이미 구독 중인 것을 선택하세요:
136
56
 
137
57
  ```bash
138
- # ── 무료 ──
139
- copilot login # GitHub Copilot (무료 플랜)
140
- opencode # OpenCode — 첫 실행 시 자동 인증 (무료 모델 있음)
141
-
142
- # ── 유료 ──
143
- claude auth # Anthropic Claude
144
- codex login # OpenAI Codex
145
- gemini # Google Gemini — 첫 실행 시 인증
58
+ # 무료
59
+ copilot login # GitHub Copilot
60
+ opencode # OpenCode — 무료 모델 제공
61
+
62
+ # 유료 (월정액)
63
+ claude auth # Anthropic Claude Max
64
+ codex login # OpenAI ChatGPT Pro
65
+ gemini # Google Gemini Advanced
146
66
  ```
147
67
 
148
- 준비 상태 확인: `jaw doctor`
68
+ 상태 확인: `jaw doctor`
149
69
 
150
- <details>
151
- <summary>📋 <code>jaw doctor</code> 출력 예시</summary>
70
+ ---
152
71
 
153
- ```
154
- 🦈 CLI-JAW Doctor — 12 checks
155
-
156
- ✅ Node.js v22.15.0
157
- ✅ npm v10.9.4
158
- ✅ Claude CLI installed
159
- ✅ Codex CLI installed
160
- ⚠️ Gemini CLI not found (optional)
161
- ✅ OpenCode CLI installed
162
- ✅ Copilot CLI installed
163
- ✅ Database jaw.db OK
164
- ✅ Skills 22 active, 94 reference
165
- ✅ MCP 3 servers configured
166
- ✅ Memory MEMORY.md exists
167
- ✅ Server port 3457 available
168
- ```
72
+ ## 🖥️ 어디서 쓰나
169
73
 
170
- </details>
74
+ 5개 인터페이스에서 동일한 비서, 동일한 메모리, 동일한 스킬을 사용합니다.
171
75
 
172
- > 💡 **5개 깔 필요 없어요.** 하나만 있으면 됩니다. 어떤 엔진이 설치돼 있는지 자동 감지하고, 없으면 다음 엔진으로 자연스럽게 넘어갑니다.
76
+ | 인터페이스 | 기능 |
77
+ |---|---|
78
+ | **웹 PWA** | markdown/KaTeX/Mermaid 렌더링, 가상 스크롤, WS 스트리밍, 파일 드래그앤드롭, 음성 녹음, PABCD 로드맵 바, i18n(한국어/영어), 다크/라이트 테마, IndexedDB 오프라인 캐시 |
79
+ | **Mac WebView 앱** | `jaw serve`를 macOS 앱 셸로 감싼 것. 브라우저 없이 Dock에서 바로 접근 |
80
+ | **터미널 TUI** | 멀티라인 편집, 슬래시 명령어 자동완성, 오버레이 셀렉터, 세션 유지, 재개 분류 |
81
+ | **Telegram** | 음성 메시지(멀티 STT 프로바이더), 사진, 파일. 예약 작업 결과 자동 전송. `/cli`, `/model` 등 슬래시 명령어 |
82
+ | **Discord** | 텍스트/파일 메시징, 명령어 동기화, 채널/스레드 라우팅, 에이전트 결과 포워더 |
173
83
 
174
84
  ---
175
85
 
176
- ## CLI-JAW란 무엇인가요?
177
-
178
- CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **웹, 터미널, 텔레그램, 디스코드**에서 작동하는 **개인용 AI 비서**입니다. 궁금한 것을 묻고, 작업을 위임하고, 워크플로우를 자동화하세요.
179
- ![CLI-JAW Web UI](image/README/1772128366759.png)
86
+ ## 🔀 엔진 라우팅
180
87
 
181
- > 💬 *"오늘 일정 정리해줘"* 텔레그램으로 바로 정리해서 보내줘요
182
- > 💬 *"이 모듈 리팩토링하고 테스트도 짜줘"* → 서브에이전트가 알아서, 커피 한 잔 하고 오면 돼요
183
- > 💬 *"저 PDF 다운받아서 핵심만 노션에 정리해"* → 브라우저 + 노션 스킬 조합으로 뚝딱
88
+ 이미 결제 중인 OAuth 월정액을 통해 5개 CLI 백엔드를 라우팅합니다. 토큰 단위 과금 없음.
184
89
 
185
- 단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다. **100개 이상의 내장 스킬**이 브라우저 자동화부터 문서 생성까지 다양한 작업을 처리합니다.
90
+ | CLI | 기본 모델 | 인증 | 비용 |
91
+ |---|---|---|---|
92
+ | **Claude** | `opus-4-6` | `claude auth` | Claude Max 구독 |
93
+ | **Codex** | `gpt-5.5` | `codex login` | ChatGPT Pro 구독 |
94
+ | **Gemini** | `gemini-3.1-pro-preview` | `gemini` | Gemini Advanced 구독 |
95
+ | **OpenCode** | `minimax-m2.7` | `opencode` | 무료 모델 제공 |
96
+ | **Copilot** | `gpt-5-mini` | `copilot login` | 무료 티어 제공 |
186
97
 
187
- | | CLI-JAW인가요? |
188
- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
189
- | 🛡️ **안전한 서비스 약관 준수** | 공식 CLI만 사용합니다 — API 키 스크래핑이나 리버스 엔지니어링이 없으므로 계정 정지 위험이 없습니다. |
190
- | 🤖 **검증된 에이전트 도구** | 실전에서 검증된 5개의 코딩 에이전트(Claude, Codex, Gemini, OpenCode, Copilot)를 한 곳에서 사용하세요. |
191
- | ⚡ **멀티 에이전트 자동 전환(Fallback)** | 엔진 하나가 멈춰도 걱정 없습니다. 다음 엔진이 즉시 이어받아 중단 없는 작업이 가능합니다. |
192
- | 🎭 **오케스트레이션 기반 성능 극대화** | 복잡한 작업은 전문화된 서브 에이전트에게 분산시켜 처리량을 극대화합니다. |
193
- | 📦 **100개+ 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
194
- | 🖥️ **크로스 플랫폼** | macOS, Linux, Windows — ENOENT-safe CLI 스폰, 자동 감지, `.cmd` shim 지원, 네이티브 설치 전부 크로스플랫폼 동작. |
98
+ **폴백 체인**: 하나가 제한되거나 다운되면 다음 엔진이 자동으로 이어받음. `/fallback [cli1 cli2...]`로 설정.
195
99
 
196
- ![CLI-JAW 터미널](docs/screenshots/terminal-cli.png)
100
+ **OpenCode 와일드카드**: OpenRouter, 로컬 LLM 등 아무 모델 엔드포인트나 연결 가능.
197
101
 
198
102
  ---
199
103
 
200
- ## 🆕 새로운 기능 (v1.6.0)
104
+ ## 🧠 메모리
201
105
 
202
- `v1.6.0`은 `v1.2.0` 이후 누적된 대규모 제품 확장을 처음으로 한 번에 정리하는 문서 캐치업 릴리즈입니다.
106
+ 서로 다른 시간 범위를 담당하는 3계층 구조.
203
107
 
204
- - 전체 업데이트 로그: [CHANGELOG.md](CHANGELOG.md#160---2026-04-13)
205
- - 범위: `v1.2.0` → `v1.5.1`
206
- - 규모: `59` commits, `307` files changed, `32,760` insertions, `4,263` deletions
207
- - 핵심 변화: 오케스트레이션, 구조화 메모리, Discord/음성 채널, 대폭 확장된 UI, 다이어그램/위젯 렌더링, 릴리즈/운영 툴링 강화
108
+ | 계층 | 저장 내용 | 동작 |
109
+ |---|---|---|
110
+ | **History Block** | 최근 세션 컨텍스트 | 최근 10개 세션, 최대 8000자, 작업 디렉토리 기준. 프롬프트 앞에 주입 |
111
+ | **Memory Flush** | 대화에서 추출한 구조화 지식 | 임계값(기본 10턴) 도달 시 트리거. 에피소드, 일일 로그(`YYYY-MM-DD.md`), 라이브 노트로 요약 |
112
+ | **Soul + Task Snapshot** | 정체성과 시맨틱 검색 | `soul.md`로 핵심 가치/톤/경계 정의. FTS5 인덱스에서 프롬프트당 최대 4개 관련 히트(700자) 검색 |
208
113
 
209
- | 기능 | 설명 |
210
- | ---- | ---- |
211
- | 🎭 **PABCD 오케스트레이션** | `jaw dispatch`, `jaw orchestrate`, 영속 상태머신, 워커 레지스트리, 리서치 디스패치, 웹 UI 상태 표시까지 포함하는 본격적인 오케스트레이션 표면이 추가되었습니다. |
212
- | 🧠 **구조화 메모리 런타임** | 단순 저장을 넘어 구조화 저장소, 인덱싱, 쿼리 확장, task snapshot, 리인덱스/감사 UI까지 갖춘 메모리 서브시스템으로 확장되었습니다. |
213
- | 💬 **Discord + 음성 채널** | Web, Terminal, Telegram뿐 아니라 Discord와 음성/STT 흐름이 제품의 핵심 인터페이스로 올라왔습니다. |
214
- | 🖥️ **대폭 확장된 웹 UI** | 설정 패널, 메모리/하트비트 제어, tool UI, provider icon, gesture, drag/drop 보호, virtual scroll, 렌더링 개선이 대거 추가되었습니다. |
215
- | 📊 **다이어그램/위젯 렌더링** | iframe renderer, validator, 전용 CSS를 기반으로 인라인 다이어그램과 위젯 렌더링이 가시적인 기능군이 되었습니다. |
216
- | ⌨️ **CLI/TUI 사용성 개선** | `/compact`, 오버레이/셀렉터, 세션 지속성, resume 분류, readiness 점검 등 터미널 사용성이 크게 개선되었습니다. |
217
- | 🧪 **운영/CI/설치 강화** | `jaw doctor`, 브라우저 launch policy, 스킬 fallback/reset, submodule-safe CI, preview release, Vite 기반 배포가 강화되었습니다. |
218
- | 📄 **오피스 자동화 성숙** | OfficeCLI 설치, smoke test, 로컬 바이너리, Office/PDF 워크플로가 `v1.2.0` 대비 훨씬 실전형이 되었습니다. |
114
+ 계층 모두 시스템 프롬프트에 자동 반영. `jaw memory search <query>` 또는 `/memory <query>`로 검색.
219
115
 
220
116
  ---
221
117
 
222
- ## 비서가 어떤 일을 할 수 있나요?
223
-
224
- ```mermaid
225
- graph LR
226
- YOU["👤 사용자"] -->|웹 / 터미널 / Telegram| JAW["🦈 CLI-JAW"]
227
- JAW -->|생성| C["Claude"]
228
- JAW -->|생성| X["Codex"]
229
- JAW -->|생성| G["Gemini"]
230
- JAW -->|생성| O["OpenCode"]
231
- JAW -->|생성| P["Copilot"]
232
- JAW -->|주입| SK["📦 스킬"]
233
- JAW -->|제어| BR["🌐 Chrome"]
234
- JAW -->|전송| TG["📱 Telegram"]
235
-
236
- style JAW fill:#f5e6d3,stroke:#d4a574,stroke-width:2px,color:#5c4033
237
- ```
238
-
239
- - 🤖 **5개의 AI 엔진, 1명의 비서** — Claude · Codex · Gemini · OpenCode · Copilot. `/cli` 명령어로 전환하세요.
240
- - ⚡ **자동 전환(Fallback)** — 엔진 하나가 다운되면 다음 엔진이 매끄럽게 이어받습니다.
241
- - 🎭 **멀티 에이전트 오케스트레이션** — 복잡한 작업은 전문화된 서브 에이전트들에게 자동으로 분산됩니다.
242
- - 🎤 **음성 입력** — 웹 마이크 버튼 + 텔레그램 음성 메시지. 멀티 프로바이더 STT (OpenAI, Vertex AI).
243
- - 📝 **프롬프트 템플릿** — 시각적 노드맵 에디터로 프롬프트 템플릿 생성, 관리, 재사용.
244
- - 📦 **100개+ 스킬** — 브라우저 제어, 파일 편집, 이미지 생성, 웹 검색 외 [다양한 기능](#-스킬-시스템).
245
- - 🧠 **영구 메모리** — 세션을 넘나들며 과거의 대화와 사용자 선호도를 기억합니다.
246
- - 📱 **텔레그램 봇** — 휴대폰으로 비서와 채팅하고, 음성/사진/파일을 전송하세요.
247
- - 🌐 **브라우저 자동화** — 비서가 알아서 웹을 탐색하고, 클릭하고, 타이핑하고, 스크린샷을 찍을 수 있습니다.
248
- - 🔌 **MCP 생태계** — 한 번만 설치하면 5개의 AI 엔진 모두에서 즉시 사용 가능합니다.
249
- - 🔍 **웹 검색** — MCP 도구를 통한 실시간 정보 검색.
250
- - ⏰ **하트비트 작업** — 자동으로 실행되는 반복 일정을 등록하세요.
118
+ ## 🎭 오케스트레이션 PABCD
251
119
 
252
- ---
253
-
254
- ### 기타 실행 방법
120
+ 복잡한 작업을 위한 5단계 상태 머신. 모든 전환에 사용자 승인 필요.
255
121
 
256
- ```bash
257
- jaw chat # 터미널 TUI (브라우저 필요 없음)
258
- jaw service install # 부팅 시 자동 실행 (systemd/launchd/docker 자동 감지)
122
+ ```
123
+ P (Plan) A (Audit) B (Build) → C (Check) → D (Done) → IDLE
124
+ ⛔ ⛔ ⛔ 자동 자동
259
125
  ```
260
126
 
261
- > ⚠️ **설치 참고:** `npm install -g cli-jaw`는 postinstall 스크립트를 실행하여 스킬 디렉토리, 커스텀 인스트럭션, MCP 설정을 구성합니다. 기존 설정은 덮어쓰지 않고 병합됩니다.
262
-
263
- ---
264
-
265
- ## 📦 스킬 시스템
127
+ | 단계 | 동작 |
128
+ |---|---|
129
+ | **P** | Boss AI가 diff 수준 계획 작성. 검토를 위해 대기 |
130
+ | **A** | 읽기 전용 Worker가 계획의 실행 가능성 검증 |
131
+ | **B** | Boss가 구현. 읽기 전용 Worker가 결과 검증 |
132
+ | **C** | 타입 체크, 문서 갱신, 일관성 검사 |
133
+ | **D** | 전체 변경 요약. IDLE로 복귀 |
266
134
 
267
- **100개+ 스킬** 내장 브라우저, GitHub, 노션, 텔레그램, 메모리, PDF, 이미지 생성 [다양하게](#).
135
+ 상태는 DB에 영속화되어 서버 재시작에도 유지. Worker는 파일 수정 불가. `jaw orchestrate` 또는 `/pabcd`로 활성화.
268
136
 
269
- <details>
270
- <summary>전체 스킬 목록 보기</summary>
137
+ ---
271
138
 
272
- | 티어 | 수량 | 작동 방식 |
273
- | ------------------ | :---: | ------------------------------------------------ |
274
- | **Active 스킬** | 22 | 매번 AI한테 자동으로 주입돼요. 항상 켜져 있어요. |
275
- | **Reference 스킬** | 94 | 관련 작업을 시키면 그때 AI가 읽어서 써요. |
139
+ ## 📦 스킬
276
140
 
277
- #### Active 스킬 (항상 켜짐)
141
+ 100개 이상의 스킬, 용도별 정리.
278
142
 
279
- | 스킬 | 기능 |
280
- | ------------------------------------------------------------------- | -------------------------------------------------- |
281
- | `browser` | Chrome 자동화 스냅샷, 클릭, 네비게이트, 스크린샷 |
282
- | `github` | 이슈, PR, CI, 코드 리뷰 (`gh` CLI 사용) |
283
- | `notion` | Notion 페이지 데이터베이스 관리 |
284
- | `memory` | 세션 영속 장기 메모리 |
285
- | `telegram-send` | Telegram으로 사진, 문서, 음성 메시지 전송 |
286
- | `vision-click` | 스크린샷 AI가 좌표 찾기 클릭 (원커맨드) |
287
- | `pdf` / `pdf-expert` / `docx` / `xlsx` / `pptx` / `hwp` | 오피스 및 PDF 문서 읽기, 생성, 편집 (한글 HWP 포함) |
288
- | `screen-capture` | macOS 스크린샷 및 카메라 캡처 |
289
- | `video` | JSON 기반 Remotion 프로그래매틱 비디오 렌더링 |
290
- | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 서브에이전트용 개발 가이드 |
291
- | `dev-pabcd` / `dev-scaffolding` / `dev-code-reviewer` | 오케스트레이션, 스캐폴딩, 코드 리뷰 가이드 |
143
+ | 카테고리 | 스킬 | 기능 |
144
+ |---|---|---|
145
+ | **오피스** | `pdf`, `docx`, `xlsx`, `pptx`, `hwp` | 문서 읽기/생성/편집. OfficeCLI를 통한 한글 HWP/HWPX |
146
+ | **자동화** | `browser`, `vision-click`, `screen-capture`, `desktop-control` | Chrome CDP, AI 좌표 클릭, macOS 스크린샷/카메라, Computer Use |
147
+ | **미디어** | `video`, `imagegen`, `lecture-stt`, `tts` | Remotion 비디오, OpenAI 이미지 생성, 강의 전사, 음성 합성 |
148
+ | **통합** | `github`, `notion`, `telegram-send`, `memory` | 이슈/PR/CI, Notion 페이지, Telegram 미디어, 영속 메모리 |
149
+ | **시각화** | `diagram` | SVG 다이어그램, 차트, 인터랙티브 시각화를 채팅에서 렌더링 |
150
+ | **개발 가이드** | `dev`, `dev-frontend`, `dev-backend`, `dev-data`, `dev-testing`, `dev-pabcd` | 서브에이전트 프롬프트에 주입되는 개발 가이드라인 |
292
151
 
293
- #### Reference 스킬 (필요할 때만)
152
+ 22개 활성 스킬 (항상 주입). 94개 이상 참조 스킬 (요청 시 로드).
294
153
 
295
- 94개 스킬이 더 있어요 — imagegen, openai-docs, spotify, 날씨, 딥리서치, TTS, 비디오 다운로드, Apple 미리알림, 1Password, Terraform, PostgreSQL, Jupyter 등.
154
+ ---
296
155
 
297
- ```bash
298
- jaw skill install <name> # reference → active로 영구 활성화
299
- ```
156
+ ## 🌐 브라우저 & 데스크톱 자동화
300
157
 
301
- </details>
158
+ | 기능 | 동작 |
159
+ |---|---|
160
+ | **Chrome CDP** | 탐색, 클릭, 타이핑, 스크린샷, JS 실행, 스크롤, 포커스, 키 입력 — DevTools Protocol 10개 액션 |
161
+ | **Vision-click** | 화면 캡처 → AI가 좌표 추출 → 클릭. `jaw browser vision-click "로그인 버튼"` |
162
+ | **DOM 레퍼런스** | ChatGPT, Grok, Gemini 웹 UI의 셀렉터 맵 — 모델 선택, 중지 버튼, 도구 드로어 |
163
+ | **Computer Use** | Codex App Computer Use MCP를 통한 데스크톱 앱 자동화 |
164
+ | **Diagram 스킬** | SVG 다이어그램/인터랙티브 HTML 시각화, 샌드박스 iframe에서 렌더링 |
302
165
 
303
166
  ---
304
167
 
305
- ## 📱 텔레그램 — 내 주머니 속의 비서
168
+ ## 🔌 MCP
306
169
 
307
- 비서는 책상 앞에만 머물지 않습니다. 텔레그램을 통해 어디서든 대화하세요:
170
+ [Model Context Protocol](https://modelcontextprotocol.io)은 AI 에이전트가 외부 도구를 사용할 수 있게 합니다. CLI-JAW는 5개 엔진의 MCP 설정을 하나의 파일로 관리합니다.
308
171
 
172
+ ```bash
173
+ jaw mcp install @anthropic/context7
174
+ # → Claude, Codex, Gemini, OpenCode, Copilot 설정 파일에 동시 동기화
309
175
  ```
310
- 📱 Telegram ←→ 🦈 CLI-JAW ←→ 🤖 AI 엔진
311
- ```
312
-
313
- <details>
314
- <summary>📋 텔레그램 설정 (3단계)</summary>
315
-
316
- 1. **봇 만들기** — [@BotFather](https://t.me/BotFather)에게 `/newbot` → 토큰 복사
317
- 2. **설정** — `jaw init --telegram-token 토큰` 실행하거나 Web UI 설정에서 입력
318
- 3. **채팅 시작** — 봇에게 아무 메시지나 보내세요. 첫 메시지에서 채팅 ID가 자동 저장됩니다.
319
-
320
- </details>
321
-
322
- **텔레그램에서 가능한 작업:**
323
- - 💬 비서와 채팅 (5개 AI 엔진 중 선택)
324
- - 🎤 음성 메시지 전송 (자동 텍스트 변환)
325
- - 📎 처리를 위한 파일 및 사진 전송
326
- - 🎙️ 음성 + 텍스트 + 첨부파일을 하나의 메시지에 조합 가능
327
- - ⚡ 명령어 실행 (`/cli`, `/model`, `/status`)
328
- - 🔄 실시간 AI 엔진 전환
329
-
330
- **비서가 보내주는 내용:**
331
- - 마크다운 서식이 적용된 AI 응답
332
- - 생성된 이미지, PDF, 문서
333
- - 예약된 작업 결과 (하트비트 작업)
334
- - 브라우저 스크린샷
335
-
336
- <p align="center">
337
- <img src="docs/screenshots/telegram-bot.png" width="300" alt="텔레그램 봇" />
338
- </p>
339
176
 
340
177
  ---
341
178
 
342
- ## 🎤 음성 & STT — 음성 인식
343
-
344
- CLI-JAW는 멀티 프로바이더 STT로 모든 인터페이스에서 음성 입력을 지원합니다:
179
+ ## 💬 메시징
345
180
 
346
- | 프로바이더 | 설정 방법 |
347
- | --------------------- | ---------------------------------------------- |
348
- | **OpenAI 호환** | Settings UI → STT → OpenAI 엔드포인트 + API 키 |
349
- | **Google Vertex AI** | Settings UI → STT → Vertex AI 인증 정보 |
350
- | **커스텀 엔드포인트** | OpenAI 호환 STT API URL 직접 입력 |
181
+ ### Telegram
351
182
 
352
- **음성을 사용할 있는 곳:**
183
+ 설정 3단계: BotFather에서 생성 → `jaw init --telegram-token` → 메시지 전송.
353
184
 
354
- - 🌐 **웹 UI** 마이크 버튼으로 실시간 녹음 전사
355
- - 📱 **텔레그램** — 음성 메시지 전송 시 AI에 전달 전 자동 전사
356
- - 🎙️ **멀티모달** — 음성 + 텍스트 + 파일 첨부를 하나의 메시지에 조합 가능
185
+ 텍스트 채팅, 음성 메시지(자동 STT), 파일/사진 업로드, 슬래시 명령어, 예약 작업 결과 전송.
357
186
 
358
- 모든 STT 설정(프로바이더, API 키, 언어)은 **Settings UI**에서 관리 — 설정 파일 편집 불필요.
187
+ ### Discord
359
188
 
360
- ---
189
+ Telegram과 동일 — 텍스트, 파일, 명령어. 채널/스레드 라우팅, 에이전트 결과 포워더. 웹 UI 설정에서 구성.
361
190
 
362
- ## 🎭 멀티 에이전트 오케스트레이션
363
-
364
- ![오케스트레이션 로그](docs/screenshots/orchestration-log.png)
365
-
366
- 복잡한 작업의 경우, 비서가 전문 서브 에이전트에게 작업을 위임합니다:
367
-
368
- ```mermaid
369
- graph TD
370
- USER["👤 사용자 요청"] --> TRIAGE["🔍 트리아지 — 단순? 복잡?"]
371
-
372
- TRIAGE -->|단순| DIRECT["⚡ 직접 응답"]
373
- TRIAGE -->|복잡| PLAN["📝 기획"]
374
-
375
- PLAN --> FE["🎨 프론트엔드"]
376
- PLAN --> BE["⚙️ 백엔드"]
377
- PLAN --> DATA["📊 데이터"]
378
-
379
- FE --> GATE["🚪 게이트 리뷰"]
380
- BE --> GATE
381
- DATA --> GATE
382
-
383
- GATE -->|통과| NEXT["✅ 완료"]
384
- GATE -->|실패| RETRY["🔄 디버그 & 재시도"]
385
-
386
- style USER fill:#f5e6d3,stroke:#d4a574,stroke-width:2px,color:#5c4033
387
- style TRIAGE fill:#fdf2e9,stroke:#d4a574,color:#5c4033
388
- style PLAN fill:#f5e6d3,stroke:#d4a574,stroke-width:2px,color:#5c4033
389
- style GATE fill:#f5e6d3,stroke:#d4a574,stroke-width:2px,color:#5c4033
390
- ```
191
+ ### 음성 & STT
391
192
 
392
- 비서는 작업에 오케스트레이션이 필요한지 직접 응답이 필요한지 **스스로 결정**합니다. 별도의 설정이 필요 없습니다.
193
+ 웹(마이크 버튼), Telegram(음성 메시지), Discord에서 동작. OpenAI 호환, Google Vertex AI, 커스텀 엔드포인트 지원.
393
194
 
394
195
  ---
395
196
 
396
- ## 🔌 MCP — 단일 설정, 6개의 AI 엔진
397
-
398
- ```bash
399
- jaw mcp install @anthropic/context7 # 한 번만 설치
400
- # → Claude, Codex, Gemini, OpenCode, Copilot, Antigravity 전부 자동 동기화
401
- ```
402
-
403
- ```mermaid
404
- graph LR
405
- MJ["📄 mcp.json"] -->|자동 동기화| CL["Claude"]
406
- MJ -->|자동 동기화| CX["Codex"]
407
- MJ -->|자동 동기화| GM["Gemini"]
408
- MJ -->|자동 동기화| OC["OpenCode"]
409
- MJ -->|자동 동기화| CP["코파일럿"]
410
- MJ -->|자동 동기화| AG["안티그래비티"]
411
-
412
- style MJ fill:#f5e6d3,stroke:#d4a574,stroke-width:2px,color:#5c4033
413
- ```
197
+ ## 스케줄링
414
198
 
415
- 설정 파일 6개를 별도로 수정할 필요가 없습니다. 한 번만 설치하면 모든 AI 엔진에 적용됩니다.
199
+ | 기능 | 설명 |
200
+ |---|---|
201
+ | **Heartbeat 작업** | Cron 예약 작업을 무인 실행. Telegram/Discord로 결과 전달 |
202
+ | **서비스 자동 시작** | `jaw service install` — systemd, launchd, Docker 자동 감지 |
416
203
 
417
204
  ---
418
205
 
@@ -420,185 +207,140 @@ graph LR
420
207
 
421
208
  ```bash
422
209
  jaw serve # 서버 시작
423
- jaw service install # 부팅 시 자동 실행 (systemd/launchd/docker 자동 감지)
424
- jaw service status # 데몬 상태 확인
425
- jaw service unset # 자동 실행 해제
426
- jaw service logs # 서비스 로그 보기
427
210
  jaw chat # 터미널 TUI
428
- jaw doctor # 진단 (12개 체크)
429
- jaw skill install <name> # 스킬 설치
430
- jaw mcp install <package> # MCP 설치 → 6개 CLI 전부 동기화
211
+ jaw doctor # 12개 항목 진단
212
+ jaw service install # 부팅 시 자동 시작
213
+ jaw skill install <name> # 스킬 활성화
214
+ jaw mcp install <package> # MCP 설치 → 5개 엔진 동기화
431
215
  jaw memory search <query> # 메모리 검색
432
- jaw browser start # Chrome 시작 (CDP)
433
- jaw browser vision-click "로그인" # AI 알아서 클릭
434
- jaw clone ~/my-project # 인스턴스 복제
435
- jaw --home ~/my-project serve --port 3458 # 번째 인스턴스 실행
216
+ jaw browser start # Chrome 실행 (CDP)
217
+ jaw browser vision-click "로그인" # AI 좌표 클릭
218
+ jaw clone ~/project # 인스턴스 복제
219
+ jaw orchestrate # PABCD 진입
436
220
  jaw reset # 전체 초기화
437
221
  ```
438
222
 
439
223
  ---
440
224
 
441
- ## 🏗️ 멀티 인스턴스 — 프로젝트별 독립 환경
442
-
443
- CLI-JAW의 독립된 인스턴스를 여러 개 실행할 수 있어요 — 각각 고유한 설정, 메모리, 스킬, 데이터베이스를 가집니다.
225
+ ## 🐳 Docker
444
226
 
445
227
  ```bash
446
- # 기본 인스턴스를 프로젝트로 복제
447
- jaw clone ~/my-project
448
-
449
- # 다른 포트로 실행
450
- jaw --home ~/my-project serve --port 3458
451
-
452
- # 또는 둘 다 부팅 시 자동 실행
453
- jaw service install # 기본 → 포트 3457
454
- jaw --home ~/my-project service install --port 3458 # 프로젝트 → 포트 3458
228
+ docker compose up -d # http://localhost:3457
455
229
  ```
456
230
 
457
- 인스턴스는 완전히 독립적입니다 작업 디렉토리, 메모리, MCP 설정이 모두 다릅니다. 업무/개인 컨텍스트 분리나 프로젝트별 AI 설정에 안성맞춤이에요.
458
-
459
- | 플래그 / 환경변수 | 기능 |
460
- | --------------------- | ---------------------------------------- |
461
- | `--home <경로>` | 이 실행에 사용할 커스텀 홈 디렉토리 지정 |
462
- | `--home=<경로>` | 동일 (`=` 구문) |
463
- | `CLI_JAW_HOME=<경로>` | 환경변수로 지정 |
464
- | `jaw clone <대상>` | 현재 인스턴스를 새 디렉토리로 복제 |
465
- | `--port <포트>` | `serve` / `service`용 커스텀 포트 |
231
+ 비root `jaw` 사용자, Chromium 샌드박스 기본 활성화. `Dockerfile`(npm 설치)과 `Dockerfile.dev`(로컬 소스) 제공.
466
232
 
467
233
  ---
468
234
 
469
- ## 🤖 모델
235
+ ## 📖 문서
470
236
 
471
- CLI마다 프리셋이 있지만, **아무 모델 ID나** 직접 쳐도 돼요.
237
+ | 문서 | 내용 |
238
+ |---|---|
239
+ | [CHANGELOG.md](CHANGELOG.md) | 릴리스 로그 (v1.6.0 캐치업: v1.2.0~v1.5.1 포함) |
240
+ | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | 시스템 설계, 모듈 그래프, 95개 API 핸들러 |
241
+ | [TESTS.md](TESTS.md) | 테스트 커버리지, 카운트, 계획 |
242
+ | [memory-architecture.md](docs/memory-architecture.md) | 3계층 메모리 모델, 인덱싱, 런타임 |
243
+ | [devlog/structure/](devlog/structure/) | 내부 아키텍처 레퍼런스 |
472
244
 
473
- <details>
474
- <summary>전체 프리셋 보기</summary>
245
+ ---
475
246
 
476
- | CLI | 기본값 | 주요 모델 |
477
- | ------------ | -------------------------- | ---------------------------------------------- |
478
- | **Claude** | `claude-sonnet-4-6` | opus-4-6, haiku-4-5, 확장 사고 변형 |
479
- | **Codex** | `gpt-5.3-codex` | spark, 5.2, 5.1-max, 5.1-mini |
480
- | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview, 3-flash-preview, 2.5-flash |
481
- | **OpenCode** | `claude-opus-4-6-thinking` | 🆓 big-pickle, GLM-5, MiniMax, Kimi, GPT-5-Nano |
482
- | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini, claude-sonnet-4.6, opus-4.6 |
247
+ ## ⚖️ 비교
483
248
 
484
- </details>
249
+ | | CLI-JAW | Hermes Agent | Claude Code |
250
+ |---|---|---|---|
251
+ | **모델 접근** | OAuth 월정액 + OpenCode 와일드카드 | API 키 (OpenRouter 200+) | Anthropic 전용 |
252
+ | **비용** | 기존 월정액 | 토큰 단위 과금 | Anthropic 구독 |
253
+ | **주 UI** | 웹 PWA + Mac 앱 + TUI | TUI 전용 | CLI + IDE 플러그인 |
254
+ | **메시징** | Telegram(음성) + Discord | TG/Discord/Slack/WhatsApp/Signal | 없음 |
255
+ | **메모리** | 3계층 + FTS5 | 자기학습 루프 + Honcho | 파일 기반 |
256
+ | **브라우저** | CDP + vision-click + DOM ref | 제한적 | MCP 경유 |
257
+ | **오케스트레이션** | PABCD 5단계 FSM | 서브에이전트 스폰 | Task 도구 |
485
258
 
486
- > 🔧 프리셋에 모델 추가하고 싶으면: `src/cli/registry.ts` 하나만 고치면 전체 자동 반영.
259
+ CLI-JAW는 OpenClaw 하네스 아키텍처(하이브리드 검색 매니저, 폴백 패턴, 세션 인덱싱)를 계승합니다.
487
260
 
488
261
  ---
489
262
 
490
- ## 🐳 Docker — 컨테이너 격리
263
+ ## 🏗️ 멀티 인스턴스
491
264
 
492
- 보안 격리를 위해 Docker 컨테이너에서 실행 AI 에이전트가 호스트 파일에 접근 불가.
265
+ 별도의 설정, 메모리, 데이터베이스를 가진 독립 인스턴스를 실행할 있습니다.
493
266
 
494
267
  ```bash
495
- docker compose up -d # → http://localhost:3457
268
+ jaw clone ~/my-project
269
+ jaw --home ~/my-project serve --port 3458
496
270
  ```
497
271
 
498
- > 자세한 내용은 [English README](README.md#-docker--container-isolation) 참고.
499
- > `Dockerfile` (npm 배포판) / `Dockerfile.dev` (로컬 소스) 두 가지 제공.
500
-
501
272
  ---
502
273
 
503
274
  ## 🛠️ 개발
504
275
 
505
276
  <details>
506
- <summary>빌드, 실행, 프로젝트 구조</summary>
277
+ <summary>빌드 프로젝트 구조</summary>
507
278
 
508
279
  ```bash
509
- # 빌드 (TypeScript → JavaScript)
510
280
  npm run build # tsc → dist/
511
-
512
- # 소스에서 실행 (개발용)
513
- npm run dev # tsx server.ts
514
- npx tsx bin/cli-jaw.ts serve # .ts에서 직접 실행
515
-
516
- # 빌드 결과물로 실행 (프로덕션)
517
- node dist/bin/cli-jaw.js serve
281
+ npm run dev # tsx server.ts (핫 리로드)
518
282
  ```
519
283
 
520
- **프로젝트 구조:**
521
-
522
284
  ```
523
285
  src/
524
- ├── agent/ # AI 에이전트 라이프사이클 & 스폰
525
- ├── browser/ # Chrome CDP 자동화
526
- ├── cli/ # CLI 레지스트리 & 모델 프리셋
527
- ├── core/ # DB, 설정, 로깅
528
- ├── http/ # Express 서버 & 미들웨어
529
- ├── memory/ # 영속 메모리 시스템
530
- ├── orchestrator/ # 멀티에이전트 오케스트레이션 파이프라인
531
- ├── prompt/ # 프롬프트 주입 & AGENTS.md 생성
532
- ├── routes/ # REST API 엔드포인트 (40+)
533
- ├── security/ # 입력 검증 & 가드레일
534
- └── telegram/ # 텔레그램 봇 연동
286
+ ├── agent/ # AI 에이전트 생명주기, 스폰, History Block
287
+ ├── browser/ # Chrome CDP, vision-click
288
+ ├── cli/ # CLI 레지스트리, 슬래시 명령어, 모델 프리셋
289
+ ├── core/ # DB, 설정, Employee, 로깅
290
+ ├── discord/ # Discord 봇, 명령어, 파일 전송
291
+ ├── memory/ # 3계층 메모리, FTS5 인덱싱, Flush, Soul
292
+ ├── orchestrator/ # PABCD 상태 머신, Worker 레지스트리
293
+ ├── routes/ # REST API (95개 핸들러, 94개 엔드포인트)
294
+ ├── security/ # 입력 검증, 경로 보호
295
+ └── telegram/ # Telegram 봇, 음성 STT, 포워더
535
296
  ```
536
297
 
537
- > TypeScript — `strict: true`, `NodeNext` 모듈 해상도, ES2022 타겟.
538
-
539
298
  </details>
540
299
 
541
300
  ---
542
301
 
543
302
  ## 🧪 테스트
544
303
 
545
- <details>
546
- <summary>현재 패스 수와 인벤토리는 TESTS.md 기준</summary>
547
-
548
304
  ```bash
549
- npm test
305
+ npm test # tsx --test (Node.js 네이티브 테스트 러너)
550
306
  ```
551
307
 
552
- `tsx --test`로 실행 (Node.js 네이티브 테스트 러너 + TypeScript).
553
-
554
- </details>
308
+ [TESTS.md](TESTS.md)에서 현재 인벤토리와 통과 확인.
555
309
 
556
310
  ---
557
311
 
558
- ## 📖 문서
559
-
560
- | 문서 | 내용 |
561
- | --------------------------------------- | --------------------------------------------------- |
562
- | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | 시스템 설계, 모듈 그래프, REST API (40+ 엔드포인트) |
563
- | [TESTS.md](TESTS.md) | 테스트 커버리지, 테스트 계획 |
312
+ ## 문제 해결
564
313
 
565
- ---
566
-
567
- ## 🔧 문제 해결
568
-
569
- | 증상 | 원인 | 해결 방법 |
570
- | ---------------------------- | ---------------------------------- | --------------------------------------------------------------------------- |
571
- | `command not found: cli-jaw` | npm 전역 bin이 PATH에 없음 | `npm config get prefix` 확인 후 `bin/`을 PATH에 추가 |
572
- | `doctor`에서 CLI 누락 표시 | 해당 CLI 미설치 | `npm i -g @anthropic-ai/claude-code` 설치 |
573
- | 포트 3457 사용 중 | 다른 프로세스가 점유 | `PORT=4000 jaw serve` 또는 기존 프로세스 종료 |
574
- | 텔레그램 무반응 | 토큰 미설정 또는 Chat ID 누락 | `jaw init --telegram-token ...` 재실행 |
575
- | 텔레그램 ✓✓ 지연 표시 | Telegram 서버 측 전달 확인 타이밍 | 정상 동작 서버 부하에 따라 걸릴 수 있음. 버그 아님 |
576
- | `npm install -g` 권한 오류 | 글로벌 디렉토리 권한 문제 | `sudo npm i -g cli-jaw` 또는 [nvm](https://github.com/nvm-sh/nvm) 사용 권장 |
577
- | 빌드 실패 (`tsc` 에러) | Node 22 미만 버전 | `node -v` 확인 → 22 이상으로 업그레이드 |
578
- | 메모리가 세션 간 유지 안 됨 | `~/.cli-jaw/memory/` 디렉토리 없음 | `jaw init` 재실행하면 자동 생성 |
314
+ <details>
315
+ <summary>자주 발생하는 문제</summary>
316
+
317
+ | 문제 | 해결 |
318
+ |---|---|
319
+ | `cli-jaw: command not found` | `npm install -g cli-jaw` 재실행. `npm bin -g`가 `$PATH`에 있는지 확인 |
320
+ | `Error: node version` | Node.js 22+로 업그레이드: `nvm install 22` |
321
+ | `NODE_MODULE_VERSION` 불일치 | `npm run ensure:native` (자동 재빌드) |
322
+ | 에이전트 타임아웃 | `jaw doctor`로 CLI 인증 확인 |
323
+ | `EADDRINUSE: port 3457` | 다른 인스턴스 실행 중. `--port 3458` 사용 |
324
+ | Telegram 무응답 | `jaw doctor`로 토큰 확인. `jaw serve` 실행 중인지 확인 |
325
+ | 스킬 미로드 | `jaw skill reset` `jaw mcp sync` |
326
+ | 브라우저 명령어 실패 | Chrome 설치. `jaw browser start` 먼저 실행 |
579
327
 
580
- > 📋 클린 재설치가 필요하신가요? [영문 README의 Fresh Start 가이드](README.md#-troubleshooting)를 참고하세요.
328
+ </details>
581
329
 
582
330
  ---
583
331
 
584
332
  ## 🤝 기여하기
585
333
 
586
- 기여 환영합니다! 시작하는 방법:
334
+ 1. `master`에서 포크 & 브랜치
335
+ 2. `npm run build && npm test`
336
+ 3. PR 제출
587
337
 
588
- 1. 레포를 포크하고 `master`에서 브랜치를 만드세요
589
- 2. `npm run build && npm test`로 빌드 & 테스트가 통과하는지 확인
590
- 3. PR을 보내주세요 — 빠르게 리뷰할게요
591
-
592
- > 📋 버그를 찾았거나 아이디어가 있으신가요? [이슈 열기](https://github.com/lidge-jun/cli-jaw/issues)
338
+ 버그나 아이디어? [이슈 열기](https://github.com/lidge-jun/cli-jaw/issues)
593
339
 
594
340
  ---
595
341
 
596
342
  <div align="center">
597
343
 
598
- **⭐ CLI-JAW가 도움이 됐다면 Star 한 번 눌러주세요!**
599
-
600
- Made with ❤️ by the CLI-JAW community
601
-
602
- [MIT License](LICENSE)
344
+ **[MIT License](LICENSE)**
603
345
 
604
346
  </div>