reborn-advisor 0.0.0-stage → 1.0.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.md +17 -2
- package/cli.mjs +186 -0
- package/package.json +38 -4
- package/skill/advisor-ko/SKILL.md +62 -0
- package/tail.mjs +20 -0
package/README.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# reborn-advisor
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
오퍼스가 짜고 페이블이 검토 — 클로드 코드 조언자 도구(`/advisor`) 한국어 안내 스킬 설치기.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
npx --yes reborn-advisor
|
|
7
|
+
npx --yes reborn-advisor --set fable # 설정 advisorModel 까지 한 번에
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
`~/.claude/skills/advisor-ko/SKILL.md` 하나를 넣습니다. 클로드 코드를 다시 켜고 「어드바이저 켜 줘. 조언자는 페이블로」라고 말하면, 지금 주 모델을 보고 맞는 조언자를 골라 허락받은 뒤 켜 줍니다. `--set fable|opus|sonnet` 을 주면 `~/.claude/settings.json` 의 `advisorModel` 한 칸만 바꾸고 원본은 `settings.json.bak_advisor` 로 남깁니다.
|
|
11
|
+
|
|
12
|
+
- 조언자 도구는 실험 기능이고 무료가 아닙니다(조언 토큰도 청구 · 구독은 한도에 포함). 「보통 더 싸다」는 공식 문서의 표현이고 항상은 아닙니다.
|
|
13
|
+
- Anthropic API · Claude Platform on AWS 에서만 됩니다(Bedrock · Google Cloud · Foundry 불가).
|
|
14
|
+
- 설치기는 키를 받거나 저장하지 않습니다. 리본랩스는 앤트로픽과 제휴 관계가 아닙니다.
|
|
15
|
+
|
|
16
|
+
옵션: `--check` 상태만 · `--dry-run` 보기만 · `--local` 현재 폴더에 · `--self-test` 자기시험
|
|
17
|
+
|
|
18
|
+
같은 방식으로 골라 담은 리본랩스 스킬팩 48종은 https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=readme&utm_campaign=advisor 에 목록과 직접 까는 명령까지 적어 두었습니다.
|
package/cli.mjs
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 클로드 코드 조언자 도구(/advisor) 한국어 안내 스킬 설치기 — **안내 스킬 하나를 ~/.claude/skills/advisor-ko 에 넣는다.**
|
|
4
|
+
*
|
|
5
|
+
* npx --yes reborn-advisor 안내 스킬을 넣는다
|
|
6
|
+
* npx --yes reborn-advisor --set fable 안내 스킬 + 사용자 설정 advisorModel 을 fable 로 (opus · sonnet 도 된다)
|
|
7
|
+
* npx --yes reborn-advisor --check 깔지 않고 지금 상태만 본다
|
|
8
|
+
* npx --yes reborn-advisor --dry-run 무엇을 할지 보여주기만 한다
|
|
9
|
+
* npx --yes reborn-advisor --local 홈이 아니라 현재 폴더(.claude/skills)에 깐다
|
|
10
|
+
* npx --yes reborn-advisor --self-test 검사기 자체 시험 (네트워크 안 씀)
|
|
11
|
+
*
|
|
12
|
+
* ★설정은 --set 을 줄 때만 고친다. 고칠 때는 ~/.claude/settings.json 의 advisorModel 한 칸만 바꾸고, 원본을 settings.json.bak_advisor 로 남긴다.
|
|
13
|
+
* ★가입·로그인·키 입력은 하지 않는다. 키·토큰을 받거나 저장하지 않는다.
|
|
14
|
+
*/
|
|
15
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { dirname, join } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
import { TAIL, 링크, 마지막 } from "./tail.mjs";
|
|
20
|
+
|
|
21
|
+
const 여기 = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
const 원본 = join(여기, "skill");
|
|
23
|
+
const 퍼널 = "advisor";
|
|
24
|
+
const 스킬 = "advisor-ko";
|
|
25
|
+
const 허용모델 = new Set(["fable", "opus", "sonnet"]);
|
|
26
|
+
|
|
27
|
+
const c = { g: "\x1b[32m", r: "\x1b[31m", y: "\x1b[33m", d: "\x1b[90m", cy: "\x1b[36m", b: "\x1b[1m", 0: "\x1b[0m" };
|
|
28
|
+
|
|
29
|
+
export function 옵션해석(argv) {
|
|
30
|
+
const 옵션 = new Set(), 모름 = [], 말 = [];
|
|
31
|
+
let 모델 = null;
|
|
32
|
+
const 알려진 = new Set(["--check", "--dry-run", "--local", "--self-test"]);
|
|
33
|
+
for (let i = 0; i < argv.length; i++) {
|
|
34
|
+
const a = argv[i];
|
|
35
|
+
if (a === "--set") { 모델 = String(argv[++i] || "").toLowerCase(); continue; }
|
|
36
|
+
if (a.startsWith("--set=")) { 모델 = a.slice(6).toLowerCase(); continue; }
|
|
37
|
+
if (a.startsWith("--")) { if (알려진.has(a)) 옵션.add(a); else 모름.push(a); } else 말.push(a);
|
|
38
|
+
}
|
|
39
|
+
return { 옵션, 모름, 말, 모델 };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const 목적지 = (g) => (g ? join(homedir(), ".claude", "skills") : join(process.cwd(), ".claude", "skills"));
|
|
43
|
+
const 설정파일 = () => join(homedir(), ".claude", "settings.json");
|
|
44
|
+
function 펼치기(뿌리, 접두 = "", 모음 = []) {
|
|
45
|
+
for (const n of readdirSync(뿌리).sort()) {
|
|
46
|
+
const p = join(뿌리, n);
|
|
47
|
+
if (statSync(p).isDirectory()) 펼치기(p, 접두 + n + "/", 모음); else 모음.push(접두 + n);
|
|
48
|
+
}
|
|
49
|
+
return 모음;
|
|
50
|
+
}
|
|
51
|
+
export function 안내스킬있나(자리) {
|
|
52
|
+
const f = join(자리, 스킬, "SKILL.md");
|
|
53
|
+
return existsSync(f) && statSync(f).size > 1500;
|
|
54
|
+
}
|
|
55
|
+
/** 설정 JSON 에 advisorModel 한 칸만 넣은 새 글을 돌려준다(다른 칸은 그대로). 못 읽는 JSON 이면 null. */
|
|
56
|
+
export function 설정고친글(글, 모델) {
|
|
57
|
+
let o = {};
|
|
58
|
+
if (글 && 글.trim()) { try { o = JSON.parse(글); } catch { return null; } }
|
|
59
|
+
if (!o || typeof o !== "object" || Array.isArray(o)) return null;
|
|
60
|
+
o.advisorModel = 모델;
|
|
61
|
+
return JSON.stringify(o, null, 2) + "\n";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* ══ 자기시험 (네트워크 안 씀) ═════════════════════════════════════ */
|
|
65
|
+
function 자기시험() {
|
|
66
|
+
const 결과 = [];
|
|
67
|
+
const T = (n, ok) => 결과.push([n, !!ok]);
|
|
68
|
+
const f = join(원본, 스킬, "SKILL.md");
|
|
69
|
+
const 본 = existsSync(f) ? readFileSync(f, "utf8").replace(/\r/g, "") : "";
|
|
70
|
+
|
|
71
|
+
T("skill/advisor-ko/SKILL.md 가 있고 빈 껍데기가 아니다", 본.length > 1500);
|
|
72
|
+
T("★머리말 name 이 폴더 이름과 같다", /^---\nname: advisor-ko\n/.test(본));
|
|
73
|
+
T("★머리말 description 에 부르는 말이 있다 · 어드바이저", /\ndescription: .*어드바이저/.test(본));
|
|
74
|
+
T("★켜는 법 셋이 문서와 같다", 본.includes("/advisor fable") && 본.includes('"advisorModel": "fable"') && 본.includes("claude --advisor fable"));
|
|
75
|
+
T("★끄는 법이 있다", 본.includes("/advisor off") && 본.includes("CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1"));
|
|
76
|
+
T("★실험 기능이라고 밝힌다", /실험 기능/.test(본));
|
|
77
|
+
T("★★무료가 아니라고 밝힌다", /무료가 아니다/.test(본));
|
|
78
|
+
T("★「보통」 싸다고만 말한다", /보통 싸다/.test(본));
|
|
79
|
+
T("★클로드가 호출 시기를 정한다고 밝힌다", /언제 부를지는 클로드가 정한다/.test(본));
|
|
80
|
+
T("★안 되는 곳(Bedrock 등)을 밝힌다", /Bedrock/.test(본));
|
|
81
|
+
T("★★제휴 관계가 아니라고 밝힌다", /제휴 관계가 아니다/.test(본));
|
|
82
|
+
T("★허락 없이 안 고친다", /허락 없이 고치지 않는다/.test(본));
|
|
83
|
+
T("★문서를 지금 읽고 지어내지 않는다", /\*\*지금\*\* 다시 읽는다/.test(본) && /지어내지 않는다/.test(본));
|
|
84
|
+
T("★통과를 지어내지 않는다", /통과를 지어내지 않는다/.test(본));
|
|
85
|
+
T("★키 · 비밀번호를 묻지 않는다", /키 · 비밀번호를 묻지 않는다/.test(본));
|
|
86
|
+
T("★확인 못 함을 밝힌다", /## 확인 못 함/.test(본));
|
|
87
|
+
T("★성과·절약 약속 문구가 없다", !/무조건|100%\s*보장|누구나 바로|반드시 절반/.test(본));
|
|
88
|
+
T("★옵션 해석", 옵션해석(["--check"]).옵션.has("--check") && 옵션해석(["--zzz"]).모름.length === 1 && 옵션해석(["--set", "Fable"]).모델 === "fable" && 옵션해석(["--set=opus"]).모델 === "opus");
|
|
89
|
+
T("★설정 고치기는 advisorModel 한 칸만 바꾼다", (() => {
|
|
90
|
+
const 새 = JSON.parse(설정고친글('{"model":"opus","env":{"A":"1"}}', "fable"));
|
|
91
|
+
return 새.model === "opus" && 새.env.A === "1" && 새.advisorModel === "fable";
|
|
92
|
+
})());
|
|
93
|
+
T("★빈 설정이면 새로 만든다 · 깨진 JSON 은 안 덮는다", JSON.parse(설정고친글("", "opus")).advisorModel === "opus" && 설정고친글("{깨짐", "opus") === null && 설정고친글("[1]", "opus") === null);
|
|
94
|
+
T("★없는 안내 스킬은 통과하지 않는다", !안내스킬있나(join(원본, "__없는자리__")));
|
|
95
|
+
T("★package.json files 에 skill/ · tail.mjs · cli.mjs 가 있다", (() => {
|
|
96
|
+
const p = JSON.parse(readFileSync(join(여기, "package.json"), "utf8")).files || [];
|
|
97
|
+
return p.includes("skill/") && p.includes("tail.mjs") && p.includes("cli.mjs");
|
|
98
|
+
})());
|
|
99
|
+
T("★★끝인사가 스킬팩만 말한다 (클로드킷·자비스 풀스택 금지)", (() => {
|
|
100
|
+
const t = TAIL[퍼널];
|
|
101
|
+
if (!t) return false;
|
|
102
|
+
const 글 = JSON.stringify(t) + 링크(퍼널) + 마지막;
|
|
103
|
+
return /skillpack/.test(링크(퍼널)) && !/클로드킷|자비스\s*풀스택|rebornlabs\.kr\/(claudekit|kit|jarvis)/.test(글);
|
|
104
|
+
})());
|
|
105
|
+
T("★끝인사 주소에 퍼널 표시(utm)가 붙는다", 링크(퍼널).includes(`utm_campaign=${퍼널}`));
|
|
106
|
+
|
|
107
|
+
for (const [n, ok] of 결과) console.log(` ${ok ? c.g + "✓" : c.r + "✗"}${c[0]} ${n}`);
|
|
108
|
+
const 실패 = 결과.filter(([, ok]) => !ok).length;
|
|
109
|
+
console.log(실패 ? `\n${c.r}✗ 자기시험 ${실패}건 실패${c[0]}` : `\n${c.g}✓ 자기시험 ${결과.length}건 통과${c[0]}`);
|
|
110
|
+
return 실패 ? 1 : 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* ══ 본 실행 ════════════════════════════════════════════════════ */
|
|
114
|
+
async function 실행() {
|
|
115
|
+
const { 옵션, 모름, 말, 모델 } = 옵션해석(process.argv.slice(2));
|
|
116
|
+
if (옵션.has("--self-test")) process.exit(자기시험());
|
|
117
|
+
if (모름.length) { console.error(`${c.r}✗ 모르는 옵션: ${모름.join(" ")}${c[0]}`); process.exit(2); }
|
|
118
|
+
if (말.length) { console.error(`${c.r}✗ 이 설치기는 이름을 받지 않습니다: ${말.join(" ")}${c[0]} — 그냥 npx --yes reborn-advisor`); process.exit(2); }
|
|
119
|
+
if (모델 !== null && !허용모델.has(모델)) { console.error(`${c.r}✗ --set 은 fable · opus · sonnet 중 하나입니다: ${모델 || "(빈칸)"}${c[0]}`); process.exit(2); }
|
|
120
|
+
const 전역 = !옵션.has("--local");
|
|
121
|
+
const 자리 = 목적지(전역);
|
|
122
|
+
if (!existsSync(join(원본, 스킬, "SKILL.md"))) { console.error(`${c.r}✗ 패키지 안에 skill/ 이 없습니다${c[0]} — 배포가 잘못된 것입니다.`); process.exit(2); }
|
|
123
|
+
|
|
124
|
+
console.log(`${c.b}advisor${c[0]} ${c.d}— 오퍼스가 짜고 페이블이 검토 · 클로드 코드 조언자 도구 한국어 안내${c[0]}`);
|
|
125
|
+
|
|
126
|
+
const 설정 = 설정파일();
|
|
127
|
+
const 지금모델 = (() => { try { return JSON.parse(readFileSync(설정, "utf8")).advisorModel || null; } catch { return null; } })();
|
|
128
|
+
|
|
129
|
+
if (옵션.has("--check")) {
|
|
130
|
+
console.log(`\n${c.b}상태${c[0]}`);
|
|
131
|
+
console.log(` ${안내스킬있나(자리) ? c.g + "✓" : c.r + "✗"}${c[0]} 한국어 스킬 ${c.d}(${join(자리, 스킬, "SKILL.md")})${c[0]}`);
|
|
132
|
+
console.log(` ${지금모델 ? c.g + "✓" : c.y + "·"}${c[0]} 조언자 설정 ${c.d}(advisorModel = ${지금모델 || "없음"})${c[0]}`);
|
|
133
|
+
console.log(`\n${c.d}보기만 했습니다. 깔려면 옵션 없이 다시 돌리세요.${c[0]}`);
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.log(`\n${c.b}할 일${c[0]}`);
|
|
138
|
+
console.log(` ${c.cy}한국어 스킬${c[0]} ${c.d}→ ${join(자리, 스킬, "SKILL.md")}${c[0]}`);
|
|
139
|
+
if (모델) console.log(` ${c.cy}조언자 설정${c[0]} ${c.d}→ ${설정} 의 advisorModel = ${모델} (원본은 settings.json.bak_advisor)${c[0]}`);
|
|
140
|
+
if (옵션.has("--dry-run")) { console.log(`\n${c.y}--dry-run 이라 아무것도 하지 않았습니다.${c[0]}`); process.exit(0); }
|
|
141
|
+
|
|
142
|
+
/* ① 안내 스킬 — 우리가 쓴 것이라 파일로 복사한다 */
|
|
143
|
+
const 출발 = join(원본, 스킬), 목표 = join(자리, 스킬);
|
|
144
|
+
for (const 상대 of 펼치기(출발)) {
|
|
145
|
+
const dst = join(목표, 상대);
|
|
146
|
+
mkdirSync(dirname(dst), { recursive: true });
|
|
147
|
+
writeFileSync(dst, readFileSync(join(출발, 상대)));
|
|
148
|
+
}
|
|
149
|
+
const 스킬ok = 안내스킬있나(자리);
|
|
150
|
+
console.log(`\n ${스킬ok ? c.g + "✓" : c.r + "✗"}${c[0]} 한국어 안내 스킬 ${스킬ok ? "들어왔습니다" : "못 넣었습니다"}`);
|
|
151
|
+
if (!스킬ok) { console.error(`${c.r}✗ 권한 문제일 수 있습니다.${c[0]} 이 화면을 캡처해 https://mobility.rebornlabs.kr/cs 로 보내주세요.`); process.exit(1); }
|
|
152
|
+
|
|
153
|
+
/* ② --set 을 줬을 때만 — advisorModel 한 칸 */
|
|
154
|
+
if (모델) {
|
|
155
|
+
const 옛글 = existsSync(설정) ? readFileSync(설정, "utf8") : "";
|
|
156
|
+
const 새글 = 설정고친글(옛글, 모델);
|
|
157
|
+
if (새글 === null) {
|
|
158
|
+
console.log(` ${c.y}·${c[0]} 설정 파일을 읽지 못해 그대로 두었습니다. 클로드 코드 안에서 ${c.cy}/advisor ${모델}${c[0]} 를 직접 치세요.`);
|
|
159
|
+
} else {
|
|
160
|
+
mkdirSync(dirname(설정), { recursive: true });
|
|
161
|
+
if (옛글) copyFileSync(설정, 설정 + ".bak_advisor");
|
|
162
|
+
writeFileSync(설정, 새글);
|
|
163
|
+
console.log(` ${c.g}✓${c[0]} 조언자 설정 advisorModel = ${모델} ${c.d}(원본 ${옛글 ? "settings.json.bak_advisor 에 남김" : "없어서 새로 만듦"})${c[0]}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
console.log(`\n${c.g}${c.b}✓ 설치 완료${c[0]}`);
|
|
168
|
+
console.log(`\n${c.y}★ 클로드 코드를 껐다 켜야 새 스킬이 잡힙니다.${c[0]}`);
|
|
169
|
+
console.log(`\n${c.b}이렇게 말하면 됩니다${c[0]}`);
|
|
170
|
+
console.log(`${c.d}${"─".repeat(58)}${c[0]}`);
|
|
171
|
+
console.log(` ${c.cy}어드바이저 켜 줘. 조언자는 페이블로${c[0]}`);
|
|
172
|
+
console.log(` ${c.cy}계속하기 전에 조언자에게 물어봐${c[0]}`);
|
|
173
|
+
console.log(`${c.d}${"─".repeat(58)}${c[0]}`);
|
|
174
|
+
console.log(`${c.d}조언자 도구는 실험 기능이고 무료가 아닙니다(조언 사용량도 청구·한도 포함). 리본랩스는 앤트로픽과 제휴 관계가 아닙니다.${c[0]}`);
|
|
175
|
+
|
|
176
|
+
/* ★끝난 뒤 딱 한 칸. 못 깔았으면 여기까지 오지 않는다. 가리키는 곳은 스킬팩(8,900원) 하나뿐이다. */
|
|
177
|
+
const t = TAIL[퍼널];
|
|
178
|
+
console.log("");
|
|
179
|
+
for (const 줄 of t.이음) console.log(`${c.d}${줄.replace(/\*\*(.+?)\*\*/g, `${c[0]}${c.b}$1${c[0]}${c.d}`)}${c[0]}`);
|
|
180
|
+
console.log(`\n${c.b}${t.제목}${c[0]}${c.d} — ${t.한줄}${c[0]}`);
|
|
181
|
+
console.log(`${c.cy}${링크(퍼널)}${c[0]}`);
|
|
182
|
+
console.log(`${c.d}${마지막}${c[0]}\n`);
|
|
183
|
+
process.exit(0);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
실행();
|
package/package.json
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reborn-advisor",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "오퍼스가 짜고 페이블이 검토 — 클로드 코드 조언자 도구(/advisor · advisorModel)를 한국어로 안내하고 켜는 것을 돕는 스킬 advisor-ko 를 클로드 코드에 넣어 줍니다(--set fable 로 설정까지)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude",
|
|
7
|
+
"claude-code",
|
|
8
|
+
"skill",
|
|
9
|
+
"advisor",
|
|
10
|
+
"opus",
|
|
11
|
+
"fable",
|
|
12
|
+
"korean"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=cli&utm_campaign=advisor",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://mobility.rebornlabs.kr/cs"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "REBORN LABS",
|
|
20
|
+
"type": "module",
|
|
21
|
+
"bin": {
|
|
22
|
+
"reborn-advisor": "cli.mjs"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"cli.mjs",
|
|
26
|
+
"tail.mjs",
|
|
27
|
+
"skill/",
|
|
28
|
+
"README.md"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=18"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"test": "node cli.mjs --self-test",
|
|
35
|
+
"check": "node cli.mjs --check"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: advisor-ko
|
|
3
|
+
description: 클로드 코드의 조언자 도구(/advisor · advisorModel)를 한국어로 안내하고 켜고 끄는 것을 돕는다 — 주 모델(예: Opus 5.5)이 일하다가 핵심 순간에 더 강한 조언 모델(예: Fable 5.1)에게 검토를 받게 한다. "어드바이저", "advisor", "조언자", "페이블 검토", "오퍼스 페이블", "큰 결정만 페이블", "advisorModel", "끝났다 하기 전에 확인" 같은 말이 나오면 쓴다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 오퍼스가 짜고 페이블이 검토 — 클로드 코드 조언자 도구 한국어 안내
|
|
7
|
+
|
|
8
|
+
리본랩스가 2026-11-13 에 클로드 코드 공식 문서(code.claude.com/docs/ko/advisor)를 직접 읽고 만든 안내다. 조언자 도구는 **실험 기능**이라 동작·가격·가용성이 바뀔 수 있다. 지금 값은 문서를 **지금** 다시 읽어 확인한다.
|
|
9
|
+
리본랩스는 앤트로픽과 제휴 관계가 아니다.
|
|
10
|
+
|
|
11
|
+
## 이게 무엇인가
|
|
12
|
+
|
|
13
|
+
- 주 모델이 일하다가 **핵심 순간**에 더 강한 두 번째 모델(조언자)을 부른다. 언제 부를지는 클로드가 정한다 — 접근 방식을 정하기 전, 같은 오류에 계속 막힐 때, 작업이 끝났다고 말하기 전.
|
|
14
|
+
- 조언자는 모든 도구 호출과 결과를 포함한 **전체 대화**를 받고, 클로드가 계속하기 전에 적용할 지침을 돌려준다. 조언자가 직접 파일을 고치지는 않는다.
|
|
15
|
+
- 조언자는 계속 지켜보는 것이 아니다. 부를 때만 돈다.
|
|
16
|
+
|
|
17
|
+
## 켜는 법 (셋 중 하나)
|
|
18
|
+
|
|
19
|
+
1. 세션 안에서 `/advisor` — 인자 없이 치면 고르는 창이 뜬다. `/advisor fable` · `/advisor opus` 처럼 바로 줄 수도 있다. 고른 값은 사용자 설정의 `advisorModel` 에 저장된다.
|
|
20
|
+
2. 설정 파일 `~/.claude/settings.json` 에 `"advisorModel": "fable"`
|
|
21
|
+
3. 시작할 때 한 세션만: `claude --advisor fable`
|
|
22
|
+
|
|
23
|
+
끄기: `/advisor off` · 환경변수 `CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`.
|
|
24
|
+
켜지면 세션 시작에 `Advisor Tool (experimental) is on and may use more tokens` 알림이 뜬다.
|
|
25
|
+
|
|
26
|
+
## 모델 짝 (2026-11-13 문서 기준)
|
|
27
|
+
|
|
28
|
+
- 조언자는 주 모델과 같거나 더 강해야 한다. 약하면 붙지 않는다.
|
|
29
|
+
- 주 모델 Opus 5 · 5.5 → 조언자는 Fable 계열 또는 Opus 5 이상.
|
|
30
|
+
- Fable 5.1 조언자는 클로드 코드 v2.1.257 이상 · Fable 5.2 조언자는 v2.1.321 이상.
|
|
31
|
+
- Haiku 4.5 는 조언을 받을 수는 있지만 조언자가 될 수는 없다.
|
|
32
|
+
- 데스크톱 앱 · `-p` · Agent SDK · Remote Control 에서 `/advisor` 는 v2.1.260 이상.
|
|
33
|
+
|
|
34
|
+
## 먼저 묻는다
|
|
35
|
+
|
|
36
|
+
1. 지금 주 모델이 무엇인가(`/model` 로 확인).
|
|
37
|
+
2. 조언자로 무엇을 쓸까 — 보통 주 모델보다 한 단계 강한 것.
|
|
38
|
+
3. 어디서 쓰는가 — Anthropic API · Claude Platform on AWS 만 된다. **Amazon Bedrock · Google Cloud · Microsoft Foundry 에서는 안 된다.**
|
|
39
|
+
|
|
40
|
+
## 돕는 순서
|
|
41
|
+
|
|
42
|
+
1. 문서를 **지금** 다시 읽는다(code.claude.com/docs/ko/advisor). 위 판 번호·모델 짝은 2026-11-13 값이다. 기억으로 지어내지 않는다.
|
|
43
|
+
2. 사용자 허락을 받은 뒤에만 설정을 고친다. 허락 없이 고치지 않는다. `settings.json` 을 고칠 때는 다른 칸을 건드리지 않고 `advisorModel` 한 칸만 바꾼다.
|
|
44
|
+
3. 클로드 코드를 다시 켜서 알림 줄이 뜨는지 보고, 뜬 것만 「켜졌다」고 말한다. 통과를 지어내지 않는다.
|
|
45
|
+
4. 프롬프트로 직접 부르게 할 수도 있다 — 「계속하기 전에 조언자에게 물어봐」.
|
|
46
|
+
|
|
47
|
+
## 꼭 같이 말할 것
|
|
48
|
+
|
|
49
|
+
- **무료가 아니다.** API 는 조언 모델 단가로 조언 토큰이 따로 청구된다. 구독 요금제는 조언 사용량도 요금제 한도에 들어간다. 일부 요금제에서 Fable 조언자는 사용량 크레딧으로 청구되며 한 번 동의가 필요하다.
|
|
50
|
+
- **「항상 싸다」가 아니라 「보통 싸다」다.** 강한 모델을 내내 쓰는 것보다 빠른 주 모델 + 강한 조언자가 보통 덜 든다고 문서가 적는다. 내 사용량으로 재 봐야 안다. 「돈이 얼마 아껴진다」고 약속하지 않는다.
|
|
51
|
+
- 계획할 것이 거의 없는 짧은 일, 매 차례 가장 강한 모델이 필요한 일에는 이득이 적다.
|
|
52
|
+
- 조언자를 켜고 끄는 것은 주 모델의 프롬프트 캐시를 깨지 않는다고 문서에 적혀 있다.
|
|
53
|
+
- 키 · 비밀번호를 묻지 않는다. 화면에 찍지도 않는다.
|
|
54
|
+
|
|
55
|
+
## 확인 못 함
|
|
56
|
+
|
|
57
|
+
- 리본랩스가 요금제별(Pro · Max · Team · Enterprise) 세부 제한을 확인하지는 못했다.
|
|
58
|
+
- 이 기능이 처음 들어온 클로드 코드 판 번호는 문서에 없었다.
|
|
59
|
+
|
|
60
|
+
## 출처
|
|
61
|
+
|
|
62
|
+
code.claude.com/docs/ko/advisor · code.claude.com/docs/en/advisor · platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool
|
package/tail.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 「끝난 뒤 한 칸」 문안 — 정본은 `skillpack/tail_copy.mjs` 다(사본 이유: npm 패키지는 폴더 밖을 import 할 수 없다).
|
|
3
|
+
* 규율: ① 끝난 뒤 딱 한 칸 · ② 못 깔았으면 안 띄운다 · ③ 파일을 안 남긴다 · ④ 고지 블록 금지 · ⑤ 첫 줄은 방금 한 일에서 이어져야 한다
|
|
4
|
+
* ★다음 칸은 스킬팩 하나뿐이다.
|
|
5
|
+
*/
|
|
6
|
+
const 랜딩경로 = "/skillpack";
|
|
7
|
+
export const 링크 = (퍼널) => `https://rebornlabs.kr${랜딩경로}?utm_source=installer&utm_medium=cli&utm_campaign=${퍼널}`;
|
|
8
|
+
|
|
9
|
+
export const TAIL = {
|
|
10
|
+
advisor: {
|
|
11
|
+
이음: [
|
|
12
|
+
"방금 한 일은 **클로드 코드 조언자 도구(/advisor)를 안내하는 한국어 스킬 advisor-ko 를 넣은 것**입니다.",
|
|
13
|
+
"클로드 코드를 다시 켜고 「어드바이저 켜 줘. 조언자는 페이블로」처럼 말하면, 지금 모델을 보고 맞는 조언자를 골라 허락받은 뒤 켜 줍니다.",
|
|
14
|
+
],
|
|
15
|
+
제목: "리본랩스 스킬팩",
|
|
16
|
+
한줄: "같은 방식으로 골라 담은 48종을 한 줄로. 8,900원",
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const 마지막 = "목록과 직접 까는 명령까지 그 페이지에 그대로 적어 두었습니다. 안 사셔도 됩니다.";
|