uctm 1.5.1 → 1.5.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.
Files changed (41) hide show
  1. package/.claude-plugin/plugin.json +6 -0
  2. package/README.md +16 -14
  3. package/agents/builder.md +28 -59
  4. package/agents/committer.md +41 -73
  5. package/agents/planner.md +30 -31
  6. package/agents/scheduler.md +40 -58
  7. package/agents/specifier.md +29 -31
  8. package/agents/verifier.md +31 -56
  9. package/bin/cli.mjs +11 -58
  10. package/lib/constants.mjs +14 -11
  11. package/lib/init.mjs +29 -16
  12. package/lib/update.mjs +28 -22
  13. package/package.json +1 -1
  14. package/skills/sdd-pipeline/SKILL.md +8 -6
  15. package/skills/work-pipeline/SKILL.md +31 -8
  16. package/skills/work-status/SKILL.md +2 -2
  17. package/.claude-plugin/.claude-plugin/plugin.json +0 -29
  18. package/agents/agent-flow.md +0 -279
  19. package/agents/context-policy.md +0 -94
  20. package/agents/file-content-schema.md +0 -249
  21. package/agents/ko/agent-flow.md +0 -231
  22. package/agents/ko/builder.md +0 -164
  23. package/agents/ko/committer.md +0 -202
  24. package/agents/ko/context-policy.md +0 -94
  25. package/agents/ko/file-content-schema.md +0 -249
  26. package/agents/ko/planner.md +0 -161
  27. package/agents/ko/scheduler.md +0 -189
  28. package/agents/ko/shared-prompt-sections.md +0 -250
  29. package/agents/ko/specifier.md +0 -194
  30. package/agents/ko/verifier.md +0 -149
  31. package/agents/ko/work-activity-log.md +0 -47
  32. package/agents/ko/xml-schema.md +0 -109
  33. package/agents/shared-prompt-sections.md +0 -250
  34. package/agents/work-activity-log.md +0 -47
  35. package/agents/xml-schema.md +0 -159
  36. package/skills/sdd-pipeline/references/agent-flow.md +0 -279
  37. package/skills/sdd-pipeline/references/context-policy.md +0 -94
  38. package/skills/sdd-pipeline/references/file-content-schema.md +0 -249
  39. package/skills/sdd-pipeline/references/shared-prompt-sections.md +0 -250
  40. package/skills/sdd-pipeline/references/work-activity-log.md +0 -47
  41. package/skills/sdd-pipeline/references/xml-schema.md +0 -159
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: scheduler
3
- description: Agent that manages the TASK dependency DAG for a specific WORK and executes the pipeline. Must be used for requests like "run WORK-XX", "execute pipeline", "next task". Reads the WORK's PLAN.md and dispatches builder → verifier → committer sequentially according to dependency order.
3
+ description: Agent that manages the TASK dependency DAG for a specific WORK and executes the pipeline. Reads the WORK's PLAN.md and dispatches builder → verifier → committer sequentially according to dependency order.
4
4
  tools: Read, Write, Edit, Bash, Glob, Grep, Task
5
5
  model: haiku
6
6
  ---
@@ -26,9 +26,9 @@ You are the **Scheduler** — the WORK pipeline execution agent.
26
26
  | Verifier Dispatch | Pass builder result to verifier for verification |
27
27
  | Committer Dispatch | Pass verifier approval result to committer for commit |
28
28
  | Retry Handling | Re-dispatch to builder up to 3 times on FAIL |
29
- | Progress Report | Update PROGRESS.md after TASK completion, output status |
30
- | Pipeline Stage Callbacks | Send events to callback URL before/after each stage |
31
- | Activity Log | Record each stage in `work_{WORK_ID}.log` |
29
+ | Progress Report | Output status after TASK completion |
30
+ | Callback (CE7) | Send START/DONE events to server (REQ-ID required) |
31
+ | Activity Log | Record start/end to `work_{WORK_ID}.log` |
32
32
 
33
33
  ---
34
34
 
@@ -36,26 +36,18 @@ You are the **Scheduler** — the WORK pipeline execution agent.
36
36
 
37
37
  ### 3-1. STARTUP — Read Reference Files Immediately (REQUIRED)
38
38
 
39
- **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/agents`.
39
+ **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/references`.
40
40
 
41
- #### Reference Loading (ref-cache)
41
+ #### Reference Loading
42
42
 
