cx-skills 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ko.md CHANGED
@@ -23,6 +23,14 @@
23
23
  npm install -g cx-skills
24
24
  ```
25
25
 
26
+ ### 설치 스코프
27
+
28
+ | 스코프 | 플러그인 설치 | npm 설치 | 적용 범위 |
29
+ |--------|-------------|----------|----------|
30
+ | **유저** (기본값) | `/plugin install cx-skills` | `npm install -g cx-skills` | 모든 프로젝트 |
31
+ | **프로젝트** | `/plugin install cx-skills --scope project` | `npm install cx-skills` | 현재 프로젝트만 |
32
+ | **일회성** | — | `npx cx-skills doctor` | 설치 없이 실행 |
33
+
26
34
  **Step 2: 사용**
27
35
  ```bash
28
36
  # 자동 모드 — AI가 분류 + 분해
package/README.md CHANGED
@@ -25,6 +25,14 @@
25
25
  npm install -g cx-skills
26
26
  ```
27
27
 
28
+ ### Installation Scope
29
+
30
+ | Scope | Plugin | npm | Applies To |
31
+ |-------|--------|-----|------------|
32
+ | **User** (default) | `/plugin install cx-skills` | `npm install -g cx-skills` | All projects |
33
+ | **Project** | `/plugin install cx-skills --scope project` | `npm install cx-skills` | Current project only |
34
+ | **One-off** | — | `npx cx-skills doctor` | Run without installing |
35
+
28
36
  **Step 2: Use**
29
37
  ```bash
30
38
  # Auto mode — AI classifies + decomposes
package/bin/cx-skills.mjs CHANGED
@@ -1,6 +1,6 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  // cx-skills CLI — setup, doctor, version
3
- import { copyFileSync, existsSync, readFileSync, mkdirSync, chmodSync } from "fs";
3
+ import { copyFileSync, existsSync, readFileSync, mkdirSync, chmodSync, readdirSync } from "fs";
4
4
  import { join, dirname } from "path";
5
5
  import { homedir } from "os";
6
6
  import { execSync } from "child_process";
@@ -89,6 +89,40 @@ function cmdSetup() {
89
89
  "hud-qos-status.mjs"
90
90
  );
91
91
 
92
+ // 스킬 동기화 (~/.claude/skills/{name}/SKILL.md)
93
+ const skillsSrc = join(PKG_ROOT, "skills");
94
+ const skillsDst = join(CLAUDE_DIR, "skills");
95
+ if (existsSync(skillsSrc)) {
96
+ let skillCount = 0;
97
+ let skillTotal = 0;
98
+ for (const name of readdirSync(skillsSrc)) {
99
+ const src = join(skillsSrc, name, "SKILL.md");
100
+ const dst = join(skillsDst, name, "SKILL.md");
101
+ if (!existsSync(src)) continue;
102
+ skillTotal++;
103
+
104
+ const dstDir = dirname(dst);
105
+ if (!existsSync(dstDir)) mkdirSync(dstDir, { recursive: true });
106
+
107
+ if (!existsSync(dst)) {
108
+ copyFileSync(src, dst);
109
+ skillCount++;
110
+ } else {
111
+ const srcContent = readFileSync(src, "utf8");
112
+ const dstContent = readFileSync(dst, "utf8");
113
+ if (srcContent !== dstContent) {
114
+ copyFileSync(src, dst);
115
+ skillCount++;
116
+ }
117
+ }
118
+ }
119
+ if (skillCount > 0) {
120
+ ok(`스킬: ${skillCount}/${skillTotal}개 업데이트됨`);
121
+ } else {
122
+ ok(`스킬: ${skillTotal}개 최신 상태`);
123
+ }
124
+ }
125
+
92
126
  console.log(`\n${DIM}설치 위치: ${CLAUDE_DIR}${RESET}\n`);
93
127
  }
94
128
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cx-skills",
3
- "version": "1.0.0",
3
+ "version": "1.3.0",
4
4
  "description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,6 +9,7 @@
