uctm 1.5.3 → 2.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/.claude-plugin/plugin.json +3 -3
- package/README.md +162 -284
- package/agents/builder.md +87 -89
- package/agents/committer.md +90 -96
- package/agents/orchestrator.md +228 -0
- package/agents/planner.md +60 -112
- package/agents/specifier.md +277 -116
- package/agents/verifier.md +61 -66
- package/lib/constants.mjs +1 -5
- package/lib/init.mjs +0 -18
- package/lib/update.mjs +1 -1
- package/package.json +2 -6
- package/references/agent-flow.md +120 -141
- package/references/context-policy.md +39 -37
- package/references/file-content-schema.md +164 -75
- package/references/ref-cache-protocol.md +31 -31
- package/references/shared-prompt-sections.md +104 -202
- package/references/work-activity-log.md +33 -26
- package/references/xml-schema.md +151 -54
- package/skills/sdd-pipeline/SKILL.md +1 -1
- package/skills/uctm-init/SKILL.md +94 -0
- package/skills/work-pipeline/SKILL.md +33 -41
- package/skills/work-status/SKILL.md +17 -17
- package/.agent/router_rule_config.json +0 -47
- package/agents/scheduler.md +0 -171
- package/skills/init/SKILL.md +0 -95
package/references/xml-schema.md
CHANGED
|
@@ -1,120 +1,217 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 에이전트 통신 XML 스키마
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
uc-taskmanager 에이전트용 XML 통신 형식 정의.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
> **디스패처 라벨**: dispatch를 발신하고 task-result를 수신하는 디스패처 역할은 **orchestrator**가 수행한다. 아래 §1/§2의 "디스패처"는 모두 orchestrator를 가리킨다.
|
|
8
|
+
|
|
9
|
+
## 1. Dispatch 형식 (orchestrator → 수신자)
|
|
8
10
|
|
|
9
11
|
```xml
|
|
10
|
-
<dispatch to="{receiver}" work="{WORK_ID}" task="{TASK_ID}"
|
|
11
|
-
<ref-cache> <!--
|
|
12
|
-
<ref key="shared-prompt-sections">{
|
|
13
|
-
<ref key="file-content-schema">{
|
|
14
|
-
<ref key="xml-schema">{
|
|
15
|
-
<ref key="context-policy">{
|
|
16
|
-
<ref key="work-activity-log">{
|
|
12
|
+
<dispatch to="{receiver}" work="{WORK_ID}" task="{TASK_ID}">
|
|
13
|
+
<ref-cache> <!-- 선택사항 -->
|
|
14
|
+
<ref key="shared-prompt-sections">{파일 내용}</ref>
|
|
15
|
+
<ref key="file-content-schema">{파일 내용}</ref>
|
|
16
|
+
<ref key="xml-schema">{파일 내용}</ref>
|
|
17
|
+
<ref key="context-policy">{파일 내용}</ref>
|
|
18
|
+
<ref key="work-activity-log">{파일 내용}</ref>
|
|
17
19
|
</ref-cache>
|
|
18
|
-
<references-dir>{
|
|
20
|
+
<references-dir>{references 디렉토리 절대 경로}</references-dir>
|
|
19
21
|
<context>
|
|
20
|
-
<project>{
|
|
22
|
+
<project>{프로젝트 이름}</project>
|
|
21
23
|
<language>{lang_code}</language>
|
|
22
24
|
<plan-file>works/{WORK_ID}/PLAN.md</plan-file>
|
|
23
25
|
</context>
|
|
24
26
|
<task-spec>
|
|
25
27
|
<file>works/{WORK_ID}/TASK-XX.md</file>
|
|
26
|
-
<title>{
|
|
28
|
+
<title>{제목}</title>
|
|
27
29
|
<action>{implement|verify|commit|plan|route}</action>
|
|
28
|
-
<description>{
|
|
30
|
+
<description>{선택사항}</description>
|
|
29
31
|
</task-spec>
|
|
30
32
|
<previous-results>
|
|
31
|
-
<result task="{TASK_ID}" status="{PASS|FAIL|SKIP}">{
|
|
33
|
+
<result task="{TASK_ID}" status="{PASS|FAIL|SKIP}">{요약}</result>
|
|
32
34
|
</previous-results>
|
|
33
35
|
<cache-hint sections="{section1},{section2}"/>
|
|
34
36
|
</dispatch>
|
|
35
37
|
```
|
|
36
38
|
|
|
37
|
-
|
|
|
38
|
-
|
|
39
|
-
| `to` | builder, verifier, committer, planner,
|
|
40
|
-
| `task` | `TASK-NN` — WORK
|
|
41
|
-
| `execution-mode` | direct / pipeline / full (defaults to full if omitted) |
|
|
39
|
+
| 속성 | 값 |
|
|
40
|
+
|------|-----|
|
|
41
|
+
| `to` | builder, verifier, committer, planner, specifier |
|
|
42
|
+
| `task` | `TASK-NN` — WORK 접두사 포함 금지 |
|
|
42
43
|
|
|
43
44
|
---
|
|
44
45
|
|
|
45
|
-
## 2. Task Result
|
|
46
|
+
## 2. Task Result 형식 (수신자 → orchestrator)
|
|
46
47
|
|
|
47
48
|
```xml
|
|
48
49
|
<task-result work="{WORK_ID}" task="{TASK_ID}" agent="{agent}" status="{PASS|FAIL}">
|
|
49
|
-
<summary>{1-2
|
|
50
|
+
<summary>{1-2줄 요약}</summary>
|
|
50
51
|
<files-changed>
|
|
51
|
-
<file action="{created|modified|deleted}" path="{path}">{
|
|
52
|
+
<file action="{created|modified|deleted}" path="{path}">{설명}</file>
|
|
52
53
|
</files-changed>
|
|
53
54
|
<verification>
|
|
54
|
-
<check name="{type}" status="{PASS|FAIL|N/A}">{
|
|
55
|
+
<check name="{type}" status="{PASS|FAIL|N/A}">{출력}</check>
|
|
55
56
|
</verification>
|
|
56
|
-
<notes>{
|
|
57
|
-
<ref-cache> <!--
|
|
58
|
-
<ref key="shared-prompt-sections">{
|
|
59
|
-
<ref key="file-content-schema">{
|
|
60
|
-
<ref key="xml-schema">{
|
|
61
|
-
<ref key="context-policy">{
|
|
62
|
-
<ref key="work-activity-log">{
|
|
57
|
+
<notes>{메모}</notes>
|
|
58
|
+
<ref-cache> <!-- 선택사항 -->
|
|
59
|
+
<ref key="shared-prompt-sections">{파일 내용}</ref>
|
|
60
|
+
<ref key="file-content-schema">{파일 내용}</ref>
|
|
61
|
+
<ref key="xml-schema">{파일 내용}</ref>
|
|
62
|
+
<ref key="context-policy">{파일 내용}</ref>
|
|
63
|
+
<ref key="work-activity-log">{파일 내용}</ref>
|
|
63
64
|
</ref-cache>
|
|
64
65
|
</task-result>
|
|
65
66
|
```
|
|
66
67
|
|
|
67
68
|
---
|
|
68
69
|
|
|
69
|
-
## 3. Context-Handoff
|
|
70
|
+
## 3. Context-Handoff 요소
|
|
70
71
|
|
|
71
72
|
```xml
|
|
72
73
|
<context-handoff from="{agent}" detail-level="{FULL|SUMMARY|DROP}">
|
|
73
|
-
<what>{
|
|
74
|
-
<why>{
|
|
75
|
-
<caution>{
|
|
76
|
-
<incomplete>{
|
|
74
|
+
<what>{변경/검증 상세}</what>
|
|
75
|
+
<why>{결정 근거}</why> <!-- FULL만 -->
|
|
76
|
+
<caution>{주의사항}</caution> <!-- FULL만 -->
|
|
77
|
+
<incomplete>{미완료 항목}</incomplete> <!-- FULL만 -->
|
|
77
78
|
</context-handoff>
|
|
78
79
|
```
|
|
79
80
|
|
|
80
|
-
| detail-level |
|
|
81
|
+
| detail-level | 포함 필드 |
|
|
81
82
|
|:---:|---|
|
|
82
83
|
| `FULL` | what, why, caution, incomplete |
|
|
83
|
-
| `SUMMARY` | what
|
|
84
|
-
| `DROP` |
|
|
84
|
+
| `SUMMARY` | what만 (1-3줄) |
|
|
85
|
+
| `DROP` | 요소 생략 |
|
|
85
86
|
|
|
86
87
|
---
|
|
87
88
|
|
|
88
|
-
## 4. ref-cache
|
|
89
|
+
## 4. ref-cache 요소 정의
|
|
89
90
|
|
|
90
|
-
`<ref-cache
|
|
91
|
+
`<ref-cache>`는 dispatch 및 task-result XML 내에서 미리 로딩된 레퍼런스 파일 내용을 전달하는 선택적 컨테이너 요소입니다. 존재할 경우, 수신 에이전트는 디스크에서 파일을 읽는 대신 반드시 이 내용을 사용해야 합니다.
|
|
91
92
|
|
|
92
|
-
###
|
|
93
|
+
### 구조
|
|
93
94
|
|
|
94
95
|
```xml
|
|
95
96
|
<ref-cache>
|
|
96
|
-
<ref key="{
|
|
97
|
+
<ref key="{확장자 없는 파일명}">{전체 파일 내용}</ref>
|
|
97
98
|
...
|
|
98
99
|
</ref-cache>
|
|
99
100
|
```
|
|
100
101
|
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
| `<ref-cache>` |
|
|
104
|
-
| `<ref key="...">` | — |
|
|
102
|
+
| 요소 | 필수 | 설명 |
|
|
103
|
+
|------|------|------|
|
|
104
|
+
| `<ref-cache>` | 선택 | 캐시된 레퍼런스 파일 컨테이너. 캐시가 없으면 전체 생략. |
|
|
105
|
+
| `<ref key="...">` | — | 개별 레퍼런스 파일. `key`는 확장자 없는 파일명 (예: `shared-prompt-sections`). |
|
|
105
106
|
|
|
106
|
-
###
|
|
107
|
+
### 인식되는 키
|
|
107
108
|
|
|
108
|
-
|
|
|
109
|
-
|
|
109
|
+
| 키 | 대응 파일 |
|
|
110
|
+
|-----|-----------|
|
|
110
111
|
| `shared-prompt-sections` | `{REFERENCES_DIR}/shared-prompt-sections.md` |
|
|
111
112
|
| `file-content-schema` | `{REFERENCES_DIR}/file-content-schema.md` |
|
|
112
113
|
| `xml-schema` | `{REFERENCES_DIR}/xml-schema.md` |
|
|
113
114
|
| `context-policy` | `{REFERENCES_DIR}/context-policy.md` |
|
|
114
115
|
| `work-activity-log` | `{REFERENCES_DIR}/work-activity-log.md` |
|
|
115
116
|
|
|
116
|
-
###
|
|
117
|
+
### 하위 호환성
|
|
118
|
+
|
|
119
|
+
- `<ref-cache>` 없는 dispatch 또는 task-result XML은 완전히 유효 — 에이전트는 `REFERENCES_DIR`에서 파일을 읽는 것으로 폴백.
|
|
120
|
+
- ref-cache를 아직 지원하지 않는 에이전트는 해당 요소를 무시하고 정상적으로 파일을 읽음.
|
|
121
|
+
- 부분적 ref-cache (일부 키만 존재)도 허용 — 없는 키는 디스크에서 읽음.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 5. Gate 요소 (orchestrator → Main Claude)
|
|
126
|
+
|
|
127
|
+
`<gate>`는 orchestrator가 자율 실행을 일시 정지하고 Main Claude(및 사용자)의 승인 또는 결정을 요청할 때 반환하는 정지 신호입니다. orchestrator는 `<gate>`를 반환한 뒤 Main Claude의 응답(승인 또는 `<decision>`)이 돌아올 때까지 재개하지 않습니다.
|
|
128
|
+
|
|
129
|
+
### type="stage" — 단계 완료 승인 게이트
|
|
130
|
+
|
|
131
|
+
```xml
|
|
132
|
+
<gate type="stage" work="WORK-12" stage="specifier">
|
|
133
|
+
<summary>Requirement.md 작성 완료. FR 6건, NFR 2건 도출.</summary>
|
|
134
|
+
<next-stage>planner</next-stage>
|
|
135
|
+
</gate>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### type="decision" — 결정 필요 게이트
|
|
139
|
+
|
|
140
|
+
```xml
|
|
141
|
+
<gate type="decision" work="WORK-12" stage="planner">
|
|
142
|
+
<context>인증 방식으로 세션 기반과 JWT 중 선택이 필요합니다. 기존 코드베이스는 세션 기반이나 신규 마이크로서비스 확장 계획이 있습니다.</context>
|
|
143
|
+
<options>
|
|
144
|
+
<option id="1">세션 기반 유지 (기존 컨벤션 일치)</option>
|
|
145
|
+
<option id="2">JWT 전환 (확장성 우선)</option>
|
|
146
|
+
</options>
|
|
147
|
+
<recommended>option 1 — 현재 스코프에서는 확장 계획이 확정되지 않아 리스크가 낮은 세션 기반 유지를 권고</recommended>
|
|
148
|
+
</gate>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
| 속성 | 값 |
|
|
152
|
+
|------|-----|
|
|
153
|
+
| `type` | `stage`(단계 완료 승인 요청) / `decision`(선택 필요) |
|
|
154
|
+
| `work` | `WORK_ID` |
|
|
155
|
+
| `stage` | 현재 정지된 단계: `specifier`/`planner`/`builder`/`verifier`/`committer` |
|
|
156
|
+
|
|
157
|
+
- `type="decision"`은 `<context>`(배경 — 왜 결정이 필요한가), `<options>`(선택지 목록), `<recommended>`(권고안)을 하위 요소로 반드시 포함한다.
|
|
158
|
+
- Main Claude는 `<gate>` 수신 시 사용자에게 승인/선택을 구하고, 결과를 `<decision>`(§ 7)으로 orchestrator에 재전달하여 재개시킨다.
|
|
159
|
+
- 게이트 정지는 활동 로그의 `GATE_WAIT`(stage 게이트) 또는 `DECISION_WAIT`(decision 게이트) 이벤트와 짝을 이룬다 → `work-activity-log.md` 참조.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 6. needs-decision 요소 (자식 에이전트 → orchestrator)
|
|
164
|
+
|
|
165
|
+
`<needs-decision>`은 자식 에이전트(builder/verifier 등)가 구현 중 스스로 결정할 수 없는 사항을 발견했을 때, task-result와 함께(또는 대신) orchestrator에 상향 보고하는 신호입니다. Main Claude로 직접 올라가지 않고 먼저 orchestrator가 받는다는 점에서 `<gate type="decision">`과 구분됩니다.
|
|
166
|
+
|
|
167
|
+
```xml
|
|
168
|
+
<needs-decision work="WORK-12" task="TASK-03" agent="builder">
|
|
169
|
+
<context>TASK 스펙에 명시되지 않은 에러 응답 포맷이 필요합니다. 기존 엔드포인트는 두 가지 포맷이 혼재합니다.</context>
|
|
170
|
+
<options>
|
|
171
|
+
<option id="1">엔드포인트 A 방식(`{error: string}`)에 통일</option>
|
|
172
|
+
<option id="2">엔드포인트 B 방식(`{code, message}`)에 통일</option>
|
|
173
|
+
</options>
|
|
174
|
+
<recommended>option 2 — 신규 API 표준에 부합</recommended>
|
|
175
|
+
</needs-decision>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
| 속성 | 값 |
|
|
179
|
+
|------|-----|
|
|
180
|
+
| `work` | `WORK_ID` |
|
|
181
|
+
| `task` | `TASK_ID` |
|
|
182
|
+
| `agent` | 신호를 발생시킨 자식 에이전트 |
|
|
183
|
+
|
|
184
|
+
- orchestrator는 `<needs-decision>` 수신 시 자동 결정 가능 여부를 판단한다.
|
|
185
|
+
- 자동 결정 가능 → `<decision by="auto">`(§ 7)로 확정하고 자식 작업을 재개시킴.
|
|
186
|
+
- 자동 결정 불가 → `<gate type="decision">`(§ 5)으로 승격하여 Main Claude에 전달.
|
|
187
|
+
- 어느 경로든 결정 내용은 `works/{WORK_ID}/DECISIONS.md`에 기록된다 → `file-content-schema.md` § 4 참조.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 7. decision 요소 (확정 결정 기록)
|
|
192
|
+
|
|
193
|
+
`<decision>`은 게이트(§ 5) 또는 needs-decision(§ 6)에 대해 내려진 확정 결정을 기록하는 요소입니다. 사용자 승인분(`by="user"`)과 orchestrator 자동결정분(`by="auto"`)이 동일한 형식을 공유합니다.
|
|
194
|
+
|
|
195
|
+
```xml
|
|
196
|
+
<decision work="WORK-12" stage="planner" by="user">
|
|
197
|
+
<context>인증 방식으로 세션 기반과 JWT 중 선택이 필요했음.</context>
|
|
198
|
+
<chosen>세션 기반 유지</chosen>
|
|
199
|
+
<rationale>기존 컨벤션과의 일치를 우선함</rationale>
|
|
200
|
+
</decision>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```xml
|
|
204
|
+
<decision work="WORK-12" task="TASK-03" by="auto">
|
|
205
|
+
<context>에러 응답 포맷 불일치 — builder의 needs-decision.</context>
|
|
206
|
+
<chosen>엔드포인트 B 방식(`{code, message}`)에 통일</chosen>
|
|
207
|
+
<rationale>신규 API 표준과 일치, 리스크 낮음</rationale>
|
|
208
|
+
</decision>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
| 속성 | 값 |
|
|
212
|
+
|------|-----|
|
|
213
|
+
| `work` | `WORK_ID` |
|
|
214
|
+
| `stage` / `task` | 결정이 발생한 단계 또는 TASK (해당하는 것 사용) |
|
|
215
|
+
| `by` | `user`(사용자 승인) / `auto`(orchestrator 자동결정) |
|
|
117
216
|
|
|
118
|
-
-
|
|
119
|
-
- Agents that do not yet support ref-cache simply ignore the element and read files normally.
|
|
120
|
-
- Partial ref-cache (only some keys present) is allowed — missing keys are read from disk.
|
|
217
|
+
- orchestrator는 `<decision>` 확정 즉시 `works/{WORK_ID}/DECISIONS.md`의 해당 항목을 `PENDING → RESOLVED`로 갱신하고, 활동 로그에 `DECISION` 이벤트를 기록한다 → `work-activity-log.md` 참조.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: uctm-init
|
|
3
|
+
description: Initialize uc-taskmanager for the current project. Creates works/ directory and configures Bash permissions in .claude/settings.local.json. Use when the user says "uctm init", "initialize uctm", "uctm 초기화", or "초기화".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# uc-taskmanager 초기화
|
|
7
|
+
|
|
8
|
+
현재 프로젝트를 uc-taskmanager 파이프라인 실행을 위해 초기화합니다.
|
|
9
|
+
|
|
10
|
+
## 단계
|
|
11
|
+
|
|
12
|
+
### 1. works/ 디렉토리 생성
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
works/가 없으면:
|
|
16
|
+
works/ 생성
|
|
17
|
+
보고: ✓ works/ 디렉토리 생성됨
|
|
18
|
+
아니면:
|
|
19
|
+
보고: - works/ 이미 존재
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 2. Bash 권한 설정
|
|
23
|
+
|
|
24
|
+
**먼저 사용자에게 확인:** "에이전트에 필요한 Bash 권한을 .claude/settings.local.json에 자동 설정할까요? (recommended) [Y/n]"
|
|
25
|
+
|
|
26
|
+
사용자가 승인하면 (yes/Y/확인):
|
|
27
|
+
|
|
28
|
+
`.claude/settings.local.json` 읽기 (없으면 생성). 다음 권한을 `permissions.allow` 배열에 병합 — **이미 있는 것은 건너뛰기** (중복 금지):
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
[
|
|
32
|
+
"Read(/**)",
|
|
33
|
+
"Edit(/**)",
|
|
34
|
+
"Write(/**)",
|
|
35
|
+
"Read(**)",
|
|
36
|
+
"Edit(**)",
|
|
37
|
+
"Write(**)",
|
|
38
|
+
"Bash(ls:*)",
|
|
39
|
+
"Bash(cat:*)",
|
|
40
|
+
"Bash(mkdir:*)",
|
|
41
|
+
"Bash(basename:*)",
|
|
42
|
+
"Bash(find:*)",
|
|
43
|
+
"Bash(wc:*)",
|
|
44
|
+
"Bash(sort:*)",
|
|
45
|
+
"Bash(tail:*)",
|
|
46
|
+
"Bash(head:*)",
|
|
47
|
+
"Bash(echo:*)",
|
|
48
|
+
"Bash(printf:*)",
|
|
49
|
+
"Bash(grep:*)",
|
|
50
|
+
"Bash(sed:*)",
|
|
51
|
+
"Bash(cut:*)",
|
|
52
|
+
"Bash(tr:*)",
|
|
53
|
+
"Bash(node:*)",
|
|
54
|
+
"Bash(npm run:*)",
|
|
55
|
+
"Bash(npm test:*)",
|
|
56
|
+
"Bash(bun run:*)",
|
|
57
|
+
"Bash(yarn:*)",
|
|
58
|
+
"Bash(cargo:*)",
|
|
59
|
+
"Bash(go build:*)",
|
|
60
|
+
"Bash(go test:*)",
|
|
61
|
+
"Bash(python:*)",
|
|
62
|
+
"Bash(ruff:*)",
|
|
63
|
+
"Bash(make:*)",
|
|
64
|
+
"Bash(git:*)"
|
|
65
|
+
]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
기존 `permissions.allow` 및 `permissions.deny` 항목을 보존하고 누락된 것만 추가.
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
권한 추가됨:
|
|
72
|
+
보고: ✓ {N}개 권한이 .claude/settings.local.json에 추가됨 (총: {T})
|
|
73
|
+
사용자가 건너뛰면:
|
|
74
|
+
보고: - 권한 설정 건너뜀
|
|
75
|
+
이미 모두 설정됨:
|
|
76
|
+
보고: - 모든 권한이 이미 설정됨
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 3. 요약
|
|
80
|
+
|
|
81
|
+
모든 단계 완료 후 요약 표시:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
uc-taskmanager 초기화 완료!
|
|
85
|
+
|
|
86
|
+
✓ works/ 디렉토리 준비됨
|
|
87
|
+
✓ Bash 권한 설정됨
|
|
88
|
+
|
|
89
|
+
다음: [new-feature] Add a hello world feature 입력
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Arguments
|
|
93
|
+
|
|
94
|
+
$ARGUMENTS
|
|
@@ -1,72 +1,64 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: work-pipeline
|
|
3
|
-
description: Triggers the WORK-PIPELINE. Use this skill when
|
|
3
|
+
description: Triggers the WORK-PIPELINE. Use this skill when
|
|
4
|
+
(1) user message starts with a bracketed tag like [anything], e.g. [WORK], [new-feature], [bugfix], [New game], [enhancement]
|
|
5
|
+
(2) user asks to resume/continue a WORK-NN (e.g., "WORK-01 계속실행", "resume WORK-01", "WORK-01 실행", "continue WORK-01").
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
# WORK-PIPELINE
|
|
8
|
+
# WORK-PIPELINE 트리거
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
## 트리거 감지
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
**New WORK** — message starts with `[...]` tag:
|
|
12
|
+
**새 WORK** — 메시지가 `[]` 태그로 시작하면 실행:
|
|
13
13
|
- `[new-feature]`, `[enhancement]`, `[bugfix]`, `[new-work]`, `[WORK start]`
|
|
14
|
-
-
|
|
14
|
+
- 또는 대괄호 안의 커스텀 태그
|
|
15
15
|
|
|
16
|
-
**
|
|
16
|
+
**WORK 재개** — 메시지에 기존 WORK-ID와 실행 의도가 있을 때:
|
|
17
17
|
- "WORK-XX 계속실행", "WORK-XX 실행", "resume WORK-XX", "continue WORK-XX"
|
|
18
18
|
- "파이프라인 재개", "WORK 계속"
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
두 경우 모두 아래 "오케스트레이션 흐름"을 따릅니다.
|
|
20
21
|
|
|
21
22
|
## References Directory (CRITICAL)
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
이 스킬이 트리거되면 Claude Code가 "Base directory for this skill"을 절대 경로로 제공합니다.
|
|
25
|
+
여기서 **REFERENCES_DIR**을 유도합니다:
|
|
25
26
|
|
|
26
27
|
```
|
|
27
28
|
REFERENCES_DIR = {Base directory}/../../references
|
|
28
29
|
```
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
Include it at the top of the prompt text:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
REFERENCES_DIR={absolute_path}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Sub-agents need this path to read their reference files. Without it, they cannot find the files and will loop.
|
|
31
|
+
`orchestrator` spawn 시 이 절대 경로를 반드시 전달해야 합니다. orchestrator가 레퍼런스 파일을 찾기 위해 이 경로가 필요합니다. 없으면 파일을 찾지 못하고 루프에 빠집니다.
|
|
38
32
|
|
|
39
|
-
##
|
|
33
|
+
## Auto 모드 감지
|
|
40
34
|
|
|
41
|
-
|
|
35
|
+
사용자의 메시지에 "auto" 또는 "자동으로"가 포함되면 **auto 모드**로 spawn합니다. 그 외에는 **gated 모드**(기본값)로 spawn합니다.
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
CALLBACK_URL={url}
|
|
45
|
-
CALLBACK_TOKEN={token}
|
|
46
|
-
```
|
|
37
|
+
## 오케스트레이션 흐름
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
Main Claude는 `orchestrator` 에이전트 하나만 spawn합니다. specifier/planner/builder/verifier/committer는 orchestrator가 내부에서 중첩 spawn(TASK DAG 스케줄링 포함)하므로 Main Claude가 직접 호출하지 않습니다.
|
|
49
40
|
|
|
50
|
-
|
|
41
|
+
### Gated 모드 (기본값 — "auto"/"자동으로" 없음)
|
|
51
42
|
|
|
52
|
-
1.
|
|
53
|
-
2.
|
|
54
|
-
|
|
55
|
-
- `
|
|
56
|
-
|
|
57
|
-
|
|
43
|
+
1. **최초 spawn**: `orchestrator`를 `mode=gated`로 spawn. 프롬프트 상단에 `REFERENCES_DIR=...`와 `mode=gated`를 포함하고, 사용자 요청 원문(및 재개 시 `WORK_ID`)을 전달. 반환된 **agentId를 보관**한다(다음 재개에 사용).
|
|
44
|
+
2. **`<gate>` 수신 시 정지**: orchestrator가 `<gate type="stage">`(고정 게이트: specifier 완료 후 / planner 완료 후) 또는 `<gate type="decision">`(동적 의사결정)을 반환하면 orchestrator는 그 자리에서 yield(파킹)한 상태다.
|
|
45
|
+
- `type="stage"`: `<summary>`를 사용자에게 제시하고 진행 승인을 요청.
|
|
46
|
+
- `type="decision"`: `<context>`/`<options>`/`<recommended>`를 **AskUserQuestion**으로 제시해 사용자 선택을 받는다.
|
|
47
|
+
3. **재개**: 사용자의 승인 또는 결정을 **`SendMessage(agentId, 결정내용)`으로 orchestrator에 전달해 재개**한다(컨텍스트 유지). agentId가 유실되었거나 SendMessage가 실패하면(세션 종료, 크로스세션 등) 로그(`work_{WORK}.log`) 기반으로 orchestrator를 **re-spawn**하는 폴백을 사용한다 — 이 경우도 재개 지정은 name이 아니라 **agentId**(또는 재-spawn 결과의 새 agentId)로 한다.
|
|
48
|
+
4. **반복**: 2~3을 orchestrator가 최종 WORK 요약을 반환할 때까지 반복한다.
|
|
49
|
+
5. **종료**: orchestrator가 최종 요약(`## 자동 결정 사항` 포함)을 반환하면 사용자에게 제시하고, **`TaskStop(agentId)`으로 orchestrator를 종료**한다.
|
|
58
50
|
|
|
59
|
-
|
|
51
|
+
### Auto 모드 ("auto"/"자동으로" 포함)
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- If specifier returns builder dispatch XML, pass it to the builder agent — do NOT execute it yourself.
|
|
53
|
+
1. `orchestrator`를 `mode=auto`로 **1회만 spawn**. 프롬프트 상단에 `REFERENCES_DIR=...`와 `mode=auto`를 포함.
|
|
54
|
+
2. 게이트/의사결정 정지 없이 orchestrator가 전체 파이프라인을 완주하고 최종 요약(`## 자동 결정 사항` 포함)을 반환한다.
|
|
55
|
+
3. 반환된 최종 요약을 사용자에게 제시한다. (파킹 상태가 아니므로 TaskStop 불필요.)
|
|
65
56
|
|
|
66
|
-
##
|
|
57
|
+
## ⚠️ CRITICAL: 에이전트 Spawn 규칙
|
|
67
58
|
|
|
68
|
-
|
|
59
|
+
- Main Claude가 spawn하는 에이전트는 **orchestrator 하나뿐**이다. Main Claude가 직접 코드 구현, 파일 생성, git 명령 실행 또는 orchestrator의 작업을 수행하면 안 된다.
|
|
60
|
+
- 게이트 재개는 항상 **agentId** 기준(SendMessage/TaskStop 모두)으로 한다 — name 재사용에 의한 오배달을 방지한다.
|
|
69
61
|
|
|
70
62
|
## Arguments
|
|
71
63
|
|
|
72
|
-
|
|
64
|
+
사용자 요구사항: $ARGUMENTS
|
|
@@ -3,31 +3,31 @@ name: work-status
|
|
|
3
3
|
description: Shows WORK status (read-only). Use ONLY when the user asks to VIEW status — not to execute or resume. Matches queries like "WORK 목록", "상태 확인", "WORK-01 상태", "show status". Do NOT use for "실행", "계속", "resume" — those go to work-pipeline.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# WORK
|
|
6
|
+
# WORK 상태
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
WORK 및 TASK의 현재 상태를 확인하고 보고합니다.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 확인 방법
|
|
11
11
|
|
|
12
|
-
1.
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
12
|
+
1. `works/WORK-LIST.md`를 읽어 모든 WORK의 마스터 인덱스 확인
|
|
13
|
+
2. 특정 WORK의 경우 `works/WORK-NN/work_WORK-NN.log` 마지막 줄을 읽어 현재 진행 상황 확인
|
|
14
|
+
3. 특정 TASK의 경우 `works/WORK-NN/TASK-NN_result.md`를 읽어 완료 상세 확인
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## 상태 값
|
|
17
17
|
|
|
18
|
-
|
|
|
19
|
-
|
|
20
|
-
| `IN_PROGRESS` | WORK
|
|
21
|
-
| `DONE` |
|
|
22
|
-
| `COMPLETED` |
|
|
18
|
+
| 상태 | 의미 |
|
|
19
|
+
|------|------|
|
|
20
|
+
| `IN_PROGRESS` | WORK 생성됨, TASK 실행 중 |
|
|
21
|
+
| `DONE` | 모든 TASK 커밋됨 — committer가 마지막 TASK에서 자동 설정 |
|
|
22
|
+
| `COMPLETED` | `_COMPLETED/`로 아카이빙됨 — push 시 설정 |
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 표시 형식
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
WORK
|
|
28
|
-
WORK-01:
|
|
29
|
-
WORK-02:
|
|
30
|
-
WORK-03:
|
|
27
|
+
WORK 상태
|
|
28
|
+
WORK-01: 사용자 인증 ✅ 5/5 완료
|
|
29
|
+
WORK-02: 결제 연동 🔄 2/4 진행 중
|
|
30
|
+
WORK-03: 관리자 대시보드 ⬜ 0/6 대기
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Arguments
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://uc-taskmanager.local/schemas/router-rules/v1.0.json",
|
|
3
|
-
"version": "1.1.0",
|
|
4
|
-
"description": "Router execution-mode 판정 기준 설정. 프로젝트별로 이 파일을 수정하여 라우팅 기준을 커스터마이즈한다.",
|
|
5
|
-
"decision_flow": [
|
|
6
|
-
"1. build_test_required 여부 판단 → false이면 direct",
|
|
7
|
-
"2. single_domain + sequential DAG → pipeline",
|
|
8
|
-
"3. 아래 full_conditions 중 하나라도 해당 → full"
|
|
9
|
-
],
|
|
10
|
-
"rules": {
|
|
11
|
-
"direct": {
|
|
12
|
-
"description": "Router 단독 처리 — 빌드/테스트 검증 불필요, 서브에이전트 0",
|
|
13
|
-
"criteria": {
|
|
14
|
-
"build_test_required": false,
|
|
15
|
-
"note": "파일 수·줄 수 무관. 검증 없이 끝나는 작업이면 direct (텍스트 편집, 설정 변경, 단순 치환 등)"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
"pipeline": {
|
|
19
|
-
"description": "Builder → Verifier → Committer 단일 흐름 — Builder 1회 호출",
|
|
20
|
-
"criteria": {
|
|
21
|
-
"build_test_required": true,
|
|
22
|
-
"single_domain_only": true,
|
|
23
|
-
"max_tasks": 5,
|
|
24
|
-
"dag_complexity": "sequential",
|
|
25
|
-
"note": "빌드/테스트 필요하지만 단일 도메인(BE만 또는 FE만)이고 한 흐름으로 처리 가능한 경우"
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"full": {
|
|
29
|
-
"description": "Planner → Scheduler → [Builder → Verifier → Committer] × N",
|
|
30
|
-
"criteria": {
|
|
31
|
-
"any_of": [
|
|
32
|
-
"task_count > 5",
|
|
33
|
-
"dag_complexity == complex (TASK 간 의존성이 2레벨 이상)",
|
|
34
|
-
"multi_domain == true (BE + FE 동시 변경)",
|
|
35
|
-
"new_module == true (신규 모듈/기능 — 설계→구현→검증 다단계)",
|
|
36
|
-
"partial_rollback_needed == true (TASK 실패 시 부분 롤백 필요)"
|
|
37
|
-
],
|
|
38
|
-
"note": "Builder를 여러 번 독립 호출해야 안전한 규모"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"customization_guide": {
|
|
43
|
-
"uc-taskmanager형 프로젝트 (md 편집 중심)": "direct 범위를 넓게. build_test_required=false인 경우 대부분 direct 처리",
|
|
44
|
-
"uc-teamspace형 프로젝트 (코드 개발 중심)": "pipeline/full 중심. 단순 버그 수정은 pipeline, 멀티도메인 기능은 full",
|
|
45
|
-
"max_tasks 조정": "팀 규모나 컨텍스트 한계에 따라 pipeline의 max_tasks를 3~7 사이로 조정 가능"
|
|
46
|
-
}
|
|
47
|
-
}
|