monol-plugin-scout 2.0.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.
Files changed (29) hide show
  1. package/.claude/plugins/marketplace.json +12 -0
  2. package/.claude/plugins/monol-plugin-scout/CLAUDE.md +135 -0
  3. package/.claude/plugins/monol-plugin-scout/combos/full-review.yaml +33 -0
  4. package/.claude/plugins/monol-plugin-scout/combos/quick-commit.yaml +15 -0
  5. package/.claude/plugins/monol-plugin-scout/commands/audit.md +99 -0
  6. package/.claude/plugins/monol-plugin-scout/commands/cleanup.md +123 -0
  7. package/.claude/plugins/monol-plugin-scout/commands/compare.md +92 -0
  8. package/.claude/plugins/monol-plugin-scout/commands/explore.md +118 -0
  9. package/.claude/plugins/monol-plugin-scout/commands/fork.md +111 -0
  10. package/.claude/plugins/monol-plugin-scout/commands/scout.md +209 -0
  11. package/.claude/plugins/monol-plugin-scout/config.yaml +76 -0
  12. package/.claude/plugins/monol-plugin-scout/data/history.json +36 -0
  13. package/.claude/plugins/monol-plugin-scout/data/usage.json +49 -0
  14. package/.claude/plugins/monol-plugin-scout/overrides/code-review/override.md +21 -0
  15. package/.claude/plugins/monol-plugin-scout/plugin.json +8 -0
  16. package/.claude/plugins/monol-plugin-scout/skills/plugin-evaluation.md +227 -0
  17. package/CHANGELOG.md +41 -0
  18. package/README.md +115 -0
  19. package/docs/DEV_LOG.md +115 -0
  20. package/docs/FEATURE_SPEC.md +284 -0
  21. package/docs/SKILL.md +227 -0
  22. package/docs/TEST_RESULTS.md +155 -0
  23. package/docs/USER_GUIDE.md +364 -0
  24. package/docs/references/license-compatibility.md +58 -0
  25. package/docs/references/scoring-methodology.md +73 -0
  26. package/docs/references/security-checklist.md +91 -0
  27. package/docs/scripts/fetch-plugin-metadata.sh +61 -0
  28. package/examples/basic-usage.md +124 -0
  29. package/package.json +31 -0
