jun-claude-code 0.0.16 → 0.1.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 +73 -62
- package/dist/__tests__/merge-settings.test.d.ts +1 -0
- package/dist/__tests__/merge-settings.test.js +340 -0
- package/dist/cli.js +3 -1
- package/dist/copy.d.ts +7 -0
- package/dist/copy.js +35 -21
- package/dist/init-context.js +50 -17
- package/dist/init-project.d.ts +5 -0
- package/dist/init-project.js +21 -9
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +26 -0
- package/package.json +4 -2
- package/templates/global/CLAUDE.md +31 -182
- package/templates/global/agents/context-manager.md +9 -0
- package/templates/global/hooks/dangerous-command-blocker.sh +67 -0
- package/templates/global/hooks/skill-forced-subagent.sh +3 -22
- package/templates/global/hooks/skill-forced.sh +6 -36
- package/templates/global/hooks/workflow-enforced.sh +4 -41
- package/templates/global/settings.json +15 -0
- package/templates/global/skills/ContextHandoff/SKILL.md +54 -0
- package/templates/global/skills/PromptStructuring/SKILL.md +10 -58
- package/templates/global/skills/PromptStructuring/output-optimization.md +66 -0
- package/templates/global/skills/PromptStructuring/positive-phrasing.md +17 -194
- package/templates/global/skills/PromptStructuring/xml-tags.md +24 -317
- package/templates/global/statusline-command.sh +84 -0
|
@@ -1,330 +1,37 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: "
|
|
4
|
-
keywords: [xml, tags,
|
|
5
|
-
estimated_tokens:
|
|
2
|
+
name: PromptStructuring-xml-tags
|
|
3
|
+
description: "XML 태그 표준 목록, 파일 유형별 권장 조합"
|
|
4
|
+
keywords: [xml, tags, role, instructions, rules, constraints]
|
|
5
|
+
estimated_tokens: 400
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# XML 태그
|
|
8
|
+
# XML 태그 표준
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 태그 목록
|
|
11
11
|
|
|
12
|
-
| 태그 | 용도 |
|
|
12
|
+
| 태그 | 용도 | 사용 위치 |
|
|
13
13
|
|------|------|----------|
|
|
14
|
-
| `<role>` | Agent
|
|
15
|
-
| `<instructions>` |
|
|
16
|
-
| `<rules>` |
|
|
17
|
-
| `<constraints>` |
|
|
18
|
-
| `<
|
|
19
|
-
| `<
|
|
20
|
-
| `<checklist>` |
|
|
21
|
-
| `<
|
|
22
|
-
| `<phase name="...">` | 워크플로우 단계 | Hook |
|
|
23
|
-
| `<delegation_rules>` | Subagent 위임 규칙 | CLAUDE.md, Hook |
|
|
24
|
-
| `<reference>` | 문서 상호참조 | 전체 |
|
|
14
|
+
| `<role>` | Agent/도구의 역할 정의 | Agent 파일 |
|
|
15
|
+
| `<instructions>` | 단계별 지시사항 | Agent, Skill 파일 |
|
|
16
|
+
| `<rules>` | 준수 규칙 | Skill, Hook |
|
|
17
|
+
| `<constraints>` | 제약사항 | Agent, Skill 파일 |
|
|
18
|
+
| `<delegation_rules>` | Subagent 위임 규칙 | Hook, CLAUDE.md |
|
|
19
|
+
| `<phase>` | 워크플로우 단계 | Hook, Skill |
|
|
20
|
+
| `<checklist>` | 체크리스트 항목 | Hook, Skill |
|
|
21
|
+
| `<output_format>` | 출력 형식 정의 | Agent 파일 |
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## 파일 유형별 권장 태그 조합
|
|
29
|
-
|
|
30
|
-
### Agent 파일
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
필수: <role>, <instructions>, <constraints>, <output_format>
|
|
34
|
-
선택: <rules>, <examples>, <reference>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Agent는 **정체성 -> 절차 -> 제약 -> 출력** 순서로 구성한다.
|
|
38
|
-
|
|
39
|
-
### Skill 파일
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
필수: <instructions>, <rules>, <checklist>
|
|
43
|
-
선택: <examples>, <constraints>, <reference>
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Skill은 **절차 -> 규칙 -> 예시 -> 검증** 순서로 구성한다.
|
|
47
|
-
|
|
48
|
-
### CLAUDE.md
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
필수: <workflow>, <delegation_rules>, <constraints>
|
|
52
|
-
선택: <rules>, <reference>
|
|
53
|
-
```
|
|
23
|
+
## 적용 원칙
|
|
54
24
|
|
|
55
|
-
|
|
25
|
+
- 마크다운 제목(`##`)은 시각적 구분에 사용, XML 태그는 의미적 구분에 사용
|
|
26
|
+
- 중첩 가능: `<phase>` 안에 `<checklist>` 배치
|
|
27
|
+
- `name` 속성으로 식별: `<phase name="계획">`
|
|
56
28
|
|
|
57
|
-
|
|
29
|
+
## Before/After
|
|
58
30
|
|
|
59
31
|
```
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Hook은 **Phase별 단계 -> 검증 체크리스트** 순서로 구성한다.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Before/After 예시
|
|
69
|
-
|
|
70
|
-
### 예시 1: Agent - 역할 설명
|
|
71
|
-
|
|
72
|
-
**Before** (마크다운만 사용):
|
|
73
|
-
|
|
74
|
-
```markdown
|
|
75
|
-
# Code Writer Agent
|
|
32
|
+
Before: ## 역할 정의 (마크다운만)
|
|
33
|
+
After: <role> ... </role> (의미 구분 명확)
|
|
76
34
|
|
|
77
|
-
##
|
|
78
|
-
|
|
79
|
-
코드를 작성하는 전문 Agent입니다.
|
|
80
|
-
|
|
81
|
-
## 해야 할 일
|
|
82
|
-
|
|
83
|
-
1. task-planner의 계획에 따라 코드 작성
|
|
84
|
-
2. 프로젝트 규칙 준수
|
|
85
|
-
3. 작은 단위로 구현
|
|
86
|
-
|
|
87
|
-
## 출력
|
|
88
|
-
|
|
89
|
-
작성한 파일 목록과 변경 내용을 정리하여 출력합니다.
|
|
35
|
+
Before: ## 지시사항 / ## 규칙 (구분 모호)
|
|
36
|
+
After: <instructions> ... </instructions> + <rules> ... </rules>
|
|
90
37
|
```
|
|
91
|
-
|
|
92
|
-
**After** (XML 태그로 의미 구분):
|
|
93
|
-
|
|
94
|
-
```markdown
|
|
95
|
-
# Code Writer Agent
|
|
96
|
-
|
|
97
|
-
<role>
|
|
98
|
-
task-planner의 계획에 따라 실제 코드를 작성하는 전문 Agent
|
|
99
|
-
</role>
|
|
100
|
-
|
|
101
|
-
<instructions>
|
|
102
|
-
1. task-planner의 계획에 따라 코드 작성
|
|
103
|
-
2. 프로젝트 규칙 준수
|
|
104
|
-
3. 작은 단위로 구현하여 빌드 가능 상태 유지
|
|
105
|
-
</instructions>
|
|
106
|
-
|
|
107
|
-
<output_format>
|
|
108
|
-
## 작성한 파일
|
|
109
|
-
|
|
110
|
-
### 1. [파일 경로]
|
|
111
|
-
- 변경 유형: 신규 생성 / 수정
|
|
112
|
-
- 주요 내용: ...
|
|
113
|
-
</output_format>
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**개선 포인트**: `<role>`로 정체성, `<instructions>`로 절차, `<output_format>`으로 출력 구조를 명확히 분리
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
### 예시 2: Skill - 규칙 목록
|
|
121
|
-
|
|
122
|
-
**Before** (마크다운만 사용):
|
|
123
|
-
|
|
124
|
-
```markdown
|
|
125
|
-
# 코딩 규칙
|
|
126
|
-
|
|
127
|
-
## 규칙
|
|
128
|
-
|
|
129
|
-
- 하나의 모듈은 하나의 책임만 가진다
|
|
130
|
-
- 순환 의존을 만들지 않는다
|
|
131
|
-
- Promise 처리 시 then-catch 패턴을 사용한다
|
|
132
|
-
|
|
133
|
-
## 확인
|
|
134
|
-
|
|
135
|
-
- 이 파일의 책임은 하나인가?
|
|
136
|
-
- 순환 의존이 없는가?
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
**After** (XML 태그로 의미 구분):
|
|
140
|
-
|
|
141
|
-
```markdown
|
|
142
|
-
# 코딩 규칙
|
|
143
|
-
|
|
144
|
-
<rules>
|
|
145
|
-
- 하나의 모듈은 하나의 책임만 가진다 (SRP)
|
|
146
|
-
- 모듈 간 의존 방향은 단방향으로 유지한다
|
|
147
|
-
- Promise 처리 시 then-catch 패턴을 사용한다
|
|
148
|
-
</rules>
|
|
149
|
-
|
|
150
|
-
<checklist>
|
|
151
|
-
- [ ] 이 파일의 책임은 하나인가?
|
|
152
|
-
- [ ] 의존 방향이 단방향인가?
|
|
153
|
-
- [ ] then-catch 패턴을 사용했는가?
|
|
154
|
-
</checklist>
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
**개선 포인트**: `<rules>`와 `<checklist>`를 분리하여 "따라야 할 것"과 "검증할 것"을 명확히 구분
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
### 예시 3: Hook - Phase 구분
|
|
162
|
-
|
|
163
|
-
**Before** (마크다운만 사용):
|
|
164
|
-
|
|
165
|
-
```markdown
|
|
166
|
-
# Pre-commit Hook
|
|
167
|
-
|
|
168
|
-
## 단계 1: 계획 확인
|
|
169
|
-
|
|
170
|
-
계획이 있는지 확인합니다. 계획이 없으면 중단합니다.
|
|
171
|
-
|
|
172
|
-
## 단계 2: 코드 검증
|
|
173
|
-
|
|
174
|
-
lint와 type check를 실행합니다.
|
|
175
|
-
|
|
176
|
-
## 단계 3: 커밋
|
|
177
|
-
|
|
178
|
-
변경사항을 커밋합니다.
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**After** (XML 태그로 Phase 구분):
|
|
182
|
-
|
|
183
|
-
```markdown
|
|
184
|
-
# Pre-commit Hook
|
|
185
|
-
|
|
186
|
-
<workflow>
|
|
187
|
-
|
|
188
|
-
<phase name="계획 확인">
|
|
189
|
-
계획이 존재하는지 확인한다. 계획이 있을 때만 다음 Phase로 진행한다.
|
|
190
|
-
</phase>
|
|
191
|
-
|
|
192
|
-
<phase name="코드 검증">
|
|
193
|
-
lint와 type check를 실행한다. 모든 검증을 통과할 때만 다음 Phase로 진행한다.
|
|
194
|
-
</phase>
|
|
195
|
-
|
|
196
|
-
<phase name="커밋">
|
|
197
|
-
변경사항을 커밋한다.
|
|
198
|
-
</phase>
|
|
199
|
-
|
|
200
|
-
</workflow>
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
**개선 포인트**: `<workflow>` > `<phase>` 구조로 단계 간 경계와 진행 조건을 명확히 표현
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## `->` 기호 사용 가이드
|
|
208
|
-
|
|
209
|
-
`->` 기호는 **방향성이 있는 흐름**을 간결하게 표현할 때 사용한다.
|
|
210
|
-
|
|
211
|
-
### 단계 표현
|
|
212
|
-
|
|
213
|
-
순서가 있는 프로세스를 나타낸다.
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
계획 -> 구현 -> 검증 -> 리뷰
|
|
217
|
-
Context 수집 -> TaskList 생성 -> 코드 수정 계획
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### 변환 표현
|
|
221
|
-
|
|
222
|
-
입력이 출력으로 바뀌는 과정을 나타낸다.
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
부정 표현 -> 긍정 표현
|
|
226
|
-
마크다운 제목 -> XML 태그
|
|
227
|
-
"~금지" -> "~전담/전용"
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
### 위임 표현
|
|
231
|
-
|
|
232
|
-
작업이 특정 Agent로 전달됨을 나타낸다.
|
|
233
|
-
|
|
234
|
-
```
|
|
235
|
-
코드 수정 -> code-writer Agent
|
|
236
|
-
Git 작업 -> git-manager Agent
|
|
237
|
-
코드베이스 탐색 -> explore Agent
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### 테이블에서 사용
|
|
241
|
-
|
|
242
|
-
변환 관계를 테이블로 정리할 때도 `->` 를 활용한다.
|
|
243
|
-
|
|
244
|
-
```markdown
|
|
245
|
-
| Before | -> | After |
|
|
246
|
-
|--------|-----|-------|
|
|
247
|
-
| "~금지" | -> | "~전담" |
|
|
248
|
-
| `## 역할` | -> | `<role>` |
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## 주의사항
|
|
254
|
-
|
|
255
|
-
### XML 태그는 마크다운을 보완한다
|
|
256
|
-
|
|
257
|
-
XML 태그는 마크다운을 대체하는 것이 아니라 **의미 계층을 추가**하는 것이다.
|
|
258
|
-
|
|
259
|
-
```markdown
|
|
260
|
-
<rules>
|
|
261
|
-
## 네이밍 규칙
|
|
262
|
-
|
|
263
|
-
| 대상 | 규칙 | 예시 |
|
|
264
|
-
|------|------|------|
|
|
265
|
-
| 변수 | camelCase | `userName` |
|
|
266
|
-
| 상수 | UPPER_SNAKE | `MAX_COUNT` |
|
|
267
|
-
|
|
268
|
-
## 구조 규칙
|
|
269
|
-
|
|
270
|
-
- 한 파일에 한 컴포넌트만 정의한다
|
|
271
|
-
- index.ts를 통해 export한다
|
|
272
|
-
</rules>
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
태그 내부에서 `##`, 테이블, 코드블록을 정상적으로 사용한다.
|
|
276
|
-
|
|
277
|
-
### 태그 중첩은 2단계까지
|
|
278
|
-
|
|
279
|
-
```markdown
|
|
280
|
-
<!-- 허용: 2단계 -->
|
|
281
|
-
<workflow>
|
|
282
|
-
<phase name="계획">...</phase>
|
|
283
|
-
</workflow>
|
|
284
|
-
|
|
285
|
-
<!-- 지양: 3단계 이상 -->
|
|
286
|
-
<workflow>
|
|
287
|
-
<phase name="계획">
|
|
288
|
-
<sub-step>...</sub-step> <!-- 과도한 중첩 -->
|
|
289
|
-
</phase>
|
|
290
|
-
</workflow>
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
3단계 이상 중첩이 필요하면 마크다운 제목(`###`)이나 리스트로 대체한다.
|
|
294
|
-
|
|
295
|
-
### 닫는 태그를 반드시 포함한다
|
|
296
|
-
|
|
297
|
-
```markdown
|
|
298
|
-
<!-- 올바름 -->
|
|
299
|
-
<role>
|
|
300
|
-
Agent의 역할 설명
|
|
301
|
-
</role>
|
|
302
|
-
|
|
303
|
-
<!-- 오류 -->
|
|
304
|
-
<role>
|
|
305
|
-
Agent의 역할 설명
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
모든 XML 태그는 여는 태그와 닫는 태그를 쌍으로 작성한다.
|
|
309
|
-
|
|
310
|
-
### 태그 이름은 표준 목록에서 선택한다
|
|
311
|
-
|
|
312
|
-
이 가이드의 **표준 태그 목록**에 정의된 태그만 사용한다. 커스텀 태그가 필요한 경우 기존 태그로 대체할 수 있는지 먼저 검토한다.
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## 체크리스트
|
|
317
|
-
|
|
318
|
-
<checklist>
|
|
319
|
-
- [ ] 파일 유형(Agent/Skill/CLAUDE.md/Hook)에 맞는 태그 조합을 사용했는가?
|
|
320
|
-
- [ ] 태그 내부에서 마크다운 문법(제목, 테이블, 코드블록)을 정상 활용하는가?
|
|
321
|
-
- [ ] 태그 중첩이 2단계 이하인가?
|
|
322
|
-
- [ ] 모든 태그에 닫는 태그가 포함되어 있는가?
|
|
323
|
-
- [ ] 표준 태그 목록에 정의된 태그만 사용했는가?
|
|
324
|
-
- [ ] `->` 기호를 단계/변환/위임 표현에 활용했는가?
|
|
325
|
-
</checklist>
|
|
326
|
-
|
|
327
|
-
<reference>
|
|
328
|
-
- `SKILL.md` - 프롬프트 구조화 개요 및 핵심 원칙
|
|
329
|
-
- `positive-phrasing.md` - 부정 -> 긍정 전환 패턴
|
|
330
|
-
</reference>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Read JSON input from stdin
|
|
4
|
+
input=$(cat)
|
|
5
|
+
|
|
6
|
+
# Extract data from JSON
|
|
7
|
+
cwd=$(echo "$input" | jq -r '.workspace.current_dir')
|
|
8
|
+
model=$(echo "$input" | jq -r '.model.display_name')
|
|
9
|
+
session_name=$(echo "$input" | jq -r '.session_name // empty')
|
|
10
|
+
remaining=$(echo "$input" | jq -r '.context_window.remaining_percentage // empty')
|
|
11
|
+
used_tokens=$(echo "$input" | jq -r '.context_window.total_input_tokens // empty')
|
|
12
|
+
total_tokens=$(echo "$input" | jq -r '.context_window.context_window_size // empty')
|
|
13
|
+
|
|
14
|
+
# Get short directory name (basename)
|
|
15
|
+
dir_name=$(basename "$cwd")
|
|
16
|
+
|
|
17
|
+
# Git information
|
|
18
|
+
git_info=""
|
|
19
|
+
if git -C "$cwd" rev-parse --git-dir > /dev/null 2>&1; then
|
|
20
|
+
branch=$(git -C "$cwd" -c core.useBuiltinFSMonitor=false -c core.fsmonitor=false symbolic-ref --short HEAD 2>/dev/null || echo "detached")
|
|
21
|
+
|
|
22
|
+
# Check for uncommitted changes
|
|
23
|
+
if ! git -C "$cwd" -c core.useBuiltinFSMonitor=false -c core.fsmonitor=false diff --quiet 2>/dev/null || \
|
|
24
|
+
! git -C "$cwd" -c core.useBuiltinFSMonitor=false -c core.fsmonitor=false diff --cached --quiet 2>/dev/null; then
|
|
25
|
+
status="✗"
|
|
26
|
+
else
|
|
27
|
+
status=""
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
git_info=" git:($(printf '\033[31m')${branch}$(printf '\033[0m'))${status}"
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Format token information
|
|
34
|
+
format_token_count() {
|
|
35
|
+
local value=$1
|
|
36
|
+
if (( value >= 1000 )); then
|
|
37
|
+
printf "%.1fk" "$(bc <<< "scale=1; $value / 1000")"
|
|
38
|
+
else
|
|
39
|
+
echo "$value"
|
|
40
|
+
fi
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# Get color based on usage percentage
|
|
44
|
+
get_color_for_percentage() {
|
|
45
|
+
local percentage=$1
|
|
46
|
+
if (( percentage >= 90 )); then
|
|
47
|
+
printf '\033[31m' # red
|
|
48
|
+
elif (( percentage >= 70 )); then
|
|
49
|
+
printf '\033[33m' # yellow
|
|
50
|
+
else
|
|
51
|
+
printf '\033[0m' # reset (no color)
|
|
52
|
+
fi
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Build status line in robbyrussell style
|
|
56
|
+
status_line="$(printf '\033[36m')${dir_name}$(printf '\033[0m')${git_info}"
|
|
57
|
+
|
|
58
|
+
# Add context percentage if available
|
|
59
|
+
if [ -n "$remaining" ]; then
|
|
60
|
+
# Calculate usage percentage (100 - remaining)
|
|
61
|
+
usage=$((100 - remaining))
|
|
62
|
+
color=$(get_color_for_percentage "$usage")
|
|
63
|
+
status_line="${status_line} | ctx:${color}${usage}%$(printf '\033[0m')"
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Add token information if available
|
|
67
|
+
if [ -n "$used_tokens" ] && [ -n "$total_tokens" ]; then
|
|
68
|
+
used_formatted=$(format_token_count "$used_tokens")
|
|
69
|
+
total_formatted=$(format_token_count "$total_tokens")
|
|
70
|
+
# Calculate token usage percentage
|
|
71
|
+
token_usage=$(echo "scale=0; $used_tokens * 100 / $total_tokens" | bc)
|
|
72
|
+
color=$(get_color_for_percentage "$token_usage")
|
|
73
|
+
status_line="${status_line} | token:${color}${used_formatted}/${total_formatted}$(printf '\033[0m')"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Add model info
|
|
77
|
+
status_line="${status_line} | ${model}"
|
|
78
|
+
|
|
79
|
+
# Add session name if set
|
|
80
|
+
if [ -n "$session_name" ]; then
|
|
81
|
+
status_line="${status_line} [${session_name}]"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
printf "%s" "$status_line"
|