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 +8 -0
- package/README.md +8 -0
- package/bin/cx-skills.mjs +36 -2
- package/package.json +2 -1
- package/scripts/cli-route.sh +52 -32
- package/skills/cx-auto/SKILL.md +428 -103
- package/skills/bteam/SKILL.md +0 -13
- package/skills/cx-kteam/SKILL.md +0 -13
- package/skills/cx-prun/SKILL.md +0 -13
- package/skills/cx-route/SKILL.md +0 -13
- package/skills/cx-team/SKILL.md +0 -13
- package/skills/hteam/SKILL.md +0 -459
- package/skills/kteam/SKILL.md +0 -281
- package/skills/omc-bteam/SKILL.md +0 -299
- package/skills/route/SKILL.md +0 -86
- package/skills/sc/SKILL.md +0 -286
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.
|
|
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",
|
package/scripts/cli-route.sh
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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=
|
|
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=
|
|
90
|
+
DEFAULT_TIMEOUT=1200
|
|
86
91
|
RUN_MODE="bg"
|
|
87
92
|
OPUS_OVERSIGHT="true"
|
|
88
93
|
;;
|
|
89
94
|
|
|
90
95
|
# ─── 설계/분석 레인 ───
|
|
91
96
|
|
|
92
|
-
#
|
|
97
|
+
# Codex — 아키텍처 (effort: xhigh, 900s, bg — Opus가 설계 품질 검증)
|
|
93
98
|
architect)
|
|
94
|
-
CLI_TYPE="
|
|
95
|
-
CLI_CMD=""
|
|
96
|
-
CLI_ARGS=""
|
|
97
|
-
CLI_EFFORT="
|
|
98
|
-
DEFAULT_TIMEOUT=
|
|
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="
|
|
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=
|
|
113
|
+
DEFAULT_TIMEOUT=1200
|
|
109
114
|
RUN_MODE="fg"
|
|
110
115
|
OPUS_OVERSIGHT="true"
|
|
111
116
|
;;
|
|
112
|
-
#
|
|
117
|
+
# Codex — 비판적 검토 (effort: xhigh, 900s, bg — Opus가 비판 품질 검증)
|
|
113
118
|
critic)
|
|
114
|
-
CLI_TYPE="
|
|
115
|
-
CLI_CMD=""
|
|
116
|
-
CLI_ARGS=""
|
|
117
|
-
CLI_EFFORT="
|
|
118
|
-
DEFAULT_TIMEOUT=
|
|
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="
|
|
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=
|
|
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 —
|
|
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=
|
|
189
|
+
DEFAULT_TIMEOUT=1200
|
|
175
190
|
RUN_MODE="bg"
|
|
176
191
|
OPUS_OVERSIGHT="false"
|
|
177
192
|
;;
|
|
178
|
-
# Codex — 문서 조사 (effort: high,
|
|
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=
|
|
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
|