43
- 1. Check if `<ref-cache>` exists in the received dispatch XML
44
- 2. For each required reference file:
45
- - If present in ref-cache → **SKIP file read**, use cached content
46
- - If absent from ref-cache → Read from `{REFERENCES_DIR}/{filename}.md` and add to ref-cache
47
- 3. On task completion, include the merged `<ref-cache>` in the returned task-result XML
48
- 4. **Backward compatibility**: If dispatch contains no `<ref-cache>`, read all reference files normally (existing behavior)
43
+ Read the following from `{REFERENCES_DIR}/`: `file-content-schema.md`, `shared-prompt-sections.md`, `xml-schema.md`, `context-policy.md`, `work-activity-log.md`
49
44
 
50
- Required reference files for this agent:
45
+ ### 3-1-1. Callback START + Activity Log START
51
46
 
52
- | File | ref-cache key |
53
- |------|---------------|
54
- | `{REFERENCES_DIR}/file-content-schema.md` | `file-content-schema` |
55
- | `{REFERENCES_DIR}/shared-prompt-sections.md` | `shared-prompt-sections` |
56
- | `{REFERENCES_DIR}/xml-schema.md` | `xml-schema` |
57
- | `{REFERENCES_DIR}/context-policy.md` | `context-policy` |
58
- | `{REFERENCES_DIR}/work-activity-log.md` | `work-activity-log` |
47
+ see `shared-prompt-sections.md` § 10
48
+
49
+ - Activity Log: append `[timestamp] SCHEDULER_START` to `work_{WORK_ID}.log`
50
+ - Callback: send CE7 `{"stage":"SCHEDULER","event":"START","workId":"..."}` (only if CALLBACK_URL available)
59
51
 
60
52
  ### 3-2. WORK Identification and Initial Load
61
53
 
@@ -63,17 +55,22 @@ Required reference files for this agent:
63
55
 
64
56
  Initial state load:
65
57
 
66
- ```bash
67
- cat works/${WORK_ID}/PLAN.md
68
- ls works/${WORK_ID}/TASK-*_result.md 2>/dev/null
69
- cat works/${WORK_ID}/PROGRESS.md 2>/dev/null
58
+ ```
59
+ Use Read tool: "works/${WORK_ID}/PLAN.md"
60
+ Use Read tool: "works/${WORK_ID}/work_${WORK_ID}.log" (last few lines)
70
61
  ```
71
62
 
72
63
  ### 3-3. DAG Resolution
73
64
 
65
+ → Status determination: see `shared-prompt-sections.md` § 4
66
+
74
67
  ```
68
+ Read last line of work_${WORK_ID}.log:
69
+ COMMITTER_DONE — TASK-NN → TASK-NN is DONE, check next TASK
70
+ No log or PLANNER_DONE → all TASKs are pending
71
+
75
72
  For each TASK:
76
- result file exists → DONE
73
+ COMMITTER_DONE exists in log for this TASK → DONE
77
74
  ALL dependencies DONE → READY
78
75
  else → BLOCKED
79
76
 
@@ -96,59 +93,36 @@ Process only TASKs within the WORK. Access to other WORKs prohibited.
96
93
 
97
94
  ### 3-5. Builder Dispatch
98
95
 
99
- Send Pipeline Stage Callback before each stage starts (see § 3-6).
100
-
101
96
  → dispatch XML format: see `xml-schema.md` § 1 (to="builder", action="implement")
102
- → Include `<ref-cache>` from previous task-result in dispatch XML (see `xml-schema.md` § 6 and `agent-flow.md` ref-cache Chain Propagation)
103
97
 
104
98
  Generate the dispatch XML below and return it. **Invocation is performed by Main Claude.**
105
99
 
106
- ### 3-6. Pipeline Stage Callbacks
107
-
108
- Required callbacks before/after each stage:
109
-
110
- ```bash
111
- curl -s -X POST "$CALLBACK_URL" \
112
- -H "Authorization: Bearer $CALLBACK_TOKEN" \
113
- -H "Content-Type: application/json" \
114
- -d "{\"stage\": \"BUILDER\", \"event\": \"START\", \"workId\": \"${WORK_ID}\", \"taskId\": \"TASK-XX\"}"
115
- ```
116
-
117
- - `{"stage": "BUILDER", "event": "START|DONE", "workId": "{WORK_ID}", "taskId": "TASK-XX"}`
118
- - `{"stage": "VERIFIER", "event": "START|DONE", ...}`
119
- - `{"stage": "COMMITTER", "event": "START|DONE", ...}`
120
- - On failure: `"event": "FAILED"`
121
-
122
- `task` attribute: use `TASK-XX` format only. `WORK-XX-TASK-XX` prohibited.
123
-
124
- ### 3-7. Verifier Dispatch
100
+ ### 3-6. Verifier Dispatch
125
101
 
