@angar2/taskery 0.3.1 → 0.5.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 +4 -1
- package/bin/backlog.js +131 -0
- package/bin/close.js +74 -0
- package/bin/fork.js +109 -0
- package/bin/init.js +31 -3
- package/bin/lib.js +613 -1
- package/bin/mcp.js +279 -0
- package/bin/plan.js +85 -0
- package/bin/set-status.js +83 -0
- package/bin/taskery.js +41 -2
- package/package.json +4 -2
- package/template/.claude/skills/run-team/SKILL.md +145 -0
- package/template/.project/rules/GIT_RULE.md +2 -1
- package/template/AGENTS.md +9 -0
- package/template/CLAUDE.md +17 -1
- package/template/shared/skills/add-backlog/SKILL.md +16 -87
- package/template/shared/skills/plan-init/SKILL.md +41 -116
- package/template/shared/skills/task-close/SKILL.md +52 -141
- package/template/shared/skills/task-dev/SKILL.md +4 -4
- package/template/shared/skills/task-init/SKILL.md +37 -244
- package/template/shared/skills/task-plan/SKILL.md +3 -2
- package/template/shared/skills/task-test/SKILL.md +5 -4
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: run-team
|
|
3
|
+
description: agent teams로 다건 태스크를 독립 워크트리에서 자동 병렬 처리 — 리더 세션이 팀원(독립 세션)에게 태스크 1개씩 분배하고 흐름을 관리한다. 트리거 발화(예 "백로그 한 번에 진행해" / "팀에게 전부 독립으로 맡겨") 시에만 발동. Claude 전용 · 실험 기능(agent teams) 전제.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /run-team
|
|
7
|
+
|
|
8
|
+
## 개요
|
|
9
|
+
|
|
10
|
+
다건 태스크(백로그 여러 건 / 명시된 작업 묶음)를 **agent teams로 자동 병렬 처리**한다. 리더 메인 세션 1개가 작업을 태스크 단위로 묶어 결정하고, 각 태스크를 **팀원(독립 Claude Code 세션)** 에게 1개씩 맡긴다. 각 팀원은 taskery 태스크 5단계(`/task-init` ~ `/task-close`)를 *독립 워크트리*에서 수행한다.
|
|
11
|
+
|
|
12
|
+
이 스킬이 추가하는 것은 *세션 오케스트레이션 레이어*뿐이다. **워크트리 격리는 `/task-init`이, 머지 직렬화·충돌 3단계 해결은 `/task-close`가 이미 담당**한다 — 본 스킬은 그 위에서 누가 어떤 태스크를 맡고 어디서 멈추는지만 조율한다.
|
|
13
|
+
|
|
14
|
+
> **taskery 기본 플로우가 아니다.** 디폴트는 *1세션 1태스크* (사용자가 직접 지시). 본 스킬은 *트리거 발화가 있을 때만* 발동하는 고기능이다. 평소 단일 태스크 흐름을 침범하지 않는다.
|
|
15
|
+
|
|
16
|
+
## 팀원 = agent teams 팀원 (Task tool 서브에이전트 아님)
|
|
17
|
+
|
|
18
|
+
본 스킬의 "팀원"은 **Claude Code의 agent teams 기능으로 생성되는 독립 세션**이다. **Task tool 서브에이전트로 대체하는 것을 영구 금지**한다 — 둘은 다르다.
|
|
19
|
+
|
|
20
|
+
| | Task tool 서브에이전트 (금지) | agent teams 팀원 (본 스킬) |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| 세션 | 리더 컨텍스트 *안*의 백그라운드 워커 | **독립 세션 · 자체 컨텍스트 윈도우** |
|
|
23
|
+
| 사용자 접근 | 직접 들어가 지시 불가 | **사용자가 직접 들어가 확인·지시 가능** |
|
|
24
|
+
| 통신 | 결과만 리더에 반환 | 팀원↔리더 자동 통지 + 팀원끼리 직접 통신 (리더가 다 봄) |
|
|
25
|
+
| 스킬 호출 | 제한적 | 프로젝트 `.claude/skills/` 그대로 로드 → taskery 5스킬 직접 호출 |
|
|
26
|
+
|
|
27
|
+
팀원은 각자 새 세션으로 시작하며 프로젝트 `CLAUDE.md`를 자동 로드하므로 taskery 룰을 그대로 따른다.
|
|
28
|
+
|
|
29
|
+
## 호출 시점
|
|
30
|
+
|
|
31
|
+
- **트리거 발화** — 다건을 한 번에 / 팀으로 / 독립 병렬로 처리하라는 의도:
|
|
32
|
+
- *"백로그 BL-003, 005, 007 한 번에 진행해"*
|
|
33
|
+
- *"백로그에 쌓인 거 묶을 수 있는 단위로 팀한테 전부 맡겨"*
|
|
34
|
+
- *"이 작업들 독립으로 병렬 처리해"*
|
|
35
|
+
- **단일 태스크 의도면 발동 금지** — *"로그인 기능 추가해줘"* 류 단건은 기존 `/task-init` 흐름. 본 스킬 진입 X.
|
|
36
|
+
|
|
37
|
+
## 입력 처리
|
|
38
|
+
|
|
39
|
+
인자 = (선택) 대상 작업 목록 / 중단점 모드. 예: `/run-team BL-003 BL-005 BL-007` / `/run-team BL-003~009 --until test` / 인자 없이 발화로.
|
|
40
|
+
|
|
41
|
+
- 대상이 모호하면 한 번에 한 질문씩 확인. **자동 추정으로 팀 가동 금지** — 태스크 묶음·팀원 수·중단점 모드 확정 후 진입.
|
|
42
|
+
|
|
43
|
+
## 단계
|
|
44
|
+
|
|
45
|
+
### Step 0 — 가드 (플랫폼 + 활성화)
|
|
46
|
+
|
|
47
|
+
본 스킬 진입 즉시 두 가드를 통과해야 한다. 하나라도 실패 시 *팀을 만들지 말고* 안내 후 중단.
|
|
48
|
+
|
|
49
|
+
1. **플랫폼 가드** — agent teams는 Claude 전용. 현재 세션이 Codex면 *"agent teams는 Claude 전용이라 Codex에서는 자동 병렬을 지원하지 않는다. 단일 태스크 흐름(`/task-init`)으로 진행하라"* 안내 + 중단. (본 스킬은 Claude 자산으로만 설치되므로 정상 경로에선 도달하지 않으나, 발화가 Codex 세션에 들어온 경우 대비.)
|
|
50
|
+
2. **활성화 가드** — agent teams는 기본 비활성. 활성 여부 확인:
|
|
51
|
+
```sh
|
|
52
|
+
[ "$CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS" = "1" ] || echo "agent teams 비활성"
|
|
53
|
+
```
|
|
54
|
+
- 비활성이면 *팀 가동을 시작하지 말고* 다음을 안내 + 중단:
|
|
55
|
+
- *"agent teams는 실험 기능이라 기본 비활성이다. `~/.claude/settings.json`의 `env`에 `\"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\"`를 넣고 세션을 재시작한 뒤 다시 호출하라. (팀원을 split pane으로 보려면 `env`가 아닌 최상위에 `\"teammateMode\": \"tmux\"`도 — 기본값 `auto`는 환경 자동 감지 후 in-process 폴백.)"*
|
|
56
|
+
- 꺼진 채로 헛도는 것을 막기 위한 안전망이다.
|
|
57
|
+
|
|
58
|
+
### Step 1 — 작업 수집
|
|
59
|
+
|
|
60
|
+
- 대상이 백로그면 `$MAIN_WT/.project/tasks/<활성 plan>/BACKLOG.md`에서 해당 BL 항목 정독 (개요 / 대상 영역).
|
|
61
|
+
```sh
|
|
62
|
+
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
63
|
+
```
|
|
64
|
+
- 대상이 명시 작업 목록이면 그 발화를 그대로.
|
|
65
|
+
- 활성 plan은 `$MAIN_WT/.project/AGENT-GUIDE.md`에서 검출.
|
|
66
|
+
|
|
67
|
+
### Step 2 — 태스크 묶기 판단
|
|
68
|
+
|
|
69
|
+
수집한 작업을 **태스크 단위로 묶는다**. 백로그 1건 = 태스크 1개가 *필수 아님* — 작업 범위·응집도에 따라 여러 건을 한 태스크로 묶거나 한 건을 그대로 둔다 (리더 판단).
|
|
70
|
+
|
|
71
|
+
- **응집 기준**: 같은 모듈·파일군을 건드리거나 의존 관계가 있으면 한 태스크로 묶어 *충돌·중복을 사전 회피*. 서로 독립이면 분리해 병렬 이득 확보.
|
|
72
|
+
- **팀원 수 권장 3~5** (agent teams 권장치). 결정된 태스크가 5개를 넘으면 *배치로 분할* — 1차 배치 완료(또는 중단점 도달) 후 2차 배치. 한 번에 다 띄우지 않는다 (토큰·조율 부담).
|
|
73
|
+
- 묶음 결과를 사용자에게 제시 + confirm: *"태스크 N개로 묶었다 — ① <묶음>(BL-003+005) ② <묶음>(BL-007) … 팀원 N명. 이대로 갈까?"*
|
|
74
|
+
|
|
75
|
+
### Step 3 — 중단점 모드 결정
|
|
76
|
+
|
|
77
|
+
각 팀원이 taskery 5단계 중 *어디까지 자동 진행하고 어디서 멈출지* 결정한다.
|
|
78
|
+
|
|
79
|
+
- **기본 = 단계별 정지** — 별도 지시가 없으면 각 팀원은 *한 단계 수행 후 멈추고 리더에 보고*. 사용자(또는 리더)가 다음 단계를 지시할 때까지 대기.
|
|
80
|
+
- **구간 자동** — 사용자 지시(*"init부터 test까지 자동으로"*, *"--until test"*)가 있으면 해당 구간을 멈춤 없이 진행.
|
|
81
|
+
- **`/task-close`(머지) 게이트 권장** — 자동 구간이라도 close는 *되돌릴 수 없는 dev 병합*이므로, 별도의 명시 지시가 없으면 close 직전에 멈춰 사용자 확인을 받도록 팀원에 지시한다.
|
|
82
|
+
- 모드는 팀원마다 다르게 줄 수 있다 (태스크별 난이도에 따라).
|
|
83
|
+
|
|
84
|
+
### Step 4 — agent teams 팀원 생성 + 자기완결 지시
|
|
85
|
+
|
|
86
|
+
> **팀원은 agent teams 팀원으로만 생성**한다 (위 "팀원 = agent teams 팀원" 절). Task tool 서브에이전트 대체 영구 금지.
|
|
87
|
+
|
|
88
|
+
리더가 결정한 태스크 수만큼 팀원을 만들고, 각 팀원에게 **태스크 1개 + 자기완결 지시**를 준다. 팀원 지시에 다음을 모두 포함한다 (팀원은 리더 컨텍스트를 공유하지 않으므로 *그 자체로 완결*되어야 한다):
|
|
89
|
+
|
|
90
|
+
1. **맡을 작업** — 태스크 주제 / 출처(BL-NNN 등) / 묶음이면 포함 항목 전부 + 각 개요·대상 영역.
|
|
91
|
+
2. **시작 위치** — *메인 워크트리(dev 체크아웃) cwd에서 `/task-init`을 먼저 호출*. `/task-init`이 독립 워크트리·브랜치를 분기한다.
|
|
92
|
+
3. **이동** — `/task-init` 결과 보고에 출력된 *워크트리 경로로 cd*한 뒤 후속 단계(`/task-plan` 이후)를 그 워크트리에서 수행.
|
|
93
|
+
4. **중단점 모드** — Step 3에서 정한 구간/정지 규칙. 예: *"`/task-init`과 `/task-plan`까지만 수행하고 멈춰 리더에 보고하라"*.
|
|
94
|
+
5. **보고 의무** — 각 중단점 도달 시 *상태(어느 단계까지 / 결과 요약 / 막힌 점)* 를 리더에 보고.
|
|
95
|
+
|
|
96
|
+
- 여러 팀원이 동시에 메인 워크트리 cwd에서 `/task-init`을 호출해도, `/task-init`이 부르는 `fork` 명령이 **init 락으로 [채번~워크트리 분기]를 직렬화**(번호 충돌 차단)하고 브랜치명 유일성을 git이 보장하므로 충돌을 막는다. 각 팀원의 작업은 *물리적으로 분리된 워크트리 디렉토리*(`~/.taskery/worktrees/...`)에서 진행되므로 **agent teams의 "같은 파일 동시 편집 → 덮어쓰기" 제약이 구조적으로 회피된다.**
|
|
97
|
+
|
|
98
|
+
### Step 5 — 모니터링
|
|
99
|
+
|
|
100
|
+
- 팀원이 중단점에 도달하거나 idle 상태가 되면 agent teams가 리더에 자동 통지한다 (폴링 불필요).
|
|
101
|
+
- 리더는 각 팀원의 보고를 모아 *사용자에게 한 곳에서 종합 보고*: *"팀원 ①은 TASK-007 plan 완료·대기 / 팀원 ②는 TASK-008 dev 진행 중 …"*.
|
|
102
|
+
- 사용자는 리더를 통해 다음 단계를 지시하거나, 특정 팀원 세션에 *직접 들어가* 지시할 수 있다 (in-process 화살표/Enter, 또는 `teammateMode` split pane).
|
|
103
|
+
- **task 상태 lag 주의** — 팀원이 단계 완료를 제때 마킹하지 못해 후속이 막히면, 리더가 해당 팀원에 *상태 갱신/진행을 한 번 nudge*한다.
|
|
104
|
+
|
|
105
|
+
### Step 6 — 머지 조율
|
|
106
|
+
|
|
107
|
+
각 팀원의 `/task-close`는 **머지 락으로 자동 직렬화**된다 (동시 close 시도해도 한쪽씩 순차). 리더가 추가로 할 일:
|
|
108
|
+
|
|
109
|
+
- 완료 순서를 *대기열로 관리* — 여러 팀원이 동시에 close 단계면 순차 진행을 안내.
|
|
110
|
+
- `/task-close`의 충돌 3단계(단순 자동 / 의미적 자료 / 판단 불가)는 각 팀원이 자체 수행한다. **판단 불가(4-c)에 이르면 팀원이 사용자 호출**하도록 되어 있으므로, 리더는 그 호출을 사용자에게 전달한다.
|
|
111
|
+
- 모든 태스크 close 후 *전체 결과를 종합 보고*: 머지된 TASK 목록 / 충돌 해결 내역 / 미완(중단점에서 멈춘 것) 목록.
|
|
112
|
+
|
|
113
|
+
## 도구 가이드
|
|
114
|
+
|
|
115
|
+
- **Bash**: 메인 워크트리 검출 / 활성화 가드 확인 / BACKLOG·AGENT-GUIDE 정독용 경로 산출
|
|
116
|
+
- **Read**: `$MAIN_WT/.project/tasks/<활성 plan>/BACKLOG.md` / `$MAIN_WT/.project/AGENT-GUIDE.md`
|
|
117
|
+
- **agent teams (자연어)**: 팀원 생성 + 태스크별 지시 + 모니터링. (전용 슬래시 명령은 없음 — 리더가 자연어로 팀을 가동)
|
|
118
|
+
- **AskUserQuestion**: 태스크 묶음 / 팀원 수 / 중단점 모드 확인
|
|
119
|
+
|
|
120
|
+
## 주의사항
|
|
121
|
+
|
|
122
|
+
- **agent teams 팀원으로만** — Task tool 서브에이전트 대체 영구 금지 (자체 컨텍스트·사용자 직접 접근·리더 관리가 본 스킬의 전제).
|
|
123
|
+
- **트리거 한정 발동** — 단일 태스크 의도에는 진입 금지. 기본 플로우(1세션 1태스크) 비침범.
|
|
124
|
+
- **두 가드 선통과** — 플랫폼(Claude) + 활성화(env) 미충족 시 팀을 만들지 말고 안내 후 중단.
|
|
125
|
+
- **워크트리·머지는 기존 스킬이 담당** — 본 스킬은 worktree를 직접 만들거나 머지하지 않는다. 팀원이 `/task-init`·`/task-close`를 호출하게 할 뿐. 본 스킬에서 git 명령 직접 실행 금지.
|
|
126
|
+
- **팀원 지시는 자기완결** — 리더 컨텍스트 미공유. 작업·시작 위치·이동·중단점·보고 의무를 지시에 모두 명시.
|
|
127
|
+
- **권장 3~5 팀원 / 초과 시 배치** — 토큰 비용은 팀원 수에 선형 증가. 한 번에 다 띄우지 않는다.
|
|
128
|
+
- **`/task-close` 게이트 보존 권장** — 자동 구간이라도 되돌릴 수 없는 머지는 사용자 확인 후.
|
|
129
|
+
- **in-process resume 취약** — agent teams는 `/resume`·`/rewind`로 in-process 팀원이 복원되지 않는다. 세션 중단 후 재개 시 *살아있지 않은 팀원에 메시지 시도*가 발생할 수 있으므로, 재개하면 팀원을 새로 만들고 진행 상태는 `npx @angar2/taskery status`로 재확인한다.
|
|
130
|
+
- **split pane 환경 의존** — 팀원을 분할 화면으로 보려면 tmux/iTerm2 필요. VS Code 통합 터미널 등은 in-process(화살표 전환)만 가능.
|
|
131
|
+
|
|
132
|
+
## 상태 전이
|
|
133
|
+
|
|
134
|
+
| 진입 시 | 종료 시 |
|
|
135
|
+
|--------|--------|
|
|
136
|
+
| (해당 없음 — 오케스트레이터) | (해당 없음) |
|
|
137
|
+
|
|
138
|
+
본 스킬은 task 상태를 직접 전이시키지 않는다. **상태 전이는 각 팀원이 호출하는 task 5스킬이 수행**한다 (`/task-init`=draft … `/task-close`=closed). 본 스킬은 누가 무엇을 어디까지 진행하는지만 조율한다.
|
|
139
|
+
|
|
140
|
+
## 멀티세션 정합
|
|
141
|
+
|
|
142
|
+
- **기존 멀티세션 위에 얹힘** — taskery는 이미 *여러 메인 세션이 독립 워크트리로 병렬* 진행을 지원한다. 본 스킬은 그 "여러 세션"을 사용자가 일일이 띄우는 대신 *리더가 agent teams로 띄우고 관리*하게 하는 것뿐이다. 워크트리·머지 락·충돌 해결 정합은 기존과 동일.
|
|
143
|
+
- **머지 락** — `~/.taskery/<projectId>.merge.lock` 단일. 팀원들의 close가 직렬화된다.
|
|
144
|
+
- **race 차단** — 동시 `/task-init`은 브랜치명 유일성 + SSoT 2층으로 차단 (기존 `/task-init` 정합 그대로).
|
|
145
|
+
- **완료 추적** — `npx @angar2/taskery status` (진행 중 팀원/워크트리) + dev 머지 히스토리.
|
|
@@ -210,7 +210,7 @@ docs: [TASK-{NNN}] CHANGELOG 업데이트
|
|
|
210
210
|
|
|
211
211
|
| 작업 | 명령 | 주체 |
|
|
212
212
|
|------|------|------|
|
|
213
|
-
| 생성 | `
|
|
213
|
+
| 생성 | `npx @angar2/taskery fork <type> <dev> <src> <slug>` (내부: init 락 + `worktree add -b`) | `/task-init` |
|
|
214
214
|
| 제거 | `git -C "$MAIN_WT" worktree remove "$WT_PATH"` | `/task-close` (자동 흐름 + 안전 검증) |
|
|
215
215
|
| stale 정리 | `git -C "$MAIN_WT" worktree prune` | `npx @angar2/taskery prune` (사용자 확인 후) |
|
|
216
216
|
|
|
@@ -304,5 +304,6 @@ git -C "$MAIN_WT" branch --no-merged dev --list \
|
|
|
304
304
|
| 2026-05-31 | 0.1.2 백로그 스킬 추가 정합 — 출처 표 `BL-NNN` 채번 주체 `/backlog-add` → `/add-backlog`로 갱신 + 버전별 경로(`.project/tasks/<vX.X>/BACKLOG.md`) 명시 |
|
|
305
305
|
| 2026-06-02 | 0.1.3 F2·F3 정합 — §멀티세션 워크트리 정책 *메인 HEAD 떼기 금지* + *모호 발화 자의 해석 금지* / §git-guard.sh 5종 변형 인식 (-C / --git-dir / --work-tree) + 셸 prefix 금지 명시. stash FRICTION_LOG 2026-06-01 반영 |
|
|
306
306
|
| 2026-06-25 | 추적 변경 0(코드 0 · `.project` gitignore) close 시 마커 빈커밋으로 분기·채번 정보 보존 — `--no-ff` 머지 커밋 미생성 케이스의 `--allow-empty` 유일 예외 명시 (상세: task-close Step 6-8). FRICTION 검토 F1 반영 |
|
|
307
|
+
| 2026-06-28 | 워크트리 생성 메커니즘 갱신 — `git worktree add` 직접 실행 → `npx @angar2/taskery fork`(init 락 안에서 채번+분기 원자 실행). 병렬 task-init 번호 충돌(레이스) 차단 |
|
|
307
308
|
| 2026-06-25 | §멀티세션 워크트리 정책에 "워크트리 실행 환경" 추가 — 워크트리에 의존성 심링크 금지(개발 서버 fs 접근 제한으로 로딩 실패), 실행·검수 task는 워크트리 안에 의존성 실제 마련. FRICTION 검토 F6 반영 |
|
|
308
309
|
| 2026-06-25 | §멀티세션 워크트리 정책에 "멀티세션 검수 환경" 추가 — task별 dev 서버 포트 격리(메인=기준 포트, task=기준+TASK번호) + 터널 독립 + close 시 자기 것만 종료(광역 종료 금지) + 사용자 검수 시점 서버 자동 기동(task-test UNCERTAIN/PASS·task-dev 종료, FAIL 제외). FRICTION 검토 F7 반영 |
|
package/template/AGENTS.md
CHANGED
|
@@ -57,6 +57,15 @@
|
|
|
57
57
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
|
+
## agent teams 자동 병렬 — Codex 미지원
|
|
61
|
+
|
|
62
|
+
> 다건 태스크를 리더가 팀원(독립 세션)에 분배해 자동 병렬 처리하는 고기능(`/run-team`)은 **Claude 전용**이다 — 기반인 agent teams 기능이 Codex에 없다.
|
|
63
|
+
|
|
64
|
+
- *"백로그 한 번에 진행해"* / *"팀에게 전부 독립으로 맡겨"* 류 자동 병렬 발화가 들어와도 Codex에서는 지원하지 않는다. **단일 태스크 흐름**(`/task-init` ~ `/task-close`)으로 안내하고 진행한다.
|
|
65
|
+
- 멀티세션 병렬 자체(사용자가 워크트리별 세션을 직접 띄워 진행)는 Codex에서도 가능 — 자동화(리더가 팀을 띄우고 관리)만 미지원이다.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
60
69
|
## 백로그 (0.1.2+)
|
|
61
70
|
|
|
62
71
|
> `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
|
package/template/CLAUDE.md
CHANGED
|
@@ -52,6 +52,19 @@
|
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
|
+
## agent teams 자동 병렬 (Claude 전용 · 실험 · 트리거 한정)
|
|
56
|
+
|
|
57
|
+
> 다건 태스크를 *리더 메인 세션 1개가 agent teams로 팀원(독립 세션)에 분배*해 자동 병렬 처리하는 고기능. 위 멀티세션을 사용자가 일일이 띄우는 대신 리더가 띄우고 관리한다. 워크트리 격리·머지 직렬화는 기존 `/task-init`·`/task-close`가 그대로 담당.
|
|
58
|
+
|
|
59
|
+
- **기본 플로우 아님** — 디폴트는 *1세션 1태스크*. *트리거 발화*(예: *"백로그 한 번에 진행해"* / *"팀에게 전부 독립으로 맡겨"*)가 있을 때만 `/run-team` 발동. 단일 태스크 의도(*"~ 기능 추가해줘"*)는 기존 `/task-init` 흐름.
|
|
60
|
+
- **활성화 전제** — agent teams는 실험 기능이라 기본 비활성. `~/.claude/settings.json`의 `env`에 `"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"` 설정 후 세션 재시작. (팀원을 split pane으로 보려면 최상위에 `"teammateMode": "tmux"`도 — `teammateMode`는 `env`가 아닌 최상위 키이며 기본값 `auto`는 환경 자동 감지 후 in-process 폴백.) 미설정이면 `/run-team`이 안내하고 중단(헛도는 것 방지).
|
|
61
|
+
- **팀원 = agent teams 팀원** — Task tool 서브에이전트 아님(독립 세션 · 자체 컨텍스트 · 사용자 직접 접근 가능).
|
|
62
|
+
- **Claude 전용** — agent teams가 Codex에 없어 Codex에서는 미지원.
|
|
63
|
+
|
|
64
|
+
상세: `.claude/skills/run-team/SKILL.md`.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
55
68
|
## 백로그 (0.1.2+)
|
|
56
69
|
|
|
57
70
|
> `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
|
|
@@ -123,7 +136,7 @@
|
|
|
123
136
|
|
|
124
137
|
---
|
|
125
138
|
|
|
126
|
-
## 스킬
|
|
139
|
+
## 스킬 — 공통 9종 + Claude 전용 1종(run-team)
|
|
127
140
|
|
|
128
141
|
| 스킬 | 레벨 | 역할 |
|
|
129
142
|
|------|------|------|
|
|
@@ -136,9 +149,12 @@
|
|
|
136
149
|
| `/task-close` | task | 검증 명령 게이트 + 커밋 + dev 병합 (tested → closed) |
|
|
137
150
|
| `/add-backlog` | meta | 사용자 발화로 활성 plan BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
|
|
138
151
|
| `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
|
|
152
|
+
| `/run-team` | meta · **Claude 전용** | agent teams로 다건 태스크를 팀원(독립 세션)에 분배해 자동 병렬 처리 — 트리거 발화 시에만 (실험 기능 전제). 위 "agent teams 자동 병렬" 섹션 참조 |
|
|
139
153
|
|
|
140
154
|
본문은 `.claude/skills/<스킬>/SKILL.md` 참조.
|
|
141
155
|
|
|
156
|
+
> `/run-team`은 Claude 전용 — agent teams(실험 기능)가 Codex에 없어 Codex 설치에는 미포함.
|
|
157
|
+
|
|
142
158
|
---
|
|
143
159
|
|
|
144
160
|
## Hook 안전망 — Catastrophic 2종
|
|
@@ -5,81 +5,31 @@ description: 사용자 발화로 *plan(기능 그룹)별* tasks/<NNN_slug>/BACKL
|
|
|
5
5
|
|
|
6
6
|
# /add-backlog
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
`/add-backlog`는 사용자 발화를 받아 *plan(기능 그룹)별 백로그* `.project/tasks/<NNN_slug>/BACKLOG.md`에 task 후보를 1건씩 누적한다. 멀티세션 환경에서 `withMetaLock`으로 동시 쓰기 직렬화. **얕은 분석**만 — 코드 직접 탐색 X, 추정 수준. 본격 분석은 다음 단계 `/task-plan`에서.
|
|
11
|
-
|
|
12
|
-
글로벌 `.project/BACKLOG.md` (plan 기획 후보 카탈로그) 는 `/plan-init` 영역으로 본 스킬 무관.
|
|
8
|
+
사용자 발화를 받아 *활성 plan별 백로그* `.project/tasks/<NNN_slug>/BACKLOG.md`에 task 후보를 1건씩 누적한다. **얕은 분석**만 — 코드 직접 탐색 X, 추정 수준. 본격 분석은 다음 단계 `/task-plan`.
|
|
13
9
|
|
|
14
10
|
## 호출 시점
|
|
15
11
|
|
|
16
|
-
-
|
|
17
|
-
- 발화 캐치: *"~ 백로그에 추가해 줘"*
|
|
18
|
-
|
|
19
|
-
## 입력 처리
|
|
20
|
-
|
|
21
|
-
- 무인자 호출: 사용자가 *"백로그 추가"*만 말한 경우 — 어떤 항목인지 한 줄 인터뷰
|
|
22
|
-
- 인자 호출: 인자에 백로그 후보 주제. 1건 기본. 다건 명시 시 순차 처리
|
|
23
|
-
|
|
24
|
-
## 단계 (Step 1~6)
|
|
12
|
+
- 명시 호출: `/add-backlog 로그인 빈 화면 떠`
|
|
13
|
+
- 발화 캐치: *"~ 백로그에 추가해 줘"* 등 백로그 추가 의도 발화
|
|
14
|
+
- 무인자 호출 시 *"어떤 항목? 한 줄로 알려줘"* 인터뷰. 다건 명시 시 1건씩 순차 처리.
|
|
25
15
|
|
|
26
|
-
|
|
16
|
+
## 판단 (LLM, 코드 탐색 X)
|
|
27
17
|
|
|
28
|
-
|
|
29
|
-
```sh
|
|
30
|
-
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
31
|
-
```
|
|
32
|
-
- 메인 워크트리 dev 체크아웃 검증 — 위배 시 사용자 호출 + 중단
|
|
33
|
-
- 활성 plan 검출 — `$MAIN_WT/.project/AGENT-GUIDE.md` `## 활성 plan 버전` 섹션 다음 비어 있지 않은 첫 줄에서 활성 plan 식별자(첫 토큰 — `NNN_slug` 폴더명) 추출
|
|
34
|
-
- BACKLOG.md 경로 = `$MAIN_WT/.project/tasks/<NNN_slug>/BACKLOG.md`. 부재 시 사용자 호출: *"`/plan-init` 먼저 호출해 활성 plan 디렉토리 + 빈 BACKLOG.md 생성 필요"* + 중단
|
|
18
|
+
발화에서 후보 1건을 뽑아 추정 수준의 메타를 산출한다:
|
|
35
19
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- 사용자 발화에서 1건 추출. 다건 명시 시 순차 처리 (각 1건씩 본 흐름 반복)
|
|
39
|
-
- 입력이 비어 있으면 사용자에게 *"어떤 항목? 한 줄로 알려줘"* 인터뷰
|
|
40
|
-
|
|
41
|
-
### Step 3 — 얕은 분석 (LLM, 코드 탐색 X)
|
|
42
|
-
|
|
43
|
-
추정 수준의 메타 산출:
|
|
44
|
-
- **유형** (`feature` / `bug` / `improve` / `refactor` / `docs` / `chore`) — 자동 추정, 모호 시 사용자 confirm
|
|
20
|
+
- **유형** (`feature` / `bug` / `improve` / `refactor` / `docs` / `chore`) — 자동 추정, *모호 시 사용자 confirm* (예: *"메뉴 검색 개선"* = feature/improve 모호)
|
|
45
21
|
- **제목** — 한 줄, 간결, 한국어
|
|
46
22
|
- **개요** — 한 줄. bug → 원인 추정 / feature → 구상 / improve → 개선 방향
|
|
47
|
-
- **대상 영역** — 한 줄. 이 파일 / 모듈일 거다
|
|
23
|
+
- **대상 영역** — 한 줄. 추정 수준 (이 파일 / 모듈일 거다)
|
|
24
|
+
- **슬러그** — 한국어 제목 → 영어 *의미 변환* → kebab-case (3 단어 이내, 음역 X). 예: *"로그인 빈 화면"* → `login-empty-page`
|
|
48
25
|
|
|
49
|
-
> *코드 직접 탐색 금지*.
|
|
26
|
+
> *코드 직접 탐색 금지*. 본 스킬은 *메모지 누적*만. 자동 추정 진행 X — 메타는 사용자 OK 또는 명백한 발화 매칭 후에만 추가.
|
|
50
27
|
|
|
51
|
-
|
|
28
|
+
## 추가 + 보고
|
|
52
29
|
|
|
53
|
-
-
|
|
54
|
-
- 예: *"로그인 페이지 빈 화면"* → `login-empty-page` / *"다크모드 토글"* → `dark-mode-toggle`
|
|
30
|
+
`backlog_add` 도구로 추가한다 (MCP 도구 `backlog_add` 또는 동일 `npx @angar2/taskery backlog-add --type <t> --title <제목> --slug <slug> --summary <개요> --target <대상영역>`). 채번(BL-NNN)·서식·placeholder 치환·`withMetaLock` 직렬화·메인 워크트리 위치는 코드가 보장한다. 활성 plan BACKLOG.md 부재 시 도구가 에러를 반환한다 → *"`/plan-init` 먼저 호출해 활성 plan 디렉토리 + BACKLOG.md 생성 필요"* 안내 후 중단.
|
|
55
31
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
`bin/lib.js`의 `appendBacklogItem(mainWtPath, meta)` 호출.
|
|
59
|
-
|
|
60
|
-
```js
|
|
61
|
-
const lib = require('@angar2/taskery/bin/lib'); // 또는 패키지 내부 경로
|
|
62
|
-
const blNum = await lib.appendBacklogItem(MAIN_WT, {
|
|
63
|
-
type: '<유형>',
|
|
64
|
-
title: '<제목>',
|
|
65
|
-
slug: '<슬러그>',
|
|
66
|
-
summary: '<개요>',
|
|
67
|
-
target: '<대상 영역>',
|
|
68
|
-
});
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
내부 흐름:
|
|
72
|
-
1. `withMetaLock(backlogPath)` 안에서:
|
|
73
|
-
- BACKLOG.md 전체에서 `BL-(\d+)` 패턴 grep → 최대값 + 1. 빈 파일 → BL-001 시작
|
|
74
|
-
- 항목 블록 포맷팅:
|
|
75
|
-
```
|
|
76
|
-
- [ ] **BL-NNN** [유형] 제목 `slug`
|
|
77
|
-
- 개요: ...
|
|
78
|
-
- 대상 영역: ...
|
|
79
|
-
```
|
|
80
|
-
- plan-init 빈 골격의 placeholder 라인 (`(사용자 발화 또는 task-close 직후 메인 감지로 한 행씩 추가. 빈 상태 default.)`) 발견 시 → 그 자리에 치환. 미발견 시 → 파일 끝 빈 줄 + 블록 append
|
|
81
|
-
|
|
82
|
-
### Step 6 — 결과 보고
|
|
32
|
+
성공 반환 `{ blNum, blId }`로 보고한다:
|
|
83
33
|
|
|
84
34
|
```
|
|
85
35
|
✅ BL-<NNN> [<유형>] <제목> — <NNN_slug> 백로그 추가됐어.
|
|
@@ -89,29 +39,8 @@ const blNum = await lib.appendBacklogItem(MAIN_WT, {
|
|
|
89
39
|
다음: 진행 의향이면 *"BL-<NNN> 진행"*이라고 말해. `/task-init`이 메타 그대로 받아 워크트리를 분기하고 항목을 `[x]` 확인 마킹할게.
|
|
90
40
|
```
|
|
91
41
|
|
|
92
|
-
## 도구 가이드
|
|
93
|
-
|
|
94
|
-
- **Bash**: 메인 워크트리 검출 / dev 체크아웃 검증
|
|
95
|
-
- **Read**: `$MAIN_WT/.project/AGENT-GUIDE.md` (활성 plan 검출) / 기존 BACKLOG.md 정독 (중복 / 유사 항목 사전 확인)
|
|
96
|
-
- **bin/lib.js**: `getActiveVersion` / `getBacklogPath` / `appendBacklogItem` 호출
|
|
97
|
-
- **AskUserQuestion**: 유형 모호 시 confirm — 한 번에 한 질문
|
|
98
|
-
|
|
99
42
|
## 주의사항
|
|
100
43
|
|
|
101
|
-
- **얕은 분석만** —
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
- **활성 plan 부재 시 즉시 중단** — `AGENT-GUIDE.md` 부재 / `## 활성 plan 버전` 섹션 부재 / plan 식별자 미설정(`<예: …>` 자리표시자) 모두 명확한 에러 메시지 후 사용자 호출
|
|
105
|
-
- **결정적 슬러그 best-effort** — LLM 비결정성 수용. race 차단 본체는 SSoT 2층(`/task-init` §4.4)이 담당. 슬러그 변형 발생 시 사용자 confirm
|
|
106
|
-
- **글로벌 BACKLOG.md (plan 기획 후보)** 와 혼동 X — 본 스킬은 *활성 plan(기능 그룹)별*만 다룸. 글로벌은 `/plan-init` 영역
|
|
107
|
-
- **자동 추정 진행 X** — 유형 / 제목 / 개요 / 대상 영역 모두 사용자 OK 또는 명백한 발화 매칭 후에만 BACKLOG.md 쓰기
|
|
108
|
-
|
|
109
|
-
## 상태 전이
|
|
110
|
-
|
|
111
|
-
해당 없음 (백로그 메모지 누적 — task 상태 X).
|
|
112
|
-
|
|
113
|
-
## 멀티세션 정합
|
|
114
|
-
|
|
115
|
-
- **위치 = 메인 워크트리 절대 경로** — 워크트리 안에서 호출돼도 메인 절대 경로의 BACKLOG.md를 단일 소스로 사용
|
|
116
|
-
- **`withMetaLock` 직렬화** — 두 메인 세션이 동시 `/add-backlog` 호출 시 락으로 직렬화 (proper-lockfile, stale=30s, retries=5). 한 세션 `/add-backlog` + 다른 세션 `/task-init` (BL 마킹) 동시 시도 시 락 정합
|
|
117
|
-
- **체크박스 의미** — `[ ]` = 미확인 (task로 옮기지 않은 메모) / `[x]` = 확인 완료 (task로 옮김). **dev 머지 완료 의미 X** — 완료 추적은 `git log dev --grep 'BL-NNN'` + 브랜치명 + `taskery status`
|
|
44
|
+
- **얕은 분석만** — 도메인 코드 Read · Grep 금지. 본격 분석은 `/task-plan`.
|
|
45
|
+
- **글로벌 `.project/BACKLOG.md`(plan 기획 후보)와 혼동 X** — 본 스킬은 *활성 plan별*만. 글로벌은 `/plan-init` 영역.
|
|
46
|
+
- **체크박스 의미** — `[ ]` = 미확인(메모) / `[x]` = 확인(task로 옮김). dev 머지·완료 여부와 무관 — 완료 추적은 `taskery status` + dev 머지커밋.
|
|
@@ -7,67 +7,37 @@ description: plan(기능 그룹) 생성 — NNN 채번 폴더 + PLAN.md/ROADMAP.
|
|
|
7
7
|
|
|
8
8
|
## 개요
|
|
9
9
|
|
|
10
|
-
plan(기능 그룹)마다 호출. **plan = 작업을 묶는 기능 그룹 단위** — 제품 전체 스냅샷(버전)이 아니다.
|
|
10
|
+
plan(기능 그룹)마다 호출. **plan = 작업을 묶는 기능 그룹 단위** — 제품 전체 스냅샷(버전)이 아니다. 규모 가변(기능 그룹 하나가 보편, 첫 plan=MVP처럼 여러 그룹 묶음도 같은 흐름, 특례 없음).
|
|
11
11
|
|
|
12
12
|
본 스킬이 만드는 것:
|
|
13
|
-
- **plan 로컬(그룹 C)** — `.project/plans/<NNN_slug>/`에 `PLAN.md` + `ROADMAP.md
|
|
13
|
+
- **plan 로컬(그룹 C)** — `.project/plans/<NNN_slug>/`에 `PLAN.md` + `ROADMAP.md`.
|
|
14
14
|
- **제품 관통 문서(그룹 B) delta — 의도 레벨만** — `.project/FEATURES.md` / `.project/UX-UI.md`에 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
- **제품 관통 문서 전체 생성** — SERVICE-POLICY/TECH-STACK/ARCHITECTURE/DATA-MODEL/API-SPEC/FEATURES/UX-UI
|
|
18
|
-
- **DATA-MODEL/API-SPEC 상세 본문** —
|
|
16
|
+
만들지 *않는* 것:
|
|
17
|
+
- **제품 관통 문서 전체 생성** — 7종(SERVICE-POLICY/TECH-STACK/ARCHITECTURE/DATA-MODEL/API-SPEC/FEATURES/UX-UI)은 `/project-init` 영역. plan-init은 부수적 add/mod만.
|
|
18
|
+
- **DATA-MODEL/API-SPEC 상세 본문** — 스키마·엔드포인트 *선기획 금지*. 구현 동반으로 task(`/task-plan` Phase 0 / `/task-dev`)가 채운다. plan-init은 빈 섹션 헤더만 둘 수 있다.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
## 호출 시점 + 입력
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
- `/project-init` 직후 첫 plan(보통 MVP) 또는 새 기능 그룹 착수 시.
|
|
23
|
+
- 인자 = plan slug (예: `/plan-init compare-products`). 없으면 *"어느 기능 그룹? slug 알려줘 (예: mvp, compare-products)"*. 한국어면 영어 *의미 변환* → kebab-case(공백 불가, 3 단어 이내).
|
|
24
|
+
- **자투리는 plan 없이** — 단발 버그·오타·의존성 업데이트는 plan-init 없이 `/task-init`로 바로(무소속). 전역 TASK-NNN이 순서 보장.
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
- 새 기능 그룹(예: `compare-products` 다음 `auth-system`) 착수 시.
|
|
26
|
+
## 생성 (CLI — 채번+폴더+골격+AGENT-GUIDE)
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
`plan_init` 도구로 생성한다 (MCP 도구 `plan_init` 또는 동일 `npx @angar2/taskery plan-init <slug>`). 한 번으로 코드가 원자 수행: **NNN 채번**(3자리, 최대+1) · **폴더**(`plans/<NNN_slug>/` + `tasks/<NNN_slug>/{spec-diffs,screenshots,mockup}/`) · **골격 Write**(ROADMAP/PLAN/BACKLOG, 아래 형식 placeholder) · **AGENT-GUIDE `## 활성 plan 버전` 갱신**. 성공 반환 `{ plan, nnn, planDir, tasksDir }` — 이후 단계는 이 `plan`(=`<NNN_slug>`) 사용. PROJECT.md/AGENT-GUIDE 부재 시 에러 → *"`/project-init` 먼저 호출 필요"* 안내 후 중단.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
**legacy 게이트** — `plans/`에 NNN 채번 아닌 폴더(구버전 `v1.0`/`alpha` 등) 잔존 시 `{gated:true, legacyDirs}`로 멈춘다(폴더 생성 X). 사용자 호출 + 경고: *"`plans/`에 NNN 채번 아닌 폴더(<legacyDirs>)가 있어. 새 plan을 NNN로 채번하면 활성 plan이 갈려 원래 문제 재발. 수동 이전(문서 루트 이동 + `NNN_slug` 리네임 + AGENT-GUIDE 갱신) 후 진행할지, 그래도 진행할지 결정해줘."* → 강행 시 `force:true`(CLI는 `--force`)로 재호출.
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
> 폴더 생성·`tasks/<NNN_slug>/`·AGENT-GUIDE 갱신은 코드가 완료 — 아래는 골격 placeholder를 *내용으로 채우는* 단계(LLM 판단)다.
|
|
32
33
|
|
|
33
|
-
##
|
|
34
|
+
## ROADMAP.md 내용 채우기
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
2. 메인 워크트리 dev 체크아웃 검증 — 위배 시 사용자 호출 + 중단.
|
|
42
|
-
3. `$MAIN_WT/.project/PROJECT.md` 존재 확인 — 없으면 *"`/project-init` 먼저 호출 필요"* + 중단.
|
|
43
|
-
|
|
44
|
-
### Step 2 — plan slug 확정 + NNN 채번 + legacy 게이트
|
|
45
|
-
|
|
46
|
-
1. slug 확정 (인자 또는 사용자 질문 — 위 입력 처리).
|
|
47
|
-
2. **다음 plan 번호 + legacy 검출** — `bin/lib.js`의 `computeNextPlanNumber(MAIN_WT)` 호출:
|
|
48
|
-
```js
|
|
49
|
-
const lib = require('@angar2/taskery/bin/lib');
|
|
50
|
-
const { next, legacyDirs } = lib.computeNextPlanNumber(MAIN_WT);
|
|
51
|
-
// next = '001'/'002'/... (3자리 zero-pad), legacyDirs = NNN_ 패턴 아닌 기존 폴더 목록
|
|
52
|
-
```
|
|
53
|
-
bash 등가(참고):
|
|
54
|
-
```sh
|
|
55
|
-
ls -1 "$MAIN_WT/.project/plans" 2>/dev/null | grep -E '^[0-9]{3}_' \
|
|
56
|
-
| sed -E 's/^([0-9]{3})_.*/\1/' | sort -n | tail -1
|
|
57
|
-
```
|
|
58
|
-
3. **legacy 게이트** — `legacyDirs`가 비어 있지 않으면(예: 구버전 `v1.0`, `alpha` 폴더 잔존):
|
|
59
|
-
- 즉시 사용자 호출 + 경고: *"`plans/`에 NNN 채번이 아닌 폴더(<legacyDirs>)가 있어. 새 plan을 NNN로 채번하면 활성 plan이 갈려 원래 문제가 재발해. 먼저 수동 이전(문서 루트 이동 + 폴더 `NNN_slug` 리네임 + AGENT-GUIDE 활성 plan 갱신)을 끝낸 뒤 진행할지, 그래도 진행할지 결정해줘."*
|
|
60
|
-
- 사용자 명시 confirm 전 폴더 생성 금지.
|
|
61
|
-
4. plan 폴더명 = `${next}_${slug}` (예: `001_mvp`).
|
|
62
|
-
|
|
63
|
-
### Step 3 — plan 폴더 생성 + ROADMAP.md 작성
|
|
64
|
-
|
|
65
|
-
1. `$MAIN_WT/.project/plans/<NNN_slug>/` 디렉토리 생성.
|
|
66
|
-
2. **ROADMAP.md** 작성 — *현재 plan(기능 그룹) 한정* task 단계 로드맵. *ROADMAP 작성 4룰*:
|
|
67
|
-
1. ROADMAP은 *현재 plan 한정* — 다른 기능 그룹 후보는 글로벌 `.project/BACKLOG.md`. 프로젝트 전체 거시 빌드 순서는 `PROJECT.md ## 초기 빌드 로드맵`(별개).
|
|
68
|
-
2. 진행 순서에 task 번호(TASK-NNN) 강제 금지 — *Stage(영역) 단위*로만 명시 (예측 불가 task 합류 시 번호 어긋남 방지).
|
|
69
|
-
3. Stage 안 *작업 단위 명시* 필요 (한 task 분량 권장 — 다음 task 진행 시 메인 세션이 ROADMAP 보고 작업 범위 판단 가능).
|
|
70
|
-
4. 작업 단위에 task 번호 컬럼 추가 X / *상태 컬럼만* (⏳ 대기 / 🔧 진행 중 / ✅ 완료 / ❌ 폐기) — Living document.
|
|
36
|
+
*현재 plan 한정* task 단계를 placeholder에 채운다. *ROADMAP 작성 4룰*:
|
|
37
|
+
1. *현재 plan 한정* — 다른 기능 그룹 후보는 글로벌 `.project/BACKLOG.md`. 프로젝트 전체 거시 빌드 순서는 `PROJECT.md ## 초기 빌드 로드맵`(별개).
|
|
38
|
+
2. 진행 순서에 task 번호(TASK-NNN) 강제 금지 — *Stage(영역) 단위*로만 (task 합류 시 번호 어긋남 방지).
|
|
39
|
+
3. Stage 안 *작업 단위 명시*(한 task 분량 권장 — 다음 task 진행 시 메인이 ROADMAP 보고 범위 판단).
|
|
40
|
+
4. 작업 단위에 task 번호 컬럼 X / *상태 컬럼만*(⏳ 대기 / 🔧 진행 중 / ✅ 완료 / ❌ 폐기) — Living document.
|
|
71
41
|
|
|
72
42
|
```markdown
|
|
73
43
|
# ROADMAP — <NNN_slug>
|
|
@@ -81,13 +51,13 @@ plan(기능 그룹)마다 호출. **plan = 작업을 묶는 기능 그룹 단위
|
|
|
81
51
|
| <한 task 분량 작업> | ⏳ 대기 |
|
|
82
52
|
```
|
|
83
53
|
|
|
84
|
-
|
|
54
|
+
## PLAN.md 내용 채우기 (얇은 인덱스 — 하드룰)
|
|
85
55
|
|
|
86
|
-
PLAN.md는 *얇은
|
|
56
|
+
PLAN.md는 *얇은 인덱스*다 — 이 기능 그룹이 건드린 루트 문서 요약 + task 체크리스트만.
|
|
87
57
|
|
|
88
58
|
**하드룰 (중복 차단):**
|
|
89
|
-
- **각 항목 = 루트 문서 섹션 *링크 1줄*. 본문 복제 금지.** 기능 상세는 `.project/` 루트 문서에만
|
|
90
|
-
- `## 활성 task 버전` 류 *자기선언 라인 작성 금지* — 활성 plan
|
|
59
|
+
- **각 항목 = 루트 문서 섹션 *링크 1줄*. 본문 복제 금지.** 기능 상세는 `.project/` 루트 문서에만(단일 홈).
|
|
60
|
+
- `## 활성 task 버전` 류 *자기선언 라인 작성 금지* — 활성 plan 단일 진실은 `AGENT-GUIDE.md`뿐.
|
|
91
61
|
|
|
92
62
|
```markdown
|
|
93
63
|
# PLAN — <NNN_slug>
|
|
@@ -103,79 +73,34 @@ PLAN.md는 *얇은 인덱스*다. 이 기능 그룹이 건드린 루트 문서
|
|
|
103
73
|
- [ ] <작업 단위> (ROADMAP Stage N)
|
|
104
74
|
```
|
|
105
75
|
|
|
106
|
-
|
|
76
|
+
## 제품 관통 문서(그룹 B) 의도 레벨 delta
|
|
107
77
|
|
|
108
|
-
`.project/` 루트
|
|
78
|
+
`.project/` 루트 문서에 이 기능 그룹의 *의도*를 명시한다. **의도 레벨만 — 상세 선작성 금지.**
|
|
109
79
|
|
|
110
|
-
- **FEATURES.md / UX-UI.md (필수)**: 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append. "
|
|
80
|
+
- **FEATURES.md / UX-UI.md (필수)**: 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append. "무엇 / 어떤 화면" — 구현 전에도 선언 가능(기능 그룹 기획의 본질). 섹션은 *기능/도메인 자기기술* — 어느 plan이 추가했는지 태그 X(기능 분류 = 제품 관통 문서 섹션 구조가 단일 진실).
|
|
111
81
|
```markdown
|
|
112
82
|
## <기능 그룹 이름>
|
|
113
83
|
<의도 1~3줄: 무엇을 / 누구를 위해 / 핵심 화면·동작. 상세 스펙은 task 진행에서.>
|
|
114
84
|
```
|
|
115
|
-
- **DATA-MODEL.md / API-SPEC.md (선택 — 빈 헤더까지만)**:
|
|
116
|
-
|
|
117
|
-
타입 조건부: project-init이 만들지 않은 문서(예: frontend의 DATA-MODEL)는 delta도 없음.
|
|
85
|
+
- **DATA-MODEL.md / API-SPEC.md (선택 — 빈 헤더까지만)**: 데이터/엔드포인트 도입 예정이면 *빈 섹션 헤더*만. **스키마·엔드포인트 본문 선작성 금지** — 구현 동반으로 `/task-plan` Phase 0 / `/task-dev`가 채운다(anti-waterfall: TASK_DOC_RULE §1.4 / DEV_RULE §2).
|
|
86
|
+
- **그룹 A (SERVICE-POLICY/TECH-STACK/ARCHITECTURE)**: 이 그룹이 새 정책/스택/구조 도입 시만 수정. 도입 없으면 건너뜀.
|
|
118
87
|
|
|
119
|
-
|
|
88
|
+
타입 조건부: project-init이 안 만든 문서(예: frontend의 DATA-MODEL)는 delta도 없음.
|
|
120
89
|
|
|
121
|
-
|
|
90
|
+
## 결과 보고
|
|
122
91
|
|
|
123
|
-
|
|
92
|
+
작성 산출물 목록 + 다음 단계:
|
|
93
|
+
- *"`<NNN_slug>/` plan 생성 완료 — PLAN/ROADMAP + FEATURES/UX-UI 의도 stub. AGENT-GUIDE 활성 plan `<NNN_slug>` 갱신. 다음은 `/task-init`으로 첫 task (스키마/엔드포인트 상세는 task 진행에서 구현 동반)."*
|
|
124
94
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
```markdown
|
|
130
|
-
# BACKLOG — <NNN_slug>
|
|
131
|
-
|
|
132
|
-
> 본 파일은 *<NNN_slug> plan 진행 중 누적되는 후속 task 후보* 추적용.
|
|
133
|
-
> 글로벌 `.project/BACKLOG.md` (다음 기능 그룹 후보 카탈로그) 와 별개.
|
|
134
|
-
|
|
135
|
-
| 위치 | 영역 | 역할 |
|
|
136
|
-
|------|------|------|
|
|
137
|
-
| `.project/BACKLOG.md` (글로벌) | 다음 기능 그룹 후보 카탈로그 (다음 plan에서 검토) | Living document |
|
|
138
|
-
| `.project/tasks/<NNN_slug>/BACKLOG.md` (본 파일) | 현재 plan 진행 중 누적된 후속 task 후보 | 한 plan 내 task close 직후 후보 누적 |
|
|
139
|
-
|
|
140
|
-
## 후속 task 후보
|
|
141
|
-
|
|
142
|
-
(사용자 발화 또는 task-close 직후 메인 감지로 한 행씩 추가. 빈 상태 default.)
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
빈 골격만 작성. 본문은 task 진행하면서 사용자 발화 또는 메인 감지로 누적.
|
|
146
|
-
|
|
147
|
-
### Step 8 — `AGENT-GUIDE.md` 활성 plan 갱신
|
|
148
|
-
|
|
149
|
-
`$MAIN_WT/.project/AGENT-GUIDE.md`의 `## 활성 plan 버전` 섹션 다음 줄을 `<NNN_slug>`로 갱신 (헤딩 텍스트 자체는 변경 X — lib.js/스킬이 의존). **반드시** — 누락 시 메인 세션이 옛 plan 보고 헤맴.
|
|
150
|
-
|
|
151
|
-
### Step 9 — 결과 보고
|
|
152
|
-
|
|
153
|
-
작성된 산출물 목록 + 다음 단계 안내:
|
|
154
|
-
- *"`<NNN_slug>/` plan 생성 완료 — PLAN.md / ROADMAP.md + 제품 관통 문서 FEATURES/UX-UI 의도 stub 추가. AGENT-GUIDE.md 활성 plan `<NNN_slug>`로 갱신. 다음은 `/task-init`으로 첫 task 생성 (스키마/엔드포인트 상세는 task 진행에서 구현 동반)."*
|
|
155
|
-
|
|
156
|
-
**결과 commit 흐름** (GIT_RULE 정합):
|
|
157
|
-
- dev 직접 commit *금지* (git-guard.sh 차단). 두 가지 default 흐름:
|
|
158
|
-
1. **첫 task에 묶기 (권장)**: `/project-init` 직후 본 스킬 호출이면 init 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께 commit. 새 기능 그룹 착수면 새 task 브랜치 또는 임시 docs 브랜치에서.
|
|
159
|
-
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{NNN_slug}` 후 commit → dev에 `--no-ff` 머지. 다음 task 생성 *전*에 plan 산출물을 깔끔히 기록하고 싶을 때.
|
|
160
|
-
|
|
161
|
-
## 도구 가이드
|
|
162
|
-
|
|
163
|
-
- **Read**: PROJECT.md / `.project/` 루트 제품 관통 문서(FEATURES/UX-UI 등 delta 대상)
|
|
164
|
-
- **Bash**: `MAIN_WT` 검출, `mkdir -p plans/<NNN_slug> tasks/<NNN_slug>/{spec-diffs,screenshots,mockup}`
|
|
165
|
-
- **bin/lib.js**: `computeNextPlanNumber`(채번 + legacy 검출)
|
|
166
|
-
- **Write/Edit**: PLAN.md / ROADMAP.md 작성, 제품 관통 문서 FEATURES/UX-UI delta append, AGENT-GUIDE 활성 plan 갱신
|
|
167
|
-
- **AskUserQuestion**: slug 확정 / legacy 게이트 confirm
|
|
95
|
+
**commit 흐름** (GIT_RULE): dev 직접 commit *금지*(git-guard 차단). default 둘:
|
|
96
|
+
1. **첫 task에 묶기 (권장)**: `/project-init` 직후면 init 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께. 새 기능 그룹이면 새 task 브랜치 또는 임시 docs 브랜치.
|
|
97
|
+
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{NNN_slug}` → commit → dev `--no-ff` 머지.
|
|
168
98
|
|
|
169
99
|
## 주의사항
|
|
170
100
|
|
|
171
|
-
- **plan-init은
|
|
172
|
-
- **delta는 의도 레벨까지만** —
|
|
173
|
-
- **제품 관통 문서에 plan 태그 금지** — 기능 섹션은 자기기술.
|
|
174
|
-
- **PLAN.md 본문 복제 금지** — 각 항목 = 루트 문서 섹션 링크 1줄. `## 활성 task 버전` 자기선언
|
|
175
|
-
- **legacy 폴더 감지 시 진행 보류** —
|
|
176
|
-
-
|
|
177
|
-
- 답 받기 전 자동 추정 진행 X. 단 PROJECT.md / 기존 루트 문서 정보로 *제안*은 OK (사용자 confirm 후).
|
|
178
|
-
|
|
179
|
-
## 상태 전이
|
|
180
|
-
|
|
181
|
-
해당 없음 (plan 레벨 — task 상태 X).
|
|
101
|
+
- **plan-init은 제품 관통 문서 전체를 만드는 스킬이 아니다** — 7종은 project-init 영역. 본 스킬은 plan 로컬(PLAN/ROADMAP) + 제품 관통 문서 delta(의도)만.
|
|
102
|
+
- **delta는 의도 레벨까지만** — DATA-MODEL/API-SPEC 스키마·엔드포인트 *본문 선작성 금지*. 상세는 구현 동반(task).
|
|
103
|
+
- **제품 관통 문서에 plan 태그 금지** — 기능 섹션은 자기기술.
|
|
104
|
+
- **PLAN.md 본문 복제 금지** — 각 항목 = 루트 문서 섹션 링크 1줄. `## 활성 task 버전` 자기선언 X.
|
|
105
|
+
- **legacy 폴더 감지 시 진행 보류** — 사용자 confirm 전 새 plan 생성 금지.
|
|
106
|
+
- 답 받기 전 자동 추정 진행 X. 단 PROJECT.md/기존 루트 문서로 *제안*은 OK(confirm 후).
|