9
9
  "files": [
10
10
  "bin",
11
11
  "skills",
12
+ "!**/failure-reports",
12
13
  "scripts",
13
14
  "hooks",
14
15
  "hud",
@@ -3,7 +3,8 @@
3
3
  # v1.0: 기본 라우팅 (Codex/Gemini/Claude 분기)
4
4
  # v1.1: stderr 분리, 출력 필터링, 타임아웃, MCP 프로필 지원
5
5
  # v1.2: effort 동적 라우팅, bg/fg 모드, Opus 직접 수행, Gemini 모델 분기, 실행 로그
6
- VERSION="1.2"
6
+ # v1.3: architect/critic Codex 이관, 리뷰어 exec review 전환, multi_agent 활성화
7
+ VERSION="1.3"
7
8
  #
8
9
  # 설치: cp scripts/cli-route.sh ~/.claude/scripts/cli-route.sh
9
10
  #
@@ -24,6 +25,10 @@ PROMPT="${2:?프롬프트 필수}"
24
25
  MCP_PROFILE="${3:-auto}"
25
26
  USER_TIMEOUT="${4:-}"
26
27
 
28
+ # ── CLI 경로 해석 (Windows npm global 대응) ──
29
+ CODEX_BIN="${CODEX_BIN:-$(command -v codex 2>/dev/null || echo codex)}"
30
+ GEMINI_BIN="${GEMINI_BIN:-$(command -v gemini 2>/dev/null || echo gemini)}"
31
+
27
32
  # ── 상수 ──
28
33
  MAX_STDOUT_BYTES=51200 # 50KB — Claude 컨텍스트 절약
29
34
  TIMESTAMP=$(date +%s)
@@ -46,13 +51,13 @@ route_agent() {
46
51
  case "$agent" in
47
52
  # ─── 구현 레인 ───
48
53
 
49
- # Codex — 코드 구현 (effort: high, 300s, fg — 후속 태스크가 의존)
54
+ # Codex — 코드 구현 (effort: high, 360s, fg — 후속 태스크가 의존)
50
55
  executor)
51
56
  CLI_TYPE="codex"
52
57
  CLI_CMD="codex"
53
58
  CLI_ARGS="exec ${codex_base}"
54
59
  CLI_EFFORT="high"
55
- DEFAULT_TIMEOUT=300
60
+ DEFAULT_TIMEOUT=360
56
61
  RUN_MODE="fg"
57
62
  OPUS_OVERSIGHT="false"
58
63
  ;;
@@ -82,22 +87,22 @@ route_agent() {
82
87
  CLI_CMD="codex"
83
88
  CLI_ARGS="--profile xhigh exec ${codex_base}"
84
89
  CLI_EFFORT="xhigh"
85
- DEFAULT_TIMEOUT=900
90
+ DEFAULT_TIMEOUT=1200
86
91
  RUN_MODE="bg"
87
92
  OPUS_OVERSIGHT="true"
88
93
  ;;
89
94
 
90
95
  # ─── 설계/분석 레인 ───
91
96
 
92
- # Claude Opus — 아키텍처 (직접 수행 — 설계 품질이 전체 좌우)
97
+ # Codex — 아키텍처 (effort: xhigh, 900s, bg Opus가 설계 품질 검증)
93
98
  architect)
94
- CLI_TYPE="claude-native"
95
- CLI_CMD=""
96
- CLI_ARGS=""
97
- CLI_EFFORT="opus"
98
- DEFAULT_TIMEOUT=900
99
+ CLI_TYPE="codex"
100
+ CLI_CMD="codex"
101
+ CLI_ARGS="--profile xhigh exec ${codex_base}"
102
+ CLI_EFFORT="xhigh"
103
+ DEFAULT_TIMEOUT=1200
99
104
  RUN_MODE="bg"
100
- OPUS_OVERSIGHT="false"
105
+ OPUS_OVERSIGHT="true"
101
106
  ;;
102
107
  # Codex — 태스크 분해 (effort: xhigh, 900s, fg — Opus가 검증)
103
108
  planner)
@@ -105,19 +110,19 @@ route_agent() {
105
110
  CLI_CMD="codex"
106
111
  CLI_ARGS="--profile xhigh exec ${codex_base}"
107
112
  CLI_EFFORT="xhigh"
108
- DEFAULT_TIMEOUT=900
113
+ DEFAULT_TIMEOUT=1200
109
114
  RUN_MODE="fg"
110
115
  OPUS_OVERSIGHT="true"
111
116
  ;;
112
- # Claude Opus — 비판적 검토 (직접 수행비판은 최고 모델이 해야 의미)
117
+ # Codex — 비판적 검토 (effort: xhigh, 900s, bg Opus가 비판 품질 검증)
113
118
  critic)