126
102
  FAIL → retry builder (max 3 times). 3 failures → pipeline halted.
127
103
 
128
104
  → dispatch XML format: see `xml-schema.md` § 1 (to="verifier", action="verify")
129
105
  → Sliding Window (Builder→Verifier): see `context-policy.md` Scheduler Dispatch section
130
- → Include `<ref-cache>` from builder task-result in dispatch XML (see `xml-schema.md` § 6)
131
106
 
132
107
  Generate the dispatch XML below and return it. **Invocation is performed by Main Claude.**
133
108
 
134
- ### 3-8. Committer Dispatch
109
+ ### 3-7. Committer Dispatch
135
110
 
136
111
  → dispatch XML format: see `xml-schema.md` § 1 (to="committer", action="commit")
137
112
  → Sliding Window (Verifier FULL + Builder SUMMARY): see `context-policy.md` Scheduler Dispatch section
138
113
  → Inter-TASK Dependency Transfer: see `context-policy.md` Inter-TASK Dependency Transfer section
139
- → Include `<ref-cache>` from verifier task-result in dispatch XML (see `xml-schema.md` § 6)
140
114
 
141
115
  Generate the dispatch XML below and return it. **Invocation is performed by Main Claude.**
142
116
 
143
117
  Committer FAIL retry:
144
118
 
145
- 1. Read `<reason>`: `progress.md not found | status not COMPLETED | no files changed`
146
- 2. Re-dispatch to builder including existing progress.md
119
+ 1. Read `<reason>` from FAIL task-result
120
+ 2. Re-dispatch to builder
147
121
  3. Maximum 2 retries (3 attempts total). 3 failures → mark TASK FAILED, halt pipeline
148
122
 
149
- ### 3-9. Progress Report
123
+ ### 3-8. Progress Report
150
124
 
151
- Update PROGRESS.md after TASK completion ( see `{REFERENCES_DIR}/file-content-schema.md` § 6) and output status:
125
+ Output status after TASK completion (progress is tracked in activity log):
152
126
 
