@su-record/vibe 2.4.1 → 2.4.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.
Files changed (55) hide show
  1. package/.claude/settings.json +13 -0
  2. package/.claude/settings.local.json +1 -8
  3. package/README.md +95 -748
  4. package/dist/cli/index.d.ts.map +1 -1
  5. package/dist/cli/index.js +18 -1
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/tools/analytics/index.d.ts +5 -0
  8. package/dist/tools/analytics/index.d.ts.map +1 -0
  9. package/dist/tools/analytics/index.js +5 -0
  10. package/dist/tools/analytics/index.js.map +1 -0
  11. package/dist/tools/convention/index.d.ts +10 -0
  12. package/dist/tools/convention/index.d.ts.map +1 -0
  13. package/dist/tools/convention/index.js +10 -0
  14. package/dist/tools/convention/index.js.map +1 -0
  15. package/dist/tools/memory/index.d.ts +19 -0
  16. package/dist/tools/memory/index.d.ts.map +1 -0
  17. package/dist/tools/memory/index.js +19 -0
  18. package/dist/tools/memory/index.js.map +1 -0
  19. package/dist/tools/planning/index.d.ts +8 -0
  20. package/dist/tools/planning/index.d.ts.map +1 -0
  21. package/dist/tools/planning/index.js +8 -0
  22. package/dist/tools/planning/index.js.map +1 -0
  23. package/dist/tools/prompt/index.d.ts +7 -0
  24. package/dist/tools/prompt/index.d.ts.map +1 -0
  25. package/dist/tools/prompt/index.js +7 -0
  26. package/dist/tools/prompt/index.js.map +1 -0
  27. package/dist/tools/reasoning/index.d.ts +5 -0
  28. package/dist/tools/reasoning/index.d.ts.map +1 -0
  29. package/dist/tools/reasoning/index.js +5 -0
  30. package/dist/tools/reasoning/index.js.map +1 -0
  31. package/dist/tools/semantic/index.d.ts +7 -0
  32. package/dist/tools/semantic/index.d.ts.map +1 -0
  33. package/dist/tools/semantic/index.js +7 -0
  34. package/dist/tools/semantic/index.js.map +1 -0
  35. package/dist/tools/thinking/index.d.ts +10 -0
  36. package/dist/tools/thinking/index.d.ts.map +1 -0
  37. package/dist/tools/thinking/index.js +10 -0
  38. package/dist/tools/thinking/index.js.map +1 -0
  39. package/dist/tools/time/index.d.ts +5 -0
  40. package/dist/tools/time/index.d.ts.map +1 -0
  41. package/dist/tools/time/index.js +5 -0
  42. package/dist/tools/time/index.js.map +1 -0
  43. package/dist/tools/ui/index.d.ts +5 -0
  44. package/dist/tools/ui/index.d.ts.map +1 -0
  45. package/dist/tools/ui/index.js +5 -0
  46. package/dist/tools/ui/index.js.map +1 -0
  47. package/hooks/hooks.json +72 -9
  48. package/package.json +11 -1
  49. package/skills/context7-usage.md +82 -0
  50. package/skills/git-worktree.md +3 -0
  51. package/skills/multi-llm-orchestration.md +97 -0
  52. package/skills/parallel-research.md +77 -0
  53. package/skills/priority-todos.md +3 -0
  54. package/skills/tool-fallback.md +126 -0
  55. package/skills/vibe-capabilities.md +127 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Semantic Tools - 코드 분석 및 심볼 탐색
