@jjlabsio/claude-crew 0.1.27 → 0.1.29
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/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +33 -2
- package/data/provider-catalog.json +3 -3
- package/package.json +1 -1
- package/skills/crew-setup/SKILL.md +91 -20
- package/skills/task/SKILL.md +280 -0
- package/skills/tasks/SKILL.md +136 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"name": "claude-crew",
|
|
12
12
|
"source": "./",
|
|
13
13
|
"description": "오케스트레이터 + PM, 플래너, 개발, QA, 마케팅 에이전트 팀으로 단일 제품의 개발과 마케팅을 통합 관리",
|
|
14
|
-
"version": "0.1.
|
|
14
|
+
"version": "0.1.29",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Jaejin Song",
|
|
17
17
|
"email": "wowlxx28@gmail.com"
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"category": "workflow"
|
|
29
29
|
}
|
|
30
30
|
],
|
|
31
|
-
"version": "0.1.
|
|
31
|
+
"version": "0.1.29"
|
|
32
32
|
}
|
package/README.md
CHANGED
|
@@ -38,16 +38,40 @@ Claude Code에서:
|
|
|
38
38
|
/crew-setup
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
- `.gitignore` / `.gitattributes` 마이그레이션 (`.crew/` git tracked 전환)
|
|
42
|
+
- HUD statusline 설치
|
|
43
|
+
- 에이전트별 provider/model 설정
|
|
42
44
|
|
|
43
45
|
## 사용
|
|
44
46
|
|
|
47
|
+
### 개발 파이프라인
|
|
48
|
+
|
|
45
49
|
```
|
|
46
50
|
/crew
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
오케스트레이터가 시작되고 현황을 브리핑합니다.
|
|
50
54
|
|
|
55
|
+
### 태스크 관리
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
/task add "설명" # 태스크 추가 (대화 컨텍스트 자동 캡처)
|
|
59
|
+
/task add "설명" --next # 긴급 — queue 맨 위 삽입
|
|
60
|
+
/task work 3 # 태스크 #3 작업 시작 (관련 파일 Read + 브리핑)
|
|
61
|
+
/task start # queue 최상단 태스크 작업 시작
|
|
62
|
+
/task done # active 태스크 완료 처리
|
|
63
|
+
/task bump 4 # 우선순위 한 칸 올리기
|
|
64
|
+
/task top 7 # queue 맨 위로 이동
|
|
65
|
+
/task note 3 "메모" # 태스크에 메모 추가
|
|
66
|
+
/task drop 3 # 태스크 삭제
|
|
67
|
+
|
|
68
|
+
/tasks # 프로젝트 태스크 보드
|
|
69
|
+
/tasks stale # 30일+ 방치 태스크 리뷰
|
|
70
|
+
/tasks clean # 완료 후 7일 경과 태스크 정리
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
태스크는 `.crew/tasks/` 디렉토리에 개별 파일로 관리된다. 각 파일이 상태, 우선순위, 컨텍스트를 포함하여 세션 간 작업 재개 시 컨텍스트 재입력이 불필요하다.
|
|
74
|
+
|
|
51
75
|
## 에이전트 팀
|
|
52
76
|
|
|
53
77
|
| 에이전트 | 역할 | 소속 스킬 |
|
|
@@ -64,7 +88,14 @@ HUD statusline이 설정되어 세션 중 레포, 브랜치, 모델, 컨텍스
|
|
|
64
88
|
|
|
65
89
|
## 상태 파일
|
|
66
90
|
|
|
67
|
-
프로젝트 로컬 `.crew/` 디렉토리에 마크다운 파일로 상태를
|
|
91
|
+
프로젝트 로컬 `.crew/` 디렉토리에 마크다운 파일로 상태를 관리합니다 (git tracked). 플러그인 업데이트 시에도 학습 내용과 상태는 보존됩니다.
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
.crew/
|
|
95
|
+
config.json # provider 설정 (gitignored)
|
|
96
|
+
tasks/ # 태스크 파일 (1개 = 1파일)
|
|
97
|
+
plans/ # 파이프라인 산출물 (spec, contract, dev-log, review)
|
|
98
|
+
```
|
|
68
99
|
|
|
69
100
|
## 설계 철학
|
|
70
101
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"claude": {
|
|
3
3
|
"models": [
|
|
4
|
-
{ "id": "opus", "label": "Opus
|
|
5
|
-
{ "id": "sonnet", "label": "Sonnet
|
|
6
|
-
{ "id": "haiku", "label": "Haiku
|
|
4
|
+
{ "id": "opus", "label": "Opus — 최고 품질, 복잡한 구현", "default_for": ["dev", "code-reviewer"] },
|
|
5
|
+
{ "id": "sonnet", "label": "Sonnet — 빠르고 저렴, Opus급 성능", "default_for": ["qa"] },
|
|
6
|
+
{ "id": "haiku", "label": "Haiku — 최저 비용, 단순 태스크", "default_for": [] }
|
|
7
7
|
]
|
|
8
8
|
},
|
|
9
9
|
"codex": {
|
package/package.json
CHANGED
|
@@ -1,17 +1,88 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: crew-setup
|
|
3
|
-
description: claude-crew 플러그인 초기 설정 — HUD statusline 설치 + provider 설정
|
|
3
|
+
description: claude-crew 플러그인 초기 설정 — gitignore 마이그레이션 + HUD statusline 설치 + provider 설정
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## 역할
|
|
7
7
|
|
|
8
8
|
claude-crew 플러그인의 초기 설정을 수행한다:
|
|
9
|
-
1.
|
|
10
|
-
2.
|
|
9
|
+
1. .gitignore / .gitattributes 마이그레이션
|
|
10
|
+
2. HUD statusline 설치
|
|
11
|
+
3. 에이전트별 provider/model 설정
|
|
11
12
|
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
## Step 1 —
|
|
15
|
+
## Step 1 — .gitignore / .gitattributes 마이그레이션
|
|
16
|
+
|
|
17
|
+
`.crew/` 디렉토리를 git tracked로 전환한다. plans, tasks 등의 문서가 git 히스토리에 보존되도록 한다.
|
|
18
|
+
|
|
19
|
+
### 1a. 현재 상태 확인
|
|
20
|
+
|
|
21
|
+
프로젝트 루트의 `.gitignore`를 읽는다.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git rev-parse --show-toplevel
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 1b. .gitignore 수정
|
|
28
|
+
|
|
29
|
+
**`.crew/` 또는 `.crew` 항목이 있는 경우 (마이그레이션 필요):**
|
|
30
|
+
|
|
31
|
+
1. `.crew/` (또는 `.crew`) 항목을 제거한다.
|
|
32
|
+
2. 다음 항목들을 추가한다:
|
|
33
|
+
```
|
|
34
|
+
.crew/config.json
|
|
35
|
+
.crew/plans/**/.*
|
|
36
|
+
```
|
|
37
|
+
3. 기존 `.gitignore`의 다른 항목은 모두 보존한다.
|
|
38
|
+
|
|
39
|
+
**이미 세분화된 항목이 있는 경우 (`.crew/config.json`, `.crew/plans/**/.*`):**
|
|
40
|
+
|
|
41
|
+
스킵한다. 이미 마이그레이션 완료 상태.
|
|
42
|
+
|
|
43
|
+
**`.gitignore` 파일이 없는 경우:**
|
|
44
|
+
|
|
45
|
+
`.gitignore`를 생성하고 위 두 항목을 추가한다.
|
|
46
|
+
|
|
47
|
+
### 1c. .gitattributes 수정
|
|
48
|
+
|
|
49
|
+
프로젝트 루트의 `.gitattributes`를 읽는다 (없으면 새로 생성).
|
|
50
|
+
|
|
51
|
+
`.crew/** merge=ours` 항목이 없으면 추가한다. 기존 항목은 보존.
|
|
52
|
+
|
|
53
|
+
### 1d. 변경사항 커밋
|
|
54
|
+
|
|
55
|
+
`.gitignore` 또는 `.gitattributes`에 변경이 있었으면:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git add .gitignore .gitattributes
|
|
59
|
+
git commit -m "chore: .crew/ git tracked 전환 — gitignore/gitattributes 마이그레이션"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
push는 하지 않는다.
|
|
63
|
+
|
|
64
|
+
### 1e. 사용자 알림
|
|
65
|
+
|
|
66
|
+
**마이그레이션 수행 시:**
|
|
67
|
+
```
|
|
68
|
+
✓ .gitignore 업데이트:
|
|
69
|
+
- .crew/ 전체 제외 → .crew/config.json, .crew/plans/**/.* 만 제외로 변경
|
|
70
|
+
- .crew/ 디렉토리가 이제 git tracked됩니다 (plans, tasks 이력 보존)
|
|
71
|
+
|
|
72
|
+
✓ .gitattributes 추가:
|
|
73
|
+
- .crew/** merge=ours (워크트리 충돌 방지)
|
|
74
|
+
|
|
75
|
+
변경사항이 현재 브랜치에 커밋되었습니다 (push하지 않음).
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**이미 마이그레이션 완료 시:**
|
|
79
|
+
```
|
|
80
|
+
✓ .gitignore/.gitattributes 이미 최신 상태입니다.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Step 2 — HUD statusline 설치
|
|
15
86
|
|
|
16
87
|
1. `~/.claude/settings.json`을 읽는다.
|
|
17
88
|
2. `statusLine` 필드를 crew HUD 스크립트로 설정한다:
|
|
@@ -31,11 +102,11 @@ claude-crew 플러그인의 초기 설정을 수행한다:
|
|
|
31
102
|
|
|
32
103
|
---
|
|
33
104
|
|
|
34
|
-
## Step
|
|
105
|
+
## Step 3 — Provider 설정
|
|
35
106
|
|
|
36
107
|
에이전트별로 어떤 provider(claude/codex)와 model을 사용할지 설정한다.
|
|
37
108
|
|
|
38
|
-
###
|
|
109
|
+
### 3a. 설치 스코프 판별
|
|
39
110
|
|
|
40
111
|
`~/.claude/plugins/installed_plugins.json`을 읽어 현재 프로젝트의 설치 스코프를 판별한다.
|
|
41
112
|
|
|
@@ -66,22 +137,22 @@ git rev-parse --show-toplevel
|
|
|
66
137
|
설치 스코프: 프로젝트 레벨 → 설정이 .crew/config.json에 저장됩니다 (이 프로젝트만)
|
|
67
138
|
```
|
|
68
139
|
|
|
69
|
-
###
|
|
140
|
+
### 3b. 카탈로그 로드
|
|
70
141
|
|
|
71
142
|
`data/provider-catalog.json`을 읽어 사용 가능한 provider와 model 목록을 로드한다.
|
|
72
143
|
|
|
73
|
-
###
|
|
144
|
+
### 3c. Codex CLI 가용성 확인
|
|
74
145
|
|
|
75
146
|
```bash
|
|
76
147
|
which codex
|
|
77
148
|
```
|
|
78
149
|
|
|
79
|
-
- codex가 없으면: "Codex CLI가 설치되어 있지 않습니다. 모든 에이전트가 Claude를 사용합니다." 안내 후 Step
|
|
150
|
+
- codex가 없으면: "Codex CLI가 설치되어 있지 않습니다. 모든 에이전트가 Claude를 사용합니다." 안내 후 Step 3를 스킵한다.
|
|
80
151
|
- codex가 있으면: 계속 진행한다.
|
|
81
152
|
|
|
82
|
-
###
|
|
153
|
+
### 3d. 기존 설정 표시
|
|
83
154
|
|
|
84
|
-
Step
|
|
155
|
+
Step 3a에서 판별된 config 경로의 파일이 있으면 현재 설정을 표시한다. 없으면 기본값을 표시한다.
|
|
85
156
|
|
|
86
157
|
```
|
|
87
158
|
현재 에이전트 설정:
|
|
@@ -90,7 +161,7 @@ Step 2a에서 판별된 config 경로의 파일이 있으면 현재 설정을
|
|
|
90
161
|
- qa: claude / sonnet (기본값)
|
|
91
162
|
```
|
|
92
163
|
|
|
93
|
-
###
|
|
164
|
+
### 3e. 설정할 에이전트 선택
|
|
94
165
|
|
|
95
166
|
사용자에게 설정을 변경할 에이전트를 선택하게 한다.
|
|
96
167
|
|
|
@@ -99,10 +170,10 @@ Step 2a에서 판별된 config 경로의 파일이 있으면 현재 설정을
|
|
|
99
170
|
dev, code-reviewer, qa
|
|
100
171
|
```
|
|
101
172
|
|
|
102
|
-
- 사용자가 엔터만 누르거나 "없음"/"스킵"을 입력하면 Step
|
|
173
|
+
- 사용자가 엔터만 누르거나 "없음"/"스킵"을 입력하면 Step 3를 종료한다.
|
|
103
174
|
- 예시 입력: `dev`, `dev, code-reviewer`
|
|
104
175
|
|
|
105
|
-
###
|
|
176
|
+
### 3f. 선택된 에이전트별 설정
|
|
106
177
|
|
|
107
178
|
선택된 각 에이전트에 대해 순차적으로:
|
|
108
179
|
|
|
@@ -121,9 +192,9 @@ Provider:
|
|
|
121
192
|
claude 선택 시:
|
|
122
193
|
```
|
|
123
194
|
Model:
|
|
124
|
-
[1] Opus
|
|
125
|
-
[2] Sonnet
|
|
126
|
-
[3] Haiku
|
|
195
|
+
[1] Opus — 최고 품질, 복잡한 구현 (추천)
|
|
196
|
+
[2] Sonnet — 빠르고 저렴, Opus급 성능
|
|
197
|
+
[3] Haiku — 최저 비용, 단순 태스크
|
|
127
198
|
```
|
|
128
199
|
|
|
129
200
|
codex 선택 시:
|
|
@@ -137,9 +208,9 @@ Model:
|
|
|
137
208
|
[6] GPT-5.4 Mini — 최저 비용
|
|
138
209
|
```
|
|
139
210
|
|
|
140
|
-
###
|
|
211
|
+
### 3g. 설정 저장
|
|
141
212
|
|
|
142
|
-
선택 결과를 Step
|
|
213
|
+
선택 결과를 Step 3a에서 판별된 config 경로에 저장한다.
|
|
143
214
|
|
|
144
215
|
- 프로젝트 레벨: `{projectRoot}/.crew/config.json`
|
|
145
216
|
- 유저 레벨: `~/.claude/crew/config.json`
|
|
@@ -163,7 +234,7 @@ Model:
|
|
|
163
234
|
- claude provider일 때: `reasoning` 필드 생략
|
|
164
235
|
- codex provider일 때: 카탈로그의 `reasoning` 값 포함 (`null`이면 생략)
|
|
165
236
|
|
|
166
|
-
###
|
|
237
|
+
### 3h. 확인 메시지
|
|
167
238
|
|
|
168
239
|
```
|
|
169
240
|
✓ Provider 설정 완료:
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task
|
|
3
|
+
description: 태스크 관리 — 추가, 작업 시작, 완료, 우선순위 변경, 메모
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 역할
|
|
7
|
+
|
|
8
|
+
프로젝트의 `.crew/tasks/` 디렉토리에서 개별 태스크를 관리한다.
|
|
9
|
+
태스크 1개 = 파일 1개. 각 파일이 상태, 순서, 컨텍스트를 포함한다.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 서브커맨드 라우팅
|
|
14
|
+
|
|
15
|
+
인자를 파싱하여 서브커맨드를 결정한다:
|
|
16
|
+
|
|
17
|
+
| 패턴 | 서브커맨드 |
|
|
18
|
+
|------|-----------|
|
|
19
|
+
| `add "설명"` | add |
|
|
20
|
+
| `work {id}` | work |
|
|
21
|
+
| `start` | start |
|
|
22
|
+
| `done` | done |
|
|
23
|
+
| `bump {id}` | bump |
|
|
24
|
+
| `top {id}` | top |
|
|
25
|
+
| `note {id} "내용"` | note |
|
|
26
|
+
| `drop {id}` | drop |
|
|
27
|
+
|
|
28
|
+
인자 없이 `/task`만 실행하면 사용법을 안내한다.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 공통: 태스크 디렉토리 및 ID 관리
|
|
33
|
+
|
|
34
|
+
### 디렉토리
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
{projectRoot}/.crew/tasks/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
디렉토리가 없으면 생성한다.
|
|
41
|
+
|
|
42
|
+
### ID 채번
|
|
43
|
+
|
|
44
|
+
새 태스크 생성 시 `.crew/tasks/` 내 기존 파일명에서 가장 큰 숫자를 찾아 +1 한다.
|
|
45
|
+
파일이 없으면 1부터 시작. ID는 3자리 zero-pad (001, 002, ...).
|
|
46
|
+
|
|
47
|
+
### 태스크 파일 포맷
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
---
|
|
51
|
+
id: 3
|
|
52
|
+
title: API rate limit 구현
|
|
53
|
+
status: active
|
|
54
|
+
order: 1
|
|
55
|
+
created: 2026-04-16
|
|
56
|
+
due: 2026-04-20
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Context
|
|
60
|
+
Redis 기반 sliding window rate limiter.
|
|
61
|
+
IP당 100req/min, 인증 유저 1000req/min.
|
|
62
|
+
|
|
63
|
+
## Files
|
|
64
|
+
- src/middleware/auth.ts
|
|
65
|
+
- src/lib/redis.ts
|
|
66
|
+
|
|
67
|
+
## Criteria
|
|
68
|
+
- [ ] sliding window 알고리즘 구현
|
|
69
|
+
- [ ] IP별/유저별 차등 limit
|
|
70
|
+
|
|
71
|
+
## Log
|
|
72
|
+
- 2026-04-17: 태스크 생성
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## add — 태스크 추가
|
|
78
|
+
|
|
79
|
+
### 인자
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
/task add "설명"
|
|
83
|
+
/task add "설명" --next
|
|
84
|
+
/task add "설명" --due 4/20
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- `--next`: queue 맨 위에 삽입 (order를 가장 낮은 값으로 설정)
|
|
88
|
+
- `--due`: 기한 설정 (날짜 파싱: `4/20` → 현재 연도 기준 `2026-04-20`)
|
|
89
|
+
|
|
90
|
+
### 동작
|
|
91
|
+
|
|
92
|
+
1. ID를 채번한다.
|
|
93
|
+
2. 현재 대화에서 컨텍스트를 자동 추출한다:
|
|
94
|
+
- **Context**: 대화에서 이 태스크와 관련된 핵심 내용을 2-5문장으로 요약
|
|
95
|
+
- **Files**: 대화에서 언급된 파일 경로 목록
|
|
96
|
+
- **Criteria**: 대화에서 언급된 완료 조건이 있으면 체크리스트로 작성, 없으면 섹션 비움
|
|
97
|
+
3. order를 설정한다:
|
|
98
|
+
- `--next` 없음: 기존 queue 태스크 중 가장 큰 order + 1
|
|
99
|
+
- `--next` 있음: 기존 queue 태스크 중 가장 작은 order - 1
|
|
100
|
+
4. 태스크 파일을 `.crew/tasks/{id}.md`에 생성한다 (status: queue).
|
|
101
|
+
5. 결과를 출력한다:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
✓ Task #{id} 추가: {title}
|
|
105
|
+
순서: queue {위치} / 기한: {due 또는 없음}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## work — 태스크 작업 시작 + 컨텍스트 로드
|
|
111
|
+
|
|
112
|
+
### 인자
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
/task work {id}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 동작
|
|
119
|
+
|
|
120
|
+
1. `.crew/tasks/{id}.md`를 읽는다. 파일이 없으면 에러.
|
|
121
|
+
2. status를 `active`로 변경한다.
|
|
122
|
+
- 이미 다른 active 태스크가 있으면: "이미 #{기존id}이 active입니다. 먼저 done 처리하거나, 이 태스크를 강제로 active로 전환할까요?" 확인.
|
|
123
|
+
3. **Files 섹션의 파일들을 Read**한다:
|
|
124
|
+
- 각 파일의 존재 여부 확인
|
|
125
|
+
- 존재하는 파일은 Read하여 컨텍스트에 로드
|
|
126
|
+
4. **브리핑을 출력**한다:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
━━━ Task #{id}: {title} ━━━━━━━━━━━━━━━━
|
|
130
|
+
Due: {due} ({D-day})
|
|
131
|
+
|
|
132
|
+
Context:
|
|
133
|
+
{Context 섹션 내용}
|
|
134
|
+
|
|
135
|
+
관련 코드:
|
|
136
|
+
✓ src/middleware/auth.ts — {파일 내용 기반 한 줄 요약}
|
|
137
|
+
✓ src/lib/redis.ts — {파일 내용 기반 한 줄 요약}
|
|
138
|
+
✗ src/types/rate-limit.ts — 파일 없음
|
|
139
|
+
|
|
140
|
+
Criteria:
|
|
141
|
+
{Criteria 섹션 내용}
|
|
142
|
+
|
|
143
|
+
Log:
|
|
144
|
+
{최근 3개 항목}
|
|
145
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
5. 파일 변경사항을 저장한다 (status 변경).
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## start — queue 최상단 태스크 작업 시작
|
|
153
|
+
|
|
154
|
+
### 인자
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
/task start
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 동작
|
|
161
|
+
|
|
162
|
+
1. `.crew/tasks/` 내 `status: queue`인 파일들을 읽는다.
|
|
163
|
+
2. order가 가장 작은(= 우선순위 가장 높은) 태스크를 선택한다.
|
|
164
|
+
3. 해당 태스크로 `work` 서브커맨드를 실행한다 (동일한 동작).
|
|
165
|
+
4. queue가 비어있으면: "queue에 태스크가 없습니다."
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## done — active 태스크 완료 처리
|
|
170
|
+
|
|
171
|
+
### 인자
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
/task done
|
|
175
|
+
/task done {id}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
id 생략 시 현재 active 태스크를 대상으로 한다.
|
|
179
|
+
|
|
180
|
+
### 동작
|
|
181
|
+
|
|
182
|
+
1. 대상 태스크 파일을 읽는다.
|
|
183
|
+
- id 생략: `status: active`인 태스크를 찾는다. 없으면 에러.
|
|
184
|
+
- id 지정: 해당 파일을 읽는다.
|
|
185
|
+
2. status를 `done`으로 변경한다.
|
|
186
|
+
3. frontmatter에 `completed: {오늘 날짜}`를 추가한다.
|
|
187
|
+
4. Log에 완료 기록을 추가한다: `- {날짜}: 태스크 완료`
|
|
188
|
+
5. 파일을 저장한다.
|
|
189
|
+
6. 결과 출력:
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
✓ Task #{id} 완료: {title}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## bump — 우선순위 한 칸 올리기
|
|
198
|
+
|
|
199
|
+
### 인자
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
/task bump {id}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 동작
|
|
206
|
+
|
|
207
|
+
1. 대상 태스크 파일을 읽는다. status가 `queue`가 아니면 에러.
|
|
208
|
+
2. queue 태스크들을 order 기준으로 정렬한다.
|
|
209
|
+
3. 대상 태스크 바로 위의 태스크와 order 값을 스왑한다.
|
|
210
|
+
4. 이미 최상단이면: "이미 queue 최상단입니다."
|
|
211
|
+
5. 두 파일을 저장한다.
|
|
212
|
+
6. 결과 출력:
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
✓ Task #{id} 우선순위 올림: {이전 순위} → {새 순위}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## top — queue 맨 위로 이동
|
|
221
|
+
|
|
222
|
+
### 인자
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
/task top {id}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 동작
|
|
229
|
+
|
|
230
|
+
1. 대상 태스크 파일을 읽는다. status가 `queue`가 아니면 에러.
|
|
231
|
+
2. queue 태스크 중 가장 작은 order 값 - 1로 대상의 order를 설정한다.
|
|
232
|
+
3. 파일을 저장한다.
|
|
233
|
+
4. 결과 출력:
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
✓ Task #{id} → queue 최상단으로 이동
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## note — 태스크에 메모 추가
|
|
242
|
+
|
|
243
|
+
### 인자
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
/task note {id} "메모 내용"
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 동작
|
|
250
|
+
|
|
251
|
+
1. 대상 태스크 파일을 읽는다.
|
|
252
|
+
2. Log 섹션 맨 아래에 추가: `- {날짜}: {메모 내용}`
|
|
253
|
+
3. 파일을 저장한다.
|
|
254
|
+
4. 결과 출력:
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
✓ Task #{id}에 메모 추가
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## drop — 태스크 삭제
|
|
263
|
+
|
|
264
|
+
### 인자
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
/task drop {id}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 동작
|
|
271
|
+
|
|
272
|
+
1. 대상 태스크 파일을 읽는다.
|
|
273
|
+
2. 확인: "Task #{id} '{title}'을 삭제합니다. 계속할까요?"
|
|
274
|
+
3. 확인 시 파일을 삭제한다.
|
|
275
|
+
4. 관련 plan 디렉토리(`.crew/plans/task-{id}/`)가 있으면 함께 삭제한다.
|
|
276
|
+
5. 결과 출력:
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
✓ Task #{id} 삭제: {title}
|
|
280
|
+
```
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tasks
|
|
3
|
+
description: 태스크 보드 — 현재 프로젝트의 태스크 목록 조회, stale 리뷰, 정리
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 역할
|
|
7
|
+
|
|
8
|
+
프로젝트의 `.crew/tasks/` 디렉토리를 읽어 태스크 보드를 표시한다.
|
|
9
|
+
서브커맨드로 stale 태스크 리뷰와 오래된 완료 태스크 정리를 지원한다.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 서브커맨드 라우팅
|
|
14
|
+
|
|
15
|
+
| 패턴 | 서브커맨드 |
|
|
16
|
+
|------|-----------|
|
|
17
|
+
| (인자 없음) | board |
|
|
18
|
+
| `stale` | stale |
|
|
19
|
+
| `clean` | clean |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## board — 태스크 보드 표시 (기본)
|
|
24
|
+
|
|
25
|
+
### 인자
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/tasks
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 동작
|
|
32
|
+
|
|
33
|
+
1. `.crew/tasks/` 내 모든 `.md` 파일을 읽는다.
|
|
34
|
+
2. 각 파일의 frontmatter를 파싱하여 status, order, title, due, created, completed를 추출한다.
|
|
35
|
+
3. status별로 그룹핑하여 출력한다:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
━━━ Active ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
39
|
+
#003 API rate limit 구현 [D-3]
|
|
40
|
+
|
|
41
|
+
━━━ Queue ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
42
|
+
1. #005 로그인 버그 수정
|
|
43
|
+
2. #004 auth 모듈 리팩토링
|
|
44
|
+
3. #007 결제 웹훅 연동
|
|
45
|
+
4. #002 문서 업데이트 [stale · 45일]
|
|
46
|
+
|
|
47
|
+
━━━ Done (최근 5개) ━━━━━━━━━━━━━━━━━━━
|
|
48
|
+
✓ #001 초기 설정 (04/10)
|
|
49
|
+
✓ #006 CI 파이프라인 (04/15)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 표시 규칙
|
|
53
|
+
|
|
54
|
+
- **Active**: status가 `active`인 태스크. due가 있으면 `[D-{남은일수}]` 표시.
|
|
55
|
+
- **Queue**: status가 `queue`인 태스크. order 오름차순 정렬. 번호는 queue 내 순서.
|
|
56
|
+
- created로부터 30일 이상 경과한 태스크는 `[stale · {경과일}일]` 표시.
|
|
57
|
+
- **Done**: status가 `done`인 태스크. completed 기준 최근 5개만 표시. 완료 날짜 함께 표시.
|
|
58
|
+
|
|
59
|
+
### 태스크가 없을 때
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
태스크가 없습니다. /task add "설명"으로 추가하세요.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## stale — 방치 태스크 리뷰
|
|
68
|
+
|
|
69
|
+
### 인자
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
/tasks stale
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 동작
|
|
76
|
+
|
|
77
|
+
1. `.crew/tasks/` 내 `status: queue`인 태스크 중 created로부터 30일 이상 경과한 태스크를 찾는다.
|
|
78
|
+
2. 해당 태스크 목록을 출력한다:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
━━━ Stale 태스크 (30일+ 방치) ━━━━━━━━━
|
|
82
|
+
#002 문서 업데이트 — 생성: 03/01 (47일 전)
|
|
83
|
+
#009 로깅 개선 — 생성: 03/10 (38일 전)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. 각 태스크에 대해 사용자에게 묻는다: "유지 / 삭제 / 스킵?"
|
|
87
|
+
- 유지: 그대로 둠
|
|
88
|
+
- 삭제: `/task drop`과 동일하게 파일 삭제
|
|
89
|
+
- 스킵: 다음 태스크로 넘어감
|
|
90
|
+
|
|
91
|
+
4. stale 태스크가 없으면:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
방치된 태스크가 없습니다.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## clean — 오래된 완료 태스크 정리
|
|
100
|
+
|
|
101
|
+
### 인자
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/tasks clean
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 동작
|
|
108
|
+
|
|
109
|
+
1. `.crew/tasks/` 내 `status: done`이고 `completed` 날짜로부터 **7일 이상** 경과한 태스크를 찾는다.
|
|
110
|
+
2. 대상 태스크 목록을 출력한다:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
━━━ 정리 대상 (완료 후 7일 경과) ━━━━━━
|
|
114
|
+
#001 초기 설정 — 완료: 04/01 (16일 전)
|
|
115
|
+
#006 CI 파이프라인 — 완료: 04/05 (12일 전)
|
|
116
|
+
|
|
117
|
+
관련 plan 디렉토리도 함께 삭제됩니다:
|
|
118
|
+
.crew/plans/task-001/
|
|
119
|
+
.crew/plans/task-006/
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
3. 사용자에게 확인: "위 {N}개 태스크와 관련 plan을 삭제합니다. 계속할까요?"
|
|
123
|
+
4. 확인 시:
|
|
124
|
+
- 각 태스크 파일 삭제
|
|
125
|
+
- 관련 plan 디렉토리(`.crew/plans/task-{id}/`) 삭제
|
|
126
|
+
5. 결과 출력:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
✓ {N}개 태스크 정리 완료
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
6. 정리 대상이 없으면:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
정리할 태스크가 없습니다. (완료 후 7일 미만이거나 완료 태스크 없음)
|
|
136
|
+
```
|