|
| 1 | +# Phase D — 배포 전략 (Distribution Strategy) |
| 2 | + |
| 3 | +## Executive Summary |
| 4 | + |
| 5 | +| 관점 | 내용 | |
| 6 | +|------|------| |
| 7 | +| **Problem** | 코드는 완성되었지만, 사용자에게 도달하는 경로가 GitHub clone뿐 | |
| 8 | +| **Solution** | 커뮤니티 마켓플레이스 + PyPI + 공식 마켓플레이스 3단계 배포 | |
| 9 | +| **Function UX Effect** | `/plugin install` 또는 `pip install` 한 줄로 즉시 사용 가능 | |
| 10 | +| **Core Value** | Claude Code 생태계 최초의 작업일지 도구로 포지셔닝 | |
| 11 | + |
| 12 | +> Claude Code Working Diary v4.x → v5.0 |
| 13 | +> 작성일: 2026-03-17 |
| 14 | +> 상태: Plan |
| 15 | +> 선행 조건: Phase A + B + C 완료 |
| 16 | +
|
| 17 | +--- |
| 18 | + |
| 19 | +## 1. 개요 |
| 20 | + |
| 21 | +### 현재 상태 |
| 22 | +- v4.0.0 코드 완성 (코어 + CLI + 5 exporters + 팀 기능 + 보안 + 40 테스트) |
| 23 | +- GitHub public repo에 공개됨 |
| 24 | +- 설치 방법: `git clone` → `install.sh` 또는 소스 직접 사용 |
| 25 | +- **문제: 발견성 제로, 설치 허들 높음** |
| 26 | + |
| 27 | +### 목표 |
| 28 | +사용자가 **한 줄로 설치**하고, **검색으로 발견**할 수 있게 만든다. |
| 29 | + |
| 30 | +### 핵심 원칙 |
| 31 | +- **토큰/API 사용 제로** — 배포 과정에서도 사용자에게 비용 발생 없음 |
| 32 | +- **점진적 배포** — 커뮤니티 → PyPI → 공식, 각 단계에서 피드백 수집 |
| 33 | +- **이중 배포** — pip과 플러그인 동시 지원, 사용자가 선택 |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## 2. 배포 경로 비교 |
| 38 | + |
| 39 | +| 경로 | 설치 방법 | 대상 | 발견성 | 통제력 | 리스크 | |
| 40 | +|------|-----------|------|--------|--------|--------| |
| 41 | +| GitHub (현재) | `git clone` | 개발자 | 낮음 | 완전 | 없음 | |
| 42 | +| 커뮤니티 마켓플레이스 | `/plugin marketplace add` + `/plugin install` | Claude Code 사용자 | 중간 | 완전 | 없음 | |
| 43 | +| PyPI | `pip install claude-diary` | Python 개발자 | 높음 | 완전 | 낮음 | |
| 44 | +| 공식 Anthropic 마켓플레이스 | `/plugin install` (기본 목록) | 전체 Claude Code 사용자 | 최고 | 낮음 | 거절 가능 | |
| 45 | + |
| 46 | +--- |
| 47 | + |
| 48 | +## 3. Sprint 구성 |
| 49 | + |
| 50 | +### Sprint D-1 — Claude Code 플러그인 변환 (커뮤니티 마켓플레이스) |
| 51 | + |
| 52 | +#### 3.1.1 플러그인 구조 추가 |
| 53 | + |
| 54 | +``` |
| 55 | +.claude-plugin/ |
| 56 | +├── plugin.json ← 매니페스트 |
| 57 | +└── hooks.json ← Stop Hook 자동 등록 |
| 58 | +``` |
| 59 | + |
| 60 | +**plugin.json:** |
| 61 | + |
| 62 | +```json |
| 63 | +{ |
| 64 | + "name": "working-diary", |
| 65 | + "description": "Auto-generate work diaries from Claude Code sessions (KO/EN)", |
| 66 | + "version": "4.0.0", |
| 67 | + "author": { |
| 68 | + "name": "solzip", |
| 69 | + "url": "https://github.com/solzip" |
| 70 | + }, |
| 71 | + "repository": "https://github.com/solzip/claude-code-hooks-diary", |
| 72 | + "license": "MIT", |
| 73 | + "keywords": ["diary", "productivity", "hooks", "work-log", "automation"], |
| 74 | + "engines": { |
| 75 | + "claude-code": ">=2.1.0" |
| 76 | + } |
| 77 | +} |
| 78 | +``` |
| 79 | + |
| 80 | +**hooks.json:** |
| 81 | + |
| 82 | +```json |
| 83 | +{ |
| 84 | + "hooks": { |
| 85 | + "Stop": [ |
| 86 | + { |
| 87 | + "hooks": [ |
| 88 | + { |
| 89 | + "type": "command", |
| 90 | + "command": "python -m claude_diary.hook" |
| 91 | + } |
| 92 | + ] |
| 93 | + } |
| 94 | + ] |
| 95 | + } |
| 96 | +} |
| 97 | +``` |
| 98 | + |
| 99 | +#### 3.1.2 커뮤니티 마켓플레이스 호스팅 |
| 100 | + |
| 101 | +- GitHub repo 자체가 마켓플레이스 역할 |
| 102 | +- 사용자 설치 방법: |
| 103 | + |
| 104 | +```bash |
| 105 | +# 1. 마켓플레이스 추가 |
| 106 | +/plugin marketplace add https://github.com/solzip/claude-code-hooks-diary |
| 107 | + |
| 108 | +# 2. 플러그인 설치 |
| 109 | +/plugin install working-diary |
| 110 | +``` |
| 111 | + |
| 112 | +#### 3.1.3 플러그인 설치 시 자동 수행 |
| 113 | + |
| 114 | +- `~/.claude/settings.json`에 Stop Hook 자동 등록 |
| 115 | +- `pip install claude-diary` 안내 (또는 자동 실행) |
| 116 | +- `claude-diary init` 트리거 |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +### Sprint D-2 — PyPI 정식 배포 |
| 121 | + |
| 122 | +#### 3.2.1 사전 준비 |
| 123 | + |
| 124 | +- [ ] `pyproject.toml` 최종 점검 (version, description, classifiers) |
| 125 | +- [ ] `README.en.md`를 PyPI 표시용으로 설정 |
| 126 | +- [ ] `CHANGELOG.md` 업데이트 |
| 127 | +- [ ] 로컬 빌드 테스트: `python -m build` |
| 128 | +- [ ] TestPyPI 배포: `twine upload --repository testpypi dist/*` |
| 129 | +- [ ] TestPyPI에서 설치 테스트: `pip install -i https://test.pypi.org/simple/ claude-diary` |
| 130 | + |
| 131 | +#### 3.2.2 정식 배포 |
| 132 | + |
| 133 | +- [ ] PyPI 계정 생성 + API 토큰 발급 |
| 134 | +- [ ] GitHub Actions release.yml에 PyPI 토큰 설정 (repository secret) |
| 135 | +- [ ] `git tag v4.1.0 && git push --tags` → 자동 배포 트리거 |
| 136 | +- [ ] PyPI 페이지 확인: https://pypi.org/project/claude-diary/ |
| 137 | + |
| 138 | +#### 3.2.3 PyPI 페이지 최적화 |
| 139 | + |
| 140 | +- 프로젝트 설명 (영어) |
| 141 | +- 키워드: claude-code, productivity, work-diary, automation, hooks |
| 142 | +- Classifiers 확인 |
| 143 | +- 홈페이지/Repository URL 확인 |
| 144 | + |
| 145 | +--- |
| 146 | + |
| 147 | +### Sprint D-3 — GitHub 최적화 + 홍보 |
| 148 | + |
| 149 | +#### 3.3.1 GitHub Repo 최적화 |
| 150 | + |
| 151 | +- [ ] Topics 설정: `claude-code`, `productivity`, `work-diary`, `automation`, `hooks`, `developer-tools`, `python` |
| 152 | +- [ ] About 설정: "Auto-generate work diaries from Claude Code sessions (KO/EN)" |
| 153 | +- [ ] Social preview 이미지 (1280×640) |
| 154 | +- [ ] Badges 추가 (README): |
| 155 | + -  |
| 156 | + -  |
| 157 | + -  |
| 158 | + -  |
| 159 | + |
| 160 | +#### 3.3.2 GIF 데모 |
| 161 | + |
| 162 | +30초 데모 GIF 생성: |
| 163 | +1. Claude Code 세션 → 작업 수행 |
| 164 | +2. 세션 종료 → 일지 자동 생성 확인 |
| 165 | +3. `claude-diary search` → 결과 표시 |
| 166 | +4. `claude-diary stats` → 대시보드 표시 |
| 167 | + |
| 168 | +도구: [asciinema](https://asciinema.org/) 또는 [VHS](https://github.com/charmbracelet/vhs) |
| 169 | + |
| 170 | +#### 3.3.3 홍보 채널 |
| 171 | + |
| 172 | +| 채널 | 형태 | 시기 | |
| 173 | +|------|------|------| |
| 174 | +| Claude Code Discord/Forum | 소개 포스트 | PyPI 배포 후 | |
| 175 | +| Reddit r/ClaudeAI | 사용 사례 포스트 | 피드백 수집 후 | |
| 176 | +| GitHub Discussions | FAQ + 사용 가이드 | 즉시 | |
| 177 | +| 개인 블로그/X | 만든 과정 + 사용법 | 선택 | |
| 178 | + |
| 179 | +--- |
| 180 | + |
| 181 | +### Sprint D-4 — 공식 마켓플레이스 제출 (안정화 후) |
| 182 | + |
| 183 | +#### 3.4.1 제출 전 체크리스트 |
| 184 | + |
| 185 | +- [ ] 커뮤니티 마켓플레이스에서 최소 2주 운영 |
| 186 | +- [ ] 사용자 피드백 반영 (최소 1 iteration) |
| 187 | +- [ ] 버그 리포트 0건 (또는 모두 해결) |
| 188 | +- [ ] 테스트 커버리지 80%+ |
| 189 | +- [ ] CI 전 플랫폼 통과 (Python 3.7~3.12 × 3 OS) |
| 190 | +- [ ] SECURITY.md, CONTRIBUTING.md, LICENSE 완비 |
| 191 | +- [ ] README에 GIF 데모 + 명확한 설치/사용 가이드 |
| 192 | + |
| 193 | +#### 3.4.2 제출 |
| 194 | + |
| 195 | +- https://claude.ai/settings/plugins/submit |
| 196 | +- 또는 https://platform.claude.com/plugins/submit |
| 197 | + |
| 198 | +#### 3.4.3 거절 시 대응 |
| 199 | + |
| 200 | +- 피드백 기반 수정 후 재제출 |
| 201 | +- 커뮤니티 마켓플레이스 + PyPI는 계속 유지 (독립적) |
| 202 | + |
| 203 | +--- |
| 204 | + |
| 205 | +## 4. 기술 결정 |
| 206 | + |
| 207 | +### 4.1 플러그인 vs pip 관계 |
| 208 | + |
| 209 | +``` |
| 210 | +사용자 선택: |
| 211 | +
|
| 212 | +경로 A (Claude Code 네이티브): |
| 213 | + /plugin install working-diary |
| 214 | + → hooks.json이 Stop Hook 자동 등록 |
| 215 | + → pip install claude-diary 안내 |
| 216 | + → claude-diary init 실행 |
| 217 | +
|
| 218 | +경로 B (Python 개발자): |
| 219 | + pip install claude-diary |
| 220 | + → claude-diary init |
| 221 | + → settings.json에 Stop Hook 수동 등록 |
| 222 | +
|
| 223 | +경로 C (수동): |
| 224 | + git clone + ./install.sh (기존 v1.0 방식) |
| 225 | +``` |
| 226 | + |
| 227 | +두 경로 모두 결과는 동일: Stop Hook이 등록되고, 세션 종료마다 일지 자동 생성. |
| 228 | + |
| 229 | +### 4.2 버전 동기화 |
| 230 | + |
| 231 | +- plugin.json의 version과 pyproject.toml의 version을 동기화 |
| 232 | +- Git tag가 single source of truth: `v4.1.0` → 둘 다 `4.1.0` |
| 233 | + |
| 234 | +### 4.3 토큰 사용 제로 원칙 |
| 235 | + |
| 236 | +- 플러그인 설치/사용에 API 토큰 불필요 |
| 237 | +- PyPI 배포는 maintainer만 토큰 필요 (GitHub Actions secret) |
| 238 | +- 사용자는 토큰 없이 100% 기능 사용 가능 |
| 239 | +- Exporter 토큰은 사용자가 직접 설정하는 **선택적** 기능 |
| 240 | + |
| 241 | +--- |
| 242 | + |
| 243 | +## 5. 완료 기준 |
| 244 | + |
| 245 | +### Sprint D-1 (커뮤니티 마켓플레이스) |
| 246 | +- [ ] `.claude-plugin/plugin.json` 작성 |
| 247 | +- [ ] `.claude-plugin/hooks.json` 작성 |
| 248 | +- [ ] `/plugin marketplace add` 테스트 |
| 249 | +- [ ] `/plugin install working-diary` 테스트 |
| 250 | + |
| 251 | +### Sprint D-2 (PyPI) |
| 252 | +- [ ] TestPyPI 배포 성공 |
| 253 | +- [ ] `pip install claude-diary` 동작 확인 |
| 254 | +- [ ] `claude-diary --version` → `4.1.0` |
| 255 | +- [ ] GitHub Actions release workflow 동작 |
| 256 | + |
| 257 | +### Sprint D-3 (GitHub 최적화) |
| 258 | +- [ ] Topics, About, Badges 설정 |
| 259 | +- [ ] GIF 데모 추가 |
| 260 | +- [ ] 최소 1개 채널에 소개 포스트 |
| 261 | + |
| 262 | +### Sprint D-4 (공식 마켓플레이스) |
| 263 | +- [ ] 제출 완료 |
| 264 | +- [ ] 승인 또는 피드백 수신 |
| 265 | + |
| 266 | +--- |
| 267 | + |
| 268 | +## 6. YAGNI Review |
| 269 | + |
| 270 | +| 항목 | 판정 | 비고 | |
| 271 | +|------|------|------| |
| 272 | +| 커뮤니티 마켓플레이스 | KEEP | 즉시 배포 가능, 리스크 제로 | |
| 273 | +| PyPI | KEEP | Python 개발자 표준 채널 | |
| 274 | +| GitHub 최적화 | KEEP | 비용 제로, 효과 높음 | |
| 275 | +| GIF 데모 | KEEP | README의 핵심 (백문이불여일견) | |
| 276 | +| 공식 마켓플레이스 | KEEP (후순위) | 안정화 후 제출 | |
| 277 | +| 블로그/SNS 홍보 | DEFER | 도구 안정화 후 선택적 | |
| 278 | + |
| 279 | +--- |
| 280 | + |
| 281 | +## 7. Brainstorming Log |
| 282 | + |
| 283 | +### 결정 1: 커뮤니티 먼저, 공식은 나중에 |
| 284 | +- **근거**: 공식 마켓플레이스 리뷰 기준이 불투명. 먼저 거절되면 인상 나쁨. 커뮤니티에서 검증 후 제출이 현실적 |
| 285 | + |
| 286 | +### 결정 2: pip과 플러그인 이중 배포 |
| 287 | +- **근거**: Claude Code 사용자는 플러그인, 일반 개발자는 pip. 타겟이 다름. 코드는 동일하고 매니페스트만 추가 |
| 288 | + |
| 289 | +### 결정 3: 토큰 제로 원칙 유지 |
| 290 | +- **근거**: 이 도구의 핵심 가치는 "무료, 로컬, 자동". 배포 과정에서도 이 원칙을 깨면 안 됨 |
0 commit comments