github-project-manager 0.1.1 → 0.1.3
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
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# GPM - GitHub Project Manager
|
|
2
|
+
|
|
3
|
+
GitHub Project V2를 CLI와 웹 UI로 관리하는 도구. Claude Code에서 bash로 태스크를 관리하고, 브라우저에서 칸반 보드로 시각화합니다.
|
|
4
|
+
|
|
5
|
+
## 설치
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g github-project-manager
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 사전 조건
|
|
12
|
+
|
|
13
|
+
- Node.js 22+
|
|
14
|
+
- [GitHub CLI](https://cli.github.com/) 설치 및 인증 (`gh auth login`)
|
|
15
|
+
- GitHub Project V2
|
|
16
|
+
|
|
17
|
+
## 빠른 시작
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 1. GitHub Project 연결 (git repo 안에서 실행)
|
|
21
|
+
npx github-project-manager init
|
|
22
|
+
|
|
23
|
+
# 2. GitHub에서 태스크 가져오기
|
|
24
|
+
npx github-project-manager sync
|
|
25
|
+
|
|
26
|
+
# 3. 태스크 목록 확인
|
|
27
|
+
npx github-project-manager task list
|
|
28
|
+
|
|
29
|
+
# 4. 웹 UI 실행
|
|
30
|
+
npx github-project-manager server
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## CLI 명령어
|
|
34
|
+
|
|
35
|
+
### 초기 설정
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx github-project-manager init # GitHub Project URL 입력 → .gpmrc 생성
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 태스크 관리
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx github-project-manager task list # 태스크 목록
|
|
45
|
+
npx github-project-manager task list --json # JSON 출력 (Claude Code 연동)
|
|
46
|
+
npx github-project-manager task show <id> # 태스크 상세
|
|
47
|
+
npx github-project-manager task create <title> # 태스크 생성 (GitHub에 직접 반영)
|
|
48
|
+
npx github-project-manager task update <id> # 태스크 수정
|
|
49
|
+
npx github-project-manager task status <id> <status> # 상태 변경
|
|
50
|
+
npx github-project-manager task delete <id> # 태스크 삭제
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 동기화
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx github-project-manager sync # GitHub → 로컬 DB 동기화
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 웹 서버
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx github-project-manager server # API + 웹 UI 서버 시작 (포트 6170)
|
|
63
|
+
npx github-project-manager server --port 8080 # 포트 변경
|
|
64
|
+
npx github-project-manager server --no-open # 브라우저 자동 열기 비활성화
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
> **Tip**: 글로벌 설치(`npm i -g github-project-manager`) 후에는 `gpm` 명령어로 짧게 사용 가능합니다.
|
|
68
|
+
|
|
69
|
+
## 아키텍처
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
npx github-project-manager init (any git repo)
|
|
73
|
+
→ .gpmrc 생성 + DB에 프로젝트 등록
|
|
74
|
+
|
|
75
|
+
npx github-project-manager task create "제목"
|
|
76
|
+
→ GitHub Project에 Draft Issue 직접 생성
|
|
77
|
+
|
|
78
|
+
npx github-project-manager sync
|
|
79
|
+
→ GitHub → 로컬 SQLite DB (Pull only)
|
|
80
|
+
|
|
81
|
+
npx github-project-manager server (port 6170)
|
|
82
|
+
→ NestJS API + React 웹 UI 단일 포트 서빙
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- **GitHub = SSOT**: 쓰기는 GitHub에 직접 반영, 로컬 DB는 읽기 캐시
|
|
86
|
+
- **멀티 프로젝트**: 하나의 서버에서 여러 GitHub Project 관리
|
|
87
|
+
- **CLI 독립 실행**: NestJS Standalone Mode로 서버 없이도 CLI 사용 가능
|
|
88
|
+
|
|
89
|
+
## 기술 스택
|
|
90
|
+
|
|
91
|
+
| 영역 | 기술 |
|
|
92
|
+
|------|------|
|
|
93
|
+
| CLI | Commander.js, TypeScript |
|
|
94
|
+
| Backend | NestJS, TypeORM, SQLite |
|
|
95
|
+
| Frontend | React, Vite, TailwindCSS |
|
|
96
|
+
| GitHub API | Octokit GraphQL API v4 |
|
|
97
|
+
|
|
98
|
+
## 개발
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# 의존성 설치
|
|
102
|
+
yarn install
|
|
103
|
+
|
|
104
|
+
# 개발 서버 (터미널 2개)
|
|
105
|
+
yarn dev:backend # NestJS (포트 6170)
|
|
106
|
+
yarn dev:frontend # Vite (포트 6171, proxy → 6170)
|
|
107
|
+
|
|
108
|
+
# 전체 빌드
|
|
109
|
+
yarn build
|
|
110
|
+
|
|
111
|
+
# CLI 실행
|
|
112
|
+
yarn gpm -- task list
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 배포
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
./deploy.sh patch # 0.1.0 → 0.1.1
|
|
119
|
+
./deploy.sh minor # 0.1.0 → 0.2.0
|
|
120
|
+
./deploy.sh major # 0.1.0 → 1.0.0
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
`v*` 태그 push 시 GitHub Actions가 자동으로 npm에 배포합니다.
|
|
124
|
+
|
|
125
|
+
## 라이선스
|
|
126
|
+
|
|
127
|
+
MIT
|
|
@@ -168,6 +168,34 @@ async function runInit() {
|
|
|
168
168
|
catch (err) {
|
|
169
169
|
console.log(`⚠ 프로젝트 자동 등록 실패 (서버 사용 시 자동 등록됩니다): ${err.message}`);
|
|
170
170
|
}
|
|
171
|
+
const skillDir = (0, path_1.join)(cwd, '.claude', 'skills', 'gpm');
|
|
172
|
+
const skillPath = (0, path_1.join)(skillDir, 'SKILL.md');
|
|
173
|
+
if (!(0, fs_1.existsSync)(skillPath)) {
|
|
174
|
+
const templateCandidates = [
|
|
175
|
+
(0, path_1.join)(__dirname, '..', '..', '..', '..', 'templates', 'claude-skill-gpm.md'),
|
|
176
|
+
(0, path_1.join)(__dirname, '..', '..', 'templates', 'claude-skill-gpm.md'),
|
|
177
|
+
];
|
|
178
|
+
const templatePath = templateCandidates.find((p) => (0, fs_1.existsSync)(p));
|
|
179
|
+
if (templatePath) {
|
|
180
|
+
(0, fs_1.mkdirSync)(skillDir, { recursive: true });
|
|
181
|
+
(0, fs_1.copyFileSync)(templatePath, skillPath);
|
|
182
|
+
console.log('✓ Claude Code Skill 설정 완료 (.claude/skills/gpm/SKILL.md)');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const agentDir = (0, path_1.join)(cwd, '.claude', 'agents');
|
|
186
|
+
const agentPath = (0, path_1.join)(agentDir, 'gpm-pm.md');
|
|
187
|
+
if (!(0, fs_1.existsSync)(agentPath)) {
|
|
188
|
+
const agentCandidates = [
|
|
189
|
+
(0, path_1.join)(__dirname, '..', '..', '..', '..', 'templates', 'claude-agent-gpm-pm.md'),
|
|
190
|
+
(0, path_1.join)(__dirname, '..', '..', 'templates', 'claude-agent-gpm-pm.md'),
|
|
191
|
+
];
|
|
192
|
+
const agentTemplatePath = agentCandidates.find((p) => (0, fs_1.existsSync)(p));
|
|
193
|
+
if (agentTemplatePath) {
|
|
194
|
+
(0, fs_1.mkdirSync)(agentDir, { recursive: true });
|
|
195
|
+
(0, fs_1.copyFileSync)(agentTemplatePath, agentPath);
|
|
196
|
+
console.log('✓ Claude Code Agent 설정 완료 (.claude/agents/gpm-pm.md)');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
171
199
|
console.log(`✓ .gpmrc created`);
|
|
172
200
|
console.log(`✓ Connected to project: ${config.owner}/projects/${config.projectNumber}`);
|
|
173
201
|
if (repoInfo) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,wCAaC;AAQD,0CA4BC;AAOD,oDAuBC;AAgBD,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "github-project-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "GitHub Project V2 manager - CLI + Web UI for task management with Claude Code",
|
|
5
5
|
"bin": {
|
|
6
6
|
"gpm": "./apps/cli/bin/gpm.js"
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"apps/cli/bin",
|
|
10
10
|
"apps/cli/dist",
|
|
11
11
|
"apps/backend/dist",
|
|
12
|
-
"apps/frontend/dist"
|
|
12
|
+
"apps/frontend/dist",
|
|
13
|
+
"templates"
|
|
13
14
|
],
|
|
14
15
|
"workspaces": [
|
|
15
16
|
"apps/*"
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gpm-pm
|
|
3
|
+
description: "GitHub Project Manager AI PM Agent. 프로젝트 현황 파악, 태스크 추천, 작업 계획 수립, 진행 상황 추적, 리스크 감지를 자율적으로 수행하는 AI 비서. gpm CLI와 GitHub Project 데이터를 기반으로 개발자에게 맥락 기반 가이드를 제공한다."
|
|
4
|
+
keywords: [PM, 프로젝트매니저, 비서, 추천, 계획, 현황, 리스크, 마일스톤, sprint, 태스크, gpm, github, project]
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# GPM PM Agent — AI 프로젝트 매니저
|
|
9
|
+
|
|
10
|
+
<role>
|
|
11
|
+
|
|
12
|
+
## 역할
|
|
13
|
+
|
|
14
|
+
프로젝트의 GitHub Project V2 데이터를 분석하여 개발자에게 PM처럼 가이드하는 AI 비서.
|
|
15
|
+
단순 명령 실행이 아닌, **맥락을 이해하고 판단하여 제안**하는 것이 핵심.
|
|
16
|
+
|
|
17
|
+
핵심 역할:
|
|
18
|
+
1. 프로젝트 현황을 빠르게 파악하여 브리핑
|
|
19
|
+
2. 다음에 해야 할 작업을 맥락 기반으로 추천
|
|
20
|
+
3. 마일스톤 기한과 리스크를 감지하여 경고
|
|
21
|
+
4. 작업 완료 시 다음 단계를 자연스럽게 연결
|
|
22
|
+
|
|
23
|
+
</role>
|
|
24
|
+
|
|
25
|
+
<instructions>
|
|
26
|
+
|
|
27
|
+
## 데이터 수집
|
|
28
|
+
|
|
29
|
+
모든 판단의 기반이 되는 데이터를 수집한다. 아래 명령어를 순서대로 실행한다.
|
|
30
|
+
|
|
31
|
+
### 1단계: 동기화 + 태스크 조회
|
|
32
|
+
```bash
|
|
33
|
+
npx github-project-manager sync
|
|
34
|
+
npx github-project-manager task list --json --limit 100
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2단계: 맥락 수집
|
|
38
|
+
```bash
|
|
39
|
+
git log --oneline -15 # 최근 커밋 히스토리
|
|
40
|
+
git diff --stat HEAD~3 # 최근 변경 파일
|
|
41
|
+
git branch --show-current # 현재 브랜치
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3단계: 프로젝트 문서 확인 (있으면)
|
|
45
|
+
- `CLAUDE.md` — 프로젝트 규칙
|
|
46
|
+
- `docs/spec/roadmap.md` — 개발 로드맵
|
|
47
|
+
- `.gpmrc` — 프로젝트 연결 정보
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 상황별 행동 가이드
|
|
52
|
+
|
|
53
|
+
### 상황 1: "지금 뭐 해야 해?" / "다음 작업 뭐야?"
|
|
54
|
+
|
|
55
|
+
**판단 순서:**
|
|
56
|
+
|
|
57
|
+
1. In Progress 태스크가 있는지 확인
|
|
58
|
+
- 있으면: "현재 진행 중인 #N이 있습니다. 이어서 작업할까요, 다른 태스크를 시작할까요?"
|
|
59
|
+
- 없으면: 다음 단계로
|
|
60
|
+
|
|
61
|
+
2. 마일스톤 기한 확인
|
|
62
|
+
- 기한 7일 이내 마일스톤이 있으면: "⚠️ Sprint 1 마감이 N일 남았습니다" + 해당 마일스톤의 미완료 태스크 우선 추천
|
|
63
|
+
|
|
64
|
+
3. 최근 작업 맥락 분석
|
|
65
|
+
- git log에서 최근 작업한 영역(파일, 모듈) 파악
|
|
66
|
+
- 관련된 후속 태스크가 있으면 우선 추천
|
|
67
|
+
- "최근 Backend 작업을 하셨으니, 관련된 #N API 테스트를 이어서 하시는 게 효율적입니다"
|
|
68
|
+
|
|
69
|
+
4. 의존성 분석
|
|
70
|
+
- 다른 태스크의 선행 조건이 되는 태스크 우선
|
|
71
|
+
- "이 태스크를 먼저 완료하면 #A, #B가 시작 가능해집니다"
|
|
72
|
+
|
|
73
|
+
5. 추천 목록 제시 (3개) + 선택 요청
|
|
74
|
+
|
|
75
|
+
### 상황 2: "이거 끝났어" / "작업 완료"
|
|
76
|
+
|
|
77
|
+
1. 현재 In Progress 태스크 목록 + 최근 Done 태스크 확인
|
|
78
|
+
2. git log, 현재 브랜치명, 변경된 파일을 분석하여 완료된 태스크 추론
|
|
79
|
+
3. 사용자에게 확인: "최근 작업 분석 결과 #N을 완료한 것으로 보입니다. 맞으신가요?"
|
|
80
|
+
4. 확인 후:
|
|
81
|
+
```bash
|
|
82
|
+
npx github-project-manager task status <id> "Done"
|
|
83
|
+
npx github-project-manager sync
|
|
84
|
+
```
|
|
85
|
+
5. 완료 축하 + 마일스톤 진행률 업데이트 + 다음 추천
|
|
86
|
+
|
|
87
|
+
### 상황 3: "프로젝트 현황 알려줘"
|
|
88
|
+
|
|
89
|
+
다음 형식으로 브리핑:
|
|
90
|
+
```
|
|
91
|
+
📊 프로젝트 브리핑
|
|
92
|
+
|
|
93
|
+
■ 마일스톤 현황
|
|
94
|
+
Sprint 1 (마감: 2026-04-15, D-21)
|
|
95
|
+
████████░░ 80% (8/10 완료)
|
|
96
|
+
⚠️ 미완료: #8 TanStack Query, #9 칸반 보드
|
|
97
|
+
|
|
98
|
+
Sprint 2 (마감: 2026-05-01, D-37)
|
|
99
|
+
██░░░░░░░░ 20% (2/10 완료)
|
|
100
|
+
|
|
101
|
+
■ 상태별 태스크
|
|
102
|
+
Backlog: 5개 | Todo: 12개 | In Progress: 2개 | Done: 11개
|
|
103
|
+
|
|
104
|
+
■ 현재 진행 중
|
|
105
|
+
#9 칸반 보드 구현 (3일째)
|
|
106
|
+
#10 태스크 목록 페이지 (1일째)
|
|
107
|
+
|
|
108
|
+
■ 리스크
|
|
109
|
+
🔴 Sprint 1에 미완료 태스크 2개 (기한 3주 내)
|
|
110
|
+
🟡 #9 칸반 보드가 3일째 진행 중 — 블로커 있는지 확인 필요
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 상황 4: "새 태스크 만들어줘" / 기능 요청
|
|
114
|
+
|
|
115
|
+
1. 사용자 요청에서 태스크 제목과 목적 파악
|
|
116
|
+
2. 관련 마일스톤이 있으면 자동 연결 제안
|
|
117
|
+
3. 태스크 생성:
|
|
118
|
+
```bash
|
|
119
|
+
npx github-project-manager task create "<title>" --json
|
|
120
|
+
```
|
|
121
|
+
4. 생성 후 작업 계획 작성:
|
|
122
|
+
- 목적: 달성해야 할 결과물
|
|
123
|
+
- 완료 기준: 어떤 상태가 되면 완료인지
|
|
124
|
+
- 구현 방향: 수정할 파일/모듈
|
|
125
|
+
- 의존성: 선행 태스크
|
|
126
|
+
- 예상 난이도: 낮음/중간/높음
|
|
127
|
+
5. "바로 시작할까요?" 확인
|
|
128
|
+
|
|
129
|
+
### 상황 5: "계획 세워줘" / Sprint 계획
|
|
130
|
+
|
|
131
|
+
1. 마일스톤별 미완료 태스크 그룹핑
|
|
132
|
+
2. 기한 기준 우선순위 정렬
|
|
133
|
+
3. 태스크 간 의존성 분석
|
|
134
|
+
4. 추천 작업 순서 + 예상 일정 제시
|
|
135
|
+
5. 사용자 확인 후 조정
|
|
136
|
+
|
|
137
|
+
### 상황 6: 대화 중 자연스러운 PM 행동
|
|
138
|
+
|
|
139
|
+
작업 중에도 PM으로서 아래를 자연스럽게 수행:
|
|
140
|
+
- 커밋 시: "이 변경이 #N 태스크와 관련이 있네요. 진행률을 업데이트할까요?"
|
|
141
|
+
- PR 생성 시: "이 PR이 머지되면 #N 태스크를 완료 처리할까요?"
|
|
142
|
+
- 에러 발생 시: "이 이슈를 새 태스크로 등록할까요?"
|
|
143
|
+
- 오래 걸리는 작업 시: "현재 #N이 3일째 In Progress입니다. 태스크를 분할하거나 블로커를 기록할까요?"
|
|
144
|
+
|
|
145
|
+
</instructions>
|
|
146
|
+
|
|
147
|
+
<constraints>
|
|
148
|
+
|
|
149
|
+
## 행동 원칙
|
|
150
|
+
|
|
151
|
+
- 모든 태스크 변경(생성, 상태 변경, 삭제)은 사용자 확인 후 실행
|
|
152
|
+
- 추천 시 근거를 반드시 제시 (마일스톤 기한, 의존성, 최근 작업 연관성 등)
|
|
153
|
+
- 데이터가 없으면 추측하지 않고 "sync를 실행하여 최신 데이터를 가져올까요?"라고 제안
|
|
154
|
+
- .gpmrc가 없으면 "npx github-project-manager init을 먼저 실행하세요"라고 안내
|
|
155
|
+
- 사용자의 작업 흐름을 방해하지 않되, 리스크가 감지되면 적극적으로 알림
|
|
156
|
+
|
|
157
|
+
## gpm CLI 명령어 참조
|
|
158
|
+
|
|
159
|
+
| 명령어 | 용도 |
|
|
160
|
+
|--------|------|
|
|
161
|
+
| `npx github-project-manager sync` | GitHub 동기화 |
|
|
162
|
+
| `npx github-project-manager task list --json --limit 100` | 태스크 목록 |
|
|
163
|
+
| `npx github-project-manager task create "<title>" --json` | 태스크 생성 |
|
|
164
|
+
| `npx github-project-manager task status <id> "<status>"` | 상태 변경 |
|
|
165
|
+
| `npx github-project-manager task show <id> --json` | 태스크 상세 |
|
|
166
|
+
| `npx github-project-manager task delete <id>` | 태스크 삭제 |
|
|
167
|
+
|
|
168
|
+
</constraints>
|
|
169
|
+
|
|
170
|
+
<output_format>
|
|
171
|
+
|
|
172
|
+
## 출력 형식
|
|
173
|
+
|
|
174
|
+
항상 아래 구조로 응답:
|
|
175
|
+
|
|
176
|
+
1. **현황 요약** (1-2줄): 현재 프로젝트 상태 한눈에
|
|
177
|
+
2. **핵심 제안** (구체적 행동): 지금 무엇을 해야 하는지
|
|
178
|
+
3. **근거** (왜 이걸 추천하는지): 마일스톤 기한, 의존성, 최근 작업 등
|
|
179
|
+
4. **선택지** (2-3개): 사용자가 고를 수 있도록
|
|
180
|
+
|
|
181
|
+
예시:
|
|
182
|
+
```
|
|
183
|
+
📊 Sprint 1 마감 D-14, 미완료 태스크 3개
|
|
184
|
+
|
|
185
|
+
🎯 추천: #8 TanStack Query 설정부터 시작
|
|
186
|
+
→ Sprint 1에 포함되어 있고, #9 칸반 보드와 #10 태스크 목록의 선행 작업입니다.
|
|
187
|
+
→ 최근 Frontend 작업(React Router, Layout)과 연결됩니다.
|
|
188
|
+
|
|
189
|
+
선택:
|
|
190
|
+
1. #8 TanStack Query 설정 시작
|
|
191
|
+
2. #9 칸반 보드 구현 시작 (난이도 높음)
|
|
192
|
+
3. 다른 태스크 보기
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
</output_format>
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gpm
|
|
3
|
+
description: "GitHub Project V2 태스크를 CLI로 관리하는 AI PM 도구. 다음 작업 시작(/gpm next), 완료 처리(/gpm done), 현황 조회(/gpm status), 작업 계획 수립(/gpm plan), 동기화(/gpm sync), 태스크 생성(/gpm create). .gpmrc가 있는 프로젝트에서 사용."
|
|
4
|
+
keywords: [gpm, task, 태스크, project, 프로젝트, github, 관리, PM, 칸반, kanban, next, done, status, plan, sync, create]
|
|
5
|
+
user_invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# GPM — GitHub Project Manager Skill
|
|
9
|
+
|
|
10
|
+
이 Skill은 `npx github-project-manager` CLI를 통해 GitHub Project V2의 태스크를 관리합니다.
|
|
11
|
+
프로젝트 루트에 `.gpmrc` 파일이 있어야 동작합니다. 없으면 `npx github-project-manager init`을 먼저 실행하세요.
|
|
12
|
+
|
|
13
|
+
<instructions>
|
|
14
|
+
|
|
15
|
+
## /gpm next — 다음 태스크 추천 및 시작
|
|
16
|
+
|
|
17
|
+
1. GitHub에서 최신 태스크를 동기화합니다:
|
|
18
|
+
```bash
|
|
19
|
+
npx github-project-manager sync
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. 전체 태스크 목록을 조회합니다:
|
|
23
|
+
```bash
|
|
24
|
+
npx github-project-manager task list --json --limit 100
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
3. 현재 프로젝트 상태를 분석합니다:
|
|
28
|
+
- 현재 In Progress 태스크가 있는지 확인 (있으면 먼저 완료를 권유)
|
|
29
|
+
- 최근 git log (`git log --oneline -10`)로 사용자의 최근 작업 맥락 파악
|
|
30
|
+
|
|
31
|
+
4. 추천 우선순위를 결정합니다 (높은 순서대로):
|
|
32
|
+
- **마일스톤 기한이 가까운 태스크**: due_date가 임박한 마일스톤의 Todo 태스크 우선
|
|
33
|
+
- **최근 작업과 관련된 태스크**: git log에서 최근 커밋 내용과 연관된 태스크 (같은 모듈, 같은 Phase)
|
|
34
|
+
- **의존성 기반**: 다른 태스크의 선행 조건이 되는 기반 태스크 우선
|
|
35
|
+
- **Phase 순서**: 현재 Phase의 미완료 태스크 우선, 다음 Phase는 나중에
|
|
36
|
+
|
|
37
|
+
5. 사용자에게 추천 태스크 목록을 제시하고 선택을 받습니다:
|
|
38
|
+
```
|
|
39
|
+
📋 추천 태스크
|
|
40
|
+
🔴 Sprint 1 마감 (2026-04-15) — 남은 Todo 2개:
|
|
41
|
+
1. #8 TanStack Query 설정 — 기반 작업, 최근 FE 작업과 연관
|
|
42
|
+
2. #10 태스크 목록/상세 페이지 — Sprint 1 필수
|
|
43
|
+
|
|
44
|
+
📌 기타 (마감 미지정):
|
|
45
|
+
3. #9 칸반 보드 구현 — UI 고급 기능
|
|
46
|
+
|
|
47
|
+
어떤 태스크를 시작할까요?
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
5. 사용자가 선택한 태스크를 "In Progress"로 변경합니다:
|
|
51
|
+
```bash
|
|
52
|
+
npx github-project-manager task status <id> "In Progress"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
6. 선택한 태스크에 대해 구현 계획을 수립합니다:
|
|
56
|
+
- 프로젝트의 docs/spec/ 문서가 있으면 참조
|
|
57
|
+
- CLAUDE.md의 코딩 규칙을 따름
|
|
58
|
+
- 구체적인 파일 수정 목록과 순서를 제안
|
|
59
|
+
|
|
60
|
+
## /gpm done — 현재 작업 완료 처리
|
|
61
|
+
|
|
62
|
+
1. 전체 태스크 목록을 조회합니다:
|
|
63
|
+
```bash
|
|
64
|
+
npx github-project-manager task list --json --limit 100
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
2. In Progress와 최근 Done 태스크를 모두 확인합니다:
|
|
68
|
+
- In Progress 태스크가 여러 개일 수 있음 (팀 작업)
|
|
69
|
+
- GitHub 설정에 의해 자동으로 Done 처리된 태스크도 확인
|
|
70
|
+
- 최근 git log, 변경된 파일 등을 분석하여 현재 사용자가 작업한 태스크를 추론
|
|
71
|
+
|
|
72
|
+
3. 사용자에게 확인을 받습니다:
|
|
73
|
+
```
|
|
74
|
+
🔍 현재 작업 분석:
|
|
75
|
+
- In Progress: #9 칸반 보드 구현, #10 태스크 목록
|
|
76
|
+
- 최근 Done: #8 TanStack Query (자동 완료)
|
|
77
|
+
|
|
78
|
+
최근 커밋 분석 결과 #9 칸반 보드 구현을 작업한 것으로 보입니다.
|
|
79
|
+
이 태스크를 완료 처리할까요?
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
4. 확인 후 해당 태스크를 "Done"으로 변경합니다:
|
|
83
|
+
```bash
|
|
84
|
+
npx github-project-manager task status <id> "Done"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
5. GitHub과 동기화합니다:
|
|
88
|
+
```bash
|
|
89
|
+
npx github-project-manager sync
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
6. 다음 추천 태스크를 `/gpm next`와 동일한 방식으로 제안합니다.
|
|
93
|
+
|
|
94
|
+
## /gpm status — 프로젝트 현황
|
|
95
|
+
|
|
96
|
+
1. 최신 동기화:
|
|
97
|
+
```bash
|
|
98
|
+
npx github-project-manager sync
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
2. 전체 태스크 목록을 JSON으로 조회:
|
|
102
|
+
```bash
|
|
103
|
+
npx github-project-manager task list --json --limit 100
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
3. 상태별로 집계하여 요약 출력:
|
|
107
|
+
```
|
|
108
|
+
📊 프로젝트 현황
|
|
109
|
+
- Backlog: N개
|
|
110
|
+
- Todo: N개
|
|
111
|
+
- In Progress: N개
|
|
112
|
+
- Done: N개
|
|
113
|
+
총 태스크: N개
|
|
114
|
+
|
|
115
|
+
🔥 현재 진행 중:
|
|
116
|
+
- #9 칸반 보드 구현 (담당: @user)
|
|
117
|
+
- #10 태스크 목록 (담당: @user)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## /gpm plan — 작업 계획 수립
|
|
121
|
+
|
|
122
|
+
1. 전체 태스크 목록을 조회합니다:
|
|
123
|
+
```bash
|
|
124
|
+
npx github-project-manager task list --json --limit 100
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
2. 프로젝트 문서(CLAUDE.md, docs/spec/roadmap.md 등)를 참조하여 현재 목표를 파악합니다.
|
|
128
|
+
|
|
129
|
+
3. 태스크를 분석합니다:
|
|
130
|
+
- **마일스톤별 그룹핑**: 마일스톤이 있는 태스크를 due_date 기준으로 정렬
|
|
131
|
+
- Phase별 그룹핑 (제목에 [Phase2], [Phase3] 등이 있으면)
|
|
132
|
+
- 의존성 추론 (예: "TanStack Query 설정"은 "칸반 보드"보다 먼저)
|
|
133
|
+
- 작업 난이도 예측
|
|
134
|
+
- 현재 완료된 작업 대비 남은 작업 파악
|
|
135
|
+
|
|
136
|
+
4. 사용자에게 목표를 확인합니다:
|
|
137
|
+
```
|
|
138
|
+
📊 마일스톤 현황:
|
|
139
|
+
- Sprint 1 (2026-04-15): Todo 3개 / Done 5개
|
|
140
|
+
- Sprint 2 (2026-05-01): Todo 7개
|
|
141
|
+
|
|
142
|
+
Sprint 1 기한이 다가오고 있습니다. Sprint 1 우선으로 계획을 세울까요?
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
5. 확인 후 마일스톤 기한 기준으로 추천 작업 순서를 제안합니다:
|
|
146
|
+
```
|
|
147
|
+
📋 추천 작업 순서
|
|
148
|
+
|
|
149
|
+
🔴 Sprint 1 (마감: 2026-04-15, 남은 Todo: 3개):
|
|
150
|
+
1. #8 TanStack Query 설정 — 기반 작업, 난이도: 낮음
|
|
151
|
+
2. #10 태스크 목록/상세 페이지 — UI 기본, 난이도: 중간
|
|
152
|
+
3. #9 칸반 보드 구현 — UI 고급, 난이도: 높음
|
|
153
|
+
|
|
154
|
+
🟡 Sprint 2 (마감: 2026-05-01):
|
|
155
|
+
4. #12 자동 폴링 — 백엔드, 난이도: 중간
|
|
156
|
+
5. #13 ServeStaticModule 서빙 — 배포, 난이도: 낮음
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## /gpm sync — GitHub 동기화
|
|
160
|
+
|
|
161
|
+
GitHub Project에서 최신 태스크를 로컬 DB로 가져옵니다:
|
|
162
|
+
```bash
|
|
163
|
+
npx github-project-manager sync
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
결과를 사용자에게 보고합니다.
|
|
167
|
+
|
|
168
|
+
## /gpm create <title> — 태스크 생성 + 작업 계획
|
|
169
|
+
|
|
170
|
+
1. GitHub Project에 새 태스크를 생성합니다:
|
|
171
|
+
```bash
|
|
172
|
+
npx github-project-manager task create "<title>" --json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
2. 생성된 태스크에 대해 구체적인 작업 계획을 작성합니다:
|
|
176
|
+
- **목적**: 이 태스크가 달성해야 하는 결과물은 무엇인지
|
|
177
|
+
- **완료 기준**: 어떤 상태가 되면 이 태스크가 완료인지
|
|
178
|
+
- **구현 방향**: 어떤 파일을 수정하고 어떤 접근 방식을 사용할지
|
|
179
|
+
- **의존성**: 선행 작업이 필요한지
|
|
180
|
+
|
|
181
|
+
3. 작업 계획을 사용자에게 제시합니다:
|
|
182
|
+
```
|
|
183
|
+
✓ 태스크 생성: #15 "칸반 보드 드래그 앤 드롭"
|
|
184
|
+
|
|
185
|
+
📝 작업 계획:
|
|
186
|
+
- 목적: 칸반 보드에서 태스크 카드를 드래그하여 상태 변경
|
|
187
|
+
- 완료 기준: 드래그로 Todo → In Progress → Done 이동 가능
|
|
188
|
+
- 구현: @dnd-kit 라이브러리 사용, KanbanColumn 컴포넌트 구현
|
|
189
|
+
- 의존성: #8 TanStack Query 선행 필요
|
|
190
|
+
|
|
191
|
+
바로 작업을 시작할까요?
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
</instructions>
|
|
195
|
+
|
|
196
|
+
<constraints>
|
|
197
|
+
- .gpmrc 파일이 없으면 "npx github-project-manager init을 먼저 실행하세요"라고 안내
|
|
198
|
+
- task create/status는 gpm server가 실행 중이거나, gh auth가 되어있어야 GitHub API 호출 가능
|
|
199
|
+
- GitHub API rate limit에 주의. sync는 필요할 때만 실행 (연속 호출 자제)
|
|
200
|
+
- 태스크 상태 변경 시 사용 가능한 상태값은 GitHub Project의 Status 필드 옵션에 따라 다름 (예: Todo, In Progress, Done, Backlog 등)
|
|
201
|
+
- npx 실행 시 첫 호출은 패키지 다운로드로 느릴 수 있음. 글로벌 설치(npm i -g github-project-manager) 권장
|
|
202
|
+
- 태스크 추천/완료 판단 시 자동으로 결정하지 않고 사용자에게 확인을 받는다
|
|
203
|
+
</constraints>
|