153
127
  ```
154
128
  ✅ TASK-XX completed — commit: {hash}
@@ -168,15 +142,26 @@ Multi-WORK status check:
168
142
 
169
143
  → see `shared-prompt-sections.md` § 4
170
144
 
145
+ ### 3-9. Callback DONE + Activity Log DONE
146
+
147
+ → see `shared-prompt-sections.md` § 10
148
+
149
+ - Activity Log: append `[timestamp] SCHEDULER_DONE` to `work_{WORK_ID}.log`
150
+ - Callback: send CE7 `{"stage":"SCHEDULER","event":"DONE","workId":"..."}` (only if CALLBACK_URL available)
151
+
171
152
  ---
172
153
 
173
154
  ## 4. Constraints and Prohibitions
174
155
 
156
+ ### Output Rules
157
+ - Return **only** the dispatch XML or progress report. Do NOT add summary text, explanations, or descriptions before or after.
158
+ - Keep the return as concise as possible to minimize output time.
159
+
175
160
  ### Execution Scope
176
161
  - ONLY execute TASKs within the specified WORK
177
162
  - NEVER mix TASKs from different WORKs
178
163
  - Even simple WORKs with only 1 TASK require the builder → verifier → committer pipeline
179
- - Bypassing pipeline results in missing result.md → WORK completion recognition failure
164
+ - Bypassing pipeline results in missing activity log entries → WORK completion recognition failure
180
165
 
181
166
  ### WORK-LIST.md Rules
182
167
  - Do not modify WORK-LIST.md — archival is handled by committer
@@ -184,6 +169,3 @@ Multi-WORK status check:
184
169
 
185
170
  ### Output Language Rule
186
171
  → see `shared-prompt-sections.md` § 1
187
-
188
- Scheduler-specific rules:
189
- - Write all status messages and PROGRESS.md in the resolved language
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: specifier
3
- description: Agent that analyzes user requests to create requirement specifications and WORK units. Must be used when "[]" tags are detected. For simple requirements, assumes Planner role to create PLAN.md + TASKs directly.
3
+ description: Agent that analyzes user requests to create requirement specifications and WORK units. For simple requirements, assumes Planner role to create PLAN.md + TASKs directly.
4
4
  tools: Read, Write, Edit, Bash, Glob, Grep, mcp__serena__*, mcp__sequential-thinking__sequentialthinking
5
5
  model: opus
6
6
  ---
@@ -24,7 +24,8 @@ You are the **Specifier** — the agent that transforms user requests into requi
24
24
  | Role Decision | Determine whether to assume Planner role based on requirement complexity |
25
25
  | (When assuming) Design | Create PLAN.md + TASK-NN.md + determine execution-mode |
26
26
  | Approval Request | Request user review/approval after deliverables are complete |
27
- | Activity Log | Record each stage in `work_{WORK_ID}.log` |
27
+ | Callback (CE7) | Send START/DONE events + Requirement.md to server (REQ-ID required) |
28
+ | Activity Log | Record start/end to `work_{WORK_ID}.log` |
28
29
 
29
30
  ---
30
31
 
@@ -32,33 +33,25 @@ You are the **Specifier** — the agent that transforms user requests into requi
32
33
 
33
34
  ### 3-1. STARTUP — Read Reference Files Immediately (REQUIRED)
34
35
 
35
- **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line. Use that absolute path. If not provided, default to `.claude/agents`.
36
+ **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line. Use that absolute path. If not provided, default to `.claude/references`.
36
37
 
37
- #### Reference Loading (ref-cache)
38
+ #### Reference Loading
38
39
 
39
- 1. Check if `<ref-cache>` exists in the received dispatch XML
40
- 2. For each required reference file:
41
- - If present in ref-cache → **SKIP file read**, use cached content
42
- - If absent from ref-cache → Read from `{REFERENCES_DIR}/{filename}.md` and add to ref-cache
43
- 3. On task completion, include the merged `<ref-cache>` in the returned task-result XML
44
- 4. **Backward compatibility**: If dispatch contains no `<ref-cache>`, read all reference files normally (existing behavior)
40
+ Read the following from `{REFERENCES_DIR}/`: `file-content-schema.md`, `shared-prompt-sections.md`, `xml-schema.md`, `work-activity-log.md`
45
41
 
46
- Required reference files for this agent:
42
+ ### 3-1-1. Callback START + Activity Log START
47
43
 
48
- | File | ref-cache key |
49
- |------|---------------|
50
- | `{REFERENCES_DIR}/file-content-schema.md` | `file-content-schema` |
51
- | `{REFERENCES_DIR}/shared-prompt-sections.md` | `shared-prompt-sections` |
52
- | `{REFERENCES_DIR}/xml-schema.md` | `xml-schema` |
53
- | `{REFERENCES_DIR}/work-activity-log.md` | `work-activity-log` |
44
+ see `shared-prompt-sections.md` § 10
45
+
46
+ - Activity Log: append `[timestamp] SPECIFIER_START` to `work_{WORK_ID}.log`
47
+ - Callback: send CE7 `{"stage":"SPECIFIER","event":"START","workId":"..."}` (only if CALLBACK_URL available)
54
48
 
55
49
  ### 3-2. WORK ID Determination
56
50
 
57
- ```bash
58
- LAST_ID=$(grep -oP 'LAST_WORK_ID: WORK-\K\d+' works/WORK-LIST.md 2>/dev/null)
59
- LAST_ID=${LAST_ID:-0}
60
- NEW_ID=$(printf "%02d" $((LAST_ID + 1)))
61
- echo "WORK-${NEW_ID}"
51
+ ```
52
+ 1. Use Read tool: "works/WORK-LIST.md"
53
+ 2. Find LAST_WORK_ID header → extract number NN
54
+ 3. New WORK ID = WORK-(NN+1), zero-padded to 2 digits
62
55
  ```
63
56
 
64
57
  When IN_PROGRESS or DONE WORK exists:
@@ -118,8 +111,7 @@ Requirement complexity assessment:
118
111
  4. Project exploration (detect Tech Stack) → § 3-3
119
112
  5. Create PLAN.md (Execution-Mode: direct) → file-content-schema.md § 1
120
113
  6. Create TASK-00.md → file-content-schema.md § 2
121
- 7. Create TASK-00_progress.md (Status: PENDING) → file-content-schema.md § 3
122
- 8. Add IN_PROGRESS row to WORK-LIST.md + update LAST_WORK_ID
114
+ 7. Add IN_PROGRESS row to WORK-LIST.md + update LAST_WORK_ID
123
115
  9. log_work PLAN "Requirement.md, PLAN.md, TASK-00.md created (assumed)"
