cli-jaw 0.1.1 → 0.1.2

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
@@ -30,13 +30,13 @@ CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **
30
30
 
31
31
  단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다. 107개의 내장 스킬이 브라우저 자동화부터 문서 생성까지 모든 것을 처리합니다.
32
32
 
33
- | | 왜 CLI-JAW인가요? |
34
- |---|---|
35
- | 🛡️ **안전한 서비스 약관 준수** | 공식 CLI만 사용합니다 — API 키 스크래핑이나 리버스 엔지니어링이 없으므로 계정 정지 위험이 없습니다. |
36
- | 🤖 **검증된 에이전트 도구** | 실전에서 검증된 5개의 코딩 에이전트(Claude, Codex, Gemini, OpenCode, Copilot)를 한 곳에서 사용하세요. |
37
- | ⚡ **멀티 에이전트 자동 전환(Fallback)** | 엔진 하나가 멈춰도 걱정 없습니다. 다음 엔진이 즉시 이어받아 중단 없는 작업이 가능합니다. |
38
- | 🎭 **오케스트레이션 기반 성능 극대화** | 복잡한 작업은 전문화된 서브 에이전트에게 분산시켜 처리량을 극대화합니다. |
39
- | 📦 **107개의 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
33
+ | | 왜 CLI-JAW인가요? |
34
+ | --------------------------------------- | ----------------------------------------------------------------------------------------------------- |
35
+ | 🛡️ **안전한 서비스 약관 준수** | 공식 CLI만 사용합니다 — API 키 스크래핑이나 리버스 엔지니어링이 없으므로 계정 정지 위험이 없습니다. |
36
+ | 🤖 **검증된 에이전트 도구** | 실전에서 검증된 5개의 코딩 에이전트(Claude, Codex, Gemini, OpenCode, Copilot)를 한 곳에서 사용하세요. |
37
+ | ⚡ **멀티 에이전트 자동 전환(Fallback)** | 엔진 하나가 멈춰도 걱정 없습니다. 다음 엔진이 즉시 이어받아 중단 없는 작업이 가능합니다. |
38
+ | 🎭 **오케스트레이션 기반 성능 극대화** | 복잡한 작업은 전문화된 서브 에이전트에게 분산시켜 처리량을 극대화합니다. |
39
+ | 📦 **107개의 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
40
40
 
41
41
  ![CLI-JAW 터미널](docs/screenshots/terminal-cli.png)
42
42
 
@@ -76,10 +76,10 @@ graph LR
76
76
 
77
77
  ### 사전 요구사항
78
78
 
