reborn-prompt 1.0.1 → 1.0.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.md +76 -76
- package/install.mjs +217 -114
- package/package.json +2 -1
- package/skill/SKILL.en.md +95 -0
package/README.md
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
# 프롬프트 정리기 (reborn-prompt)
|
|
2
|
-
|
|
3
|
-
한 문장을 던지면 **그대로 쓸 수 있는 프롬프트**로 정리하는 클로드 스킬입니다.
|
|
4
|
-
MIT · 완전 무료.
|
|
5
|
-
|
|
6
|
-
```
|
|
7
|
-
npx reborn-prompt
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
클로드 코드 안에서라면 터미널을 따로 열 필요도 없습니다.
|
|
11
|
-
|
|
12
|
-
- 그냥 말하기 — `프롬프트 정리기 설치해줘`
|
|
13
|
-
- 느낌표 붙이기 — `!npx reborn-prompt`
|
|
14
|
-
|
|
15
|
-
★ 깐 다음 **클로드 코드를 껐다 켜야** 적용됩니다.
|
|
16
|
-
|
|
17
|
-
## 무엇을 하나
|
|
18
|
-
|
|
19
|
-
대충 던진 한 문장을 받아 네 칸을 채웁니다.
|
|
20
|
-
|
|
21
|
-
| 칸 | 무엇 |
|
|
22
|
-
|---|---|
|
|
23
|
-
| 할 일 | 무엇이 되어야 끝인가 |
|
|
24
|
-
| 산출물 | 어떤 형태로 받을 것인가 (코드만 / diff만 / 파일) |
|
|
25
|
-
| 손댈 범위 | 어디까지 건드려도 되는가 + 손대면 안 되는 것 |
|
|
26
|
-
| 끝나는 조건 | 무엇이 참이면 멈추는가 |
|
|
27
|
-
|
|
28
|
-
그리고
|
|
29
|
-
|
|
30
|
-
- 프롬프트가 **크레딧을 낭비하는 35가지 케이스**를 훑습니다(`references/낭비35.md`).
|
|
31
|
-
전부 늘어놓지 않고 실제로 걸린 것만 최대 3개까지 고쳐 넣습니다.
|
|
32
|
-
- 프로젝트의 `.claude/decisions.md` 를 읽어 **이미 내린 결정**을 전제로 싣습니다.
|
|
33
|
-
그래서 새 대화에서 어제 정한 걸 오늘 뒤집지 않습니다.
|
|
34
|
-
- 출력은 **일반 텍스트 프롬프트 하나**입니다. 챗GPT·커서에 그대로 붙여넣어도 됩니다.
|
|
35
|
-
|
|
36
|
-
## 이 설치기가 남들과 다른 점
|
|
37
|
-
|
|
38
|
-
깔고 끝내지 않습니다. **깐 뒤에 다시 확인**합니다 —
|
|
39
|
-
파일이 실제로 있는지, 머리말이 온전한지, 35가지 목록이 잘리지 않았는지.
|
|
40
|
-
"설치했는데 안 되네"가 거기서 나오기 때문입니다.
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
npx reborn-prompt --check 설치하지 않고 지금 상태만 본다
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## 예시
|
|
47
|
-
|
|
48
|
-
**전**
|
|
49
|
-
```
|
|
50
|
-
그냥 결제 되게 좀 고쳐줘
|
|
51
|
-
자꾸 깨지는데 ㅋㅋ
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**후**
|
|
55
|
-
```
|
|
56
|
-
[할 일]
|
|
57
|
-
결제 폼 제출이 되게 고친다
|
|
58
|
-
|
|
59
|
-
[산출물]
|
|
60
|
-
코드 변경만 — 설명 없이
|
|
61
|
-
|
|
62
|
-
[손댈 범위]
|
|
63
|
-
CheckoutForm.tsx, validate.ts
|
|
64
|
-
손대지 말 것: 그 외 전부
|
|
65
|
-
|
|
66
|
-
[끝나는 조건]
|
|
67
|
-
카드가 실제로 결제되고 테스트가 통과
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
REBORN LABS · MIT
|
|
73
|
-
설명 https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
|
74
|
-
이건 한 번의 대화를 좋게 만듭니다. 클로드가 하는 일 자체를 손보는 건 따로 있습니다 —
|
|
75
|
-
골라 담은 스킬 48종, 한 줄로. 8,900원 (목록과 직접 까는 명령까지 공개돼 있습니다)
|
|
76
|
-
https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
|
1
|
+
# 프롬프트 정리기 (reborn-prompt)
|
|
2
|
+
|
|
3
|
+
한 문장을 던지면 **그대로 쓸 수 있는 프롬프트**로 정리하는 클로드 스킬입니다.
|
|
4
|
+
MIT · 완전 무료.
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
npx --yes reborn-prompt
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
클로드 코드 안에서라면 터미널을 따로 열 필요도 없습니다.
|
|
11
|
+
|
|
12
|
+
- 그냥 말하기 — `프롬프트 정리기 설치해줘`
|
|
13
|
+
- 느낌표 붙이기 — `!npx --yes reborn-prompt`
|
|
14
|
+
|
|
15
|
+
★ 깐 다음 **클로드 코드를 껐다 켜야** 적용됩니다.
|
|
16
|
+
|
|
17
|
+
## 무엇을 하나
|
|
18
|
+
|
|
19
|
+
대충 던진 한 문장을 받아 네 칸을 채웁니다.
|
|
20
|
+
|
|
21
|
+
| 칸 | 무엇 |
|
|
22
|
+
|---|---|
|
|
23
|
+
| 할 일 | 무엇이 되어야 끝인가 |
|
|
24
|
+
| 산출물 | 어떤 형태로 받을 것인가 (코드만 / diff만 / 파일) |
|
|
25
|
+
| 손댈 범위 | 어디까지 건드려도 되는가 + 손대면 안 되는 것 |
|
|
26
|
+
| 끝나는 조건 | 무엇이 참이면 멈추는가 |
|
|
27
|
+
|
|
28
|
+
그리고
|
|
29
|
+
|
|
30
|
+
- 프롬프트가 **크레딧을 낭비하는 35가지 케이스**를 훑습니다(`references/낭비35.md`).
|
|
31
|
+
전부 늘어놓지 않고 실제로 걸린 것만 최대 3개까지 고쳐 넣습니다.
|
|
32
|
+
- 프로젝트의 `.claude/decisions.md` 를 읽어 **이미 내린 결정**을 전제로 싣습니다.
|
|
33
|
+
그래서 새 대화에서 어제 정한 걸 오늘 뒤집지 않습니다.
|
|
34
|
+
- 출력은 **일반 텍스트 프롬프트 하나**입니다. 챗GPT·커서에 그대로 붙여넣어도 됩니다.
|
|
35
|
+
|
|
36
|
+
## 이 설치기가 남들과 다른 점
|
|
37
|
+
|
|
38
|
+
깔고 끝내지 않습니다. **깐 뒤에 다시 확인**합니다 —
|
|
39
|
+
파일이 실제로 있는지, 머리말이 온전한지, 35가지 목록이 잘리지 않았는지.
|
|
40
|
+
"설치했는데 안 되네"가 거기서 나오기 때문입니다.
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
npx --yes reborn-prompt --check 설치하지 않고 지금 상태만 본다
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 예시
|
|
47
|
+
|
|
48
|
+
**전**
|
|
49
|
+
```
|
|
50
|
+
그냥 결제 되게 좀 고쳐줘
|
|
51
|
+
자꾸 깨지는데 ㅋㅋ
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**후**
|
|
55
|
+
```
|
|
56
|
+
[할 일]
|
|
57
|
+
결제 폼 제출이 되게 고친다
|
|
58
|
+
|
|
59
|
+
[산출물]
|
|
60
|
+
코드 변경만 — 설명 없이
|
|
61
|
+
|
|
62
|
+
[손댈 범위]
|
|
63
|
+
CheckoutForm.tsx, validate.ts
|
|
64
|
+
손대지 말 것: 그 외 전부
|
|
65
|
+
|
|
66
|
+
[끝나는 조건]
|
|
67
|
+
카드가 실제로 결제되고 테스트가 통과
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
REBORN LABS · MIT
|
|
73
|
+
설명 https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
|
74
|
+
이건 한 번의 대화를 좋게 만듭니다. 클로드가 하는 일 자체를 손보는 건 따로 있습니다 —
|
|
75
|
+
골라 담은 스킬 48종, 한 줄로. 8,900원 (목록과 직접 까는 명령까지 공개돼 있습니다)
|
|
76
|
+
https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
package/install.mjs
CHANGED
|
@@ -1,114 +1,217 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* 프롬프트 정리기 설치기 — **깔고, 진짜 잡히는지 확인까지 한다.**
|
|
4
|
-
*
|
|
5
|
-
* npx reborn-prompt 설치 + 확인
|
|
6
|
-
* npx reborn-prompt --check 설치하지 않고 지금 상태만 본다
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 프롬프트 정리기 설치기 — **깔고, 진짜 잡히는지 확인까지 한다.**
|
|
4
|
+
*
|
|
5
|
+
* npx --yes reborn-prompt 설치 + 확인
|
|
6
|
+
* npx --yes reborn-prompt --check 설치하지 않고 지금 상태만 본다
|
|
7
|
+
* npx --yes reborn-prompt --lang=en 화면 말을 영어로 강제한다(안 주면 이 컴퓨터 로케일)
|
|
8
|
+
*
|
|
9
|
+
* ★★[[kit-update-selfcheck]] · [[kit-skill-registry-installer]] 와 같은 원칙이다.
|
|
10
|
+
* **복사는 조용히 실패한다.** 그래서 종료코드로 판정하지 않고,
|
|
11
|
+
* 끝나고 나서 **파일이 실제로 있는지·머리말이 온전한지**를 다시 본다.
|
|
12
|
+
*
|
|
13
|
+
* ★이 스킬은 남의 것이 아니라 **우리가 만든 것**이다(MIT). 그래서 `skills add` 로 남의
|
|
14
|
+
* 저장소를 부르는 게 아니라, 패키지에 동봉한 파일을 홈으로 **복사**한다.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
|
|
17
|
+
import { homedir } from "node:os";
|
|
18
|
+
import { dirname, join, relative } from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
|
|
21
|
+
const HOME = homedir();
|
|
22
|
+
const 여기 = dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
const 인자 = process.argv.slice(2);
|
|
24
|
+
const 확인만 = 인자.includes("--check");
|
|
25
|
+
/** `--lang=en` · `--lang=ko`. 안 주면 이 컴퓨터의 로케일로 정한다(→ `말정하기`). */
|
|
26
|
+
const 말강제 = (인자.find((a) => a.startsWith("--lang=")) || "").slice(7).toLowerCase();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 어느 말로 말할 것인가. (2026-09-23 · 영어권 2차 ①)
|
|
30
|
+
* ★기준 패턴은 `npm_video_skills/install.mjs` 다. 같은 인자 규약(`--lang=`)을 쓴다.
|
|
31
|
+
* ★이 컴퓨터의 로케일이 곧 그 사람이 읽는 말이다. 서버에 묻지 않는다.
|
|
32
|
+
* ★못 읽으면 한국어로 떨어진다 — 지금 받는 사람의 절대다수가 한국 고객이다.
|
|
33
|
+
*/
|
|
34
|
+
export function 말정하기(강제) {
|
|
35
|
+
if (강제 === "en" || 강제 === "ko") return 강제;
|
|
36
|
+
try {
|
|
37
|
+
return /^ko\b/i.test(Intl.DateTimeFormat().resolvedOptions().locale || "") ? "ko" : "en";
|
|
38
|
+
} catch { return "ko"; }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 화면에 찍는 말. **색은 여기 넣지 않는다** — 부르는 쪽이 입힌다.
|
|
43
|
+
* ★한국어 문구는 **한 글자도 바꾸지 않았다.** 옮겨 담기만 했다.
|
|
44
|
+
* ★자기시험은 이 패키지에 없다.
|
|
45
|
+
*/
|
|
46
|
+
const 글표 = {
|
|
47
|
+
ko: {
|
|
48
|
+
머리: "프롬프트 정리기",
|
|
49
|
+
머리부제: "· REBORN LABS · MIT",
|
|
50
|
+
머리설명: "한 문장을 그대로 쓸 수 있는 프롬프트로 정리합니다.",
|
|
51
|
+
짐없음1: "✗ 패키지 안에 skill/ 폴더가 없다",
|
|
52
|
+
짐없음1뒤: " — 배포가 잘못된 것이다.",
|
|
53
|
+
받은곳: (경로) => `받은 곳: ${경로}`,
|
|
54
|
+
검사_SKILL없음: "SKILL.md 가 없다",
|
|
55
|
+
검사_머리말깨짐: "SKILL.md 의 머리말이 깨졌다(name 을 못 읽는다)",
|
|
56
|
+
검사_참고없음: "references/낭비35.md 가 없다",
|
|
57
|
+
검사_개수틀림: (n) => `35가지여야 하는데 ${n}개다 — 목록이 잘렸다`,
|
|
58
|
+
설치됨: "✓ 설치되어 있습니다",
|
|
59
|
+
설치됨상세: (경로) => `(${경로} · 35가지 확인)`,
|
|
60
|
+
아직없음: "· 아직 없습니다",
|
|
61
|
+
설치요약: (n, 경로) => `${n}개 파일 → ${경로}`,
|
|
62
|
+
확인걸림: "✗ 깔았는데 확인에서 걸렸습니다",
|
|
63
|
+
확인걸림설명: "권한이나 경로 문제일 수 있습니다. 위 경로를 직접 열어 확인해 주세요.",
|
|
64
|
+
설치완료: "✓ 설치 완료",
|
|
65
|
+
설치완료설명: "— 파일 확인까지 끝났습니다(35가지 목록 온전).",
|
|
66
|
+
재시작: "★ 클로드 코드를 껐다 켜야 적용됩니다.",
|
|
67
|
+
쓰는법머리: "쓰는 법",
|
|
68
|
+
쓰는법1앞: "그냥 대충 말하세요 — ",
|
|
69
|
+
쓰는법1말: '"그냥 결제 되게 좀 고쳐줘"',
|
|
70
|
+
쓰는법2: "그럼 할 일·산출물·손댈 범위·끝나는 조건까지 채운 프롬프트로 바꿔 줍니다.",
|
|
71
|
+
쓰는법3: "챗GPT·커서에 그대로 붙여넣어도 됩니다.",
|
|
72
|
+
설명링크: "설명 · https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt",
|
|
73
|
+
꼬리1: "이건 한 번의 대화를 좋게 만듭니다. 클로드가 하는 일 자체를 손보는 건 따로 있습니다.",
|
|
74
|
+
제품이름: "리본랩스 스킬팩",
|
|
75
|
+
제품설명: "— 골라 담은 스킬 48종, 한 줄로. 8,900원",
|
|
76
|
+
제품링크: "https://rebornlabs.kr/skillpack?utm_source=installer&utm_medium=cli&utm_campaign=prompt",
|
|
77
|
+
제품꼬리: "목록과 직접 까는 명령까지 그 페이지에 그대로 적어 두었습니다. 안 사셔도 됩니다.",
|
|
78
|
+
},
|
|
79
|
+
en: {
|
|
80
|
+
머리: "Prompt Fixer",
|
|
81
|
+
머리부제: "· REBORN LABS · MIT",
|
|
82
|
+
머리설명: "Turns one sentence into a prompt you can paste and use as-is.",
|
|
83
|
+
짐없음1: "✗ This package has no skill/ folder inside it",
|
|
84
|
+
짐없음1뒤: " — the package was built wrong.",
|
|
85
|
+
받은곳: (경로) => `Received at: ${경로}`,
|
|
86
|
+
검사_SKILL없음: "SKILL.md is missing",
|
|
87
|
+
검사_머리말깨짐: "SKILL.md's frontmatter is broken (can't read name)",
|
|
88
|
+
검사_참고없음: "references/낭비35.md is missing",
|
|
89
|
+
검사_개수틀림: (n) => `should be 35 items, found ${n} — the list was cut short`,
|
|
90
|
+
설치됨: "✓ Installed",
|
|
91
|
+
설치됨상세: (경로) => `(${경로} · 35 items confirmed)`,
|
|
92
|
+
아직없음: "· Not installed yet",
|
|
93
|
+
설치요약: (n, 경로) => `${n} files → ${경로}`,
|
|
94
|
+
확인걸림: "✗ Installed, but it did not pass the check",
|
|
95
|
+
확인걸림설명: "This may be a permissions or path issue. Please open the path above and check it yourself.",
|
|
96
|
+
설치완료: "✓ Install complete",
|
|
97
|
+
설치완료설명: "— the file check passed too (all 35 items intact).",
|
|
98
|
+
재시작: "★ Restart Claude Code for this to take effect.",
|
|
99
|
+
쓰는법머리: "How to use it",
|
|
100
|
+
쓰는법1앞: "Just say it roughly — ",
|
|
101
|
+
쓰는법1말: '"just fix checkout so it actually works"',
|
|
102
|
+
쓰는법2: "It turns that into a prompt with the task, deliverable, scope, and done-condition filled in.",
|
|
103
|
+
쓰는법3: "You can paste it straight into ChatGPT or Cursor too.",
|
|
104
|
+
설명링크: "Learn more · https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt",
|
|
105
|
+
꼬리1: "This makes one conversation better. Fixing how Claude works overall is a separate thing.",
|
|
106
|
+
제품이름: "REBORN LABS Skill Pack",
|
|
107
|
+
제품설명: "— 48 skills we installed and picked ourselves, in one line. US$8",
|
|
108
|
+
제품링크: "https://skillpack.rebornlabs.kr/?utm_source=installer&utm_medium=cli&utm_campaign=prompt",
|
|
109
|
+
제품꼬리: "The list and the exact install command are right there on that page. You don't have to buy it.",
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/** 이번 실행이 쓰는 말. */
|
|
114
|
+
const 말 = 말정하기(말강제);
|
|
115
|
+
/** 화면 문구. 부르는 쪽은 `G.무엇` 으로 쓴다. */
|
|
116
|
+
const G = 글표[말];
|
|
117
|
+
|
|
118
|
+
const c = { g: "\x1b[32m", r: "\x1b[31m", y: "\x1b[33m", d: "\x1b[90m", cy: "\x1b[36m", b: "\x1b[1m", 0: "\x1b[0m" };
|
|
119
|
+
const 스킬이름 = "prompt-fix";
|
|
120
|
+
const 원본 = join(여기, "skill");
|
|
121
|
+
const 대상 = join(HOME, ".claude", "skills", 스킬이름);
|
|
122
|
+
|
|
123
|
+
console.log(`\n${c.b}${G.머리}${c[0]} ${c.d}${G.머리부제}${c[0]}`);
|
|
124
|
+
console.log(`${c.d}${G.머리설명}${c[0]}\n`);
|
|
125
|
+
|
|
126
|
+
/* ── 무엇을 넣을 것인가 ─────────────────────────────────────────────── */
|
|
127
|
+
function 파일목록(뿌리) {
|
|
128
|
+
const 나온다 = [];
|
|
129
|
+
const 걷기 = (d) => {
|
|
130
|
+
for (const 이름 of readdirSync(d)) {
|
|
131
|
+
const p = join(d, 이름);
|
|
132
|
+
if (statSync(p).isDirectory()) 걷기(p);
|
|
133
|
+
else 나온다.push(p);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
걷기(뿌리);
|
|
137
|
+
return 나온다;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (!existsSync(원본)) {
|
|
141
|
+
console.error(`${c.r}${G.짐없음1}${c[0]}${G.짐없음1뒤}`);
|
|
142
|
+
console.error(` ${c.d}${G.받은곳(여기)}${c[0]}`);
|
|
143
|
+
process.exit(2);
|
|
144
|
+
}
|
|
145
|
+
const 넣을것 = 파일목록(원본);
|
|
146
|
+
|
|
147
|
+
/* ── 지금 상태 ──────────────────────────────────────────────────────── */
|
|
148
|
+
function 검사() {
|
|
149
|
+
const md = join(대상, "SKILL.md");
|
|
150
|
+
if (!existsSync(md)) return { 있음: false, 이유: G.검사_SKILL없음 };
|
|
151
|
+
const 본문 = readFileSync(md, "utf8");
|
|
152
|
+
if (!/^---[\s\S]*?\bname:\s*prompt-fix\b/m.test(본문)) {
|
|
153
|
+
return { 있음: false, 이유: G.검사_머리말깨짐 };
|
|
154
|
+
}
|
|
155
|
+
const 참고 = join(대상, "references", "낭비35.md");
|
|
156
|
+
if (!existsSync(참고)) return { 있음: false, 이유: G.검사_참고없음 };
|
|
157
|
+
/* ★★영상·랜딩·README 가 전부 "35가지"를 인용한다. 목록이 줄어들면 광고가 거짓이 된다.
|
|
158
|
+
그래서 **개수를 여기서 센다.** 파일이 있다는 것만으로 통과시키지 않는다. */
|
|
159
|
+
const 수 = (readFileSync(참고, "utf8").match(/^\d+\.\s\*\*/gm) || []).length;
|
|
160
|
+
if (수 !== 35) return { 있음: false, 이유: G.검사_개수틀림(수) };
|
|
161
|
+
return { 있음: true, 수 };
|
|
162
|
+
}
|
|
163
|
+
const 지금 = 검사();
|
|
164
|
+
|
|
165
|
+
if (확인만) {
|
|
166
|
+
if (지금.있음) console.log(`${c.g}${G.설치됨}${c[0]} ${c.d}${G.설치됨상세(대상)}${c[0]}\n`);
|
|
167
|
+
else console.log(`${c.y}${G.아직없음}${c[0]} ${c.d}— ${지금.이유}${c[0]}\n`);
|
|
168
|
+
process.exit(지금.있음 ? 0 : 1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* ── 설치 ───────────────────────────────────────────────────────────── */
|
|
172
|
+
/* ★영문이면 skill/SKILL.en.md 를 SKILL.md 자리에 심는다(2026-09-23 · 영어권 2차 ①).
|
|
173
|
+
고객 쪽 파일명은 늘 SKILL.md 여야 클로드가 읽는다. SKILL.en.md 자체는 따로 심지 않는다. */
|
|
174
|
+
const 영문본 = join(원본, "SKILL.en.md");
|
|
175
|
+
const en적용 = 말 === "en" && existsSync(영문본);
|
|
176
|
+
let 쓴수 = 0;
|
|
177
|
+
for (const src of 넣을것) {
|
|
178
|
+
const 상대 = relative(원본, src);
|
|
179
|
+
if (상대 === "SKILL.en.md") continue;
|
|
180
|
+
const 실제소스 = (상대 === "SKILL.md" && en적용) ? 영문본 : src;
|
|
181
|
+
const dst = join(대상, 상대);
|
|
182
|
+
mkdirSync(dirname(dst), { recursive: true });
|
|
183
|
+
writeFileSync(dst, readFileSync(실제소스));
|
|
184
|
+
쓴수++;
|
|
185
|
+
/* ★영문 실행은 한글이 0자여야 한다. 참고 문서 파일명(낭비35.md)은 아직 한글이라
|
|
186
|
+
en 화면에서는 줄 자체를 건너뛴다 — 개수·도착 경로는 아래 요약 줄로 이미 준다. */
|
|
187
|
+
if (말 !== "en" || !/[가-힣]/.test(상대)) console.log(` ${c.d}·${c[0]} ${상대}`);
|
|
188
|
+
}
|
|
189
|
+
console.log(`\n${c.d}${G.설치요약(쓴수, 대상)}${c[0]}`);
|
|
190
|
+
|
|
191
|
+
/* ── ★설치가 아니라 **설치 뒤 확인**이 이 설치기의 값이다 ─────────────── */
|
|
192
|
+
const 뒤 = 검사();
|
|
193
|
+
if (!뒤.있음) {
|
|
194
|
+
console.error(`\n${c.r}${G.확인걸림}${c[0]} — ${뒤.이유}`);
|
|
195
|
+
console.error(` ${c.d}${G.확인걸림설명}${c[0]}\n`);
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
console.log(`\n${c.g}${c.b}${G.설치완료}${c[0]} ${c.d}${G.설치완료설명}${c[0]}`);
|
|
200
|
+
console.log(`\n${c.y}${G.재시작}${c[0]}`);
|
|
201
|
+
console.log(`\n${c.b}${G.쓰는법머리}${c[0]}`);
|
|
202
|
+
console.log(` ${G.쓰는법1앞}${c.cy}${G.쓰는법1말}${c[0]}`);
|
|
203
|
+
console.log(` ${c.d}${G.쓰는법2}${c[0]}`);
|
|
204
|
+
console.log(` ${c.d}${G.쓰는법3}${c[0]}\n`);
|
|
205
|
+
console.log(`${c.d}${G.설명링크}${c[0]}`);
|
|
206
|
+
/* ★[[funnel-free-to-paid-join]] — 무료 배포물 안에 유료 제품 안내를 둔다. 숨기지 않는다.
|
|
207
|
+
* ★가리키는 곳을 158,000원 클로드킷 → 8,900원 스킬팩으로 내렸다 (2026-08-24).
|
|
208
|
+
무료 다음 칸이 곧바로 158,000원이라 아무도 못 건넜다(판매 페이지까지 간 10명 중 0명).
|
|
209
|
+
자비스는 스킬팩을 산 사람에게 민다 — 그래야 계단이 생긴다.
|
|
210
|
+
★문안 정본은 skillpack/tail_copy.mjs.
|
|
211
|
+
* ★영문은 클로드킷(한국어 제품)이 아니라 스킬팩(영문 착지·US$8)으로 보낸다 — §D-2 와 같은 이유다. */
|
|
212
|
+
console.log(`${c.d}${G.꼬리1}${c[0]}`);
|
|
213
|
+
console.log(`
|
|
214
|
+
${c.b}${G.제품이름}${c[0]}${c.d} ${G.제품설명}${c[0]}`);
|
|
215
|
+
console.log(`${c.cy}${G.제품링크}${c[0]}`);
|
|
216
|
+
console.log(`${c.d}${G.제품꼬리}${c[0]}
|
|
217
|
+
`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reborn-prompt",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "한 문장을 그대로 쓸 수 있는 프롬프트로 정리합니다 — 할 일·산출물·손댈 범위·끝나는 조건 네 칸 + 크레딧을 낭비하는 35가지 체크 + 이미 내린 결정 기억. 클로드·챗GPT·커서 어디에나.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"install.mjs",
|
|
27
27
|
"skill/",
|
|
28
|
+
"skill/SKILL.en.md",
|
|
28
29
|
"README.md"
|
|
29
30
|
],
|
|
30
31
|
"engines": {
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prompt-fix
|
|
3
|
+
description: Turns a rough one-line ask into a prompt that can be pasted and used as-is — fills in the task, deliverable, scope, and done-condition, flags whichever of 35 known credit-wasting patterns actually apply, and remembers decisions already made so they don't get re-litigated in a new chat. Works for Claude, ChatGPT, or Cursor. Use this when the user throws out a vague one-liner, when they say "write me a prompt for this," or when they're explaining the same thing a second time.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Prompt Fixer (prompt-fix)
|
|
8
|
+
|
|
9
|
+
Takes **one loose sentence** from the user and turns it into a prompt they can paste
|
|
10
|
+
somewhere else and use as-is.
|
|
11
|
+
|
|
12
|
+
## When this fires
|
|
13
|
+
|
|
14
|
+
- The user threw out something vague — "just fix checkout so it actually works," "clean this up"
|
|
15
|
+
- The user says "write me a prompt for this" / "turn this into a prompt"
|
|
16
|
+
- **The user is explaining the same thing a second time** — that's itself a sign the prompt was empty the first time
|
|
17
|
+
|
|
18
|
+
## What it does
|
|
19
|
+
|
|
20
|
+
### Step 1 — fill in four fields
|
|
21
|
+
|
|
22
|
+
For anything missing, **don't ask — fill it with a reasonable default, and mark that you filled it.**
|
|
23
|
+
(The moment you start asking questions back, the message count goes right back up — that's exactly what this skill exists to prevent.)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Task what has to be true for this to be done (one verb-line)
|
|
27
|
+
Deliverable what form should the answer come in (code only / diff only / a file / no explanation)
|
|
28
|
+
Scope what's fair game to touch (files/folders named + what must not be touched)
|
|
29
|
+
Done-condition what has to be true for this to stop (tests pass / X shows up on screen)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2 — scan the 35 patterns
|
|
33
|
+
|
|
34
|
+
Read `references/낭비35.md` and pick out whichever items actually apply.
|
|
35
|
+
**Don't list all 35.** Only the ones that actually hit, at most 3, one line each with the fix.
|
|
36
|
+
|
|
37
|
+
(The list itself is in Korean — that's fine, you can read it. What you write back to the user is in English.)
|
|
38
|
+
|
|
39
|
+
### Step 3 — carry forward decisions already made
|
|
40
|
+
|
|
41
|
+
Read `.claude/decisions.md` at the project root (if it's missing, skip it — don't create it).
|
|
42
|
+
Load whatever's recorded there (e.g. `Postgres, not Mongo` · `pnpm, not npm`) into the prompt's
|
|
43
|
+
**Assumptions** field.
|
|
44
|
+
|
|
45
|
+
When a new decision gets locked in during the conversation, **append it to that file in one line.**
|
|
46
|
+
That's what keeps the next conversation from re-deciding the same thing.
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
<!-- .claude/decisions.md -->
|
|
50
|
+
- Postgres, not Mongo
|
|
51
|
+
- pnpm, not npm
|
|
52
|
+
- Tailwind, no CSS modules
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Step 4 — output something that pastes anywhere
|
|
56
|
+
|
|
57
|
+
The output is **one plain-text prompt.** Don't put Claude-Code-only syntax in it.
|
|
58
|
+
It has to work as-is when pasted into ChatGPT, Cursor, or Gemini.
|
|
59
|
+
|
|
60
|
+
## Output format
|
|
61
|
+
|
|
62
|
+
````
|
|
63
|
+
```
|
|
64
|
+
[Assumptions]
|
|
65
|
+
- (lines pulled from decisions.md — drop this whole section if there aren't any)
|
|
66
|
+
|
|
67
|
+
[Task]
|
|
68
|
+
...
|
|
69
|
+
|
|
70
|
+
[Deliverable]
|
|
71
|
+
...
|
|
72
|
+
|
|
73
|
+
[Scope]
|
|
74
|
+
... / do not touch: ...
|
|
75
|
+
|
|
76
|
+
[Done-condition]
|
|
77
|
+
...
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Fixed — only the patterns that actually hit
|
|
81
|
+
· #12 didn't say whether to save to a file or print to screen → set to "diff only, no explanation"
|
|
82
|
+
· #15 had no done-condition → set to "done once the card payment actually goes through"
|
|
83
|
+
````
|
|
84
|
+
|
|
85
|
+
## What it doesn't do
|
|
86
|
+
|
|
87
|
+
- **Doesn't ask questions back.** Fills with a default and just marks what it filled.
|
|
88
|
+
- **Doesn't list all 35.** Only the ones that hit, at most 3.
|
|
89
|
+
- **Doesn't run the prompt itself.** Only executes it if the user explicitly says "go ahead and do this."
|
|
90
|
+
- **Doesn't invent files that don't exist.** Any path named in the scope field has to actually be there.
|
|
91
|
+
|
|
92
|
+
## Reference
|
|
93
|
+
|
|
94
|
+
- The 35 patterns: `references/낭비35.md`
|
|
95
|
+
- Built by REBORN LABS · MIT · https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|