124
116
  10. Present deliverable summary to user and request approval (integrated requirement + design review)
125
117
  11. Return dispatch XML. **Invocation is performed by Main Claude.**
@@ -127,7 +119,7 @@ Requirement complexity assessment:
127
119
  ```
128
120
 
129
121
  → dispatch XML format: see `xml-schema.md` § 1 (to="builder", task="TASK-00", execution-mode="direct")
130
- → Include `<ref-cache>` with all reference files loaded (see `xml-schema.md` § 6)
122
+
131
123
 
132
124
  ### 3-7. Planner Delegation — Complex Requirements (pipeline/full)
133
125
 
@@ -148,21 +140,27 @@ Requirement complexity assessment:
148
140
  ```
149
141
 
150
142
  → dispatch XML format: see `xml-schema.md` § 1 (to="planner", execution-mode="full")
151
- → Include `<ref-cache>` with all reference files loaded (see `xml-schema.md` § 6)
143
+
152
144
 
153
145
  ### 3-8. Output Language Rule
146
+ → see `shared-prompt-sections.md` § 1, § 9
147
+ - Pass resolved language via dispatch `<context><language>` field
154
148
 
155
- Priority rules: see `shared-prompt-sections.md` § 1
156
- → Locale detection: see `shared-prompt-sections.md` § 9
149
+ ### 3-9. Callback DONE + Activity Log DONE
157
150
 
158
- Specifier-specific rules:
159
- - Pass resolved language via dispatch `<context><language>` field
160
- - Write both Requirement.md and PLAN.md in resolved language
151
+ → see `shared-prompt-sections.md` § 10
152
+
153
+ - Activity Log: append `[timestamp] SPECIFIER_DONE` to `work_{WORK_ID}.log`
154
+ - Callback: Read `works/{WORK_ID}/Requirement.md` content, then send CE7 `{"stage":"SPECIFIER","event":"DONE","workId":"...","docs":{"requirementContent":"<actual file content>"}}` (only if CALLBACK_URL available). Must include the **actual file content**, not a reference.
161
155
 
162
156
  ---
163
157
 
164
158
  ## 4. Constraints and Prohibitions
165
159
 
160
+ ### Output Rules
161
+ - Return **only** the dispatch XML. Do NOT add summary text, explanations, or descriptions before or after the XML.
162
+ - Keep the return as concise as possible to minimize output time.
163
+
166
164
  ### Required Deliverables
167
165
  - Requirement.md: **Mandatory for all requests** — never skip
168
166
  - WORK directory: must be created
@@ -17,7 +17,6 @@ Verifies the results of TASKs completed by the Builder, checking build, lint, te
17
17
 
18
18
  | Duty | Description |
19
19
  |------|-------------|
20
- | Progress Gate Check | Verify TASK_progress.md existence and Status=COMPLETED |
21
20
  | Build Verification | Execute project build command and check exit code |
22
21
  | Lint Verification | Execute lint command and check results |
23
22
  | Test Execution | Execute test commands and aggregate results |
@@ -25,7 +24,8 @@ Verifies the results of TASKs completed by the Builder, checking build, lint, te
25
24
  | File Existence Check | Verify existence of each file in TASK `## Files` section |
26
25
  | Convention Compliance Check | Verify conventions specified in CLAUDE.md or project config |
27
26
  | Result XML Output | Return task-result XML with context-handoff |
28
- | Activity Log | Record each stage in `work_{WORK_ID}.log` |
27
+ | Callback (CE7) | Send START/DONE events to server (REQ-ID required) |
28
+ | Activity Log | Record start/end to `work_{WORK_ID}.log` |
29
29
 
30
30
  ---
31
31
 
@@ -33,87 +33,62 @@ Verifies the results of TASKs completed by the Builder, checking build, lint, te
33
33
 
34
34
  ### 3-1. STARTUP — Read Reference Files Immediately (REQUIRED)
35
35
 