79
- | 필수 항목 | 용도 |
80
- |-----------|------|
81
- | **Node.js ≥ 22** | 런타임. [다운로드](https://nodejs.org) |
82
- | **AI CLI 최소 1개** | 비서를 움직이는 두뇌 |
79
+ | 필수 항목 | 용도 |
80
+ | ------------------- | -------------------------------------- |
81
+ | **Node.js ≥ 22** | 런타임. [다운로드](https://nodejs.org) |
82
+ | **AI CLI 최소 1개** | 비서를 움직이는 두뇌 |
83
83
 
84
84
  > 🆓 **무료 옵션:** [Copilot CLI](https://docs.github.com/en/copilot)는 GitHub 무료 플랜에서도, [OpenCode](https://opencode.ai)는 무료 모델이 있어요 — 카드 등록 없이 바로 시작 가능.
85
85
 
@@ -90,14 +90,14 @@ graph LR
90
90
  npm install -g cli-jaw
91
91
 
92
92
  # 2. 초기 설정 (설정 파일 생성, 스킬 설치)
93
- cli-jaw init
93
+ jaw init
94
94
 
95
95
  # 3. 상태 확인 — 뭐가 준비됐는지 점검
96
- cli-jaw doctor
96
+ jaw doctor
97
97
  ```
98
98
 
99
99
  <details>
100
- <summary>📋 <code>cli-jaw doctor</code> 출력 예시</summary>
100
+ <summary>📋 <code>jaw doctor</code> 출력 예시</summary>
101
101
 
102
102
  ```
103
103
  🦈 CLI-JAW Doctor — 12 checks
@@ -132,9 +132,10 @@ gemini # Google (첫 실행 시 자동 인증)
132
132
  ### 실행
133
133
 
134
134
  ```bash
135
- cli-jaw serve # Web UI → http://localhost:3457
135
+ jaw serve # Web UI → http://localhost:3457
136
+ jaw launchd # 부팅 시 자동 실행 (macOS)
136
137
  # — 또는 —
137
- cli-jaw chat # 터미널 TUI (브라우저 필요 없음)
138
+ jaw chat # 터미널 TUI (브라우저 필요 없음)
138
139
  ```
139
140
 
140
141
  > 💡 **5개 다 깔 필요 없어요.** 하나만 있으면 됩니다. 어떤 엔진이 설치돼 있는지 자동 감지하고, 없으면 다음 엔진으로 자연스럽게 넘어갑니다.
@@ -148,33 +149,33 @@ cli-jaw chat # 터미널 TUI (브라우저 필요 없음)
148
149
  <details>
149
150
  <summary>전체 스킬 목록 보기</summary>
150
151
 
151
- | 티어 | 수량 | 작동 방식 |
152
- |------|:----:|----------|
153
- | **Active 스킬** | 17 | 매번 AI한테 자동으로 주입돼요. 항상 켜져 있어요. |
154
- | **Reference 스킬** | 88+ | 관련 작업을 시키면 그때 AI가 읽어서 써요. |
152
+ | 티어 | 수량 | 작동 방식 |
153
+ | ------------------ | :---: | ------------------------------------------------ |
154
+ | **Active 스킬** | 17 | 매번 AI한테 자동으로 주입돼요. 항상 켜져 있어요. |
155
+ | **Reference 스킬** | 88+ | 관련 작업을 시키면 그때 AI가 읽어서 써요. |
155
156
 
156
157
  #### Active 스킬 (항상 켜짐)
157
158
 
158
- | 스킬 | 기능 |
159
- |------|------|
160
- | `browser` | Chrome 자동화 — 스냅샷, 클릭, 네비게이트, 스크린샷 |
161
- | `github` | 이슈, PR, CI, 코드 리뷰 (`gh` CLI 사용) |
162
- | `notion` | Notion 페이지 및 데이터베이스 관리 |
163
- | `memory` | 세션 간 영속 장기 메모리 |
164
- | `telegram-send` | Telegram으로 사진, 문서, 음성 메시지 전송 |
165
- | `vision-click` | 스크린샷 → AI가 좌표 찾기 → 클릭 (원커맨드) |
166
- | `imagegen` | OpenAI Image API로 이미지 생성/편집 |
167
- | `pdf` / `docx` / `xlsx` | 오피스 문서 읽기, 생성, 편집 |
168
- | `screen-capture` | macOS 스크린샷 및 카메라 캡처 |
169
- | `openai-docs` | 최신 OpenAI API 문서 |
170
- | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 서브에이전트용 개발 가이드 |
159
+ | 스킬 | 기능 |
160
+ | ------------------------------------------------------------------- | -------------------------------------------------- |
161
+ | `browser` | Chrome 자동화 — 스냅샷, 클릭, 네비게이트, 스크린샷 |
162
+ | `github` | 이슈, PR, CI, 코드 리뷰 (`gh` CLI 사용) |
163
+ | `notion` | Notion 페이지 및 데이터베이스 관리 |
164
+ | `memory` | 세션 간 영속 장기 메모리 |
165
+ | `telegram-send` | Telegram으로 사진, 문서, 음성 메시지 전송 |
166
+ | `vision-click` | 스크린샷 → AI가 좌표 찾기 → 클릭 (원커맨드) |
167
+ | `imagegen` | OpenAI Image API로 이미지 생성/편집 |
168
+ | `pdf` / `docx` / `xlsx` | 오피스 문서 읽기, 생성, 편집 |
169
+ | `screen-capture` | macOS 스크린샷 및 카메라 캡처 |
170
+ | `openai-docs` | 최신 OpenAI API 문서 |
171
+ | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 서브에이전트용 개발 가이드 |
171
172
 
172
173
  #### Reference 스킬 (필요할 때만)
173
174
 
174
175
  88개+ 스킬이 더 있어요 — spotify, 날씨, 딥리서치, TTS, 비디오 다운로드, Apple 미리알림, 1Password, Terraform, PostgreSQL, Jupyter 등.
175
176
 
176
177
  ```bash
177
- cli-jaw skill install <name> # reference → active로 영구 활성화
178
+ jaw skill install <name> # reference → active로 영구 활성화
178
179
  ```
179
180
 
180
181
  </details>
@@ -193,7 +194,7 @@ cli-jaw skill install <name> # reference → active로 영구 활성화
193
194
  <summary>📋 텔레그램 설정 (3단계)</summary>
194
195
 
195
196
  1. **봇 만들기** — [@BotFather](https://t.me/BotFather)에게 `/newbot` → 토큰 복사
196
- 2. **설정** — `cli-jaw init --telegram-token 토큰` 실행하거나 Web UI 설정에서 입력
197
+ 2. **설정** — `jaw init --telegram-token 토큰` 실행하거나 Web UI 설정에서 입력
197
198
  3. **채팅 시작** — 봇에게 아무 메시지나 보내세요. 첫 메시지에서 채팅 ID가 자동 저장됩니다.
198
199
 
199
200
  </details>
@@ -254,7 +255,7 @@ graph TD
254
255
  ## 🔌 MCP — 단일 설정, 5개의 AI 엔진
255
256
 
256
257
  ```bash
257
- cli-jaw mcp install @anthropic/context7 # 한 번만 설치
258
+ jaw mcp install @anthropic/context7 # 한 번만 설치
258
259
  # → Claude, Codex, Gemini, OpenCode, Copilot 전부 자동 동기화
259
260
  ```
260
261
 
@@ -276,15 +277,18 @@ graph LR
276
277
  ## ⌨️ CLI 명령어
277
278
 
278
279
  ```bash
279
- cli-jaw serve # 서버 시작
280
- cli-jaw chat # 터미널 TUI
281
- cli-jaw doctor # 진단 (12개 체크)
282
- cli-jaw skill install <name> # 스킬 설치
283
- cli-jaw mcp install <package> # MCP 설치 → 5개 CLI 전부 동기화
284
- cli-jaw memory search <query> # 메모리 검색
285
- cli-jaw browser start # Chrome 시작 (CDP)
286
- cli-jaw browser vision-click "로그인" # AI가 알아서 클릭
287
- cli-jaw reset # 전체 초기화
280
+ jaw serve # 서버 시작
281
+ jaw launchd # 부팅 시 자동 실행 (macOS)
282
+ jaw launchd status # 데몬 상태 확인
283
+ jaw launchd unset # 자동 실행 해제
284
+ jaw chat # 터미널 TUI
285
+ jaw doctor # 진단 (12개 체크)
286
+ jaw skill install <name> # 스킬 설치
287
+ jaw mcp install <package> # MCP 설치 → 5개 CLI 전부 동기화
288
+ jaw memory search <query> # 메모리 검색
289
+ jaw browser start # Chrome 시작 (CDP)
290
+ jaw browser vision-click "로그인" # AI가 알아서 클릭
291
+ jaw reset # 전체 초기화
288
292
  ```
289
293
 
290
294
  ---
@@ -296,13 +300,13 @@ cli-jaw reset # 전체 초기화
296
300
  <details>
297
301
  <summary>전체 프리셋 보기</summary>
298
302
 
299
- | CLI | 기본값 | 주요 모델 |
300
- |-----|--------|-----------|
301
- | **Claude** | `claude-sonnet-4-6` | opus-4-6, haiku-4-5, 확장 사고 변형 |
302
- | **Codex** | `gpt-5.3-codex` | spark, 5.2, 5.1-max, 5.1-mini |
303
- | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview, 3-flash-preview, 2.5-flash |
303
+ | CLI | 기본값 | 주요 모델 |
304
+ | ------------ | -------------------------- | ---------------------------------------------- |
305
+ | **Claude** | `claude-sonnet-4-6` | opus-4-6, haiku-4-5, 확장 사고 변형 |
306
+ | **Codex** | `gpt-5.3-codex` | spark, 5.2, 5.1-max, 5.1-mini |
307
+ | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview, 3-flash-preview, 2.5-flash |
304
308
  | **OpenCode** | `claude-opus-4-6-thinking` | 🆓 big-pickle, GLM-5, MiniMax, Kimi, GPT-5-Nano |
305
- | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini, claude-sonnet-4.6, opus-4.6 |
309
+ | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini, claude-sonnet-4.6, opus-4.6 |
306
310
 
307
311
  </details>
308
312
 
@@ -367,24 +371,24 @@ npm test
367
371
 
368
372
  ## 📖 문서
369
373
 
370
- | 문서 | 내용 |
371
- |------|------|
374
+ | 문서 | 내용 |
375
+ | --------------------------------------- | --------------------------------------------------- |
372
376
  | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | 시스템 설계, 모듈 그래프, REST API (40+ 엔드포인트) |
373
- | [TESTS.md](TESTS.md) | 테스트 커버리지, 테스트 계획 |
377
+ | [TESTS.md](TESTS.md) | 테스트 커버리지, 테스트 계획 |
374
378
 
375
379
  ---
376
380
 
377
381
  ## 🔧 문제 해결
378
382
 
379
- | 증상 | 원인 | 해결 방법 |
380
- |------|------|-----------|
381
- | `command not found: cli-jaw` | npm 전역 bin이 PATH에 없음 | `npm config get prefix` 확인 후 `bin/`을 PATH에 추가 |
382
- | `doctor`에서 CLI 누락 표시 | 해당 CLI 미설치 | `npm i -g @anthropic-ai/claude-code` 등 설치 |
383
- | 포트 3457 사용 중 | 다른 프로세스가 점유 | `PORT=4000 cli-jaw serve` 또는 기존 프로세스 종료 |
384
- | 텔레그램 봇 무반응 | 토큰 미설정 또는 Chat ID 누락 | `cli-jaw init --telegram-token ...` 재실행 |
385
- | `npm install -g` 권한 오류 | 글로벌 디렉토리 권한 문제 | `sudo npm i -g cli-jaw` 또는 [nvm](https://github.com/nvm-sh/nvm) 사용 권장 |
386
- | 빌드 실패 (`tsc` 에러) | Node 22 미만 버전 | `node -v` 확인 → 22 이상으로 업그레이드 |
387
- | 메모리가 세션 간 유지 안 됨 | `~/.cli-jaw/memory/` 디렉토리 없음 | `cli-jaw init` 재실행하면 자동 생성 |
383
+ | 증상 | 원인 | 해결 방법 |
384
+ | ---------------------------- | ---------------------------------- | --------------------------------------------------------------------------- |
385
+ | `command not found: cli-jaw` | npm 전역 bin이 PATH에 없음 | `npm config get prefix` 확인 후 `bin/`을 PATH에 추가 |
386
+ | `doctor`에서 CLI 누락 표시 | 해당 CLI 미설치 | `npm i -g @anthropic-ai/claude-code` 등 설치 |
387
+ | 포트 3457 사용 중 | 다른 프로세스가 점유 | `PORT=4000 jaw serve` 또는 기존 프로세스 종료 |
388
+ | 텔레그램 봇 무반응 | 토큰 미설정 또는 Chat ID 누락 | `jaw init --telegram-token ...` 재실행 |
389
+ | `npm install -g` 권한 오류 | 글로벌 디렉토리 권한 문제 | `sudo npm i -g cli-jaw` 또는 [nvm](https://github.com/nvm-sh/nvm) 사용 권장 |
390
+ | 빌드 실패 (`tsc` 에러) | Node 22 미만 버전 | `node -v` 확인 → 22 이상으로 업그레이드 |
391
+ | 메모리가 세션 간 유지 안 됨 | `~/.cli-jaw/memory/` 디렉토리 없음 | `jaw init` 재실행하면 자동 생성 |
388
392
 
389
393
  ---
390
394
 
package/README.md CHANGED
@@ -30,13 +30,13 @@ CLI-JAW is a **personal AI assistant** that lives on your machine and works from
30
30
 
31
31
  Unlike single-model assistants, CLI-JAW orchestrates **5 AI engines** (Claude, Codex, Gemini, OpenCode, Copilot) through their official CLIs — giving you the best of every provider in one unified experience. If one engine is busy, it automatically falls back to the next. 107 built-in skills handle everything from browser automation to document generation.
32
32
 
33
- | | Why CLI-JAW? |
34
- |---|---|
35
- | 🛡️ **TOS-Safe** | Uses official CLIs only — no API key scraping, no reverse engineering, no ban risk. |
36
- | 🤖 **Verified Agent Tools** | 5 battle-tested coding agents (Claude, Codex, Gemini, OpenCode, Copilot) under one roof. |
37
- | ⚡ **Multi-Agent Fallback** | One engine down? The next picks up automatically. Zero downtime. |
38
- | 🎭 **Orchestrated Performance** | Complex tasks split across specialized sub-agents for maximum throughput. |
39
- | 📦 **107 Built-in Skills** | Browser automation, document generation, Telegram, memory — ready out of the box. |
33
+ | | Why CLI-JAW? |
34
+ | ------------------------------ | ---------------------------------------------------------------------------------------- |
35
+ | 🛡️ **TOS-Safe** | Uses official CLIs only — no API key scraping, no reverse engineering, no ban risk. |
36
+ | 🤖 **Verified Agent Tools** | 5 battle-tested coding agents (Claude, Codex, Gemini, OpenCode, Copilot) under one roof. |
37
+ | ⚡ **Multi-Agent Fallback** | One engine down? The next picks up automatically. Zero downtime. |
38
+ | 🎭 **Orchestrated Performance** | Complex tasks split across specialized sub-agents for maximum throughput. |
39
+ | 📦 **107 Built-in Skills** | Browser automation, document generation, Telegram, memory — ready out of the box. |
40
40
 
41
41
  ![CLI-JAW Terminal](docs/screenshots/terminal-cli.png)
42
42
 
@@ -76,10 +76,10 @@ graph LR
76
76
 
77
77
  ### Prerequisites
78
78
 
79
- | Requirement | Why |
80
- |-------------|-----|
81
- | **Node.js ≥ 22** | Runtime. [Download](https://nodejs.org) |
82
- | **At least 1 AI CLI** | The engine that powers your assistant |
79
+ | Requirement | Why |
80
+ | --------------------- | --------------------------------------- |
81
+ | **Node.js ≥ 22** | Runtime. [Download](https://nodejs.org) |
82
+ | **At least 1 AI CLI** | The engine that powers your assistant |
83
83
 
84
84
  > 🆓 **Free options:** [Copilot CLI](https://docs.github.com/en/copilot) (GitHub free tier) and [OpenCode](https://opencode.ai) have free models — no credit card needed.
85
85
 
@@ -90,14 +90,14 @@ graph LR
90
90
  npm install -g cli-jaw
91
91
 
92
92
  # 2. Run setup wizard (creates config, installs skills)
93
- cli-jaw init
93
+ jaw init
94
94
 
95
95
  # 3. Health check — see what's ready
96
- cli-jaw doctor
96
+ jaw doctor
97
97
  ```
98
98
 
99
99
  <details>
100
- <summary>📋 Example <code>cli-jaw doctor</code> output</summary>
100
+ <summary>📋 Example <code>jaw doctor</code> output</summary>
101
101
 
102
102
  ```
103
103
  🦈 CLI-JAW Doctor — 12 checks
@@ -132,9 +132,10 @@ gemini # Google (first run triggers auth)
132
132
  ### Launch
133
133
 
134
134
  ```bash
135
- cli-jaw serve # Web UI → http://localhost:3457
135
+ jaw serve # Web UI → http://localhost:3457
136
+ jaw launchd # Auto-start on boot (macOS)
136
137
  # — or —
137
- cli-jaw chat # Terminal TUI (no browser needed)
138
+ jaw chat # Terminal TUI (no browser needed)
138
139
  ```
139
140
 
140
141
  > 💡 **You don't need all 5.** Even one CLI is enough to start. Your assistant auto-detects which engines are available and falls back gracefully.
@@ -148,33 +149,33 @@ cli-jaw chat # Terminal TUI (no browser needed)
148
149
  <details>
149
150
  <summary>View all skills</summary>
150
151
 
151
- | Tier | Count | How it works |
152
- |------|:-----:|--------------|
153
- | **Active Skills** | 17 | Auto-injected into every AI prompt. Always available. |
154
- | **Reference Skills** | 90 | AI reads them on-demand when you ask for a relevant task. |
152
+ | Tier | Count | How it works |
153
+ | -------------------- | :---: | --------------------------------------------------------- |
154
+ | **Active Skills** | 17 | Auto-injected into every AI prompt. Always available. |
155
+ | **Reference Skills** | 90 | AI reads them on-demand when you ask for a relevant task. |
155
156
 
156
157
  #### Active Skills (always on)
157
158
 
158
- | Skill | What it does |
159
- |-------|-------------|
160
- | `browser` | Chrome automation — snapshot, click, navigate, screenshot |
161
- | `github` | Issues, PRs, CI, code review via `gh` CLI |
162
- | `notion` | Create/manage Notion pages and databases |
163
- | `memory` | Persistent long-term memory across sessions |
164
- | `telegram-send` | Send photos, documents, voice messages to Telegram |
165
- | `vision-click` | Screenshot → AI finds coordinates → clicks (one command) |
166
- | `imagegen` | Generate/edit images via OpenAI Image API |
167
- | `pdf` / `docx` / `xlsx` | Read, create, edit office documents |
168
- | `screen-capture` | macOS screenshot and camera capture |
169
- | `openai-docs` | Up-to-date OpenAI API documentation |
170
- | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | Development guidelines for sub-agents |
159
+ | Skill | What it does |
160
+ | ------------------------------------------------------------------- | --------------------------------------------------------- |
161
+ | `browser` | Chrome automation — snapshot, click, navigate, screenshot |
162
+ | `github` | Issues, PRs, CI, code review via `gh` CLI |
163
+ | `notion` | Create/manage Notion pages and databases |
164
+ | `memory` | Persistent long-term memory across sessions |
165
+ | `telegram-send` | Send photos, documents, voice messages to Telegram |
166
+ | `vision-click` | Screenshot → AI finds coordinates → clicks (one command) |
167
+ | `imagegen` | Generate/edit images via OpenAI Image API |
168
+ | `pdf` / `docx` / `xlsx` | Read, create, edit office documents |
169
+ | `screen-capture` | macOS screenshot and camera capture |
170
+ | `openai-docs` | Up-to-date OpenAI API documentation |
171
+ | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | Development guidelines for sub-agents |
171
172
 
172
173
  #### Reference Skills (on-demand)
173
174
 
174
175
  88+ more skills ready to use — spotify, weather, deep-research, tts, video-downloader, apple-reminders, 1password, terraform, postgres, jupyter-notebook, sentry, and more.
175
176
 
176
177
  ```bash
177
- cli-jaw skill install <name> # Activate a reference skill permanently
178
+ jaw skill install <name> # Activate a reference skill permanently
178
179
  ```
179
180
 
180
181
  </details>
@@ -193,7 +194,7 @@ Your assistant isn't tied to your desk. Chat from anywhere via Telegram:
193
194
  <summary>📋 Telegram setup (3 steps)</summary>
194
195
 
195
196
  1. **Create a bot** — Message [@BotFather](https://t.me/BotFather) → `/newbot` → copy the token
196
- 2. **Configure** — Run `cli-jaw init --telegram-token YOUR_TOKEN` or edit settings in the Web UI
197
+ 2. **Configure** — Run `jaw init --telegram-token YOUR_TOKEN` or edit settings in the Web UI
197
198
  3. **Start chatting** — Send any message to your bot. Your chat ID is auto-saved on first message.
198
199
 
199
200
  </details>
@@ -254,7 +255,7 @@ Your assistant **decides by itself** whether a task needs orchestration or a dir
254
255
  ## 🔌 MCP — One Config, Five AI Engines
255
256
 
256
257
  ```bash
257
- cli-jaw mcp install @anthropic/context7 # Install once
258
+ jaw mcp install @anthropic/context7 # Install once
258
259
  # → Automatically syncs to Claude, Codex, Gemini, OpenCode, Copilot
259
260
  ```
260
261
 
@@ -276,15 +277,18 @@ No more editing 5 different config files. Install once → all AI engines get it
276
277
  ## ⌨️ CLI Commands
277
278
 
278
279
  ```bash
279
- cli-jaw serve # Start server
280
- cli-jaw chat # Terminal TUI
281
- cli-jaw doctor # Diagnostics (12 checks)
282
- cli-jaw skill install <name> # Install a skill
283
- cli-jaw mcp install <package> # Install MCP → syncs to all 5 CLIs
284
- cli-jaw memory search <query> # Search memory
285
- cli-jaw browser start # Launch Chrome (CDP)
286
- cli-jaw browser vision-click "Login" # AI-powered click
287
- cli-jaw reset # Full reset
280
+ jaw serve # Start server
281
+ jaw chat # Terminal TUI
282
+ jaw doctor # Diagnostics (12 checks)
283
+ jaw skill install <name> # Install a skill
284
+ jaw mcp install <package> # Install MCP → syncs to all 5 CLIs
285
+ jaw memory search <query> # Search memory
286
+ jaw browser start # Launch Chrome (CDP)
287
+ jaw browser vision-click "Login" # AI-powered click
288
+ jaw launchd # Auto-start on boot (macOS)
289
+ jaw launchd status # Check daemon status
290
+ jaw launchd unset # Remove auto-start
291
+ jaw reset # Full reset
288
292
  ```
289
293
 
290
294
  ---
@@ -296,13 +300,13 @@ Each CLI comes with preconfigured presets, but you can type **any model ID** dir
296
300
  <details>
297
301
  <summary>View all presets</summary>
298
302
 
299
- | CLI | Default | Notable Models |
300
- |-----|---------|----------------|
301
- | **Claude** | `claude-sonnet-4-6` | opus-4-6, haiku-4-5, extended thinking variants |
302
- | **Codex** | `gpt-5.3-codex` | spark, 5.2, 5.1-max, 5.1-mini |
303
- | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview, 3-flash-preview, 2.5-flash |
304
- | **OpenCode** | `claude-opus-4-6-thinking` | 🆓 big-pickle, GLM-5, MiniMax, Kimi, GPT-5-Nano |
305
- | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini, claude-sonnet-4.6, opus-4.6 |
303
+ | CLI | Default | Notable Models |
304
+ | ------------ | -------------------------- | ----------------------------------------------- |
305
+ | **Claude** | `claude-sonnet-4-6` | opus-4-6, haiku-4-5, extended thinking variants |
306
+ | **Codex** | `gpt-5.3-codex` | spark, 5.2, 5.1-max, 5.1-mini |
307
+ | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview, 3-flash-preview, 2.5-flash |
308
+ | **OpenCode** | `claude-opus-4-6-thinking` | 🆓 big-pickle, GLM-5, MiniMax, Kimi, GPT-5-Nano |
309
+ | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini, claude-sonnet-4.6, opus-4.6 |
306
310
 
307
311
  </details>
308
312
 
@@ -367,10 +371,10 @@ All tests run via `tsx --test` (native Node.js test runner + TypeScript).
367
371
 
368
372
  ## 📖 Documentation
369
373
 
370
- | Document | What's inside |
371
- |----------|---------------|
374
+ | Document | What's inside |
375
+ | --------------------------------------- | ----------------------------------------------------- |
372
376
  | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | System design, module graph, REST API (40+ endpoints) |
373
- | [TESTS.md](TESTS.md) | Test coverage and test plan |
377
+ | [TESTS.md](TESTS.md) | Test coverage and test plan |
374
378
 
375
379
  ---
376
380
 
@@ -379,15 +383,15 @@ All tests run via `tsx --test` (native Node.js test runner + TypeScript).
379
383
  <details>
380
384
  <summary>Common issues</summary>
381
385
 
382
- | Problem | Solution |
383
- |---------|----------|
384
- | `cli-jaw: command not found` | Run `npm install -g cli-jaw` again. Check `npm bin -g` is in your `$PATH`. |
385
- | `Error: node version` | Upgrade to Node.js ≥ 22: `nvm install 22` or download from [nodejs.org](https://nodejs.org) |
386
- | Agent timeout / no response | Run `cli-jaw doctor` to check CLI auth. Re-authenticate with `claude auth` / `codex login`. |
387
- | `EADDRINUSE: port 3457` | Another instance is running. Stop it or use `cli-jaw serve --port 3458`. |
388
- | Telegram bot not responding | Check token with `cli-jaw doctor`. Ensure `cli-jaw serve` is running. |
389
- | Skills not loading | Run `cli-jaw skill reset` then `cli-jaw mcp sync`. |
390
- | Browser commands fail | Install Chrome/Chromium. Run `cli-jaw browser start` first. |
386
+ | Problem | Solution |
387
+ | ---------------------------- | ------------------------------------------------------------------------------------------- |
388
+ | `cli-jaw: command not found` | Run `npm install -g cli-jaw` again. Check `npm bin -g` is in your `$PATH`. |
389
+ | `Error: node version` | Upgrade to Node.js ≥ 22: `nvm install 22` or download from [nodejs.org](https://nodejs.org) |
390
+ | Agent timeout / no response | Run `jaw doctor` to check CLI auth. Re-authenticate with `claude auth` / `codex login`. |
391
+ | `EADDRINUSE: port 3457` | Another instance is running. Stop it or use `jaw serve --port 3458`. |
392
+ | Telegram bot not responding | Check token with `jaw doctor`. Ensure `jaw serve` is running. |
393
+ | Skills not loading | Run `jaw skill reset` then `jaw mcp sync`. |
394
+ | Browser commands fail | Install Chrome/Chromium. Run `jaw browser start` first. |
391
395
 
392
396
  </details>
393
397
 
package/README.zh-CN.md CHANGED
@@ -30,13 +30,13 @@ CLI-JAW 是驻留在您本地机器上的**专属 AI 助手**,并在您熟悉
30
30
 
31
31
  与单一模型的助手不同,CLI-JAW 通过官方 CLI 命令行工具对 **5 大 AI 引擎**(Claude、Codex、Gemini、OpenCode、Copilot)进行编排 — 为您提供各大供应商最优势的能力及统一的体验。当一个引擎处于繁忙状态时,它会自动无缝切换至下一个。107 个内置技能可处理从浏览器自动化到文档生成的所有事务。
32
32
 
33
- | | 为什么选择 CLI-JAW? |
34
- |---|---|
35
- | 🛡️ **安全合规 (TOS-Safe)** | 仅使用官方 CLI — 无 API 密钥抓取、无逆向工程、无封号风险。 |
36
- | 🤖 **经过验证的智能体工具** | 5 大实战级编码智能体(Claude、Codex、Gemini、OpenCode、Copilot)集于一身。 |
37
- | ⚡ **多模型自动回退 (Fallback)** | 单一引擎发生故障?下一个立即接管。确保零停机。 |
38
- | 🎭 **基于编排的性能优化** | 复杂的任务会被拆分给专业的子智能体,以实现效率最大化。 |
39
- | 📦 **107 个内置技能** | 浏览器自动化、文档生成、Telegram 通知、持久化记忆 — 开箱即用。 |
33
+ | | 为什么选择 CLI-JAW? |
34
+ | ------------------------------- | -------------------------------------------------------------------------- |
35
+ | 🛡️ **安全合规 (TOS-Safe)** | 仅使用官方 CLI — 无 API 密钥抓取、无逆向工程、无封号风险。 |
36
+ | 🤖 **经过验证的智能体工具** | 5 大实战级编码智能体(Claude、Codex、Gemini、OpenCode、Copilot)集于一身。 |
37
+ | ⚡ **多模型自动回退 (Fallback)** | 单一引擎发生故障?下一个立即接管。确保零停机。 |
38
+ | 🎭 **基于编排的性能优化** | 复杂的任务会被拆分给专业的子智能体,以实现效率最大化。 |
39
+ | 📦 **107 个内置技能** | 浏览器自动化、文档生成、Telegram 通知、持久化记忆 — 开箱即用。 |
40
40
 
41
41
  ![CLI-JAW 终端](docs/screenshots/terminal-cli.png)
42
42
 
@@ -76,10 +76,10 @@ graph LR
76
76
 
77
77
  ### 前置要求
78
78
 
79
- | 必备条件 | 说明 |
80
- |----------|------|
81
- | **Node.js ≥ 22** | 运行时环境。[下载](https://nodejs.org) |
82
- | **至少 1 个 AI CLI** | 驱动助手的 AI 引擎 |
79
+ | 必备条件 | 说明 |
80
+ | -------------------- | -------------------------------------- |
81
+ | **Node.js ≥ 22** | 运行时环境。[下载](https://nodejs.org) |
82
+ | **至少 1 个 AI CLI** | 驱动助手的 AI 引擎 |
83
83
 
84
84
  > 🆓 **免费方案:** [Copilot CLI](https://docs.github.com/en/copilot)(GitHub 免费套餐可用)和 [OpenCode](https://opencode.ai) 均提供免费模型 — 无需绑卡,即装即用。
85
85
 
@@ -90,14 +90,14 @@ graph LR
90
90
  npm install -g cli-jaw
91
91
 
92
92
  # 2. 运行初始化向导(创建配置、安装技能)
93
- cli-jaw init
93
+ jaw init
94
94
 
95
95
  # 3. 健康检查 — 看看哪些已就绪
96
- cli-jaw doctor
96
+ jaw doctor
97
97
  ```
98
98
 
99
99
  <details>
100
- <summary>📋 <code>cli-jaw doctor</code> 输出示例</summary>
100
+ <summary>📋 <code>jaw doctor</code> 输出示例</summary>
101
101
 
102
102
  ```
103
103
  🦈 CLI-JAW Doctor — 12 checks
@@ -132,9 +132,10 @@ gemini # Google (首次运行触发认证)
132
132
  ### 启动
133
133
 
134
134
  ```bash
135
- cli-jaw serve # Web UI → http://localhost:3457
135
+ jaw serve # Web UI → http://localhost:3457
136
+ jaw launchd # 开机自动启动 (macOS)
136
137
  # — 或者 —
137
- cli-jaw chat # 终端 TUI(无需浏览器)
138
+ jaw chat # 终端 TUI(无需浏览器)
138
139
  ```
139
140
 
140
141
  > 💡 **不必全装 5 个。** 有一个就能跑。助手会自动检测可用引擎,缺了就无缝切换到下一个。
@@ -148,33 +149,33 @@ cli-jaw chat # 终端 TUI(无需浏览器)
148
149
  <details>
149
150
  <summary>查看全部技能</summary>
150
151
 
151
- | 层级 | 数量 | 工作方式 |
152
- |------|:----:|----------|
153
- | **活跃技能** | 17 | 每次对话自动加载,随时可用。 |
154
- | **参考技能** | 88+ | 用到的时候 AI 自己去读,按需调用。 |
152
+ | 层级 | 数量 | 工作方式 |
153
+ | ------------ | :---: | ---------------------------------- |
154
+ | **活跃技能** | 17 | 每次对话自动加载,随时可用。 |
155
+ | **参考技能** | 88+ | 用到的时候 AI 自己去读,按需调用。 |
155
156
 
156
157
  #### 活跃技能(常驻)
157
158
 
158
- | 技能 | 功能 |
159
- |------|------|
160
- | `browser` | Chrome 自动化 — 快照、点击、导航、截图 |
161
- | `github` | 问题、PR、CI、代码审查(使用 `gh` CLI) |
162
- | `notion` | 创建/管理 Notion 页面和数据库 |
163
- | `memory` | 跨会话持久长期记忆 |
164
- | `telegram-send` | 向 Telegram 发送照片、文档、语音消息 |
165
- | `vision-click` | 截图 → AI 找坐标 → 点击(一条命令) |
166
- | `imagegen` | 通过 OpenAI Image API 生成/编辑图像 |
167
- | `pdf` / `docx` / `xlsx` | 读取、创建、编辑办公文档 |
168
- | `screen-capture` | macOS 截图和摄像头捕获 |
169
- | `openai-docs` | 最新 OpenAI API 文档 |
170
- | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 子 Agent 开发指南 |
159
+ | 技能 | 功能 |
160
+ | ------------------------------------------------------------------- | --------------------------------------- |
161
+ | `browser` | Chrome 自动化 — 快照、点击、导航、截图 |
162
+ | `github` | 问题、PR、CI、代码审查(使用 `gh` CLI) |
163
+ | `notion` | 创建/管理 Notion 页面和数据库 |
164
+ | `memory` | 跨会话持久长期记忆 |
165
+ | `telegram-send` | 向 Telegram 发送照片、文档、语音消息 |
166
+ | `vision-click` | 截图 → AI 找坐标 → 点击(一条命令) |
167
+ | `imagegen` | 通过 OpenAI Image API 生成/编辑图像 |
168
+ | `pdf` / `docx` / `xlsx` | 读取、创建、编辑办公文档 |
169
+ | `screen-capture` | macOS 截图和摄像头捕获 |
170
+ | `openai-docs` | 最新 OpenAI API 文档 |
171
+ | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 子 Agent 开发指南 |
171
172
 
172
173
  #### 参考技能(按需调用)
173
174
 
174
175
  88 个技能随时待命 — Spotify、天气、深度研究、TTS、视频下载、Apple 提醒事项、1Password、Terraform、PostgreSQL、Jupyter 等。
175
176
 
176
177
  ```bash
177
- cli-jaw skill install <name> # 参考 → 活跃,永久激活
178
+ jaw skill install <name> # 参考 → 活跃,永久激活
178
179
  ```
179
180
 
180
181
  </details>
@@ -193,7 +194,7 @@ cli-jaw skill install <name> # 参考 → 活跃,永久激活
193
194
  <summary>📋 Telegram 配置(3 步搞定)</summary>
194
195
 
195
196
  1. **创建机器人** — 给 [@BotFather](https://t.me/BotFather) 发 `/newbot` → 复制 Token
196
- 2. **配置** — 运行 `cli-jaw init --telegram-token 你的TOKEN`,或在 Web UI 设置中填入
197
+ 2. **配置** — 运行 `jaw init --telegram-token 你的TOKEN`,或在 Web UI 设置中填入
197
198
  3. **开聊** — 给你的机器人发任意消息。首次发送时 Chat ID 会自动保存。
198
199
 
199
200
  </details>
@@ -254,7 +255,7 @@ graph TD
254
255
  ## 🔌 MCP — 单次配置,驱动 5 大 AI 引擎
255
256
 
256
257
  ```bash
257
- cli-jaw mcp install @anthropic/context7 # 安装一次
258
+ jaw mcp install @anthropic/context7 # 安装一次
258
259
  # → 自动同步到 Claude、Codex、Gemini、OpenCode、Copilot
259
260
  ```
260
261
 
@@ -276,15 +277,18 @@ graph LR
276
277
  ## ⌨️ CLI 命令
277
278
 
278
279
  ```bash
279
- cli-jaw serve # 启动服务器
280
- cli-jaw chat # 终端 TUI
281
- cli-jaw doctor # 诊断(12 项检查)
282
- cli-jaw skill install <name> # 安装技能
283
- cli-jaw mcp install <package> # 安装 MCP → 同步全部 5 CLI
284
- cli-jaw memory search <query> # 搜索记忆
285
- cli-jaw browser start # 启动 Chrome(CDP)
286
- cli-jaw browser vision-click "登录" # AI 智能点击
287
- cli-jaw reset # 全面重置
280
+ jaw serve # 启动服务器
281
+ jaw launchd # 开机自动启动 (macOS)
282
+ jaw launchd status # 查看守护进程状态
283
+ jaw launchd unset # 取消自动启动
284
+ jaw chat # 终端 TUI
285
+ jaw doctor # 诊断(12 项检查)
286
+ jaw skill install <name> # 安装技能
287
+ jaw mcp install <package> # 安装 MCP → 同步全部 5 CLI
288
+ jaw memory search <query> # 搜索记忆
289
+ jaw browser start # 启动 Chrome(CDP)
290
+ jaw browser vision-click "登录" # AI 智能点击
291
+ jaw reset # 全面重置
288
292
  ```
289
293
 
290
294
  ---
@@ -296,13 +300,13 @@ cli-jaw reset # 全面重置
296
300
  <details>
297
301
  <summary>查看全部预设</summary>
298
302
 
299
- | CLI | 默认值 | 主要模型 |
300
- |-----|--------|----------|
301
- | **Claude** | `claude-sonnet-4-6` | opus-4-6、haiku-4-5、扩展思考变体 |
302
- | **Codex** | `gpt-5.3-codex` | spark、5.2、5.1-max、5.1-mini |
303
- | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview、3-flash-preview、2.5-flash |
303
+ | CLI | 默认值 | 主要模型 |
304
+ | ------------ | -------------------------- | ---------------------------------------------- |
305
+ | **Claude** | `claude-sonnet-4-6` | opus-4-6、haiku-4-5、扩展思考变体 |
306
+ | **Codex** | `gpt-5.3-codex` | spark、5.2、5.1-max、5.1-mini |
307
+ | **Gemini** | `gemini-2.5-pro` | 3.0-pro-preview、3-flash-preview、2.5-flash |
304
308
  | **OpenCode** | `claude-opus-4-6-thinking` | 🆓 big-pickle、GLM-5、MiniMax、Kimi、GPT-5-Nano |
305
- | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini、claude-sonnet-4.6、opus-4.6 |
309
+ | **Copilot** | `gpt-4.1` 🆓 | 🆓 gpt-5-mini、claude-sonnet-4.6、opus-4.6 |
306
310
 
307
311
  </details>
308
312
 
@@ -367,24 +371,24 @@ npm test
367
371
 
368
372
  ## 📖 文档
369
373
 
370
- | 文档 | 内容 |
371
- |------|------|
374
+ | 文档 | 内容 |
375
+ | --------------------------------------- | -------------------------------------- |
372
376
  | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | 系统设计、模块图、REST API(40+ 端点) |
373
- | [TESTS.md](TESTS.md) | 测试覆盖率、测试计划 |
377
+ | [TESTS.md](TESTS.md) | 测试覆盖率、测试计划 |
374
378
 
375
379
  ---
376
380
 
377
381
  ## 🔧 故障排查
378
382
 
379
- | 症状 | 原因 | 解决方法 |
380
- |------|------|----------|
381
- | `command not found: cli-jaw` | npm 全局 bin 不在 PATH 中 | 运行 `npm config get prefix`,将 `bin/` 加入 PATH |
382
- | `doctor` 显示 CLI 缺失 | 对应 CLI 未安装 | 按提示安装,如 `npm i -g @anthropic-ai/claude-code` |
383
- | 端口 3457 被占用 | 其他进程占用了端口 | 改用 `PORT=4000 cli-jaw serve` 或终止占用进程 |
384
- | Telegram 机器人无响应 | Token 未配置或缺少 Chat ID | 重新运行 `cli-jaw init --telegram-token ...` |
385
- | `npm install -g` 权限错误 | 全局目录权限不足 | 使用 `sudo npm i -g cli-jaw` 或推荐 [nvm](https://github.com/nvm-sh/nvm) |
386
- | 构建失败(`tsc` 报错) | Node 版本低于 22 | `node -v` 检查 → 升级至 22+ |
387
- | 会话间记忆未保留 | `~/.cli-jaw/memory/` 目录缺失 | 重新运行 `cli-jaw init` 自动创建 |
383
+ | 症状 | 原因 | 解决方法 |
384
+ | ---------------------------- | ----------------------------- | ------------------------------------------------------------------------ |
385
+ | `command not found: cli-jaw` | npm 全局 bin 不在 PATH 中 | 运行 `npm config get prefix`,将 `bin/` 加入 PATH |
386
+ | `doctor` 显示 CLI 缺失 | 对应 CLI 未安装 | 按提示安装,如 `npm i -g @anthropic-ai/claude-code` |
387
+ | 端口 3457 被占用 | 其他进程占用了端口 | 改用 `PORT=4000 jaw serve` 或终止占用进程 |
388
+ | Telegram 机器人无响应 | Token 未配置或缺少 Chat ID | 重新运行 `jaw init --telegram-token ...` |
389
+ | `npm install -g` 权限错误 | 全局目录权限不足 | 使用 `sudo npm i -g cli-jaw` 或推荐 [nvm](https://github.com/nvm-sh/nvm) |
390
+ | 构建失败(`tsc` 报错) | Node 版本低于 22 | `node -v` 检查 → 升级至 22+ |
391
+ | 会话间记忆未保留 | `~/.cli-jaw/memory/` 目录缺失 | 重新运行 `jaw init` 自动创建 |
388
392
 
389
393
  ---
390
394
 
@@ -30,7 +30,7 @@ ${c.cyan} _____ _ _____ _
30
30
  ${c.dim} ─────────────────────────────────────${c.reset}
31
31
  ${c.bold} 🦈 v${pkg.version}${c.reset} ${c.dim}AI Agent Orchestration Platform${c.reset}
32
32
 
33
- ${c.bold}Usage:${c.reset} cli-jaw <command> [options]
33
+ ${c.bold}Usage:${c.reset} jaw <command> [options]
34
34
 
35
35
  ${c.bold}Commands:${c.reset}
36
36
  serve 서버 시작 (포그라운드)
@@ -44,16 +44,17 @@ ${c.bold} 🦈 v${pkg.version}${c.reset} ${c.dim}AI Agent Orchestration Platf
44
44
  status 서버 상태 확인
45
45
  browser 브라우저 제어
46
46
  memory 영구 메모리 관리
47
+ launchd macOS 자동 실행 관리 (install/uninstall/status)
47
48
 
48
49
  ${c.bold}Options:${c.reset}
49
50
  --help 도움말 표시
50
51
  --version 버전 표시
51
52
 
52
53
  ${c.bold}Examples:${c.reset}
53
- cli-jaw serve --port 3457
54
- cli-jaw init
55
- cli-jaw doctor --json
56
- cli-jaw chat --raw
54
+ jaw serve --port 3457
55
+ jaw init
56
+ jaw doctor --json
57
+ jaw chat --raw
57
58
  `);
58
59
  }
59
60
  switch (command) {
@@ -90,6 +91,9 @@ switch (command) {
90
91
  case 'memory':
91
92
  await import('./commands/memory.js');
92
93
  break;
94
+ case 'launchd':
95
+ await import('./commands/launchd.js');
96
+ break;
93
97
  case '--version':
94
98
  case '-v':
95
99
  console.log(`cli-jaw v${pkg.version}`);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * cli-jaw launchd — macOS LaunchAgent 관리
3
+ * Usage:
4
+ * jaw launchd — plist 확인 → 없으면 생성 → 시작 (원스텝)
5
+ * jaw launchd unset — plist 제거 + 해제
6
+ * jaw launchd status — 현재 상태 확인
7
+ */
8
+ import { execSync } from 'node:child_process';
9
+ import { existsSync, writeFileSync, unlinkSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { homedir } from 'node:os';
12
+ const LABEL = 'com.cli-jaw.serve';
13
+ const PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${LABEL}.plist`);
14
+ const LOG_DIR = join(homedir(), '.cli-jaw', 'logs');
15
+ function getNodePath() {
16
+ try {
17
+ return execSync('which node', { encoding: 'utf8' }).trim();
18
+ }
19
+ catch {
20
+ return '/usr/local/bin/node';
21
+ }
22
+ }
23
+ function getJawPath() {
24
+ try {
25
+ return execSync('which jaw', { encoding: 'utf8' }).trim();
26
+ }
27
+ catch {
28
+ return execSync('which cli-jaw', { encoding: 'utf8' }).trim();
29
+ }
30
+ }
31
+ function generatePlist() {
32
+ const nodePath = getNodePath();
33
+ const jawPath = getJawPath();
34
+ execSync(`mkdir -p ${LOG_DIR}`);
35
+ return `<?xml version="1.0" encoding="UTF-8"?>
36
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
37
+ <plist version="1.0">
38
+ <dict>
39
+ <key>Label</key>
40
+ <string>${LABEL}</string>
41
+ <key>ProgramArguments</key>
42
+ <array>
43
+ <string>${nodePath}</string>
44
+ <string>${jawPath}</string>
45
+ <string>serve</string>
46
+ </array>
47
+ <key>RunAtLoad</key>
48
+ <true/>
49
+ <key>KeepAlive</key>
50
+ <true/>
51
+ <key>WorkingDirectory</key>
52
+ <string>${homedir()}</string>
53
+ <key>StandardOutPath</key>
54
+ <string>${LOG_DIR}/jaw-serve.log</string>
55
+ <key>StandardErrorPath</key>
56
+ <string>${LOG_DIR}/jaw-serve.err</string>
57
+ <key>EnvironmentVariables</key>
58
+ <dict>
59
+ <key>PATH</key>
60
+ <string>${process.env.PATH}</string>
61
+ </dict>
62
+ </dict>
63
+ </plist>`;
64
+ }
65
+ function isLoaded() {
66
+ try {
67
+ const out = execSync(`launchctl list | grep ${LABEL}`, { encoding: 'utf8' }).trim();
68
+ return !!out;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ const sub = process.argv[3];
75
+ switch (sub) {
76
+ case 'unset': {
77
+ if (!existsSync(PLIST_PATH)) {
78
+ console.log('⚠️ launchd에 등록되어 있지 않습니다');
79
+ break;
80
+ }
81
+ try {
82
+ execSync(`launchctl unload ${PLIST_PATH}`, { stdio: 'pipe' });
83
+ }
84
+ catch { /* ok */ }
85
+ unlinkSync(PLIST_PATH);
86
+ console.log('✅ jaw serve 자동 실행 해제 완료');
87
+ break;
88
+ }
89
+ case 'status': {
90
+ if (!existsSync(PLIST_PATH)) {
91
+ console.log('⚠️ jaw serve가 launchd에 등록되어 있지 않습니다');
92
+ console.log(' 등록: jaw launchd');
93
+ break;
94
+ }
95
+ try {
96
+ const out = execSync(`launchctl list | grep ${LABEL}`, { encoding: 'utf8' }).trim();
97
+ const parts = out.split('\t');
98
+ const pid = parts[0] === '-' ? 'stopped' : `running (PID ${parts[0]})`;
99
+ console.log(`🦈 jaw serve — ${pid}`);
100
+ console.log(` plist: ${PLIST_PATH}`);
101
+ console.log(` log: ${LOG_DIR}/jaw-serve.log`);
102
+ }
103
+ catch {
104
+ console.log('🦈 jaw serve — not loaded');
105
+ console.log(` plist: ${PLIST_PATH} (exists but not loaded)`);
106
+ }
107
+ break;
108
+ }
109
+ default: {
110
+ // 원스텝: 확인 → 생성 → 시작
111
+ console.log('🦈 jaw launchd setup\n');
112
+ // 1. plist 확인
113
+ if (existsSync(PLIST_PATH)) {
114
+ console.log('📄 plist 발견 — 재생성합니다');
115
+ try {
116
+ execSync(`launchctl unload ${PLIST_PATH}`, { stdio: 'pipe' });
117
+ }
118
+ catch { /* ok */ }
119
+ }
120
+ else {
121
+ console.log('📄 plist 없음 — 새로 생성합니다');
122
+ }
123
+ // 2. plist 생성
124
+ const plist = generatePlist();
125
+ writeFileSync(PLIST_PATH, plist);
126
+ console.log(`✅ plist 저장: ${PLIST_PATH}`);
127
+ // 3. launchd 등록 + 시작
128
+ execSync(`launchctl load -w ${PLIST_PATH}`);
129
+ console.log('✅ launchd 등록 + 시작 완료\n');
130
+ // 4. 상태 확인
131
+ setTimeout(() => {
132
+ if (isLoaded()) {
133
+ console.log('🦈 jaw serve가 백그라운드에서 실행 중입니다');
134
+ console.log(' http://localhost:3457');
135
+ console.log(` 로그: ${LOG_DIR}/jaw-serve.log`);
136
+ console.log('\n 해제: jaw launchd unset');
137
+ }
138
+ else {
139
+ console.log('⚠️ 시작되지 않았습니다. 로그를 확인하세요:');
140
+ console.log(` cat ${LOG_DIR}/jaw-serve.err`);
141
+ }
142
+ }, 1000);
143
+ break;
144
+ }
145
+ }
146
+ //# sourceMappingURL=launchd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../../bin/commands/launchd.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cli-jaw",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Personal AI assistant powered by 5 engines (Claude, Codex, Gemini, OpenCode, Copilot) — Web, Terminal, and Telegram interfaces with 107 built-in skills",
5
5
  "type": "module",
6
6
  "keywords": [