reborn-prompt 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/LICENSE +21 -0
- package/README.md +76 -0
- package/install.mjs +105 -0
- package/package.json +14 -0
- package/skill/SKILL.md +91 -0
- package/skill/references//353/202/255/353/271/20435.md +67 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 REBORN LABS
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +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
|
+
매일 알아서 발행되는 것까지 필요하시면
|
|
76
|
+
https://rebornlabs.kr/claudekit?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
package/install.mjs
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 프롬프트 정리기 설치기 — **깔고, 진짜 잡히는지 확인까지 한다.**
|
|
4
|
+
*
|
|
5
|
+
* npx reborn-prompt 설치 + 확인
|
|
6
|
+
* npx reborn-prompt --check 설치하지 않고 지금 상태만 본다
|
|
7
|
+
*
|
|
8
|
+
* ★★[[kit-update-selfcheck]] · [[kit-skill-registry-installer]] 와 같은 원칙이다.
|
|
9
|
+
* **복사는 조용히 실패한다.** 그래서 종료코드로 판정하지 않고,
|
|
10
|
+
* 끝나고 나서 **파일이 실제로 있는지·머리말이 온전한지**를 다시 본다.
|
|
11
|
+
*
|
|
12
|
+
* ★이 스킬은 남의 것이 아니라 **우리가 만든 것**이다(MIT). 그래서 `skills add` 로 남의
|
|
13
|
+
* 저장소를 부르는 게 아니라, 패키지에 동봉한 파일을 홈으로 **복사**한다.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { dirname, join, relative } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
|
|
20
|
+
const HOME = homedir();
|
|
21
|
+
const 여기 = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
const 확인만 = process.argv.includes("--check");
|
|
23
|
+
|
|
24
|
+
const c = { g: "\x1b[32m", r: "\x1b[31m", y: "\x1b[33m", d: "\x1b[90m", cy: "\x1b[36m", b: "\x1b[1m", 0: "\x1b[0m" };
|
|
25
|
+
const 스킬이름 = "prompt-fix";
|
|
26
|
+
const 원본 = join(여기, "skill");
|
|
27
|
+
const 대상 = join(HOME, ".claude", "skills", 스킬이름);
|
|
28
|
+
|
|
29
|
+
console.log(`\n${c.b}프롬프트 정리기${c[0]} ${c.d}· REBORN LABS · MIT${c[0]}`);
|
|
30
|
+
console.log(`${c.d}한 문장을 그대로 쓸 수 있는 프롬프트로 정리합니다.${c[0]}\n`);
|
|
31
|
+
|
|
32
|
+
/* ── 무엇을 넣을 것인가 ─────────────────────────────────────────────── */
|
|
33
|
+
function 파일목록(뿌리) {
|
|
34
|
+
const 나온다 = [];
|
|
35
|
+
const 걷기 = (d) => {
|
|
36
|
+
for (const 이름 of readdirSync(d)) {
|
|
37
|
+
const p = join(d, 이름);
|
|
38
|
+
if (statSync(p).isDirectory()) 걷기(p);
|
|
39
|
+
else 나온다.push(p);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
걷기(뿌리);
|
|
43
|
+
return 나온다;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!existsSync(원본)) {
|
|
47
|
+
console.error(`${c.r}✗ 패키지 안에 skill/ 폴더가 없다${c[0]} — 배포가 잘못된 것이다.`);
|
|
48
|
+
console.error(` ${c.d}받은 곳: ${여기}${c[0]}`);
|
|
49
|
+
process.exit(2);
|
|
50
|
+
}
|
|
51
|
+
const 넣을것 = 파일목록(원본);
|
|
52
|
+
|
|
53
|
+
/* ── 지금 상태 ──────────────────────────────────────────────────────── */
|
|
54
|
+
const 지금 = 검사();
|
|
55
|
+
function 검사() {
|
|
56
|
+
const md = join(대상, "SKILL.md");
|
|
57
|
+
if (!existsSync(md)) return { 있음: false, 이유: "SKILL.md 가 없다" };
|
|
58
|
+
const 본문 = readFileSync(md, "utf8");
|
|
59
|
+
if (!/^---[\s\S]*?\bname:\s*prompt-fix\b/m.test(본문)) {
|
|
60
|
+
return { 있음: false, 이유: "SKILL.md 의 머리말이 깨졌다(name 을 못 읽는다)" };
|
|
61
|
+
}
|
|
62
|
+
const 참고 = join(대상, "references", "낭비35.md");
|
|
63
|
+
if (!existsSync(참고)) return { 있음: false, 이유: "references/낭비35.md 가 없다" };
|
|
64
|
+
/* ★★영상·랜딩·README 가 전부 "35가지"를 인용한다. 목록이 줄어들면 광고가 거짓이 된다.
|
|
65
|
+
그래서 **개수를 여기서 센다.** 파일이 있다는 것만으로 통과시키지 않는다. */
|
|
66
|
+
const 수 = (readFileSync(참고, "utf8").match(/^\d+\.\s\*\*/gm) || []).length;
|
|
67
|
+
if (수 !== 35) return { 있음: false, 이유: `35가지여야 하는데 ${수}개다 — 목록이 잘렸다` };
|
|
68
|
+
return { 있음: true, 수 };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (확인만) {
|
|
72
|
+
if (지금.있음) console.log(`${c.g}✓ 설치되어 있습니다${c[0]} ${c.d}(${대상} · 35가지 확인)${c[0]}\n`);
|
|
73
|
+
else console.log(`${c.y}· 아직 없습니다${c[0]} ${c.d}— ${지금.이유}${c[0]}\n`);
|
|
74
|
+
process.exit(지금.있음 ? 0 : 1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ── 설치 ───────────────────────────────────────────────────────────── */
|
|
78
|
+
let 쓴수 = 0;
|
|
79
|
+
for (const src of 넣을것) {
|
|
80
|
+
const 상대 = relative(원본, src);
|
|
81
|
+
const dst = join(대상, 상대);
|
|
82
|
+
mkdirSync(dirname(dst), { recursive: true });
|
|
83
|
+
writeFileSync(dst, readFileSync(src));
|
|
84
|
+
쓴수++;
|
|
85
|
+
console.log(` ${c.d}·${c[0]} ${상대}`);
|
|
86
|
+
}
|
|
87
|
+
console.log(`\n${c.d}${쓴수}개 파일 → ${대상}${c[0]}`);
|
|
88
|
+
|
|
89
|
+
/* ── ★설치가 아니라 **설치 뒤 확인**이 이 설치기의 값이다 ─────────────── */
|
|
90
|
+
const 뒤 = 검사();
|
|
91
|
+
if (!뒤.있음) {
|
|
92
|
+
console.error(`\n${c.r}✗ 깔았는데 확인에서 걸렸습니다${c[0]} — ${뒤.이유}`);
|
|
93
|
+
console.error(` ${c.d}권한이나 경로 문제일 수 있습니다. 위 경로를 직접 열어 확인해 주세요.${c[0]}\n`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log(`\n${c.g}${c.b}✓ 설치 완료${c[0]} ${c.d}— 파일 확인까지 끝났습니다(35가지 목록 온전).${c[0]}`);
|
|
98
|
+
console.log(`\n${c.y}★ 클로드 코드를 껐다 켜야 적용됩니다.${c[0]}`);
|
|
99
|
+
console.log(`\n${c.b}쓰는 법${c[0]}`);
|
|
100
|
+
console.log(` 그냥 대충 말하세요 — ${c.cy}"그냥 결제 되게 좀 고쳐줘"${c[0]}`);
|
|
101
|
+
console.log(` ${c.d}그럼 할 일·산출물·손댈 범위·끝나는 조건까지 채운 프롬프트로 바꿔 줍니다.${c[0]}`);
|
|
102
|
+
console.log(` ${c.d}챗GPT·커서에 그대로 붙여넣어도 됩니다.${c[0]}\n`);
|
|
103
|
+
console.log(`${c.d}설명 · https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt${c[0]}`);
|
|
104
|
+
/* ★[[funnel-free-to-paid-join]] — 무료 배포물 안에 유료 제품 안내를 둔다. 숨기지 않는다. */
|
|
105
|
+
console.log(`${c.d}매일 자동 발행까지 필요하시면 · https://rebornlabs.kr/claudekit?utm_source=installer&utm_medium=cli&utm_campaign=prompt${c[0]}\n`);
|
package/package.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "reborn-prompt",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "한 문장을 그대로 쓸 수 있는 프롬프트로 정리합니다 — 할 일·산출물·손댈 범위·끝나는 조건 네 칸 + 크레딧을 낭비하는 35가지 체크 + 이미 내린 결정 기억. 클로드·챗GPT·커서 어디에나.",
|
|
5
|
+
"keywords": ["claude", "claude-code", "prompt", "prompt-engineering", "agent-skills", "skill", "chatgpt", "cursor"],
|
|
6
|
+
"homepage": "https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt",
|
|
7
|
+
"bugs": { "url": "https://mobility.rebornlabs.kr/cs" },
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"author": "REBORN LABS",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"bin": { "reborn-prompt": "install.mjs" },
|
|
12
|
+
"files": ["install.mjs", "skill/", "README.md"],
|
|
13
|
+
"engines": { "node": ">=18" }
|
|
14
|
+
}
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prompt-fix
|
|
3
|
+
description: 한 문장을 던지면 그대로 쓸 수 있는 프롬프트로 정리한다 — 할 일·산출물·손댈 범위·끝나는 조건 네 칸을 채우고, 크레딧을 낭비하는 35가지 케이스를 훑고, 이미 내린 결정을 기억해 새 대화에서 뒤집지 않는다. 클로드·챗GPT·커서 어디에나 붙여넣을 수 있다. 사용자가 대충 던졌을 때, "프롬프트 짜줘"라고 할 때, 같은 걸 여러 번 다시 설명하고 있을 때 쓴다.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 프롬프트 정리기 (prompt-fix)
|
|
8
|
+
|
|
9
|
+
사용자가 던진 **한 문장**을 받아, 그대로 붙여넣어 쓸 수 있는 프롬프트로 바꿔 낸다.
|
|
10
|
+
|
|
11
|
+
## 언제 켜지나
|
|
12
|
+
|
|
13
|
+
- 사용자가 대충 던졌을 때 — "그냥 결제 되게 좀 고쳐줘", "이거 좀 정리해줘"
|
|
14
|
+
- 사용자가 "프롬프트 짜줘" / "이거 프롬프트로 만들어줘" 라고 할 때
|
|
15
|
+
- **같은 걸 두 번째 설명하고 있을 때** — 그 자체가 프롬프트가 비어 있다는 신호다
|
|
16
|
+
|
|
17
|
+
## 무엇을 하나
|
|
18
|
+
|
|
19
|
+
### 1단계 — 네 칸을 채운다
|
|
20
|
+
|
|
21
|
+
빠진 칸은 **묻지 말고 합리적인 기본값으로 채우고, 채웠다는 사실을 표시한다.**
|
|
22
|
+
(되묻기 시작하면 메시지가 또 늘어난다 — 이 스킬이 막으려는 게 바로 그거다)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
할 일 무엇이 되어야 끝인가 (동사 한 줄)
|
|
26
|
+
산출물 어떤 형태로 받을 것인가 (코드만 / diff만 / 파일 / 설명 없이)
|
|
27
|
+
손댈 범위 어디까지 건드려도 되는가 (파일·폴더 명시 + 손대면 안 되는 것)
|
|
28
|
+
끝나는 조건 무엇이 참이면 멈추는가 (테스트 통과 / 화면에 X가 뜬다)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2단계 — 35가지를 훑는다
|
|
32
|
+
|
|
33
|
+
`references/낭비35.md` 를 읽고 해당하는 항목을 잡아낸다.
|
|
34
|
+
**전부 나열하지 않는다.** 실제로 걸린 것만, 최대 3개까지, 한 줄씩 고쳐 넣는다.
|
|
35
|
+
|
|
36
|
+
### 3단계 — 이미 내린 결정을 싣는다
|
|
37
|
+
|
|
38
|
+
프로젝트 루트의 `.claude/decisions.md` 를 읽는다(없으면 만들지 않고 넘어간다).
|
|
39
|
+
거기 적힌 결정(예: `Postgres, not Mongo` · `pnpm, not npm`)을 프롬프트의 **전제** 칸에 싣는다.
|
|
40
|
+
|
|
41
|
+
새 결정이 대화에서 확정되면 **한 줄로 그 파일에 덧붙인다.**
|
|
42
|
+
그래야 다음 대화에서 같은 걸 다시 정하지 않는다.
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
<!-- .claude/decisions.md -->
|
|
46
|
+
- Postgres, not Mongo
|
|
47
|
+
- pnpm, not npm
|
|
48
|
+
- Tailwind, no CSS modules
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 4단계 — 어디에나 붙여넣을 수 있게 낸다
|
|
52
|
+
|
|
53
|
+
출력은 **일반 텍스트 프롬프트 하나**다. 클로드 코드 전용 문법을 넣지 않는다.
|
|
54
|
+
챗GPT·커서·제미나이 어디에 붙여넣어도 그대로 동작해야 한다.
|
|
55
|
+
|
|
56
|
+
## 출력 형식
|
|
57
|
+
|
|
58
|
+
````
|
|
59
|
+
```
|
|
60
|
+
[전제]
|
|
61
|
+
- (decisions.md 에서 온 줄들 — 없으면 이 칸을 통째로 뺀다)
|
|
62
|
+
|
|
63
|
+
[할 일]
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
[산출물]
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
[손댈 범위]
|
|
70
|
+
... / 손대지 말 것: ...
|
|
71
|
+
|
|
72
|
+
[끝나는 조건]
|
|
73
|
+
...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
고친 곳 — 35가지 중 걸린 것만
|
|
77
|
+
· #12 파일로 저장할지 화면에 뿌릴지 없었음 → 「diff만, 설명 없이」로 정함
|
|
78
|
+
· #15 끝나는 조건이 없었음 → 「카드 결제가 실제로 통과하면 멈춤」으로 정함
|
|
79
|
+
````
|
|
80
|
+
|
|
81
|
+
## 하지 않는 것
|
|
82
|
+
|
|
83
|
+
- **되묻지 않는다.** 기본값으로 채우고 무엇을 채웠는지만 표시한다.
|
|
84
|
+
- **35개를 다 늘어놓지 않는다.** 걸린 것만, 최대 3개.
|
|
85
|
+
- **프롬프트를 대신 실행하지 않는다.** 사용자가 "이대로 해줘" 라고 할 때만 실행한다.
|
|
86
|
+
- **없는 파일을 지어내지 않는다.** 범위 칸에 적는 경로는 실제로 있는 것만.
|
|
87
|
+
|
|
88
|
+
## 참고
|
|
89
|
+
|
|
90
|
+
- 35가지 목록: `references/낭비35.md`
|
|
91
|
+
- 만든 곳: REBORN LABS · MIT · https://rebornlabs.kr/prompt?utm_source=installer&utm_medium=cli&utm_campaign=prompt
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 프롬프트가 크레딧을 낭비하는 35가지
|
|
2
|
+
|
|
3
|
+
> 이 목록이 이 스킬의 전부다. 한 문장을 받으면 **아래 35개를 순서대로 훑어**
|
|
4
|
+
> 빠진 칸을 채운 프롬프트로 바꿔 낸다.
|
|
5
|
+
>
|
|
6
|
+
> ★숫자를 먼저 정하고 항목을 억지로 채우지 않았다. 실제 재작업이 났던 자리를 적었고,
|
|
7
|
+
> 그 결과가 35개다. **항목을 지우거나 더하면 이 파일의 개수를 다시 세서 고칠 것** —
|
|
8
|
+
> README·랜딩·영상 문안이 전부 이 수를 인용한다.
|
|
9
|
+
|
|
10
|
+
## A. 목표가 없다 (1~4)
|
|
11
|
+
|
|
12
|
+
1. **증상만 적고 목표를 안 적는다** — "안 돼요"는 무엇이 되어야 하는지를 말하지 않는다.
|
|
13
|
+
2. **여러 요구를 한 문장에 섞는다** — 하나가 실패하면 나머지도 같이 되돌아간다.
|
|
14
|
+
3. **이미 실패한 시도를 안 알려준다** — 모델이 그 길을 다시 간다.
|
|
15
|
+
4. **성공 판정 기준이 없다** — 끝났는지 아무도 모르니 계속 고친다.
|
|
16
|
+
|
|
17
|
+
## B. 범위가 없다 (5~9)
|
|
18
|
+
|
|
19
|
+
5. **손댈 파일·폴더를 안 정한다** — 안 건드려도 될 곳까지 열어 본다.
|
|
20
|
+
6. **손대면 안 되는 것을 안 적는다** — 멀쩡한 코드가 같이 바뀐다.
|
|
21
|
+
7. **"전체를 리팩터링" 같은 무한 범위** — 끝이 없으니 토큰도 끝이 없다.
|
|
22
|
+
8. **기존 동작을 바꿔도 되는지 안 밝힌다** — 고쳐 놓고 되돌리는 왕복이 생긴다.
|
|
23
|
+
9. **새 의존성을 추가해도 되는지 안 밝힌다** — 깔았다 지웠다 한다.
|
|
24
|
+
|
|
25
|
+
## C. 출력 형태가 없다 (10~14)
|
|
26
|
+
|
|
27
|
+
10. **코드만 필요한데 설명이 딸려 온다.**
|
|
28
|
+
11. **diff 를 원하는데 전체 파일이 온다** — 길이가 몇 배가 된다.
|
|
29
|
+
12. **파일로 저장할지 화면에 뿌릴지 안 정한다.**
|
|
30
|
+
13. **길이 상한이 없다** — 필요 없는 분량이 계속 나온다.
|
|
31
|
+
14. **언어를 안 정한다** — 한글로 받고 싶은데 영어로 오고, 다시 시킨다.
|
|
32
|
+
|
|
33
|
+
## D. 끝나는 조건이 없다 (15~18)
|
|
34
|
+
|
|
35
|
+
15. **언제 멈춰야 하는지 없다** — 다 됐는데도 더 고친다.
|
|
36
|
+
16. **테스트 통과를 조건으로 안 건다** — "됐습니다"가 증거 없이 나온다.
|
|
37
|
+
17. **확인 없이 계속 진행한다** — 잘못된 전제 위에 열 걸음을 더 간다.
|
|
38
|
+
18. **되돌리기 지점을 안 잡는다** — 망가지면 처음부터 다시다.
|
|
39
|
+
|
|
40
|
+
## E. 맥락을 매번 다시 싣는다 (19~23)
|
|
41
|
+
|
|
42
|
+
19. **이미 정한 스택을 안 적어 매번 다시 묻는다.**
|
|
43
|
+
20. **과거 결정과 모순되는 지시를 준다** — 어제 정한 걸 오늘 뒤집는다.
|
|
44
|
+
21. **관련 없는 파일을 통째로 붙여넣는다.**
|
|
45
|
+
22. **긴 로그를 자르지 않고 전부 붙여넣는다** — 필요한 건 보통 마지막 20줄이다.
|
|
46
|
+
23. **같은 배경 설명을 대화마다 반복한다.**
|
|
47
|
+
|
|
48
|
+
## F. 모호한 말 (24~28)
|
|
49
|
+
|
|
50
|
+
24. **"적당히" "알아서" "좋게"** — 판정 기준이 없는 형용사.
|
|
51
|
+
25. **"최적화해줘"** — 무엇을 기준으로 무엇을 희생할지 없다.
|
|
52
|
+
26. **"안 되는데요"** — 무엇이 어떻게 안 되는지 없다.
|
|
53
|
+
27. **대명사만 있고 대상이 없다** — "그거", "저 파일".
|
|
54
|
+
28. **파일명만 있고 어디 있는지 없다** — 같은 이름이 여러 개일 때 헤맨다.
|
|
55
|
+
|
|
56
|
+
## G. 되돌이표 (29~32)
|
|
57
|
+
|
|
58
|
+
29. **한 번에 되길 기대하고 통짜로 던진다.**
|
|
59
|
+
30. **실패했는데 같은 프롬프트를 그대로 다시 보낸다.**
|
|
60
|
+
31. **부분 성공을 안 잘라내고 처음부터 다시 시킨다.**
|
|
61
|
+
32. **모델이 물어본 것에 답하지 않고 새 요구를 얹는다.**
|
|
62
|
+
|
|
63
|
+
## H. 도구·환경 (33~35)
|
|
64
|
+
|
|
65
|
+
33. **실행 환경(OS·버전·패키지 매니저)을 안 밝힌다.**
|
|
66
|
+
34. **쓰면 안 되는 도구·라이브러리를 안 밝힌다.**
|
|
67
|
+
35. **결과를 어디에 쓸지 안 밝힌다** — 쓸 수 없는 형태로 나온다.
|