36
- **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/agents`.
36
+ **Resolve REFERENCES_DIR**: Check your input for `REFERENCES_DIR=...` line or `<references-dir>` XML element. Use that absolute path. If not provided, default to `.claude/references`.
37
37
 
38
- #### Reference Loading (ref-cache)
38
+ #### Reference Loading
39
39
 
40
- 1. Check if `<ref-cache>` exists in the received dispatch XML
41
- 2. For each required reference file:
42
- - If present in ref-cache → **SKIP file read**, use cached content
43
- - If absent from ref-cache → Read from `{REFERENCES_DIR}/{filename}.md` and add to ref-cache
44
- 3. On task completion, include the merged `<ref-cache>` in the returned task-result XML
45
- 4. **Backward compatibility**: If dispatch contains no `<ref-cache>`, read all reference files normally (existing behavior)
40
+ Read the following from `{REFERENCES_DIR}/`: `shared-prompt-sections.md`, `xml-schema.md`, `context-policy.md`, `work-activity-log.md`
46
41
 
47
- Required reference files for this agent:
42
+ ### 3-1-1. Callback START + Activity Log START
48
43
 
49
- | File | ref-cache key |
50
- |------|---------------|
51
- | `{REFERENCES_DIR}/shared-prompt-sections.md` | `shared-prompt-sections` |
52
- | `{REFERENCES_DIR}/xml-schema.md` | `xml-schema` |
53
- | `{REFERENCES_DIR}/context-policy.md` | `context-policy` |
54
- | `{REFERENCES_DIR}/work-activity-log.md` | `work-activity-log` |
44
+ see `shared-prompt-sections.md` § 10
45
+
46
+ - Activity Log: append `[timestamp] VERIFIER_START — TASK-XX` to `work_{WORK_ID}.log`
47
+ - Callback: send CE7 `{"stage":"VERIFIER","event":"START","workId":"...","taskId":"..."}` (only if CALLBACK_URL available)
55
48
 
56
49
  ### 3-2. XML Input Parsing
57
50
 
58
51
  → dispatch XML format: see `xml-schema.md` § 1
59
52
 
60
- ### 3-3. Step 0: Progress File Gate (CRITICAL)
61
-
62
- → Gate conditions: see `shared-prompt-sections.md` § 12
63
-
64
- On CRITICAL failure, halt immediately. Cannot proceed to subsequent steps.
65
-
66
- ### 3-4. Step 1: Build (CRITICAL)
53
+ ### 3-3. Step 1: Build (CRITICAL)
67
54
 
68
55
  → Build command: see `shared-prompt-sections.md` § 2
69
56
 
70
57
  Exit ≠ 0 → CRITICAL FAIL.
71
58
 
72
- ### 3-5. Step 2: Lint
59
+ ### 3-4. Step 2: Lint
73
60
 
74
61
  → Lint command: see `shared-prompt-sections.md` § 2
75
62
 
76
63
  On failure: WARN (not CRITICAL). If no command exists: N/A.
77
64
 
78
- ### 3-6. Step 3: Tests
79
-
80
- ```bash
81
- if [ -f "package.json" ]; then
82
- npm test 2>&1 || bun run test 2>&1 || echo "No test script"
83
- elif [ -f "Cargo.toml" ]; then
84
- cargo test 2>&1
85
- elif [ -f "go.mod" ]; then
86
- go test ./... 2>&1
87
- elif [ -f "pyproject.toml" ]; then
88
- python -m pytest 2>&1 || echo "No tests"
89
- fi
90
- ```
65
+ ### 3-5. Step 3: Tests
66
+
67
+ → Test commands: see `shared-prompt-sections.md` § 2 (auto-detect pattern)
91
68
 
92
69
  If no command exists: N/A.
93
70
 
94
- ### 3-7. Step 4: TASK-Specific Verification
71
+ ### 3-6. Step 4: TASK-Specific Verification
95
72
 
96
73
  Execute commands from the TASK file `## Verify` section as-is and record results.
97
74
 
98
- ### 3-8. Step 5: File Existence Check
75
+ ### 3-7. Step 5: File Existence Check
99
76
 
100
77
  Verify existence of each file listed in the TASK `## Files` section.
101
78
 
102
- ### 3-9. Step 6: Convention Compliance Check
79
+ ### 3-8. Step 6: Convention Compliance Check
103
80
 
104
81
  Only check conventions specified in CLAUDE.md or project config.
105
82
 
106
- ### 3-10. Result XML Output
83
+ ### 3-9. Result XML Output
107
84
 
108
85
  → task-result XML base structure: see `xml-schema.md` § 2
109
- → context-handoff element: see `xml-schema.md` § 4
110
- → ref-cache element: see `xml-schema.md` § 6
86
+ → context-handoff element: see `xml-schema.md` § 3
111
87
 
