@walwal-harness/cli 1.2.0 → 1.3.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 CHANGED
@@ -170,6 +170,17 @@ your-project/
170
170
  | Unit Testing | Jest (BE) + Vitest (FE) |
171
171
  | Database | PostgreSQL / SQLite |
172
172
 
173
+ ## 권장 외부 스킬
174
+
175
+ 하네스는 자체 reference 파일로 기본 가이드를 제공하지만, 아래 외부 스킬을 설치하면 품질이 향상됩니다. 초기화 시 자동으로 설치 여부를 체크하고 안내합니다.
176
+
177
+ | 스킬 | 설명 | 사용 에이전트 |
178
+ |------|------|-------------|
179
+ | **vercel** | Vercel/Next.js 배포, 성능 최적화, AI SDK | Generator-FE |
180
+ | **web-design-guidelines** | UI/UX 접근성, Web Interface Guidelines | Evaluator-Visual, Generator-FE |
181
+ | **taste-skill** | AI 생성 UI 디자인 품질, AI슬롭 감지 | Evaluator-Visual, Generator-FE |
182
+ | **supanova-design-skill** | 디자인 시스템 규칙, 시각적 일관성 | Evaluator-Visual, Generator-FE |
183
+
173
184
  ## Playwright MCP 설정
174
185
 
175
186
  Evaluator가 브라우저 테스트를 수행하려면 Playwright MCP가 필요합니다. `~/.mcp.json`에 추가:
@@ -84,6 +84,33 @@
84
84
  "gotchas": ".harness/gotchas",
85
85
  "progress": ".harness/progress.txt"
86
86
  },
87
+ "recommended_skills": {
88
+ "comment": "Claude Code에 설치하면 하네스 품질이 향상되는 외부 스킬 목록",
89
+ "vercel": {
90
+ "description": "Vercel/Next.js 배포, 성능 최적화, AI SDK 가이드",
91
+ "used_by": ["generator-frontend"],
92
+ "install": "claude skill install vercel",
93
+ "check_path": ".claude/skills/vercel"
94
+ },
95
+ "web-design-guidelines": {
96
+ "description": "UI/UX 접근성, 디자인 리뷰, Web Interface Guidelines",
97
+ "used_by": ["evaluator-visual", "generator-frontend"],
98
+ "install": "claude skill install web-design-guidelines",
99
+ "check_path": ".claude/skills/web-design-guidelines"
100
+ },
101
+ "taste-skill": {
102
+ "description": "AI 생성 UI의 디자인 품질 검증, AI슬롭 패턴 감지",
103
+ "used_by": ["evaluator-visual", "generator-frontend"],
104
+ "install": "npx claude-skill install leonxlnx/taste-skill",
105
+ "check_path": ".claude/skills/taste-skill"
106
+ },
107
+ "supanova-design-skill": {
108
+ "description": "디자인 시스템 규칙, 컴포넌트 패턴, 시각적 일관성",
109
+ "used_by": ["evaluator-visual", "generator-frontend"],
110
+ "install": "npx claude-skill install uxjoseph/supanova-design-skill",
111
+ "check_path": ".claude/skills/supanova-design-skill"
112
+ }
113
+ },
87
114
  "tech_stack": {
88
115
  "backend": {
89
116
  "framework": "NestJS (TypeScript)",
package/bin/init.js CHANGED
@@ -283,6 +283,60 @@ function checkPlaywrightMcp() {
283
283
  log('');
284
284
  }
285
285
 
286
+ // ─────────────────────────────────────────
287
+ // 6. Recommended skills check
288
+ // ─────────────────────────────────────────
289
+ function checkRecommendedSkills() {
290
+ const configPath = path.join(HARNESS_DIR, 'config.json');
291
+ if (!fileExists(configPath)) return;
292
+
293
+ let config;
294
+ try {
295
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
296
+ } catch (e) { return; }
297
+
298
+ const skills = config.recommended_skills;
299
+ if (!skills) return;
300
+
301
+ const missing = [];
302
+ const found = [];
303
+
304
+ for (const [name, info] of Object.entries(skills)) {
305
+ if (name === 'comment') continue;
306
+ const checkPath = path.join(PROJECT_ROOT, info.check_path);
307
+ if (fileExists(checkPath)) {
308
+ found.push(name);
309
+ } else {
310
+ missing.push({ name, ...info });
311
+ }
312
+ }
313
+
314
+ if (found.length > 0) {
315
+ log(`Recommended skills installed: ${found.join(', ')}`);
316
+ }
317
+
318
+ if (missing.length > 0) {
319
+ console.log('');
320
+ log('╔═══════════════════════════════════════════════════════════╗');
321
+ log('║ Recommended skills (not installed) ║');
322
+ log('╠═══════════════════════════════════════════════════════════╣');
323
+ for (const skill of missing) {
324
+ const agents = skill.used_by.join(', ');
325
+ log(`║ ${skill.name}`);
326
+ log(`║ ${skill.description}`);
327
+ log(`║ Used by: ${agents}`);
328
+ log(`║ Install: ${skill.install}`);
329
+ log('║');
330
+ }
331
+ log('║ These skills are optional but improve output quality. ║');
332
+ log('║ Harness reference files provide baseline guidance ║');
333
+ log('║ even without these skills installed. ║');
334
+ log('╚═══════════════════════════════════════════════════════════╝');
335
+ } else if (found.length > 0) {
336
+ log('All recommended skills are installed!');
337
+ }
338
+ }
339
+
286
340
  // ─────────────────────────────────────────
287
341
  // Help
288
342
  // ─────────────────────────────────────────
@@ -305,6 +359,7 @@ What it does:
305
359
  3. Copies helper scripts to scripts/
306
360
  4. Creates AGENTS.md + CLAUDE.md symlink
307
361
  5. Checks Playwright MCP configuration
362
+ 6. Checks recommended external skills (Vercel, design skills)
308
363
 
309
364
  After init:
310
365
  1. Restart Claude Code session (exit and re-enter) for skills to load
@@ -337,6 +392,7 @@ function main() {
337
392
  installScripts();
338
393
  setupAgentsMd();
339
394
  checkPlaywrightMcp();
395
+ checkRecommendedSkills();
340
396
 
341
397
  console.log('');
342
398
  log('═══ Initialization Complete ═══');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@walwal-harness/cli",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Production harness for AI agent engineering — Planner, Generator(BE/FE), Evaluator(Func/Visual) with Gotcha management",
5
5
  "bin": {
6
6
  "walwal-harness": "bin/init.js"