reborn-webagent 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 CHANGED
@@ -1,3 +1,26 @@
1
- # Temporary Holding Version
1
+ # reborn-webagent — browser-use 한국어 안내 스킬 설치기
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ AI 에이전트가 브라우저를 직접 몰게 하는 **browser-use** 를 설치하고, 경쟁사 가격 비교와 방문한 페이지 목록(출처) 남기기를 시키는 법을 **한국어 안내 스킬** 한 개로 넣어 줍니다.
4
+
5
+ ```
6
+ npx --yes reborn-webagent
7
+ ```
8
+
9
+ 본체(browser-use/browser-use)는 제작진의 것입니다(MIT). 이 설치기는 그 코드를 **싣거나 내려받아 설치하지 않습니다.** 공식 README·LICENSE 에서 읽은 내용만 한국어로 옮겼고(2026-10-17 확인) 리본랩스는 제작진과 제휴 관계가 아닙니다.
10
+
11
+ 안내 스킬만 `~/.claude/skills/webagent/` 에 넣습니다. 가입·로그인·키 입력은 하지 않고 **키나 토큰을 받지도 저장하지도 않습니다.** 실제 설치(`uv add browser-use` 등)는 안내 스킬이 공식 그대로 알려 주고 사용자가 직접 합니다.
12
+
13
+ | 옵션 | 하는 일 |
14
+ |---|---|
15
+ | `--check` | 깔지 않고 지금 상태만 봅니다 |
16
+ | `--dry-run` | 무엇을 할지 보여주기만 합니다 |
17
+ | `--local` | 현재 폴더(프로젝트 범위)에 깝니다 |
18
+ | `--self-test` | 설치기 자체 시험 (네트워크 안 씀) |
19
+
20
+ ## 알아 둘 것
21
+
22
+ 파이썬 라이브러리는 무료(MIT)지만 모델 사용료와 클라우드 브라우저는 따로 과금됩니다. 파이썬 3.11 이상이 필요합니다. 로그인·결제 화면에서는 멈추게 하고 대상 사이트의 약관과 robots 를 지키세요. 결과는 보증하지 않습니다.
23
+
24
+ ## 다음 칸
25
+
26
+ 끝난 뒤 딱 한 칸만 안내합니다 — 같은 방식으로 골라 담은 **리본랩스 스킬팩**(8,900원)입니다. 안 사셔도 됩니다.
package/cli.mjs ADDED
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * browser-use 안내 스킬 설치기 — **한국어 안내 스킬 하나를 ~/.claude/skills/webagent 에 넣는다.**
4
+ *
5
+ * npx --yes reborn-webagent 안내 스킬을 넣는다
6
+ * npx --yes reborn-webagent --check 깔지 않고 지금 상태만 본다
7
+ * npx --yes reborn-webagent --dry-run 무엇을 할지 보여주기만 한다
8
+ * npx --yes reborn-webagent --local 홈이 아니라 현재 폴더(.claude/skills)에 깐다
9
+ * npx --yes reborn-webagent --self-test 검사기 자체 시험 (네트워크 안 씀)
10
+ *
11
+ * ★browser-use 본체는 싣지도, 내려받아 깔지도, 재배포하지도 않는다(MIT 라 재배포는 가능하나 코드를 싣지 않는 것이 우리 방침). 설치 방법은 안내 스킬이 공식 그대로 알려 줄 뿐이다.
12
+ * ★남의 것을 싸 넣지 않는다. 우리가 쓴 것은 skill/webagent/SKILL.md (한국어 안내) 하나다.
13
+ * ★가입·로그인·키 입력은 하지 않는다. 키·토큰을 받거나 저장하지 않는다.
14
+ * ★`npx skills add` 도 대신 돌리지 않는다 — 약관을 읽고 사람이 직접 한다.
15
+ */
16
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
17
+ import { homedir } from "node:os";
18
+ import { dirname, join } from "node:path";
19
+ import { fileURLToPath } from "node:url";
20
+ import { TAIL, 링크, 마지막 } from "./tail.mjs";
21
+
22
+ const 여기 = dirname(fileURLToPath(import.meta.url));
23
+ const 원본 = join(여기, "skill");
24
+ const 퍼널 = "bu";
25
+ const 스킬 = "webagent";
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
+ const 알려진 = new Set(["--check", "--dry-run", "--local", "--self-test"]);
32
+ for (const a of argv) { if (a.startsWith("--")) { if (알려진.has(a)) 옵션.add(a); else 모름.push(a); } else 말.push(a); }
33
+ return { 옵션, 모름, 말 };
34
+ }
35
+
36
+ const 목적지 = (g) => (g ? join(homedir(), ".claude", "skills") : join(process.cwd(), ".claude", "skills"));
37
+ function 펼치기(뿌리, 접두 = "", 모음 = []) {
38
+ for (const n of readdirSync(뿌리).sort()) {
39
+ const p = join(뿌리, n);
40
+ if (statSync(p).isDirectory()) 펼치기(p, 접두 + n + "/", 모음); else 모음.push(접두 + n);
41
+ }
42
+ return 모음;
43
+ }
44
+ export function 안내스킬있나(자리) {
45
+ const f = join(자리, 스킬, "SKILL.md");
46
+ return existsSync(f) && statSync(f).size > 1500;
47
+ }
48
+
49
+ /* ══ 자기시험 (네트워크 안 씀) ═════════════════════════════════════ */
50
+ function 자기시험() {
51
+ const 결과 = [];
52
+ const T = (n, ok) => 결과.push([n, !!ok]);
53
+ const f = join(원본, 스킬, "SKILL.md");
54
+ const 본 = existsSync(f) ? readFileSync(f, "utf8").replace(/\r/g, "") : "";
55
+
56
+ T("skill/webagent/SKILL.md 가 있고 빈 껍데기가 아니다", 본.length > 1500);
57
+ T("★머리말 name 이 폴더 이름과 같다", /^---\nname: webagent\n/.test(본));
58
+ T("★description 에 부르는 말이 있다", /\ndescription: .*(browser-use|WEBAGENT|웹 에이전트)/.test(본));
59
+ const 사실 = (() => { try { return JSON.parse(readFileSync(join(여기, "실측_20261017.json"), "utf8")); } catch { return null; } })();
60
+ if (사실) {
61
+ T("★설치 명령이 실측 파일과 같다(uv add browser-use)", 본.includes("uv add browser-use") && 사실.설치_라이브러리.includes("uv add browser-use"));
62
+ T("★파이썬 3.11 이상을 말한다", 본.includes("3.11") && 사실.파이썬.includes(">=3.11"));
63
+ T("★MIT 와 모델비·클라우드 별도 과금을 말한다", 본.includes("MIT") && /따로 과금/.test(본) && 사실.라이선스.includes("MIT"));
64
+ T("★로그인·결제 화면에서 멈추게 한다 · 약관과 robots 를 말한다", /로그인, 결제/.test(본) && /robots/.test(본) && /이용약관/.test(본));
65
+ T("★출처 남기기가 전용 기능이라고 하지 않는다(확인 못 함 표기)", /전용 기능이 \*\*아니라\*\*/.test(본) && 사실.출처남기기.startsWith("미확인"));
66
+ } else console.log(" (실측 파일은 패키지에 없다 — 사실 대조 항목은 저장소에서만 돈다)");
67
+ T("★키·토큰을 채팅에 붙이지 말라고 말한다", /채팅에 (붙여|적지)/.test(본));
68
+ T("★제휴 없음 · 본체는 회사의 것이라고 밝힌다", /제휴/.test(본) && /제작진의 것/.test(본));
69
+ T("★성과 약속 문구가 없다", !/(매출|조회수)이?\s*(몇\s*배|\d+\s*%)\s*(오른|늘|증가)|무조건|100%\s*보장|항상 통과/.test(본));
70
+ T("★옵션 해석", 옵션해석(["--check"]).옵션.has("--check") && 옵션해석(["--zzz"]).모름.length === 1);
71
+ T("★없는 안내 스킬은 통과하지 않는다", !안내스킬있나(join(원본, "__없는자리__")));
72
+ T("★package.json files 에 skill/ · tail.mjs · cli.mjs 가 있다", (() => {
73
+ const p = JSON.parse(readFileSync(join(여기, "package.json"), "utf8")).files || [];
74
+ return p.includes("skill/") && p.includes("tail.mjs") && p.includes("cli.mjs");
75
+ })());
76
+ T("★★끝인사가 스킬팩만 말한다 (클로드킷·자비스 풀스택 금지)", (() => {
77
+ const t = TAIL[퍼널];
78
+ if (!t) return false;
79
+ const 글 = JSON.stringify(t) + 링크(퍼널) + 마지막;
80
+ return /skillpack/.test(링크(퍼널)) && !/클로드킷|자비스\s*풀스택|rebornlabs\.kr\/(claudekit|kit|jarvis)/.test(글);
81
+ })());
82
+ T("★끝인사 주소에 퍼널 표시(utm)가 붙는다", 링크(퍼널).includes(`utm_campaign=${퍼널}`));
83
+
84
+ for (const [n, ok] of 결과) console.log(` ${ok ? c.g + "✓" : c.r + "✗"}${c[0]} ${n}`);
85
+ const 실패 = 결과.filter(([, ok]) => !ok).length;
86
+ console.log(실패 ? `\n${c.r}✗ 자기시험 ${실패}건 실패${c[0]}` : `\n${c.g}✓ 자기시험 ${결과.length}건 통과${c[0]}`);
87
+ return 실패 ? 1 : 0;
88
+ }
89
+
90
+ /* ══ 본 실행 ════════════════════════════════════════════════════ */
91
+ async function 실행() {
92
+ const { 옵션, 모름, 말 } = 옵션해석(process.argv.slice(2));
93
+ if (옵션.has("--self-test")) process.exit(자기시험());
94
+ if (모름.length) { console.error(`${c.r}✗ 모르는 옵션: ${모름.join(" ")}${c[0]}`); process.exit(2); }
95
+ if (말.length) { console.error(`${c.r}✗ 이 설치기는 이름을 받지 않습니다: ${말.join(" ")}${c[0]} — 그냥 npx --yes reborn-webagent`); process.exit(2); }
96
+ const 전역 = !옵션.has("--local");
97
+ const 자리 = 목적지(전역);
98
+ if (!existsSync(join(원본, 스킬, "SKILL.md"))) { console.error(`${c.r}✗ 패키지 안에 skill/ 이 없습니다${c[0]} — 배포가 잘못된 것입니다.`); process.exit(2); }
99
+
100
+ console.log(`${c.b}browser-use${c[0]} ${c.d}— AI 에이전트가 브라우저를 직접 모는 오픈소스 · 한국어 사용 안내${c[0]}`);
101
+
102
+ if (옵션.has("--check")) {
103
+ console.log(`\n${c.b}상태${c[0]}`);
104
+ console.log(` ${안내스킬있나(자리) ? c.g + "✓" : c.r + "✗"}${c[0]} 한국어 안내 스킬 ${c.d}(${join(자리, 스킬, "SKILL.md")})${c[0]}`);
105
+ console.log(` ${c.d}- browser-use 본체가 깔렸는지는 여기서 확인하지 않습니다 (이 설치기는 본체를 건드리지 않습니다)${c[0]}`);
106
+ console.log(`\n${c.d}보기만 했습니다. 깔려면 옵션 없이 다시 돌리세요.${c[0]}`);
107
+ process.exit(0);
108
+ }
109
+
110
+ console.log(`\n${c.b}할 일${c[0]}`);
111
+ console.log(` ${c.cy}안내 스킬${c[0]} ${c.d}→ ${join(자리, 스킬, "SKILL.md")}${c[0]}`);
112
+ if (옵션.has("--dry-run")) { console.log(`\n${c.y}--dry-run 이라 아무것도 하지 않았습니다.${c[0]}`); process.exit(0); }
113
+
114
+ /* ① 안내 스킬 — 우리가 쓴 것이라 파일로 복사한다 */
115
+ const 출발 = join(원본, 스킬), 목표 = join(자리, 스킬);
116
+ for (const 상대 of 펼치기(출발)) {
117
+ const dst = join(목표, 상대);
118
+ mkdirSync(dirname(dst), { recursive: true });
119
+ writeFileSync(dst, readFileSync(join(출발, 상대)));
120
+ }
121
+ const 스킬ok = 안내스킬있나(자리);
122
+ console.log(`\n ${스킬ok ? c.g + "✓" : c.r + "✗"}${c[0]} 한국어 안내 스킬 ${스킬ok ? "들어왔습니다" : "못 넣었습니다"}`);
123
+ if (!스킬ok) { console.error(`${c.r}✗ 권한 문제일 수 있습니다.${c[0]} 이 화면을 캡처해 https://mobility.rebornlabs.kr/cs 로 보내주세요.`); process.exit(1); }
124
+
125
+ console.log(`\n${c.g}${c.b}✓ 설치 완료${c[0]}`);
126
+ console.log(`\n${c.y}★ 클로드 코드를 껐다 켜야 새 스킬이 잡힙니다.${c[0]}`);
127
+ console.log(`\n${c.b}이렇게 말하면 됩니다${c[0]}`);
128
+ console.log(`${c.d}${"─".repeat(58)}${c[0]}`);
129
+ console.log(` ${c.cy}browser-use 설치하고 쓰는 순서 알려 줘${c[0]}`);
130
+ console.log(` ${c.cy}경쟁사 세 곳 가격을 비교표로 가져오는 task 문장 써 줘${c[0]}`);
131
+ console.log(`${c.d}${"─".repeat(58)}${c[0]}`);
132
+ console.log(`${c.y}주의: 로그인·결제 화면에서는 멈추게 하고, 대상 사이트의 약관과 robots 를 지키세요. 키는 채팅이 아니라 .env 에 직접 적으세요.${c[0]}`);
133
+ console.log(`${c.d}browser-use 는 MIT 오픈소스이며 모델 사용료와 클라우드 브라우저는 따로 과금됩니다. 본체는 이 설치기가 깔지 않습니다(2026-10-17 공식 저장소 기준). 결과는 보증하지 않습니다.${c[0]}`);
134
+
135
+ /* ★끝난 뒤 딱 한 칸. 못 깔았으면 여기까지 오지 않는다. 가리키는 곳은 스킬팩(8,900원) 하나뿐이다. */
136
+ const t = TAIL[퍼널];
137
+ console.log("");
138
+ for (const 줄 of t.이음) console.log(`${c.d}${줄.replace(/\*\*(.+?)\*\*/g, `${c[0]}${c.b}$1${c[0]}${c.d}`)}${c[0]}`);
139
+ console.log(`\n${c.b}${t.제목}${c[0]}${c.d} — ${t.한줄}${c[0]}`);
140
+ console.log(`${c.cy}${링크(퍼널)}${c[0]}`);
141
+ console.log(`${c.d}${마지막}${c[0]}\n`);
142
+ process.exit(0);
143
+ }
144
+
145
+ 실행();
package/package.json CHANGED
@@ -1,6 +1,16 @@
1
1
  {
2
2
  "name": "reborn-webagent",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.0",
4
+ "description": "AI 에이전트가 브라우저를 직접 몰게 하는 오픈소스 browser-use 를 설치하고, 경쟁사 가격 비교와 방문 페이지 목록(출처) 남기기를 시키는 법을 한국어 안내 스킬로 넣어 줍니다. 본체는 제작진의 것이며 싣거나 대신 설치하지 않습니다.",
5
+ "keywords": ["claude", "claude-code", "skill", "browser-use", "web-agent", "korean"],
6
+ "homepage": "https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=cli&utm_campaign=bu",
7
+ "bugs": { "url": "https://mobility.rebornlabs.kr/cs" },
8
+ "license": "MIT",
9
+ "author": "REBORN LABS",
10
+ "type": "module",
11
+ "bin": { "reborn-webagent": "cli.mjs" },
12
+ "files": ["cli.mjs", "tail.mjs", "skill/", "README.md"],
13
+ "engines": { "node": ">=18" },
14
+ "scripts": { "test": "node cli.mjs --self-test", "check": "node cli.mjs --check" },
15
+ "publishConfig": { "access": "public" }
16
+ }
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: webagent
3
+ description: AI 에이전트가 내 브라우저를 직접 몰아 사이트를 돌아다니며 읽고 비교하게 해 주는 오픈소스 browser-use 를 설치하고, 경쟁사 가격 비교와 방문한 페이지 목록(출처) 남기기를 시키는 법, 그리고 안전 주의를 한국어로 안내한다. "browser-use", "브라우저 유즈", "웹 에이전트", "WEBAGENT", "탭 40개", "경쟁사 가격 비교", "에이전트가 브라우저 조작", "출처 남기기" 같은 말이 나오면 쓴다. 본체는 browser-use 제작진의 것이며 우리가 만든 것이 아니다.
4
+ ---
5
+
6
+ # browser-use — 한국어 사용 안내
7
+
8
+ 이 안내 스킬은 **리본랩스가 쓴 것**이다. 본체(browser-use/browser-use)는 제작진의 것이고 리본랩스는 제휴 관계가 없다. 공식 저장소 README·LICENSE·pyproject 에서 읽은 내용만 옮겼다(2026-10-17 확인 · 바뀔 수 있다). 읽지 못한 것은 「확인 못 함」으로 적었다.
9
+
10
+ ## 먼저 알아 둘 것
11
+
12
+ - 라이선스는 **MIT** 다. 파이썬 라이브러리는 무료이고, **모델 사용료와 클라우드 브라우저는 따로 과금**된다(README). 우리 설치기는 코드를 싣지 않고 이 안내만 넣는다.
13
+ - 파이썬 **3.11 이상**이 필요하다(pyproject: >=3.11,<4.0). 새 프로젝트는 uv 로 `uv init --python 3.12` 부터 하라고 README 가 적는다.
14
+ - 모델 키가 든다. README 예시는 OpenAI 키를 `.env` 에 넣는다. **키는 채팅에 붙여 넣지 말고 `.env` 파일에 직접 적어라.** 우리는 키를 받지도 저장하지도 않는다.
15
+ - 오픈소스판은 내 컴퓨터에서 내 브라우저로 돈다. 클라우드판은 스텔스 브라우저(시간당 US$0.02부터)와 호스팅 에이전트 API 를 유료로 파는 별도 서비스다. 어느 쪽이든 결과는 보증하지 않는다.
16
+
17
+ ## 설치 — 공식 그대로, 사용자가 직접
18
+
19
+ 방법 하나(라이브러리):
20
+
21
+ ```
22
+ uv init --python 3.12
23
+ uv add browser-use
24
+ ```
25
+
26
+ 그다음 `.env` 에 모델 키를 직접 적고, README 의 `agent.py` 예시를 저장해 `uv run agent.py` 로 돌린다. 공식 예시는 `Agent(task=..., llm=..., browser=Browser())` 형태다.
27
+
28
+ 방법 둘(CLI): README 가 클로드 코드 같은 에이전트에게 붙이라고 한 문장이 있다. 「uv 로 파이썬 3.12 에 browser-use 최신 안정판을 설치하고, `browser-use skill install` 로 스킬을 등록하고, 내 브라우저에 연결해 줘」 라는 뜻이다. 실패하면 browser-use/browser-harness 저장소의 install.md 를 보라고 한다.
29
+
30
+ 브라우저 자체를 따로 깔아야 하는지는 README 에 적혀 있지 않아 **확인 못 함**이다. 안 되면 오류 문구를 그대로 읽고 공식 문서(docs.browser-use.com)를 본다. Bash 도구를 쓰는 Claude 용 구성은 Linux/macOS 이고 윈도우는 WSL 이라고 한다.
31
+
32
+ ## 시킬 수 있는 일 1 — 경쟁사 가격 비교
33
+
34
+ task 문장을 구체적으로 쓴다. 예:
35
+
36
+ 「A사, B사, C사 공식 사이트의 요금 페이지를 각각 방문해서 플랜 이름과 월 가격과 연 결제 가격을 나란히 비교표로 만들어 줘. 페이지에 가격이 없으면 없다고 적고 추측하지 마.」
37
+
38
+ 규칙: 사이트를 3개 안팎으로 시작하고, **페이지에 없는 값은 비워 두게** 시킨다. 가격은 바뀌므로 표 아래에 확인한 날짜를 적게 한다. 공식 문서에 가격 비교 전용 기능은 없다. 이건 에이전트에게 시킬 수 있는 일의 한 예일 뿐이다.
39
+
40
+ ## 시킬 수 있는 일 2 — 쓴 페이지 목록(출처) 남기기
41
+
42
+ task 끝에 이렇게 붙인다.
43
+
44
+ 「답 끝에 네가 실제로 방문한 모든 페이지의 주소를 순서대로 목록으로 적고, 각 값이 어느 주소에서 나왔는지 표시해 줘.」
45
+
46
+ 그러면 확인할 근거가 남는다. 다만 이것은 README 에 있는 전용 기능이 **아니라** 시키는 방식이다(확인 못 함). 에이전트가 적은 주소가 맞는지는 **사람이 몇 개 직접 열어 대조**해야 한다.
47
+
48
+ ## 안전 주의
49
+
50
+ - 로그인, 결제, 개인정보 입력 화면에서는 **멈추고 나에게 물으라**고 task 에 적는다. 결제 카드·비밀번호를 에이전트에게 주지 않는다.
51
+ - 평소 쓰는 내 크롬 프로필에 연결하면 로그인된 계정이 그대로 열린다. 처음에는 **빈 프로필이나 연습 계정**으로 한다.
52
+ - 대상 사이트의 **이용약관과 robots 정책을 존중**한다. 자동 접속을 막는 곳은 하지 않는다. 짧은 간격으로 반복 접속하지 않는다.
53
+ - 개인정보가 담긴 페이지를 모으지 않는다. 가져온 정보를 어디에 쓸지는 내 책임이다.
54
+ - 클라우드판의 스텔스·CAPTCHA 해결 기능은 약관이 허락하는 범위에서만 쓴다.
55
+
56
+ ## 이렇게 물어보면 된다
57
+
58
+ - 「browser-use 설치하고 쓰는 순서 알려 줘」
59
+ - 「경쟁사 세 곳 가격을 비교표로 가져오는 task 문장 써 줘」
60
+ - 「방문한 페이지 목록을 남기게 하는 법 알려 줘」
package/tail.mjs ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 「끝난 뒤 한 칸」 문안 — 정본은 `skillpack/tail_copy.mjs` 다.
3
+ * 사본이 여기 있는 이유는 하나뿐이다: npm 패키지는 폴더 밖을 import 할 수 없다.
4
+ * 고칠 일이 생기면 정본을 먼저 고치고 여기로 옮긴다. 반대로 하지 마라.
5
+ *
6
+ * 규율: ① 끝난 뒤 딱 한 칸 · ② 못 깔았으면 안 띄운다 · ③ 파일을 안 남긴다
7
+ * ④ 고지 블록 금지 · ⑤ 첫 줄은 방금 한 일에서 이어져야 한다
8
+ * ★다음 칸은 스킬팩 하나뿐이다. 그 위 사다리는 스킬팩 구매 이후에 말한다(2026-08-24 전략).
9
+ */
10
+ /* ★맨 주소를 상수로 내놓지 않는다 — 조립해서만 내보낸다(utm 이 빠진 채로 나가는 걸 막는다). */
11
+ const 랜딩경로 = "/skillpack";
12
+ export const 링크 = (퍼널) => `https://rebornlabs.kr${랜딩경로}?utm_source=installer&utm_medium=cli&utm_campaign=${퍼널}`;
13
+
14
+ export const TAIL = {
15
+ bu: {
16
+ 이음: [
17
+ "방금 한 일은 **AI 에이전트가 브라우저를 직접 몰게 하는 browser-use 를 설치하고 가격 비교·출처 남기기를 시키는 법을 한국어 안내 스킬로 넣은 것**입니다.",
18
+ "본체는 제작진의 것이라 우리는 싣거나 대신 설치하지 않았고 제휴 관계도 없습니다. 클로드 코드를 다시 켜고 「browser-use 설치하고 쓰는 순서 알려 줘」라고 물어보세요.",
19
+ ],
20
+ 제목: "리본랩스 스킬팩",
21
+ 한줄: "같은 방식으로 골라 담은 48종을 한 줄로. 8,900원",
22
+ },
23
+ };
24
+
25
+ export const 마지막 = "목록과 직접 까는 명령까지 그 페이지에 그대로 적어 두었습니다. 안 사셔도 됩니다.";