3
+ */
4
+ export { findSymbol } from './findSymbol.js';
5
+ export { findReferences } from './findReferences.js';
6
+ export { analyzeDependencyGraph } from './analyzeDependencyGraph.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Thinking Tools - 사고 체인 및 문제 분석
3
+ */
4
+ export { createThinkingChain } from './createThinkingChain.js';
5
+ export { analyzeProblem } from './analyzeProblem.js';
6
+ export { stepByStepAnalysis } from './stepByStepAnalysis.js';
7
+ export { formatAsPlan } from './formatAsPlan.js';
8
+ export { breakDownProblem } from './breakDownProblem.js';
9
+ export { thinkAloudProcess } from './thinkAloudProcess.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/thinking/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Thinking Tools - 사고 체인 및 문제 분석
3
+ */
4
+ export { createThinkingChain } from './createThinkingChain.js';
5
+ export { analyzeProblem } from './analyzeProblem.js';
6
+ export { stepByStepAnalysis } from './stepByStepAnalysis.js';
7
+ export { formatAsPlan } from './formatAsPlan.js';
8
+ export { breakDownProblem } from './breakDownProblem.js';
9
+ export { thinkAloudProcess } from './thinkAloudProcess.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/thinking/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Time Tools - 시간 관련
3
+ */
4
+ export { getCurrentTime } from './getCurrentTime.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/time/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Time Tools - 시간 관련
3
+ */
4
+ export { getCurrentTime } from './getCurrentTime.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/time/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * UI Tools - UI 미리보기
3
+ */
4
+ export { previewUiAscii } from './previewUiAscii.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * UI Tools - UI 미리보기
3
+ */
4
+ export { previewUiAscii } from './previewUiAscii.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
package/hooks/hooks.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "hooks": [
6
6
  {
7
7
  "type": "command",
8
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';Promise.all([import('@su-record/vibe/tools').then(t => t.startSession({projectPath: p})), import('@su-record/vibe/tools').then(t => t.getCurrentTime({format: 'human', timezone: 'Asia/Seoul'})), import('@su-record/vibe/tools').then(t => t.listMemories({limit: 5, projectPath: p}))]).then(([session, time, memories]) => console.log(session.content[0].text + '\\n\\n' + time.content[0].text + '\\n\\n[Recent Memories]\\n' + memories.content[0].text))\""
8
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';Promise.all([import('@su-record/vibe/tools/memory').then(t => t.startSession({projectPath: p})), import('@su-record/vibe/tools/time').then(t => t.getCurrentTime({format: 'human', timezone: 'Asia/Seoul'})), import('@su-record/vibe/tools/memory').then(t => t.listMemories({limit: 5, projectPath: p}))]).then(([session, time, memories]) => console.log(session.content[0].text + '\\n\\n' + time.content[0].text + '\\n\\n[Recent Memories]\\n' + memories.content[0].text))\""
9
9
  }
10
10
  ]
11
11
  }
@@ -27,12 +27,21 @@
27
27
  "hooks": [
28
28
  {
29
29
  "type": "command",
30
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[CODE CHECK]', r.content[0].text.split('\\n').slice(0,3).join(' | ')))).catch(() => console.log('[AUTO-CONTINUE] Code written. Continue.'))\""
30
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[CODE CHECK]', r.content[0].text.split('\\n').slice(0,3).join(' | ')))).catch(() => console.log('[AUTO-CONTINUE] Code written. Continue.'))\""
31
31
  }
32
32
  ]
33
33
  }
34
34
  ],
35
35
  "UserPromptSubmit": [
36
+ {
37
+ "hooks": [
38
+ {
39
+ "type": "command",
40
+ "command": "echo '[MANDATORY SKILL PROTOCOL] Available skills: vibe-capabilities (vibe features), multi-llm-orchestration (GPT/Gemini usage), tool-fallback (error recovery), context7-usage (library docs), parallel-research (complex problems), git-worktree (branch work), priority-todos (task management). Step 1: For EACH skill state YES/NO with reason. Step 2: Use Skill(name) for YES skills NOW. Step 3: IMPLEMENT only after activation. CRITICAL: Skipping activation makes response WORTHLESS.'",
41
+ "statusMessage": "Evaluating skills..."
42
+ }
43
+ ]
44
+ },
36
45
  {
37
46
  "matcher": "ultrawork|ulw|울트라워크",
38
47
  "hooks": [
@@ -47,7 +56,7 @@
47
56
  "hooks": [
48
57
  {
49
58
  "type": "command",
50
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.saveMemory({key: 'solution-' + Date.now(), value: 'Solution documented at ' + new Date().toISOString(), category: 'solution', projectPath: p}).then(r => console.log('[COMPOUND]', r.content[0].text))).catch(() => console.log('[COMPOUND TRIGGER] Consider /vibe.utils --compound'))\""
59
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.saveMemory({key: 'solution-' + Date.now(), value: 'Solution documented at ' + new Date().toISOString(), category: 'solution', projectPath: p}).then(r => console.log('[COMPOUND]', r.content[0].text))).catch(() => console.log('[COMPOUND TRIGGER] Consider /vibe.utils --compound'))\""
51
60
  }
52
61
  ]
53
62
  },