114
- CLI_TYPE="claude-native"
115
- CLI_CMD=""
116
- CLI_ARGS=""
117
- CLI_EFFORT="opus"
118
- DEFAULT_TIMEOUT=900
119
+ CLI_TYPE="codex"
120
+ CLI_CMD="codex"
121
+ CLI_ARGS="--profile xhigh exec ${codex_base}"
122
+ CLI_EFFORT="xhigh"
123
+ DEFAULT_TIMEOUT=1200
119
124
  RUN_MODE="bg"
120
- OPUS_OVERSIGHT="false"
125
+ OPUS_OVERSIGHT="true"
121
126
  ;;
122
127
  # Codex — 요구사항 분석 (effort: xhigh, 900s, fg — Opus가 검증)
123
128
  analyst)
@@ -125,38 +130,38 @@ route_agent() {
125
130
  CLI_CMD="codex"
126
131
  CLI_ARGS="--profile xhigh exec ${codex_base}"
127
132
  CLI_EFFORT="xhigh"
128
- DEFAULT_TIMEOUT=900
133
+ DEFAULT_TIMEOUT=1200
129
134
  RUN_MODE="fg"
130
135
  OPUS_OVERSIGHT="true"
131
136
  ;;
132
137
 
133
138
  # ─── 리뷰 레인 ───
134
139
 
135
- # Codex — 코드 리뷰 (effort: thorough, 600s, bg — 병렬 리뷰)
140
+ # Codex — 코드 리뷰 (exec review, effort: thorough, 600s, bg — 전용 리뷰 커맨드)
136
141
  code-reviewer)
137
142
  CLI_TYPE="codex"
138
143
  CLI_CMD="codex"
139
- CLI_ARGS="--profile thorough exec ${codex_base}"
144
+ CLI_ARGS="--profile thorough exec ${codex_base} review"
140
145
  CLI_EFFORT="thorough"
141
146
  DEFAULT_TIMEOUT=600
142
147
  RUN_MODE="bg"
143
148
  OPUS_OVERSIGHT="false"
144
149
  ;;
145
- # Codex — 보안 리뷰 (effort: thorough, 600s, bg — Opus 검증 권장)
150
+ # Codex — 보안 리뷰 (exec review, effort: thorough, 600s, bg — Opus 검증 권장)
146
151
  security-reviewer)
147
152
  CLI_TYPE="codex"
148
153
  CLI_CMD="codex"
149
- CLI_ARGS="--profile thorough exec ${codex_base}"
154
+ CLI_ARGS="--profile thorough exec ${codex_base} review"
150
155
  CLI_EFFORT="thorough"
151
156
  DEFAULT_TIMEOUT=600
152
157
  RUN_MODE="bg"
153
158
  OPUS_OVERSIGHT="true"
154
159
  ;;
155
- # Codex — 품질 리뷰 (effort: thorough, 600s, bg — 병렬 리뷰)
160
+ # Codex — 품질 리뷰 (exec review, effort: thorough, 600s, bg — 전용 리뷰 커맨드)
156
161
  quality-reviewer)
157
162
  CLI_TYPE="codex"
158
163
  CLI_CMD="codex"
159
- CLI_ARGS="--profile thorough exec ${codex_base}"
164
+ CLI_ARGS="--profile thorough exec ${codex_base} review"
160
165
  CLI_EFFORT="thorough"
161
166
  DEFAULT_TIMEOUT=600
162
167
  RUN_MODE="bg"
@@ -165,23 +170,33 @@ route_agent() {
165
170
 
166
171
  # ─── 리서치 레인 ───
167
172
 
168
- # Codex — 데이터/리서치 (effort: thorough, 900s, bg — 검색 폴백 체인)
173
+ # Codex — 일반 리서치 (effort: high, 480s, bg — 빠른 검색+요약)
169
174
  scientist)