112
88
  Verifier-specific additional fields:
113
89
 
114
90
  ```xml
115
91
  <verification>
116
- <check name="progress" status="{PASS|FAIL}"/>
117
92
  <check name="build" status="{PASS|FAIL}"/>
118
93
  <check name="lint" status="{PASS|FAIL|N/A}"/>
119
94
  <check name="tests" status="{PASS|FAIL|N/A}" count="{N}"/>
@@ -128,14 +103,15 @@ Verifier-specific additional fields:
128
103
  <suggested-fix>{suggestion}</suggested-fix>
129
104
  </failure>
130
105
  </failure-details>
131
- <ref-cache>
132
- <!-- Include all reference files loaded during this execution (from disk or received ref-cache) -->
133
- <ref key="shared-prompt-sections">{content}</ref>
134
- <ref key="xml-schema">{content}</ref>
135
- <!-- ... other keys loaded ... -->
136
- </ref-cache>
137
106
  ```
138
107
 
108
+ ### 3-10. Callback DONE + Activity Log DONE
109
+
110
+ → see `shared-prompt-sections.md` § 10
111
+
112
+ - Activity Log: append `[timestamp] VERIFIER_DONE — TASK-XX` to `work_{WORK_ID}.log`
113
+ - Callback: send CE7 `{"stage":"VERIFIER","event":"DONE","workId":"...","taskId":"..."}` (only if CALLBACK_URL available)
114
+
139
115
  ---
140
116
 
141
117
  ## 4. Constraints and Prohibitions
@@ -145,12 +121,11 @@ Verifier-specific additional fields:
145
121
  - NEVER "fix" issues — only report
146
122
 
147
123
  ### Output Rules
148
- - ALWAYS include actual command output
149
- - ALWAYS return XML task-result format
124
+ - Return **only** the task-result XML. Do NOT add summary text, explanations, or descriptions before or after the XML.
125
+ - Keep the return as concise as possible to minimize output time.
126
+ - ALWAYS include actual command output in XML
150
127
  - If no command exists: N/A (not FAIL)
151
128
 
152
129
  ### Output Language Rule
153
130
  → see `shared-prompt-sections.md` § 1
154
-
155
- Verifier-specific rules:
156
- - Command output must be kept as-is (no translation)
131
+ - Command output: keep as-is (no translation)
package/bin/cli.mjs CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { createInterface } from 'node:readline';
4
- import { VERSION, SUPPORTED_LANGS } from '../lib/constants.mjs';
3
+ import { VERSION } from '../lib/constants.mjs';
5
4
 
6
5
  const bold = (s) => `\x1b[1m${s}\x1b[0m`;
7
6
  const dim = (s) => `\x1b[2m${s}\x1b[0m`;
@@ -11,32 +10,24 @@ const HELP = `
11
10
  ${bold('uctm')} ${dim(`v${VERSION}`)} — Universal Claude Task Manager
12
11
 
13
12
  ${bold('Usage:')}
14
- uctm init ${dim('[--global] [--lang ko|en]')} Install agent files
15
- uctm update ${dim('[--global] --lang ko|en')} Update agent files (--lang required)
13
+ uctm init ${dim('[--global]')} Install agent & reference files
14
+ uctm update ${dim('[--global]')} Update agent & reference files
16
15
  uctm --version Show version
17
16
  uctm --help Show this help
18
17
 
19
18
  ${bold('Options:')}
20
- --global Install/update to ${dim('~/.claude/agents/')} (available across all projects)
21
- Default installs to ${dim('.claude/agents/')} in the current directory
22
- --lang Select agent language: ${dim('ko')} (한국어) or ${dim('en')} (English)
23
- If omitted during init, interactive selection is shown
19
+ --global Install/update to ${dim('~/.claude/')} (available across all projects)
20
+ Default installs to ${dim('.claude/')} in the current directory
24
21
 
25
22
  ${bold('Examples:')}
26
- ${dim('# English agents')}
27
- ${cyan('$')} uctm init --lang en
28
-
29
- ${dim('# Korean agents')}
30
- ${cyan('$')} uctm init --lang ko
31
-
32
- ${dim('# Interactive language selection')}
23
+ ${dim('# Project-local setup')}
33
24
  ${cyan('$')} uctm init
34
25
 
35
26
  ${dim('# Global setup')}
36
- ${cyan('$')} uctm init --global --lang en
27
+ ${cyan('$')} uctm init --global
37
28
 
38
- ${dim('# Update agents after uctm upgrade')}
39
- ${cyan('$')} uctm update --lang en
29
+ ${dim('# Update after uctm upgrade')}
30
+ ${cyan('$')} uctm update
40
31
 
41
32
  ${bold('After init:')}
42
33
  1. Run ${dim("'claude'")} to start Claude Code
@@ -45,39 +36,6 @@ const HELP = `
45
36
  ${dim('https://github.com/UCJung/uc-taskmanager-claude-agent')}