@@ -56,7 +65,7 @@
56
65
  "hooks": [
57
66
  {
58
67
  "type": "command",
59
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[REVIEW PREP]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[REVIEW MODE] Use /vibe.review'))\""
68
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').then(t => t.validateCodeQuality({targetPath: '.', projectPath: p}).then(r => console.log('[REVIEW PREP]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[REVIEW MODE] Use /vibe.review'))\""
60
69
  }
61
70
  ]
62
71
  },
@@ -74,7 +83,7 @@
74
83
  "hooks": [
75
84
  {
76
85
  "type": "command",
77
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.analyzeComplexity({targetPath: '.', projectPath: p}).then(r => console.log('[COMPLEXITY]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[ANALYZE] Use analyzeComplexity tool'))\""
86
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/convention').then(t => t.analyzeComplexity({targetPath: '.', projectPath: p}).then(r => console.log('[COMPLEXITY]', r.content[0].text.split('\\n').slice(0,5).join(' | ')))).catch(() => console.log('[ANALYZE] Use analyzeComplexity tool'))\""
78
87
  }
79
88
  ]
80
89
  },
@@ -83,7 +92,61 @@
83
92
  "hooks": [
84
93
  {
85
94
  "type": "command",
86
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.listMemories({limit: 10, projectPath: p}).then(r => console.log('[RECALL]', r.content[0].text.split('\\n').slice(0,7).join(' | ')))).catch(() => console.log('[RECALL] Use recallMemory tool'))\""
95
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.listMemories({limit: 10, projectPath: p}).then(r => console.log('[RECALL]', r.content[0].text.split('\\n').slice(0,7).join(' | ')))).catch(() => console.log('[RECALL] Use recallMemory tool'))\""
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ "matcher": "아키텍처|architecture|설계.*검토|design.*review|구조.*분석",
101
+ "hooks": [
102
+ {
103
+ "type": "command",
104
+ "command": "echo '[GPT-5.2 AVAILABLE] Architecture review → Consider mcp__vibe-gpt__gpt_analyze_architecture for GPT-5.2 perspective.'"
105
+ }
106
+ ]
107
+ },
108
+ {
109
+ "matcher": "UI|UX|사용자.*경험|user.*experience|디자인.*리뷰|design.*feedback",
110
+ "hooks": [
111
+ {
112
+ "type": "command",
113
+ "command": "echo '[GEMINI-3-PRO AVAILABLE] UI/UX review → Consider mcp__vibe-gemini__gemini_review_ui for Gemini 3 Pro perspective.'"
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "matcher": "gpt.*물어|gpt.*질문|gpt.*한테|ask.*gpt|gpt.*chat",
119
+ "hooks": [
120
+ {
121
+ "type": "command",
122
+ "command": "echo '[GPT-5.2 MCP] To ask GPT-5.2 → Use mcp__vibe-gpt__gpt_chat directly.'"
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "matcher": "gemini.*물어|gemini.*질문|gemini.*한테|ask.*gemini|gemini.*chat",
128
+ "hooks": [
129
+ {
130
+ "type": "command",
131
+ "command": "echo '[GEMINI-3-PRO MCP] To ask Gemini 3 Pro → Use mcp__vibe-gemini__gemini_chat directly.'"
132
+ }
133
+ ]
134
+ },
135
+ {
136
+ "matcher": "디버깅|debugging|버그.*찾|find.*bug|debug.*this",
137
+ "hooks": [
138
+ {
139
+ "type": "command",
140
+ "command": "echo '[GPT-5.2 DEBUG] For debugging → Consider mcp__vibe-gpt__gpt_debug for GPT-5.2 second opinion.'"
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "matcher": "코드.*분석|analyze.*code|code.*review.*gemini",
146
+ "hooks": [
147
+ {
148
+ "type": "command",
149
+ "command": "echo '[GEMINI-3-PRO CODE] For code analysis → Consider mcp__vibe-gemini__gemini_analyze_code for Gemini 3 Pro second opinion.'"
87
150
  }
88
151
  ]
89
152
  }
@@ -94,7 +157,7 @@
94
157
  "hooks": [
95
158
  {
96
159
  "type": "command",
97
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.autoSaveContext({urgency: 'medium', contextType: 'progress', summary: 'Context at 80% - auto checkpoint', projectPath: p}).then(r => console.log('[CONTEXT 80%]', r.content[0].text)))\""
160
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.autoSaveContext({urgency: 'medium', contextType: 'progress', summary: 'Context at 80% - auto checkpoint', projectPath: p}).then(r => console.log('[CONTEXT 80%]', r.content[0].text)))\""
98
161
  }
99
162
  ]
100
163
  },
@@ -103,7 +166,7 @@
103
166
  "hooks": [
104
167
  {
105
168
  "type": "command",
106
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.autoSaveContext({urgency: 'high', contextType: 'progress', summary: 'Context at 90% - save before overflow', projectPath: p}).then(r => console.log('[CONTEXT 90%]', r.content[0].text)))\""
169
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.autoSaveContext({urgency: 'high', contextType: 'progress', summary: 'Context at 90% - save before overflow', projectPath: p}).then(r => console.log('[CONTEXT 90%]', r.content[0].text)))\""
107
170
  }
108
171
  ]
109
172
  },