175
+ CLI_TYPE="codex"
176
+ CLI_CMD="codex"
177
+ CLI_ARGS="exec ${codex_base}"
178
+ CLI_EFFORT="high"
179
+ DEFAULT_TIMEOUT=480
180
+ RUN_MODE="bg"
181
+ OPUS_OVERSIGHT="false"
182
+ ;;
183
+ # Codex — 심층 리서치 (effort: thorough, 1200s, bg — 논문 심층 분석)
184
+ scientist-deep)
170
185
  CLI_TYPE="codex"
171
186
  CLI_CMD="codex"
172
187
  CLI_ARGS="--profile thorough exec ${codex_base}"
173
188
  CLI_EFFORT="thorough"
174
- DEFAULT_TIMEOUT=900
189
+ DEFAULT_TIMEOUT=1200
175
190
  RUN_MODE="bg"
176
191
  OPUS_OVERSIGHT="false"
177
192
  ;;
178
- # Codex — 문서 조사 (effort: high, 900s, bg — 웹 검색 폴백 체인)
193
+ # Codex — 문서 조사 (effort: high, 480s, bg — 웹 검색 폴백 체인)
179
194
  document-specialist)
180
195
  CLI_TYPE="codex"
181
196
  CLI_CMD="codex"
182
197
  CLI_ARGS="exec ${codex_base}"
183
198
  CLI_EFFORT="high"
184
- DEFAULT_TIMEOUT=900
199
+ DEFAULT_TIMEOUT=480
185
200
  RUN_MODE="bg"
186
201
  OPUS_OVERSIGHT="false"
187
202
  ;;
@@ -311,7 +326,7 @@ get_mcp_hint() {
311
326
  echo "context7으로 라이브러리 문서를 조회하세요. 웹 검색이 필요하면 brave-search를 우선 사용하고, 실패 시 exa를 시도하세요. exa/tavily가 402 에러를 반환하면 즉시 brave-search로 전환하세요."
312
327
  ;;
313
328
  analyze)
314
- echo "context7으로 관련 문서를 조회하세요. 웹 검색은 다음 우선순위로 사용: 1) brave-search (무료, 우선), 2) tavily (실패 시), 3) exa (최후 수단). 402 에러 발생 시 해당 도구를 재시도하지 말고 즉시 다음 도구로 전환하세요. 모든 검색 도구가 실패하면 playwright로 직접 웹페이지를 방문하여 정보를 수집하세요."
329
+ echo "context7으로 관련 문서를 조회하세요. 웹 검색은 다음 우선순위로 사용: 1) brave-search (무료, 우선), 2) tavily (실패 시), 3) exa (최후 수단). 402 에러 발생 시 해당 도구를 재시도하지 말고 즉시 다음 도구로 전환하세요. 모든 검색 도구가 실패하면 playwright로 직접 웹페이지를 방문하여 정보를 수집하세요. 주의: URL 크롤링은 최대 3개까지만. 논문 전문 대신 제목/초록/핵심 수치만 정리하세요. 검색 깊이를 제한하고 결과를 빠르게 요약하세요."
315
330
  ;;
316
331
  review)
317
332
  echo "sequential-thinking으로 체계적으로 분석하세요."
@@ -407,6 +422,12 @@ truncate_output() {
407
422
  main() {
408
423
  route_agent "$AGENT_TYPE"
409
424
 
425
+ # CLI 경로 해석 (bare command → 절대경로)
426
+ case "$CLI_CMD" in
427
+ codex) CLI_CMD="$CODEX_BIN" ;;
428
+ gemini) CLI_CMD="$GEMINI_BIN" ;;
429
+ esac
430
+
410
431
  # 사용자 지정 타임아웃이 없으면 에이전트별 기본값 사용
411
432
  if [[ -n "$USER_TIMEOUT" ]]; then
412
433
  TIMEOUT_SEC="$USER_TIMEOUT"
@@ -430,7 +451,6 @@ main() {
430
451
  # 에이전트별 모델 결정
431
452
  local model="sonnet"
432
453
  case "$AGENT_TYPE" in
433
- architect|critic) model="opus" ;;
434
454
  explore) model="haiku" ;;
435
455
  verifier|test-engineer|qa-tester) model="sonnet" ;;
436
456
  esac