@@ -0,0 +1,364 @@
1
+ # Plugin Scout v2 - 사용자 가이드
2
+
3
+ ## 개요
4
+
5
+ Plugin Scout는 Claude Code 플러그인을 발견, 평가, 관리하는 에이전트입니다.
6
+
7
+ ---
8
+
9
+ ## 빠른 시작
10
+
11
+ ### 플러그인 추천 받기
12
+ ```
13
+ 플러그인 추천해줘
14
+ 이 프로젝트에 맞는 플러그인 찾아줘
15
+ ```
16
+
17
+ ### 플러그인 비교하기
18
+ ```
19
+ /scout compare typescript-lsp pyright-lsp
20
+ ```
21
+
22
+ ### 미사용 플러그인 정리
23
+ ```
24
+ /scout cleanup
25
+ ```
26
+
27
+ ---
28
+
29
+ ## 주요 기능
30
+
31
+ ### 1. 프로젝트 스캔 & 추천
32
+
33
+ 프로젝트를 분석하여 적합한 플러그인을 추천합니다.
34
+
35
+ **작동 방식:**
36
+ 1. `package.json`, `requirements.txt` 등 설정 파일 분석
37
+ 2. 언어/프레임워크 감지
38
+ 3. 마켓플레이스 스캔
39
+ 4. 종합 점수 계산 (프로젝트 매칭 40% + 인기도 30% + 보안 30%)
40
+ 5. 인터뷰식 설치 제안
41
+
42
+ **사용 예시:**
43
+ ```
44
+ > 플러그인 추천해줘
45
+
46
+ 📊 Plugin Scout Report
47
+
48
+ 프로젝트: TypeScript + React + Node.js
49
+
50
+ 추천 플러그인:
51
+ 1. typescript-lsp (93점) - TS/JS 코드 인텔리전스
52
+ 2. code-review (88점) - PR 자동 리뷰
53
+
54
+ 설치할까요?
55
+ ```
56
+
57
+ ---
58
+
59
+ ### 2. `/scout compare` - 플러그인 비교
60
+
61
+ 두 개 이상의 플러그인을 비교합니다.
62
+
63
+ **사용법:**
64
+ ```
65
+ /scout compare <plugin1> <plugin2> [plugin3]
66
+ ```
67
+
68
+ **예시:**
69
+ ```
70
+ > /scout compare sentry firebase
71
+
72
+ ┌─────────────┬─────────────────┬─────────────────┐
73
+ │ │ sentry │ firebase │
74
+ ├─────────────┼─────────────────┼─────────────────┤
75
+ │ 카테고리 │ monitoring │ database │
76
+ │ 점수 │ 95 │ 95 │
77
+ │ 설치 │ ✅ │ ❌ │
78
+ └─────────────┴─────────────────┴─────────────────┘
79
+
80
+ 💡 둘 다 프로젝트에 적합합니다. 용도가 다르므로 함께 사용 가능.
81
+ ```
82
+
83
+ ---
84
+
85
+ ### 3. `/scout cleanup` - 미사용 플러그인 정리
86
+
87
+ 30일 이상 사용하지 않은 플러그인을 정리 제안합니다.
88
+
89
+ **사용법:**
90
+ ```
91
+ /scout cleanup
92
+ ```
93
+
94
+ **예시:**
95
+ ```
96
+ 📊 플러그인 정리 제안
97
+
98
+ 오래된 미사용 플러그인이 1개 있습니다:
99
+
100
+ • old-plugin
101
+ 설치: 2025-10-01 (98일 전)
102
+ 마지막 사용: 2025-10-15 (84일 전)
103
+
104
+ 나머지 6개 플러그인은 최근 활발히 사용 중입니다. ✅
105
+
106
+ [제거할 플러그인 선택]
107
+ ```
108
+
109
+ ---
110
+
111
+ ### 4. 작업 완료 후 추천
112
+
113
+ 작업 완료 시 관련 플러그인을 간략히 추천합니다.
114
+
115
+ **트리거 시점:**
116
+ - PR 생성 후
117
+ - 새 기능 구현 후
118
+ - 테스트 작성 후
119
+ - 에러 디버깅 후
120
+
121
+ **예시:**
122
+ ```
123
+ 💡 관련 플러그인 팁이 있어요. 볼까요?
124
+ • 설치된 거 활용법
125
+ • 새 플러그인 추천
126
+ • 다음에
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 익스텐션 시스템
132
+
133
+ ### 5. 플러그인 커스터마이징 (Override)
134
+
135
+ 기존 플러그인에 커스텀 규칙을 추가합니다.
136
+
137
+ **위치:**
138
+ ```
139
+ .claude/plugin-overrides/<plugin-name>/override.md
140
+ ```
141
+
142
+ **예시 (code-review 커스텀):**
143
+ ```markdown
144
+ ---
145
+ plugin: code-review
146
+ version: ">=1.0.0"
147
+ ---
148
+
149
+ # 추가 체크 항목
150
+ - 한국어 주석 권장
151
+ - console.log 사용 금지
152
+ - any 타입 경고
153
+
154
+ # 무시 항목
155
+ - 테스트 파일 (*.test.ts)
156
+ ```
157
+
158
+ ---
159
+
160
+ ### 6. 플러그인 조합 (Combos)
161
+
162
+ 여러 플러그인을 순차 실행하는 워크플로우를 정의합니다.
163
+
164
+ **위치:**
165
+ ```
166
+ .claude/combos/<combo-name>.yaml
167
+ ```
168
+
169
+ **예시 (full-review.yaml):**
170
+ ```yaml
171
+ name: full-review
172
+ trigger: "/full-review"
173
+ steps:
174
+ - plugin: commit-commands
175
+ action: commit
176
+ - plugin: code-review
177
+ action: review
178
+ - plugin: commit-commands
179
+ action: pr
180
+ ```
181
+
182
+ **사용:**
183
+ ```
184
+ /full-review
185
+ → 커밋 → 리뷰 → PR 생성 자동 진행
186
+ ```
187
+
188
+ ---
189
+
190
+ ### 7. `/scout fork` - 플러그인 포크
191
+
192
+ 플러그인을 복사하여 커스텀 버전을 만듭니다.
193
+
194
+ **사용법:**
195
+ ```
196
+ /scout fork code-review my-code-review
197
+ ```
198
+
199
+ **결과:**
200
+ ```
201
+ .claude/plugins/my-code-review/
202
+ ├── plugin.json
203
+ ├── agents/
204
+ └── FORKED_FROM.txt
205
+ ```
206
+
207
+ ---
208
+
209
+ ## 학습 시스템
210
+
211
+ Plugin Scout는 사용자 행동을 학습합니다:
212
+
213
+ ### 거절 학습
214
+ - 3번 거절한 플러그인은 추천에서 제외
215
+ - `.claude/scout-history.json`에 기록
216
+
217
+ ### 선호도 학습
218
+ - 자주 설치하는 카테고리 우선 추천
219
+ - 프로젝트 패턴 기억
220
+
221
+ ---
222
+
223
+ ## 파일 구조
224
+
225
+ ```
226
+ .claude/
227
+ ├── agents/
228
+ │ └── plugin-scout.md # 메인 에이전트
229
+ ├── skills/
230
+ │ └── plugin-evaluation/
231
+ │ ├── SKILL.md # 평가 스킬
232
+ │ ├── FEATURE_SPEC.md # 기능 명세
233
+ │ ├── TEST_RESULTS.md # 테스트 결과
234
+ │ ├── USER_GUIDE.md # 이 문서
235
+ │ └── references/
236
+ ├── plugins/ # 포크한 플러그인
237
+ ├── plugin-overrides/ # 커스텀 규칙
238
+ │ └── code-review/
239
+ │ └── override.md
240
+ ├── combos/ # 워크플로우
241
+ │ ├── full-review.yaml
242
+ │ └── quick-commit.yaml
243
+ ├── scout-history.json # 학습 데이터
244
+ └── scout-usage.json # 사용 기록
245
+ ```
246
+
247
+ ---
248
+
249
+ ## 활용 예시
250
+
251
+ ### 예시 1: 새 프로젝트 시작
252
+
253
+ ```
254
+ > 새 TypeScript 프로젝트를 시작했어. 유용한 플러그인 있어?
255
+
256
+ [Plugin Scout가 프로젝트 분석]
257
+
258
+ 추천:
259
+ 1. typescript-lsp - 코드 인텔리전스
260
+ 2. commit-commands - Git 워크플로우
261
+ 3. code-review - PR 리뷰
262
+
263
+ 설치할까요?
264
+ > 1, 2번 설치해줘
265
+
266
+ ✅ typescript-lsp 설치 완료
267
+ ✅ commit-commands 설치 완료
268
+ ```
269
+
270
+ ### 예시 2: 기존 통합 활용
271
+
272
+ ```
273
+ > 이 프로젝트에 Sentry 쓰고 있는데 관련 플러그인 있어?
274
+
275
+ [프로젝트 스캔: @sentry/node 발견]
276
+
277
+ sentry 플러그인을 설치하면:
278
+ - 에러 리포트 직접 조회
279
+ - 스택 트레이스 분석
280
+ - 이슈 검색
281
+
282
+ 설치할까요?
283
+ ```
284
+
285
+ ### 예시 3: 워크플로우 자동화
286
+
287
+ ```
288
+ > 커밋부터 PR까지 한번에 할 수 있어?
289
+
290
+ [combos/full-review.yaml 발견]
291
+
292
+ /full-review 명령으로 가능해요:
293
+ 1. 변경사항 커밋
294
+ 2. 코드 리뷰
295
+ 3. PR 생성
296
+
297
+ 실행할까요?
298
+ ```
299
+
300
+ ### 예시 4: 플러그인 정리
301
+
302
+ ```
303
+ > 설치된 플러그인 중에 안 쓰는 거 있어?
304
+
305
+ /scout cleanup
306
+
307
+ 📊 플러그인 정리 제안
308
+
309
+ 오래된 미사용 플러그인 1개:
310
+ • old-plugin (84일간 미사용)
311
+
312
+ 제거할까요?
313
+ ```
314
+
315
+ ---
316
+
317
+ ## 설정
318
+
319
+ ### 무음 모드
320
+ ```
321
+ /scout quiet on # 자동 추천 끄기
322
+ /scout quiet off # 다시 켜기
323
+ ```
324
+
325
+ ### 히스토리 초기화
326
+ ```
327
+ /scout reset-history
328
+ ```
329
+
330
+ ---
331
+
332
+ ## FAQ
333
+
334
+ **Q: 플러그인이 자동으로 설치되나요?**
335
+ A: 아니요. 항상 사용자 동의 후에만 설치됩니다.
336
+
337
+ **Q: 추천을 끌 수 있나요?**
338
+ A: `/scout quiet on`으로 자동 추천을 끌 수 있습니다.
339
+
340
+ **Q: 팀과 설정을 공유할 수 있나요?**
341
+ A: `.claude/` 폴더를 git에 커밋하면 팀과 공유됩니다.
342
+
343
+ ---
344
+
345
+ ## 문제 해결
346
+
347
+ ### 플러그인이 안 보여요
348
+ ```
349
+ /plugin marketplace list
350
+ /plugin marketplace update
351
+ ```
352
+
353
+ ### 추천이 안 맞아요
354
+ ```
355
+ /scout reset-history
356
+ ```
357
+ 히스토리를 초기화하고 다시 학습합니다.
358
+
359
+ ---
360
+
361
+ ## 버전 정보
362
+
363
+ - **v1.0**: 기본 추천, 인터뷰식 설치
364
+ - **v2.0**: compare, cleanup, 익스텐션 시스템, 학습
@@ -0,0 +1,58 @@
1
+ # License Compatibility Matrix
2
+
3
+ ## Permissive Licenses (Recommended)
4
+
5
+ | License | Commercial | Modification | Distribution | Private |
6
+ |---------|------------|--------------|--------------|---------|
7
+ | MIT | Yes | Yes | Yes | Yes |
8
+ | Apache-2.0 | Yes | Yes | Yes | Yes |
9
+ | BSD-2-Clause | Yes | Yes | Yes | Yes |
10
+ | BSD-3-Clause | Yes | Yes | Yes | Yes |
11
+ | ISC | Yes | Yes | Yes | Yes |
12
+
13
+ **Requirements**: Attribution in documentation/source
14
+
15
+ ---
16
+
17
+ ## Copyleft Licenses (Caution)
18
+
19
+ | License | Commercial | Modification | Copyleft |
20
+ |---------|------------|--------------|----------|
21
+ | GPL-3.0 | Yes* | Yes* | Strong |
22
+ | GPL-2.0 | Yes* | Yes* | Strong |
23
+ | LGPL-3.0 | Yes | Yes* | Weak |
24
+ | MPL-2.0 | Yes | Yes* | Weak |
25
+
26
+ *Derivative works must use same license
27
+
28
+ ---
29
+
30
+ ## Compatibility with Project Licenses
31
+
32
+ ### If your project uses MIT/Apache-2.0:
33
+ - **Permissive**: Full compatibility
34
+ - **LGPL**: Compatible (for linking)
35
+ - **GPL**: May require project relicensing
36
+
37
+ ### If your project uses GPL:
38
+ - **All open source**: Compatible
39
+ - **Proprietary plugins**: Not compatible
40
+
41
+ ---
42
+
43
+ ## Recommendations
44
+
45
+ | Project Type | Recommended Plugin Licenses |
46
+ |--------------|----------------------------|
47
+ | Commercial/Enterprise | MIT, Apache-2.0, BSD |
48
+ | Open Source | Any OSI-approved |
49
+ | Internal Tools | MIT, Apache-2.0, LGPL |
50
+
51
+ ---
52
+
53
+ ## Unknown License Handling
54
+
55
+ 1. Check for LICENSE file in repository
56
+ 2. Check package.json/Cargo.toml for license field
57
+ 3. Contact author for clarification
58
+ 4. **If unclear**: Avoid installation
@@ -0,0 +1,73 @@
1
+ # Scoring Methodology Reference
2
+
3
+ ## Detailed Formulas
4
+
5
+ ### Project Match Score Calculation
6
+
7
+ ```
8
+ project_match = language + framework + category + dependency + architecture
9
+
10
+ Where:
11
+ language = 0-30 points (exact: 30, related: 15, none: 0)
12
+ framework = 0-25 points (exact: 25, compatible: 15, none: 0)
13
+ category = 0-20 points (high: 20, medium: 10, low: 5)
14
+ dependency = 0-15 points (no conflict: 15, minor: 5, major: 0)
15
+ architecture = 0-10 points (excellent: 10, good: 5, poor: 0)
16
+
17
+ Total possible: 100 points
18
+ ```
19
+
20
+ ### Multi-Language Projects
21
+
22
+ When multiple languages are detected:
23
+
24
+ ```
25
+ weighted_score = (primary_lang_score × 0.6) + (secondary_lang_score × 0.4)
26
+ ```
27
+
28
+ Primary language is determined by:
29
+ 1. Explicit config (package.json → JS/TS)
30
+ 2. File count percentage
31
+ 3. Build tool presence
32
+
33
+ ### Popularity Score Normalization
34
+
35
+ GitHub stars vary widely. Use logarithmic normalization:
36
+
37
+ ```
38
+ normalized_stars = min(log10(stars + 1) / log10(100000) × 100, 100)
39
+
40
+ Examples:
41
+ 10 stars → 25 points
42
+ 100 stars → 50 points
43
+ 1,000 stars → 75 points
44
+ 10,000 stars → 100 points
45
+ ```
46
+
47
+ ### Commit Freshness
48
+
49
+ ```
50
+ freshness_score = max(0, 100 - (days_since_update × 0.27))
51
+
52
+ Examples:
53
+ 1 day ago → 100 points
54
+ 30 days ago → 92 points
55
+ 180 days ago → 51 points
56
+ 365 days ago → 1 point
57
+ ```
58
+
59
+ ### Composite Score
60
+
61
+ ```
62
+ composite = (project_match × 0.40) + (popularity × 0.30) + (security × 0.30)
63
+ ```
64
+
65
+ ### Edge Cases
66
+
67
+ | Scenario | Handling |
68
+ |----------|----------|
69
+ | No GitHub data | Use default popularity = 50 |
70
+ | Unknown license | Security license score = 0 |
71
+ | No recent commits | Commits score = 5 (minimum) |
72
+ | Fork of popular repo | Use original repo's stats |
73
+ | Archived repository | Reduce popularity by 50% |
@@ -0,0 +1,91 @@
1
+ # Plugin Security Checklist
2
+
3
+ ## Pre-Installation Review
4
+
5
+ ### Source Verification
6
+ - [ ] Plugin source is from known marketplace
7
+ - [ ] Repository URL is accessible and valid
8
+ - [ ] Author/organization can be verified
9
+ - [ ] No typosquatting in name (e.g., "typescrit-lsp")
10
+
11
+ ### License Review
12
+ - [ ] License file is present
13
+ - [ ] License is OSI-approved
14
+ - [ ] License is compatible with project
15
+ - [ ] No unusual restrictions or obligations
16
+
17
+ ### Maintenance Status
18
+ - [ ] Active development (commits in last year)
19
+ - [ ] Issues are being addressed
20
+ - [ ] Security issues get prompt response
21
+ - [ ] Reasonable open/closed issue ratio
22
+
23
+ ### Author Trust
24
+ - [ ] Author has other reputable projects
25
+ - [ ] Organization is verified (if applicable)
26
+ - [ ] No history of malicious packages
27
+
28
+ ---
29
+
30
+ ## Red Flags
31
+
32
+ ### Immediate Rejection
33
+ - Unknown or missing license
34
+ - Obfuscated code
35
+ - Requests excessive permissions
36
+ - Known critical vulnerabilities
37
+ - Author cannot be verified
38
+ - Typosquatting on popular plugin names
39
+
40
+ ### Proceed with Caution
41
+ - Last update > 1 year ago
42
+ - No issue response
43
+ - GPL license (copyleft implications)
44
+ - New/unknown author
45
+ - Very few stars or forks
46
+ - No documentation
47
+
48
+ ---
49
+
50
+ ## Security Warning Triggers
51
+
52
+ | Condition | Warning Level |
53
+ |-----------|---------------|
54
+ | License unknown | Critical |
55
+ | Critical vulnerability | Critical |
56
+ | Author unknown | Critical |
57
+ | Last update > 2 years | Critical |
58
+ | License restrictive | Moderate |
59
+ | Minor vulnerability | Moderate |
60
+ | New author | Moderate |
61
+ | Last update > 1 year | Moderate |
62
+ | Community-managed | Informational |
63
+ | Attribution required | Informational |
64
+ | Beta/experimental | Informational |
65
+
66
+ ---
67
+
68
+ ## Warning Message Templates
69
+
70
+ ### Critical Warning
71
+ ```
72
+ ⚠️ CRITICAL: [plugin-name]
73
+ - [Issue description]
74
+ - Installation NOT recommended
75
+ - Risk: [specific risk]
76
+ ```
77
+
78
+ ### Moderate Warning
79
+ ```
80
+ ⚠️ Warning: [plugin-name]
81
+ - [Issue description]
82
+ - Proceed with caution
83
+ - Consider: [alternative or mitigation]
84
+ ```
85
+
86
+ ### Informational Notice
87
+ ```
88
+ ℹ️ Notice: [plugin-name]
89
+ - [Information]
90
+ - No action required
91
+ ```
@@ -0,0 +1,61 @@
1
+ #!/bin/bash
2
+ # fetch-plugin-metadata.sh
3
+ # Extract metadata from plugin manifest for evaluation
4
+
5
+ set -euo pipefail
6
+
7
+ PLUGIN_PATH="${1:-}"
8
+
9
+ usage() {
10
+ echo "Usage: fetch-plugin-metadata.sh <plugin-path>"
11
+ echo ""
12
+ echo "Extracts metadata from a local plugin directory."
13
+ echo ""
14
+ echo "Example:"
15
+ echo " fetch-plugin-metadata.sh ./my-plugin"
16
+ exit 1
17
+ }
18
+
19
+ if [ -z "$PLUGIN_PATH" ]; then
20
+ usage
21
+ fi
22
+
23
+ if [ ! -d "$PLUGIN_PATH" ]; then
24
+ echo "{\"error\": \"Directory not found: $PLUGIN_PATH\"}" >&2
25
+ exit 1
26
+ fi
27
+
28
+ # Check for plugin.json in standard location
29
+ MANIFEST="$PLUGIN_PATH/.claude-plugin/plugin.json"
30
+
31
+ if [ ! -f "$MANIFEST" ]; then
32
+ # Try alternative location
33
+ MANIFEST="$PLUGIN_PATH/plugin.json"
34
+ fi
35
+
36
+ if [ ! -f "$MANIFEST" ]; then
37
+ echo "{\"error\": \"No plugin.json found in $PLUGIN_PATH\"}" >&2
38
+ exit 1
39
+ fi
40
+
41
+ # Extract and format metadata using jq if available
42
+ if command -v jq &> /dev/null; then
43
+ cat "$MANIFEST" | jq '{
44
+ name: .name,
45
+ description: .description,
46
+ version: .version,
47
+ author: .author,
48
+ license: .license,
49
+ homepage: .homepage,
50
+ repository: .repository,
51
+ keywords: .keywords,
52
+ commands: (.commands | if type == "array" then length else 0 end),
53
+ agents: (.agents | if type == "array" then length else 0 end),
54
+ skills: (.skills | if type == "array" then length else 0 end),
55
+ hooks: (.hooks | if type == "object" then keys else [] end),
56
+ source: "local"
57
+ }'
58
+ else
59
+ # Fallback: just output the raw manifest
60
+ cat "$MANIFEST"
61
+ fi