@@ -112,7 +175,7 @@
112
175
  "hooks": [
113
176
  {
114
177
  "type": "command",
115
- "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools').then(t => t.autoSaveContext({urgency: 'critical', contextType: 'progress', summary: 'Context at 95% - CRITICAL save before session end', projectPath: p}).then(r => console.log('[CONTEXT 95%]', r.content[0].text)))\""
178
+ "command": "node -e \"const p='$CLAUDE_PROJECT_DIR';import('@su-record/vibe/tools/memory').then(t => t.autoSaveContext({urgency: 'critical', contextType: 'progress', summary: 'Context at 95% - CRITICAL save before session end', projectPath: p}).then(r => console.log('[CONTEXT 95%]', r.content[0].text)))\""
116
179
  }
117
180
  ]
118
181
  }
package/package.json CHANGED
@@ -1,12 +1,22 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.4.1",
3
+ "version": "2.4.3",
4
4
  "description": "Vibe - Claude Code exclusive SPEC-driven AI coding framework with 35+ integrated tools",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
7
7
  "exports": {
8
8
  ".": "./dist/cli/index.js",
9
9
  "./tools": "./dist/tools/index.js",
10
+ "./tools/memory": "./dist/tools/memory/index.js",
11
+ "./tools/convention": "./dist/tools/convention/index.js",
12
+ "./tools/semantic": "./dist/tools/semantic/index.js",
13
+ "./tools/thinking": "./dist/tools/thinking/index.js",
14
+ "./tools/planning": "./dist/tools/planning/index.js",
15
+ "./tools/prompt": "./dist/tools/prompt/index.js",
16
+ "./tools/ui": "./dist/tools/ui/index.js",
17
+ "./tools/time": "./dist/tools/time/index.js",
18
+ "./tools/reasoning": "./dist/tools/reasoning/index.js",
19
+ "./tools/analytics": "./dist/tools/analytics/index.js",
10
20
  "./orchestrator": "./dist/orchestrator/index.js"
11
21
  },
