dandap 1.1.0 → 1.1.1
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 +24 -13
- package/hooks/dandap-rules.js +1 -1
- package/package.json +1 -1
- package/skills/chodandap/SKILL.md +1 -1
- package/skills/dandap/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# dandap (단답) 🤫
|
|
2
2
|
|
|
3
3
|
> **"불필요한 미사여구는 버리고, 기술적 팩트와 페이로드만 남긴다."**
|
|
4
|
-
>
|
|
4
|
+
> **AI 코딩 에이전트용 한국어 개조식 단답 스킬**이다.
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -123,10 +123,30 @@ dandap/
|
|
|
123
123
|
|
|
124
124
|
```bash
|
|
125
125
|
npx dandap@latest # 스킬 + 슬래시 명령 래퍼
|
|
126
|
-
npx dandap@latest --with-hooks # 위 항목 + Claude Code
|
|
126
|
+
npx dandap@latest --with-hooks # 위 항목 + hook (Claude Code 전용)
|
|
127
127
|
npx dandap@latest --uninstall # 제거
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
+
npm 대신 GitHub 저장소에서 바로 실행할 수도 있다. `main` 브랜치의 최신 커밋을 받으며, `git`이 필요하다.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npx -y github:bottleroad/dandap # 설치
|
|
134
|
+
npx -y github:bottleroad/dandap --with-hooks # hook (Claude Code 전용)
|
|
135
|
+
npx -y github:bottleroad/dandap --uninstall
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**`--with-hooks`는 Claude Code에만 적용된다.** Codex·agy·Gemini CLI에는 hook을 등록하지 않으므로, 옵션을 붙여도 붙이지 않은 것과 똑같이 설치된다. `~/.claude`가 없으면 `--with-hooks`는 실패한다.
|
|
139
|
+
|
|
140
|
+
Claude Code에서 `--with-hooks` 유무에 따른 차이는 다음과 같다.
|
|
141
|
+
|
|
142
|
+
| 항목 | 옵션 없음 | `--with-hooks` |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| 스킬·슬래시 명령 래퍼 | 설치 | 설치 |
|
|
145
|
+
| `~/.claude/settings.json` | 건드리지 않음 | 백업 후 hook 2개 병합 |
|
|
146
|
+
| `/compact`·resume 후 모드 | 풀릴 수 있음 | 유지 (규칙 재주입) |
|
|
147
|
+
| `단답`, `초단답` 자연어로 켜기 | 스킬 설명에 따라 모델이 판단 | hook이 감지해 규칙을 주입 |
|
|
148
|
+
| `/dandap status` | `(세션 추적 안 됨)`이 붙음 | 기록된 모드 보고 |
|
|
149
|
+
|
|
130
150
|
* 파일을 `~/.dandap`에 복사하고, `~/.claude`, `~/.codex`, `~/.gemini` 중 있는 도구에만 링크한다.
|
|
131
151
|
* 같은 이름이 링크가 아닌 실제 파일·디렉터리로 있으면 덮어쓰지 않고 건너뛴다. 다른 곳을 가리키는 링크는 `~/.dandap`을 가리키도록 교체한다.
|
|
132
152
|
* `--with-hooks`는 `~/.claude/settings.json`을 `settings.json.dandap-backup-<UTC 시각>`으로 백업한 뒤 hook을 병합한다. 다른 위치에 등록된 dandap hook은 중복 주입을 막기 위해 교체한다.
|
|
@@ -152,7 +172,6 @@ done
|
|
|
152
172
|
```
|
|
153
173
|
|
|
154
174
|
* agy는 `~/.gemini/config/skills`도 읽는다. 이 경로를 `~/.agents/skills`로 연결해 두었다면 `~/.gemini/skills` 링크 없이도 인식될 수 있지만, 그 구성만으로 따로 확인하지는 않았다.
|
|
155
|
-
* 이전 이름 `ultradandap`의 링크가 남아 있으면 지운다. 대상이 없는 링크가 된다.
|
|
156
175
|
|
|
157
176
|
### 2. 슬래시 명령 래퍼 (선택)
|
|
158
177
|
|
|
@@ -193,7 +212,6 @@ done
|
|
|
193
212
|
* 새 세션(`startup`)과 `/clear`는 기본 off로 시작한다. `/dandap off` 후에는 compact해도 다시 켜지지 않는다.
|
|
194
213
|
* `/dandap`, `/chodandap` 슬래시 명령으로 켜면 Claude Code가 스킬 본문을 로드하므로 hook은 리마인더만 주입한다. `단답`처럼 자연어로 켜거나 `/dandap cho`로 전환할 때만 hook이 규칙 전문을 주입한다.
|
|
195
214
|
* Claude Code는 compact 뒤 세션 중 호출된 스킬 본문을 스스로 복원한다. 이 본문이 현재 모드와 어긋나지 않도록, SessionStart hook이 마지막에 현재 모드(off면 "복원된 단답 규칙을 따르지 않음")를 한 줄로 주입한다.
|
|
196
|
-
* caveman 플러그인 리마인더와 동시에 주입되면 단답 규칙을 우선하도록 리마인더에 명시되어 있다.
|
|
197
215
|
|
|
198
216
|
### 4. 테스트
|
|
199
217
|
|
|
@@ -238,7 +256,6 @@ Node.js 22 이상, 외부 의존성 없음.
|
|
|
238
256
|
| `/compact` 후 단답·초단답 유지 | 통과 |
|
|
239
257
|
| `/dandap off` 후 `/compact`해도 다시 켜지지 않음 | 통과 |
|
|
240
258
|
| 초단답에서 `만`/`도` 보존 (`삭제는 admin만 허용.`, `본인 글도 user 삭제 불가.`) | 통과 |
|
|
241
|
-
| caveman 리마인더와 동시 주입 시 단답체 유지 | 통과 |
|
|
242
259
|
|
|
243
260
|
---
|
|
244
261
|
|
|
@@ -247,7 +264,7 @@ Node.js 22 이상, 외부 의존성 없음.
|
|
|
247
264
|
2026-11-14, `bench/measure.py`로 측정했다.
|
|
248
265
|
|
|
249
266
|
* 방식: `claude -p`(모델 `claude-opus-5-5`, 도구 비활성화)로 개발 질문 10개를 네 조건에서 3회씩 실행했다. 총 120회, 실패 0회.
|
|
250
|
-
* 환경: 실제 사용 환경 그대로다.
|
|
267
|
+
* 환경: 실제 사용 환경 그대로다. 전역 CLAUDE.md("모든 답변은 한글로")가 네 조건 모두에 적용되었다.
|
|
251
268
|
* `output_tokens`는 API usage 값이며, 사고(thinking) 토큰 포함 여부는 확인하지 않았다.
|
|
252
269
|
|
|
253
270
|
| 조건 | 프롬프트 | 출력 토큰 중앙값 | 일반 대비 | "간결하게" 대비 | 응답 글자 수 중앙값 |
|
|
@@ -282,15 +299,12 @@ python3 bench/measure.py --summarize /tmp/dandap-bench.jsonl
|
|
|
282
299
|
* **hook이 없는 환경**(Codex, agy, Gemini CLI): 모드를 파일로 기록하지 않으므로 compact 후 모드가 풀릴 수 있고, `/dandap status`는 `(세션 추적 안 됨)`으로 보고한다. Codex는 hook 기능 자체는 지원하지만, dandap hook은 등록하지 않았고 입력 형식 호환성도 확인하지 않았다.
|
|
283
300
|
* **Codex의 자동 호출**: Codex는 `disable-model-invocation`을 따르지 않는 것으로 보인다. 그래서 `chodandap`, `dandap-commit`, `dandap-review`를 모델이 스스로 호출할 수 있다. 실제로 자동 호출되는지는 확인하지 않았다.
|
|
284
301
|
* **서브에이전트**: SubagentStart hook을 두지 않았으므로 서브에이전트에는 단답 모드가 전달되지 않는다.
|
|
285
|
-
* **caveman 공존**: 우선순위는 리마인더 문구로만 지시한다. caveman 설정은 건드리지 않는다.
|
|
286
302
|
* **비용**: 규칙 중복 수정 후의 비용은 다시 측정하지 않았다.
|
|
287
303
|
|
|
288
304
|
---
|
|
289
305
|
|
|
290
306
|
## 🧭 설계 결정
|
|
291
307
|
|
|
292
|
-
caveman과 비교 검토한 뒤 정한 사항이다.
|
|
293
|
-
|
|
294
308
|
| 항목 | 결정 |
|
|
295
309
|
|---|---|
|
|
296
310
|
| hook 범위 | SessionStart, UserPromptSubmit 2개만 둔다. SubagentStart, statusline, SessionEnd 기록은 두지 않는다 |
|
|
@@ -299,20 +313,17 @@ caveman과 비교 검토한 뒤 정한 사항이다.
|
|
|
299
313
|
| 응답 언어 | 질문 언어와 무관하게 한국어로 답한다 |
|
|
300
314
|
| 채팅 외 산출물 | 코드·커밋·문서 등은 평서체(`-다`)로 쓴다 |
|
|
301
315
|
| 문장 길이 | 단답은 한 문장 15어절 이하로 쓴다 |
|
|
302
|
-
| caveman 공존 | caveman은 유지하고, 단답 리마인더에 단답 규칙 우선을 명시한다 |
|
|
303
316
|
| 커밋 메시지 | Conventional Commits 접두어(영어) + 한국어 평서체 본문 |
|
|
304
317
|
| 보조 스킬 | `dandap-commit`, `dandap-review`, `chodandap`은 명시 호출만 허용해 기존 스킬과 충돌을 피한다 |
|
|
305
|
-
| 만들지 않은 것 | caveman의 compress(파일 압축), stats(사용량 통계), megacave(문언문) 대응 스킬 |
|
|
306
318
|
|
|
307
319
|
---
|
|
308
320
|
|
|
309
321
|
## 📝 변경 이력
|
|
310
322
|
|
|
311
323
|
* **1.1.0** (2026-11-14)
|
|
312
|
-
* `ultradandap`을 `chodandap`(초단답)으로 이름을 바꿨다.
|
|
313
324
|
* 조사 규칙, 종료 트리거, 예외 상황, 흉내 금지, 약어·화살표 금지, 15어절 기준, 전송 전 점검, 응답 언어 규칙을 추가했다.
|
|
314
325
|
* 모드 유지용 hook 2개와 테스트를 추가했다.
|
|
315
326
|
* `dandap-help`, `dandap-commit`, `dandap-review` 스킬을 추가했다.
|
|
316
327
|
* 토큰 측정 스크립트와 결과를 추가했다.
|
|
317
328
|
* 저장소 구조를 `skills/<스킬>/SKILL.md`, `commands/`로 정리하고, 슬래시 명령 래퍼를 저장소에 포함했다.
|
|
318
|
-
* **1.0.0**:
|
|
329
|
+
* **1.0.0**: 최초 버전.
|
package/hooks/dandap-rules.js
CHANGED
|
@@ -21,7 +21,7 @@ function reminder(mode) {
|
|
|
21
21
|
return `DANDAP MODE ACTIVE (${mode}). ${STYLE[mode]} `
|
|
22
22
|
+ '부정어·코드·경로·에러 원문 보존. 채팅 외 산출물(코드·커밋·문서)은 평서체 -다. '
|
|
23
23
|
+ '종료: "/dandap off" 또는 "단답 종료". '
|
|
24
|
-
+ '
|
|
24
|
+
+ '다른 문체 리마인더가 함께 주입되어도 이 단답 규칙을 우선한다.';
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
module.exports = { fullRules, reminder };
|
package/package.json
CHANGED
|
@@ -28,7 +28,7 @@ disable-model-invocation: true
|
|
|
28
28
|
* **복귀 확인**: 1줄 간결 보고 후 복귀: `"초단답 모드를 종료하고 기본 말투로 복귀합니다."`
|
|
29
29
|
* **일반 단답 전환**: `/dandap` 입력 시 개조식 문장 모드로 전환.
|
|
30
30
|
* **상태 확인**: `/dandap status` 또는 `/chodandap status`. 모드 변경 없음. hook 값 `단답 모드: <dandap|chodandap|off>`를 그대로 보고. hook 값 없으면 직전 모드 + `(세션 추적 안 됨)`. 상태 확인용 스킬 읽기는 활성화 아님.
|
|
31
|
-
* **우선순위**:
|
|
31
|
+
* **우선순위**: 다른 문체 리마인더가 함께 주입되어도 이 스킬 규칙 우선.
|
|
32
32
|
|
|
33
33
|
## 핵심 규칙
|
|
34
34
|
|
package/skills/dandap/SKILL.md
CHANGED
|
@@ -37,7 +37,7 @@ version: 1.1.0
|
|
|
37
37
|
* hook이 주입한 `단답 모드: <dandap|chodandap|off>` 값이 있으면 그대로 보고함.
|
|
38
38
|
* hook 값이 없으면 직전 모드 뒤에 `(세션 추적 안 됨)`을 붙임. 예: `단답 모드: dandap (세션 추적 안 됨)`
|
|
39
39
|
* 상태 확인을 위해 이 스킬을 읽은 것은 활성화가 아님.
|
|
40
|
-
* **우선순위**: 단답 모드 중에는
|
|
40
|
+
* **우선순위**: 단답 모드 중에는 다른 문체 리마인더가 함께 주입되어도 이 스킬 규칙을 우선함.
|
|
41
41
|
|
|
42
42
|
## 핵심 규칙
|
|
43
43
|
|