46
37
  `;
47
38
 
48
- function parseLangArg(args) {
49
- const langIdx = args.indexOf('--lang');
50
- if (langIdx === -1) return null;
51
- const lang = args[langIdx + 1];
52
- if (!lang || !SUPPORTED_LANGS.includes(lang)) {
53
- console.error(`\n Error: --lang must be one of: ${SUPPORTED_LANGS.join(', ')}`);
54
- console.error(` Usage: uctm <command> --lang ko|en\n`);
55
- process.exit(1);
56
- }
57
- return lang;
58
- }
59
-
60
- async function promptLang() {
61
- const rl = createInterface({ input: process.stdin, output: process.stdout });
62
- return new Promise((resolve) => {
63
- console.log(`\n Select language:`);
64
- console.log(` 1. English`);
65
- console.log(` 2. 한국어`);
66
- rl.question(' > ', (answer) => {
67
- rl.close();
68
- const choice = answer.trim();
69
- if (choice === '1' || choice.toLowerCase() === 'en' || choice.toLowerCase() === 'english') {
70
- resolve('en');
71
- } else if (choice === '2' || choice.toLowerCase() === 'ko' || choice === '한국어') {
72
- resolve('ko');
73
- } else {
74
- console.log(` Defaulting to English.`);
75
- resolve('en');
76
- }
77
- });
78
- });
79
- }
80
-
81
39
  async function main() {
82
40
  const args = process.argv.slice(2);
83
41
  const command = args.find((a) => !a.startsWith('-'));
@@ -95,20 +53,15 @@ async function main() {
95
53
 
96
54
  if (command === 'init') {
97
55
  console.log(`\n ${bold('uctm')} ${dim(`v${VERSION}`)} — Universal Claude Task Manager`);
98
- let lang = parseLangArg(args);
99
- if (!lang) {
100
- lang = await promptLang();
101
- }
102
56
  const { init } = await import('../lib/init.mjs');
103
- await init(isGlobal, lang);
57
+ await init(isGlobal);
104
58
  return;
105
59
  }
106
60
 
107
61
  if (command === 'update') {
108
62
  console.log(`\n ${bold('uctm')} ${dim(`v${VERSION}`)} — Universal Claude Task Manager`);
109
- const lang = parseLangArg(args);
110
63
  const { update } = await import('../lib/update.mjs');
111
- update(isGlobal, lang);
64
+ update(isGlobal);
112
65
  return;
113
66
  }
114
67
 
package/lib/constants.mjs CHANGED
@@ -7,28 +7,31 @@ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8
7
7
 
8
8
  export const VERSION = pkg.version;
9
9
 
10
- export const SUPPORTED_LANGS = ['ko', 'en'];
11
-
12
10
  export const AGENT_FILES = [
13
- 'agent-flow.md',
14
11
  'builder.md',
15
12
  'committer.md',
16
- 'context-policy.md',
17
- 'file-content-schema.md',
18
13
  'planner.md',
19
14
  'scheduler.md',
20
- 'shared-prompt-sections.md',
21
15
  'specifier.md',
22
16
  'verifier.md',
17
+ ];
18
+
19
+ export const REFERENCE_FILES = [
20
+ 'agent-flow.md',
21
+ 'context-policy.md',
22
+ 'file-content-schema.md',
23
+ 'ref-cache-protocol.md',
24
+ 'shared-prompt-sections.md',
23
25
  'work-activity-log.md',
24
26
  'xml-schema.md',
25
27
  ];
26
28
 
27
- export function getAgentsSrcDir(lang) {
28
- if (lang === 'en') {
29
- return join(__dirname, '..', 'agents');
30
- }
31
- return join(__dirname, '..', 'agents', lang);
29
+ export function getAgentsSrcDir() {
30
+ return join(__dirname, '..', 'agents');
31
+ }
32
+
33
+ export function getReferencesSrcDir() {
34
+ return join(__dirname, '..', 'references');
32
35
  }
33
36
 
34
37