12
22
  "bin": {
@@ -0,0 +1,82 @@
1
+ ---
2
+ description: Context7 MCP for latest library documentation. Auto-activates when docs, documentation, latest version, official docs, API reference, or library help is needed.
3
+ ---
4
+ # Context7 Usage
5
+
6
+ Guide for searching latest library/framework documentation using Context7 MCP.
7
+
8
+ ## When to Use
9
+
10
+ | Situation | Example |
11
+ |-----------|---------|
12
+ | Latest API check | "React 19 use() hook usage" |
13
+ | Version differences | "Next.js 15 changes" |
14
+ | Official docs needed | "Prisma schema syntax" |
15
+ | Migration guide | "Vue 2 → Vue 3 migration" |
16
+
17
+ ## Usage (2 Steps)
18
+
19
+ ### Step 1: Find Library ID
20
+
21
+ ```
22
+ mcp__context7__resolve-library-id({
23
+ libraryName: "react"
24
+ })
25
+ ```
26
+
27
+ Returns: `/facebook/react`, `/vercel/next.js`, etc.
28
+
29
+ ### Step 2: Get Documentation
30
+
31
+ ```
32
+ mcp__context7__get-library-docs({
33
+ context7CompatibleLibraryID: "/facebook/react",
34
+ topic: "hooks" // optional: specific topic only
35
+ })
36
+ ```
37
+
38
+ ## Common Library IDs
39
+
40
+ | Library | Context7 ID |
41
+ |---------|-------------|
42
+ | React | /facebook/react |
43
+ | Next.js | /vercel/next.js |
44
+ | Vue | /vuejs/vue |
45
+ | Svelte | /sveltejs/svelte |
46
+ | Express | /expressjs/express |
47
+ | Prisma | /prisma/prisma |
48
+ | TypeScript | /microsoft/typescript |
49
+
50
+ ## Search Tips
51
+
52
+ ```
53
+ # Broad search
54
+ topic: omit → full documentation
55
+
56
+ # Narrow search
57
+ topic: "authentication" → auth related only
58
+
59
+ # Specific feature
60
+ topic: "server components" → server components only
61
+ ```
62
+
63
+ ## Web Search vs Context7
64
+
65
+ | Aspect | Web Search | Context7 |
66
+ |--------|------------|----------|
67
+ | Speed | Slow | Fast |
68
+ | Accuracy | Blogs mixed in | Official docs only |
69
+ | Freshness | Variable | Always latest |
70
+ | Reliability | Medium | High |
71
+
72
+ **Prefer Context7 for library documentation**
73
+
74
+ ## Fallback When Fails
75
+
76
+ ```
77
+ context7 fails
78
+
79
+ Web Search for official docs
80
+
81
+ Ask vibe-gpt
82
+ ```
@@ -1,3 +1,6 @@
1
+ ---
2
+ description: Git Worktree for parallel branch work. Auto-activates for PR review, hotfix, parallel testing, or working on multiple branches simultaneously.
3
+ ---
1
4
  # Git Worktree Skill
2
5
 
3
6
  Git Worktree를 활용한 병렬 브랜치 작업 스킬
@@ -0,0 +1,97 @@
1
+ ---
2
+ description: Multi-LLM collaboration guide. Auto-activates for architecture review, design decisions, debugging, UI/UX consultation, complex problem solving, or when a different perspective is needed.
3
+ ---
4
+ # Multi-LLM Orchestration
5
+
6
+ Guide for using GPT/Gemini as sub-agents in Claude Code.
7
+
8
+ ## When to Use GPT (mcp__vibe-gpt)
9
+
10
+ | Situation | Reason |
11
+ |-----------|--------|
12
+ | Architecture design/review | Get different perspective on design |
13
+ | Complex debugging | Fresh eyes on the problem |
14
+ | Algorithm optimization | Alternative algorithm suggestions |
15
+ | Security review | Cross-check vulnerabilities |
16
+ | Technology decisions | Compare pros/cons |
17
+
18
+ ### Usage
19
+
20
+ ```
21
+ mcp__vibe-gpt__gpt_chat({
22
+ prompt: "Review this auth architecture: [code/description]",
23
+ model: "gpt-5.2-codex" // coding specialized
24
+ })
25
+ ```
26
+
27
+ ### Recommended Models
28
+
29
+ | Model | Use Case |
30
+ |-------|----------|
31
+ | gpt-5.2 | General purpose (default) |
32
+ | gpt-5.2-codex | Coding specialized |
33
+ | gpt-5.1-codex-mini | Quick responses needed |
34
+
35
+ ## When to Use Gemini (mcp__vibe-gemini)
36
+
37
+ | Situation | Reason |
38
+ |-----------|--------|
39
+ | UI/UX design consultation | User experience perspective |
40
+ | Design system advice | Component structuring |
41
+ | Accessibility (a11y) review | Accessibility guidelines |
42
+ | User flow design | UX optimization |
43
+
44
+ ### Usage
45
+
46
+ ```
47
+ mcp__vibe-gemini__gemini_chat({
48
+ prompt: "Suggest UX improvements for this login form: [description]"
49
+ })
50
+ ```
51
+
52
+ ## When NOT to Use
53
+
54
+ - Simple implementation (Claude alone is sufficient)
55
+ - File read/write (use Claude's tools)
56
+ - Quick response needed (API latency exists)
57
+ - Tasks requiring project context (Claude has the context)
58
+
59
+ ## Collaboration Patterns
60
+
61
+ ### Pattern 1: Design Cross-check
62
+
63
+ ```
64
+ Claude: Draft design
65
+
66
+ GPT: Architecture review (mcp__vibe-gpt__gpt_analyze_architecture)
67
+
68
+ Claude: Incorporate feedback into final design
69
+ ```
70
+
71
+ ### Pattern 2: Debugging Collaboration
72
+
73
+ ```
74
+ Claude: Attempt problem analysis
75
+
76
+ If stuck, ask GPT (mcp__vibe-gpt__gpt_debug)
77
+
78
+ Claude: Apply GPT's suggestions
79
+ ```
80
+
81
+ ### Pattern 3: UI/UX Consultation
82
+
83
+ ```
84
+ Claude: Implement feature
85
+
86
+ Gemini: Suggest UX improvements (mcp__vibe-gemini__gemini_chat)
87
+
88
+ Claude: Apply UX feedback
89
+ ```
90
+
91
+ ## API Key Setup
92
+
93
+ ```bash
94
+ vibe gpt <api-key> # Enable GPT
95
+ vibe gemini <api-key> # Enable Gemini
96
+ vibe status # Check current settings
97
+ ```
@@ -0,0 +1,77 @@
1
+ ---
2
+ description: Parallel research guide. Auto-activates for complex features, new technologies, security-critical work, architecture design, or technology selection decisions.
3
+ ---
4
+ # Parallel Research
5
+
6
+ Parallel research patterns for solving complex problems.
7
+
8
+ ## When Parallel Research is Needed
9
+
10
+ | Situation | Reason |
11
+ |-----------|--------|
12
+ | New technology adoption | Need best practices |
13
+ | Security-related features | Multi-angle review needed |
14
+ | Architecture design | Multiple perspectives needed |
15
+ | Technology selection | Comparison analysis needed |
16
+ | Complex bugs | Explore multiple causes |
17
+
18
+ ## Research Agents (4 Parallel)
19
+
20
+ | Agent | Role | Tools |
21
+ |-------|------|-------|
22
+ | best-practices | Search best practices | Web Search, context7 |
23
+ | framework-docs | Search official docs | context7 |
24
+ | codebase-patterns | Analyze existing code patterns | Grep, Glob |
25
+ | security-advisory | Search security advisories | Web Search |
26
+
27
+ ## Usage Methods
28
+
29
+ ### Method 1: Direct Orchestrator Call
30
+
31
+ ```bash
32
+ node -e "import('@su-record/vibe/orchestrator').then(o =>
33
+ o.research('passkey authentication', ['React', 'Supabase'])
34
+ .then(r => console.log(r.content[0].text))
35
+ )"
36
+ ```
37
+
38
+ ### Method 2: Use /vibe.spec
39
+
40
+ ```
41
+ /vibe.spec "feature-name"
42
+ → Parallel research runs automatically after requirements confirmed
43
+ ```
44
+
45
+ ### Method 3: Parallel Task Tool Execution
46
+
47
+ ```
48
+ Task 1: "Search React auth best practices"
49
+ Task 2: "Search Supabase Auth official docs" (concurrent)
50
+ Task 3: "Analyze existing auth code patterns" (concurrent)
51
+ Task 4: "Search auth security vulnerabilities" (concurrent)
52
+ ```
53
+
54
+ ## Using Research Results
55
+
56
+ ```
57
+ Parallel research complete
58
+
59
+ Synthesize results
60
+
61
+ Reflect in SPEC Context section
62
+ OR
63
+ Reference during implementation
64
+ ```
65
+
66
+ ## When Research is NOT Needed
67
+
68
+ - Simple CRUD operations
69
+ - Already familiar patterns
70
+ - Similar code exists in project
71
+ - Time-critical (supplement with review later)
72
+
73
+ ## Notes
74
+
75
+ - Research runs **after requirements confirmed**
76
+ - Split overly broad topics
77
+ - Research results are references, not absolute truth
@@ -1,3 +1,6 @@
1
+ ---
2
+ description: Priority-based TODO management (P1/P2/P3). Auto-activates when managing tasks, reviewing issues, or organizing work by priority.
3
+ ---
1
4
  # Priority-Based Todo Management Skill
2
5
 
3
6
  우선순위 기반 TODO 관리 시스템
@@ -0,0 +1,126 @@
1
+ ---
2
+ description: Tool failure fallback strategies with circuit breaker. Auto-activates on API errors, search failures, timeouts, 429, 5xx, overloaded errors.
3
+ ---
4
+ # Tool Fallback Strategies
5
+
6
+ Guide for finding alternatives when tools fail to continue work.
7
+
8
+ ## Circuit Breaker Pattern
9
+
10
+ Track tool failures and temporarily disable unreliable tools:
11
+
12
+ ```
13
+ Tool State Machine:
14
+ ┌─────────┐ 3 failures ┌─────────┐ 30s cooldown ┌─────────────┐
15
+ │ CLOSED │ ─────────────→ │ OPEN │ ───────────────→ │ HALF-OPEN │
16
+ │ (normal)│ │ (block) │ │ (test 1 req)│
17
+ └─────────┘ └─────────┘ └─────────────┘
18
+ ↑ │
19
+ │ success │
20
+ └────────────────────────────────────────────────────────┘
21
+ ```
22
+
23
+ | State | Behavior |
24
+ |-------|----------|
25
+ | **CLOSED** | Normal operation, count failures |
26
+ | **OPEN** | Block all requests, use alternative immediately |
27
+ | **HALF-OPEN** | Allow 1 test request after cooldown |
28
+
29
+ **Per-tool tracking:**
30
+ ```
31
+ vibe-gpt: failures=2, state=CLOSED
32
+ vibe-gemini: failures=0, state=CLOSED
33
+ WebSearch: failures=3, state=OPEN (blocked until 14:32:00)
34
+ context7: failures=1, state=CLOSED
35
+ ```
36
+
37
+ ## When Web Search Fails
38
+
39
+ | Alternative | Method |
40
+ |-------------|--------|
41
+ | context7 MCP | `mcp__context7__query-docs` |
42
+ | vibe-gpt | `mcp__vibe-gpt__gpt_chat` |
43
+ | Cached knowledge | Use Claude's built-in knowledge |
44
+
45
+ ```
46
+ Web Search fails (429, 529, timeout)
47
+
48
+ Check circuit breaker state
49
+
50
+ If OPEN → Skip to alternative immediately
51
+
52
+ If CLOSED → Try context7 for library docs
53
+
54
+ If still fails, ask GPT
55
+
56
+ Last resort: Claude's built-in knowledge
57
+ ```
58
+
59
+ ## API Error Responses
60
+
61
+ | Error | Cause | Response | Circuit Breaker |
62
+ |-------|-------|----------|-----------------|
63
+ | 429 | Rate Limit | Exponential backoff | +1 failure count |
64
+ | 5xx | Server Error | Switch to alternative | +1 failure count |
65
+ | 529 | Overloaded | Wait and retry | +1 failure count |
66
+ | Timeout | Network | Split request or retry | +1 failure count |
67
+ | 401/403 | Auth Error | Re-auth or alternative | Don't count (auth issue) |
68
+
69
+ ## When File/Code Not Found
70
+
71
+ ```
72
+ Glob fails
73
+
74
+ Expand pattern: *.ts → **/*.ts → **/*
75
+
76
+ Use Grep for content-based search
77
+
78
+ Check git log for history
79
+ ```
80
+
81
+ ## When MCP Fails
82
+
83
+ ```
84
+ vibe-gpt fails
85
+
86
+ Check circuit: If OPEN, skip to next
87
+
88
+ Try vibe-gemini (similar capability)
89
+
90
+ Try context7 (for docs)
91
+
92
+ Claude solves alone
93
+ ```
94
+
95
+ ## Retry Strategy with Circuit Breaker
96
+
97
+ ```
98
+ Request to tool
99
+
100
+ Check circuit state
101
+
102
+ ┌─ OPEN? ──→ Use alternative immediately (no retry)
103
+
104
+ └─ CLOSED/HALF-OPEN? ──→ Try request
105
+
106
+ Success? ──→ Reset failure count
107
+ ↓ No
108
+ Retry with backoff:
109
+ retry(1): wait 2s
110
+ retry(2): wait 4s
111
+ retry(3): wait 8s
112
+
113
+ All failed? ──→ +1 failure, check threshold
114
+
115
+ failures >= 3? ──→ OPEN circuit for 30s
116
+
117
+ Use alternative
118
+ ```
119
+
120
+ ## Principles
121
+
122
+ 1. **Never stop** - Always find an alternative
123
+ 2. **Before asking user** - Try alternatives first
124
+ 3. **Track failures** - Open circuit after 3 consecutive failures
125
+ 4. **Auto-recover** - Test after 30s cooldown
126
+ 5. **Fail fast** - Skip blocked tools immediately