@su-record/vibe 2.9.36 → 2.9.38

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 (96) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.en.md +1 -1
  3. package/README.md +1 -1
  4. package/agents/compounder.md +6 -6
  5. package/agents/diagrammer.md +2 -2
  6. package/agents/e2e-tester.md +5 -5
  7. package/agents/qa/acceptance-tester.md +2 -2
  8. package/agents/refactor-cleaner.md +2 -2
  9. package/agents/tester.md +1 -1
  10. package/agents/ui/ui-antipattern-detector.md +1 -1
  11. package/agents/ui/ui-design-system-gen.md +3 -3
  12. package/agents/ui/ui-industry-analyzer.md +1 -1
  13. package/agents/ui/ui-layout-architect.md +1 -1
  14. package/agents/ui/ui-stack-implementer.md +1 -1
  15. package/commands/vibe.analyze.md +1 -1
  16. package/commands/vibe.contract.md +2 -2
  17. package/commands/vibe.figma.md +3 -3
  18. package/commands/vibe.harness.md +3 -3
  19. package/commands/vibe.regress.md +2 -2
  20. package/commands/vibe.review.md +4 -4
  21. package/commands/vibe.run.md +27 -27
  22. package/commands/vibe.scaffold.md +1 -1
  23. package/commands/vibe.spec.md +38 -38
  24. package/commands/vibe.trace.md +14 -14
  25. package/commands/vibe.utils.md +3 -3
  26. package/commands/vibe.verify.md +18 -18
  27. package/dist/cli/commands/init.d.ts.map +1 -1
  28. package/dist/cli/commands/init.js +12 -9
  29. package/dist/cli/commands/init.js.map +1 -1
  30. package/dist/cli/commands/update.d.ts.map +1 -1
  31. package/dist/cli/commands/update.js +5 -3
  32. package/dist/cli/commands/update.js.map +1 -1
  33. package/dist/cli/llm/gpt-commands.js +1 -1
  34. package/dist/cli/postinstall/constants.js +1 -1
  35. package/dist/cli/postinstall/global-config.d.ts.map +1 -1
  36. package/dist/cli/postinstall/global-config.js +21 -15
  37. package/dist/cli/postinstall/global-config.js.map +1 -1
  38. package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
  39. package/dist/cli/setup/LegacyMigration.js +28 -6
  40. package/dist/cli/setup/LegacyMigration.js.map +1 -1
  41. package/dist/cli/utils.d.ts +6 -0
  42. package/dist/cli/utils.d.ts.map +1 -1
  43. package/dist/cli/utils.js +23 -0
  44. package/dist/cli/utils.js.map +1 -1
  45. package/dist/infra/lib/ReviewRace.js +1 -1
  46. package/dist/infra/lib/codex-proxy.js +1 -1
  47. package/dist/infra/lib/gpt/chat.d.ts +1 -1
  48. package/dist/infra/lib/gpt/chat.js +24 -24
  49. package/dist/infra/lib/gpt/chat.js.map +1 -1
  50. package/dist/infra/lib/gpt/orchestration.js +1 -1
  51. package/dist/infra/lib/gpt/specializations.d.ts +2 -2
  52. package/dist/infra/lib/gpt/specializations.js +3 -3
  53. package/hooks/scripts/lib/scope-from-spec.js +30 -0
  54. package/hooks/scripts/llm-orchestrate.js +2 -2
  55. package/hooks/scripts/prompt-dispatcher.js +15 -0
  56. package/hooks/scripts/session-start.js +7 -5
  57. package/hooks/scripts/utils.js +6 -1
  58. package/package.json +1 -1
  59. package/skills/arch-guard/SKILL.md +2 -2
  60. package/skills/arch-guard/agents/rule-generator.md +3 -3
  61. package/skills/arch-guard/scripts/check-boundaries.js +1 -1
  62. package/skills/arch-guard/templates/arch-rules.json +1 -1
  63. package/skills/capability-loop/SKILL.md +2 -2
  64. package/skills/capability-loop/templates/capability-spec.md +1 -1
  65. package/skills/claude-md-guide/SKILL.md +2 -2
  66. package/skills/design-audit/SKILL.md +3 -3
  67. package/skills/design-critique/SKILL.md +2 -2
  68. package/skills/design-distill/SKILL.md +1 -1
  69. package/skills/design-normalize/SKILL.md +4 -4
  70. package/skills/design-polish/SKILL.md +2 -2
  71. package/skills/design-teach/SKILL.md +6 -6
  72. package/skills/design-teach/templates/design-context.json +1 -1
  73. package/skills/devlog/SKILL.md +1 -1
  74. package/skills/event-planning/SKILL.md +1 -1
  75. package/skills/exec-plan/SKILL.md +5 -5
  76. package/skills/exec-plan/agents/decomposer.md +1 -1
  77. package/skills/exec-plan/templates/plan.md +2 -2
  78. package/skills/parallel-research/SKILL.md +3 -3
  79. package/skills/parallel-research/orchestrator.md +1 -1
  80. package/skills/parallel-research/templates/paper.md +1 -1
  81. package/skills/priority-todos/SKILL.md +1 -1
  82. package/skills/vibe-contract/SKILL.md +6 -6
  83. package/skills/vibe-interview/SKILL.md +6 -6
  84. package/skills/vibe-interview/checklists/feature.md +1 -1
  85. package/skills/vibe-plan/SKILL.md +10 -10
  86. package/skills/vibe-regress/SKILL.md +5 -5
  87. package/skills/vibe-regress/templates/bug.md +1 -1
  88. package/skills/vibe-regress/templates/test-jest.md +1 -1
  89. package/skills/vibe-regress/templates/test-vitest.md +1 -1
  90. package/skills/vibe-spec/SKILL.md +45 -45
  91. package/skills/vibe-spec-review/SKILL.md +21 -21
  92. package/skills/vibe-test/SKILL.md +1 -1
  93. package/vibe/constitution.md +2 -2
  94. package/vibe/templates/claudemd-template.md +4 -4
  95. package/vibe/templates/constitution-template.md +2 -2
  96. package/vibe/templates/feature-template.md +1 -1
@@ -12,6 +12,32 @@ import path from 'path';
12
12
 
13
13
  const ACTIVE_STATUSES = new Set(['pending', 'in-progress', 'in_progress', 'active', 'running']);
14
14
 
15
+ /**
16
+ * scope-guard auto-derive 활성 여부.
17
+ *
18
+ * 기본값은 **off**. 사용자가 `.vibe/config.json` 의 `scopeGuard.enabled = true` 로
19
+ * 명시적으로 켤 때만 SPEC → scope.json 자동 합성을 수행한다. 이전 동작(자동 ON)은
20
+ * SPEC 외부 파일 편집에 매번 경고를 띄워 다수 사용자에게 노이즈가 됐기 때문.
21
+ *
22
+ * 이미 `auto: false` scope.json 을 직접 만들어 둔 사용자는 영향 없음 — scope-guard.js
23
+ * 자체는 scope.json 존재 여부만 본다.
24
+ */
25
+ export function isScopeGuardEnabled(projectDir) {
26
+ try {
27
+ const candidates = [
28
+ path.join(projectDir, '.vibe', 'config.json'),
29
+ path.join(projectDir, '.claude', 'vibe', 'config.json'),
30
+ path.join(projectDir, '.coco', 'vibe', 'config.json'),
31
+ ];
32
+ for (const p of candidates) {
33
+ if (!fs.existsSync(p)) continue;
34
+ const cfg = JSON.parse(fs.readFileSync(p, 'utf-8'));
35
+ if (cfg && cfg.scopeGuard && cfg.scopeGuard.enabled === true) return true;
36
+ }
37
+ } catch { /* ignore */ }
38
+ return false;
39
+ }
40
+
15
41
  /**
16
42
  * Vibe 에셋 루트 해석 — `.vibe/` (SSOT) 우선, legacy `.claude/vibe/`, `.coco/vibe/` fallback.
17
43
  * 반환값은 projectDir 기준 상대 경로 문자열 (예: `.vibe`, `.claude/vibe`).
@@ -263,6 +289,10 @@ export function syncScopeFile(projectDir) {
263
289
  import { fileURLToPath } from 'url';
264
290
  if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
265
291
  const dir = process.argv[2] || process.env.CLAUDE_PROJECT_DIR || process.cwd();
292
+ if (!isScopeGuardEnabled(dir)) {
293
+ console.log('[scope-sync] · scopeGuard.enabled !== true — skipping (set in .vibe/config.json to opt in)');
294
+ process.exit(0);
295
+ }
266
296
  const result = syncScopeFile(dir);
267
297
  const label = {
268
298
  created: '✓ scope.json created',
@@ -101,7 +101,7 @@ function isSimplePrompt(prompt) {
101
101
  function resolveModel(providerName, config) {
102
102
  if (providerName === 'gpt-spark') return config.models?.gptCodexSpark || 'gpt-5.3-codex-spark';
103
103
  if (providerName === 'gpt-codex') return config.models?.gptCodex || 'gpt-5.3-codex';
104
- if (providerName === 'gpt') return config.models?.gpt || 'gpt-5.4';
104
+ if (providerName === 'gpt') return config.models?.gpt || 'gpt-5.5';
105
105
  if (providerName === 'gemini') return config.models?.gemini || 'gemini-3.1-pro-preview';
106
106
  if (providerName === 'claude') return 'claude';
107
107
  return providerName;
@@ -352,7 +352,7 @@ async function callProvider(providerName, prompt, sysPrompt, jsonMode, timeoutMs
352
352
  } else if (providerName === 'gpt-codex') {
353
353
  model = vibeConfig.models?.gptCodex || process.env.GPT_CODEX_MODEL || 'gpt-5.3-codex';
354
354
  } else {
355
- model = vibeConfig.models?.gpt || process.env.GPT_MODEL || 'gpt-5.4';
355
+ model = vibeConfig.models?.gpt || process.env.GPT_MODEL || 'gpt-5.5';
356
356
  }
357
357
  return await callCodexCli(prompt, sysPrompt, jsonMode, model, timeoutMs);
358
358
  }
@@ -42,6 +42,21 @@ try {
42
42
 
43
43
  if (!prompt) process.exit(0);
44
44
 
45
+ // 레거시 SSOT 통합 — `/vibe.*` 진입 시 `.claude/vibe/`·`.coco/vibe/` → `.vibe/` 자동 이동.
46
+ // `vibe init`/`update` 와 동일한 `consolidateLegacyVibe` (dist/cli/setup/LegacyMigration.js) 를 직접 재사용. Idempotent.
47
+ if (/^\s*\/vibe\b/i.test(prompt)) {
48
+ try {
49
+ const projectDir = process.env.CLAUDE_PROJECT_DIR || process.env.COCO_PROJECT_DIR || process.cwd();
50
+ const utils = await import('./utils.js');
51
+ const CLI_BASE = utils.getCliBaseUrl();
52
+ const { consolidateLegacyVibe } = await import(`${CLI_BASE}setup/LegacyMigration.js`);
53
+ const moved = consolidateLegacyVibe(projectDir);
54
+ if (moved.length > 0) {
55
+ process.stdout.write(`[vibe] Migrated legacy dirs → .vibe/ (${moved.join(', ')})\n`);
56
+ }
57
+ } catch { /* migration is best-effort */ }
58
+ }
59
+
45
60
  // 패턴 → 실행할 스크립트 매핑
46
61
  // 각 항목: { pattern, script, args, label }
47
62
  const DISPATCH_RULES = [
@@ -94,12 +94,14 @@ async function main() {
94
94
  }
95
95
  }
96
96
 
97
- // Scope sync — 활성 SPEC 기반으로 scope.json 자동 갱신 (수동 관리면 스킵)
97
+ // Scope sync — 사용자가 .vibe/config.json scopeGuard.enabled=true 켰을 때만 동작.
98
98
  try {
99
- const { syncScopeFile } = await import('./lib/scope-from-spec.js');
100
- const result = syncScopeFile(PROJECT_DIR);
101
- if (result.action === 'created' || result.action === 'updated' || result.action === 'removed') {
102
- console.log(`\n🚧 Scope ${result.action} from active SPECs (${path.relative(PROJECT_DIR, path.join(projectVibeRoot(PROJECT_DIR), 'scope.json'))})`);
99
+ const { syncScopeFile, isScopeGuardEnabled } = await import('./lib/scope-from-spec.js');
100
+ if (isScopeGuardEnabled(PROJECT_DIR)) {
101
+ const result = syncScopeFile(PROJECT_DIR);
102
+ if (result.action === 'created' || result.action === 'updated' || result.action === 'removed') {
103
+ console.log(`\n🚧 Scope ${result.action} from active SPECs (${path.relative(PROJECT_DIR, path.join(projectVibeRoot(PROJECT_DIR), 'scope.json'))})`);
104
+ }
103
105
  }
104
106
  } catch { /* scope sync is best-effort */ }
105
107
 
@@ -219,6 +219,10 @@ export function getLibBaseUrl() {
219
219
  return getPackageUrl(path.join('dist', 'infra', 'lib'), 'constants.js');
220
220
  }
221
221
 
222
+ export function getCliBaseUrl() {
223
+ return getPackageUrl(path.join('dist', 'cli'), 'index.js');
224
+ }
225
+
222
226
  // ─── Hook Trace Logging ───
223
227
 
224
228
  const HOOK_TRACE_PATH = path.join(VIBE_HOME_DIR, 'hook-traces.jsonl');
@@ -264,7 +268,8 @@ const MAX_COST_SIZE_BYTES = 5 * 1024 * 1024; // 5MB rotation
264
268
 
265
269
  // 1K 토큰당 USD (추정치, 2026-04 기준)
266
270
  const COST_PER_1K_TOKENS = {
267
- 'gpt-5.4': { input: 0.005, output: 0.015 },
271
+ 'gpt-5.5': { input: 0.005, output: 0.030 },
272
+ 'gpt-5.5-pro': { input: 0.030, output: 0.180 },
268
273
  'gpt-5.3-codex': { input: 0.003, output: 0.010 },
269
274
  'gpt-5.3-codex-spark': { input: 0.001, output: 0.005 },
270
275
  'gemini-3.1-pro-preview': { input: 0.00125, output: 0.005 },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.9.36",
3
+ "version": "2.9.38",
4
4
  "description": "AI Coding Framework for Claude Code — 56 agents, 45 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -152,11 +152,11 @@ describe('Architecture Boundaries', () => {
152
152
  | File | Purpose |
153
153
  |------|---------|
154
154
  | `tests/arch-guard.test.ts` | Executable boundary tests |
155
- | `.claude/vibe/arch-rules.json` | Machine-readable rules (for CI) |
155
+ | `.vibe/arch-rules.json` | Machine-readable rules (for CI) |
156
156
 
157
157
  ## Customization
158
158
 
159
- Users can add custom rules to `.claude/vibe/arch-rules.json`:
159
+ Users can add custom rules to `.vibe/arch-rules.json`:
160
160
 
161
161
  ```json
162
162
  {
@@ -7,17 +7,17 @@ tools: [Read]
7
7
  # Arch Rule Generator
8
8
 
9
9
  ## Role
10
- Translates a detected architecture map into a precise, machine-checkable set of import boundary rules. Merges default rules for the detected pattern with any custom rules defined in `.claude/vibe/arch-rules.json`. Outputs a normalized rule set ready for the violation checker.
10
+ Translates a detected architecture map into a precise, machine-checkable set of import boundary rules. Merges default rules for the detected pattern with any custom rules defined in `.vibe/arch-rules.json`. Outputs a normalized rule set ready for the violation checker.
11
11
 
12
12
  ## Responsibilities
13
13
  - Select default rule templates for the detected architecture pattern
14
- - Merge with custom rules from `.claude/vibe/arch-rules.json` if present
14
+ - Merge with custom rules from `.vibe/arch-rules.json` if present
15
15
  - Resolve glob patterns to concrete layer names
16
16
  - Deduplicate and normalize rule list
17
17
  - Flag rules with low confidence (detected layer with no matching files)
18
18
 
19
19
  ## Input
20
- Architecture map JSON from `arch-detector`, plus optional `.claude/vibe/arch-rules.json` for user-defined overrides.
20
+ Architecture map JSON from `arch-detector`, plus optional `.vibe/arch-rules.json` for user-defined overrides.
21
21
 
22
22
  ## Output
23
23
  Normalized rule set JSON:
@@ -53,7 +53,7 @@ function resolveImport(fromFile, imp, baseDir) {
53
53
  return path.resolve(path.dirname(fromFile), imp).replace(baseDir + path.sep, '').replace(/\\/g, '/');
54
54
  }
55
55
 
56
- const rulesPath = process.argv[2] || '.claude/vibe/arch-rules.json';
56
+ const rulesPath = process.argv[2] || '.vibe/arch-rules.json';
57
57
  const srcDir = path.resolve(process.argv[3] || 'src');
58
58
  const baseDir = path.resolve('.');
59
59
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "Architecture boundary rules for arch-guard. Copy to .claude/vibe/arch-rules.json and customize.",
2
+ "_comment": "Architecture boundary rules for arch-guard. Copy to .vibe/arch-rules.json and customize.",
3
3
  "rules": [
4
4
  {
5
5
  "name": "services-no-ui",
@@ -115,7 +115,7 @@ Based on classification, build the appropriate artifact:
115
115
 
116
116
  > **Problem**: The built capability didn't actually prevent the failure. This usually means the initial diagnosis was wrong (picked `Tool` when it needed `Guardrail`), or the failure has multiple missing capabilities.
117
117
  >
118
- > **Do NOT silently proceed** — a sub-standard capability log pollutes `.claude/vibe/capabilities-log.md` and the failure will recur.
118
+ > **Do NOT silently proceed** — a sub-standard capability log pollutes `.vibe/capabilities-log.md` and the failure will recur.
119
119
 
120
120
  **Escalation loop:**
121
121
 
@@ -207,7 +207,7 @@ save_memory("capability-{name}", {
207
207
  })
208
208
  ```
209
209
 
210
- Update `.claude/vibe/capabilities-log.md`:
210
+ Update `.vibe/capabilities-log.md`:
211
211
 
212
212
  ```markdown
213
213
  ## {date} — {capability-name}
@@ -94,7 +94,7 @@
94
94
 
95
95
  ## Persistence
96
96
 
97
- After building, record in `.claude/vibe/capabilities-log.md`:
97
+ After building, record in `.vibe/capabilities-log.md`:
98
98
 
99
99
  ```markdown
100
100
  ## {{DATE}} — {{CAPABILITY_NAME}}
@@ -108,7 +108,7 @@ Separate the collected information into 3 layers:
108
108
 
109
109
  **Loaded only when working on a specific feature** → focus on what and why, leave how to the agent.
110
110
 
111
- Storage location: `.claude/vibe/specs/YYYY-MM-DD-{topic}.md`
111
+ Storage location: `.vibe/specs/YYYY-MM-DD-{topic}.md`
112
112
 
113
113
  ```markdown
114
114
  # {Feature Name} SPEC
@@ -124,7 +124,7 @@ Storage location: `.claude/vibe/specs/YYYY-MM-DD-{topic}.md`
124
124
 
125
125
  **Per-session task list** → 2-5 minute units, with file paths specified.
126
126
 
127
- Storage location: `.claude/vibe/specs/{name}-execplan.md`
127
+ Storage location: `.vibe/specs/{name}-execplan.md`
128
128
 
129
129
  ```markdown
130
130
  # Execution Plan
@@ -131,11 +131,11 @@ When running on mobile stacks (React Native, Flutter, iOS, Android):
131
131
 
132
132
  Before running the audit:
133
133
 
134
- 1. **Read** `.claude/vibe/design-context.json`
134
+ 1. **Read** `.vibe/design-context.json`
135
135
  - If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
136
136
  - If parse error → display warning → proceed with defaults → recommend `/design-teach`
137
137
  - If present → weight findings by `audience.context`, `constraints.accessibility`, `brand.personality`
138
- 2. **Read** `.claude/vibe/design-system/*/MASTER.md` (if exists) for token reference
138
+ 2. **Read** `.vibe/design-system/*/MASTER.md` (if exists) for token reference
139
139
 
140
140
  ## Next Steps
141
141
 
@@ -148,5 +148,5 @@ Before running the audit:
148
148
  ## Important
149
149
 
150
150
  - **Read-only**: This skill produces a report. It does NOT modify code.
151
- - **Context-aware**: If `.claude/vibe/design-context.json` exists, findings are weighted by project brand and audience.
151
+ - **Context-aware**: If `.vibe/design-context.json` exists, findings are weighted by project brand and audience.
152
152
  - **Incremental**: When run on `.` (changed files), only audits files in current diff.
@@ -118,7 +118,7 @@ When running on mobile stacks (React Native, Flutter, iOS, Android):
118
118
 
119
119
  Before running the critique:
120
120
 
121
- 1. **Read** `.claude/vibe/design-context.json`
121
+ 1. **Read** `.vibe/design-context.json`
122
122
  - If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
123
123
  - If parse error → display warning → proceed with defaults → recommend `/design-teach`
124
124
  - If present → adjust persona priorities by `audience.primary` and `audience.expertise`
@@ -135,5 +135,5 @@ Before running the critique:
135
135
  ## Important
136
136
 
137
137
  - **Read-only**: Produces design critique report. No code modifications.
138
- - **Context-aware**: Uses `.claude/vibe/design-context.json` for brand/audience context if available.
138
+ - **Context-aware**: Uses `.vibe/design-context.json` for brand/audience context if available.
139
139
  - **Complementary**: Pairs with `/design-audit` (technical) — critique focuses on UX quality.
@@ -110,7 +110,7 @@ Strip unnecessary visual elements. Every remaining element must justify its exis
110
110
 
111
111
  Before running distillation:
112
112
 
113
- 1. **Read** `.claude/vibe/design-context.json`
113
+ 1. **Read** `.vibe/design-context.json`
114
114
  - If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
115
115
  - If parse error → display warning → proceed with defaults → recommend `/design-teach`
116
116
  - If present → preserve elements that match `brand.personality` (e.g., "playful" brand may justify decorative elements)
@@ -23,8 +23,8 @@ Replace hardcoded design values with design system tokens from MASTER.md. Ensure
23
23
 
24
24
  Load token source in priority order:
25
25
 
26
- 1. `.claude/vibe/design-system/{project}/MASTER.md` (project-specific)
27
- 2. `.claude/vibe/design-context.json` (from `/design-teach`)
26
+ 1. `.vibe/design-system/{project}/MASTER.md` (project-specific)
27
+ 2. `.vibe/design-context.json` (from `/design-teach`)
28
28
  3. If neither exists → prompt: "Run `/design-teach` or create MASTER.md first. Proceeding with default token detection."
29
29
 
30
30
  ### Step 2: Scan for Hardcoded Values
@@ -111,11 +111,11 @@ Replace values in source files, preserving:
111
111
 
112
112
  Before running normalization:
113
113
 
114
- 1. **Read** `.claude/vibe/design-context.json`
114
+ 1. **Read** `.vibe/design-context.json`
115
115
  - If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
116
116
  - If parse error → display warning → proceed with defaults → recommend `/design-teach`
117
117
  - If present → use `detectedStack.styling` to determine token format (CSS vars, Tailwind, etc.)
118
- 2. **Read** `.claude/vibe/design-system/*/MASTER.md`
118
+ 2. **Read** `.vibe/design-system/*/MASTER.md`
119
119
  - If missing → display: "Run `/design-teach` or create MASTER.md first. Proceeding with default token detection."
120
120
  - If present → use as authoritative token source for replacements
121
121
 
@@ -111,11 +111,11 @@ Every interactive element must have ALL applicable states:
111
111
 
112
112
  Before running polish:
113
113
 
114
- 1. **Read** `.claude/vibe/design-context.json`
114
+ 1. **Read** `.vibe/design-context.json`
115
115
  - If missing → display: "Run `/design-teach` first for better results" → proceed with defaults
116
116
  - If parse error → display warning → proceed with defaults → recommend `/design-teach`
117
117
  - If present → apply brand-appropriate micro-interaction styles from `aesthetic.style`
118
- 2. **Read** `.claude/vibe/design-system/*/MASTER.md` (if exists) for token references
118
+ 2. **Read** `.vibe/design-system/*/MASTER.md` (if exists) for token references
119
119
 
120
120
  ## Next Steps
121
121
 
@@ -8,7 +8,7 @@ priority: 50
8
8
 
9
9
  # Design Teach — Project Design Context Gathering
10
10
 
11
- Collect project-specific design context so all design-* skills produce tailored, brand-aware results. Saves to `.claude/vibe/design-context.json`.
11
+ Collect project-specific design context so all design-* skills produce tailored, brand-aware results. Saves to `.vibe/design-context.json`.
12
12
 
13
13
  ## Usage
14
14
 
@@ -29,8 +29,8 @@ Before asking questions, automatically gather existing signals:
29
29
  | Color palette | Existing color definitions, brand assets |
30
30
  | Typography | Font imports, font-family declarations |
31
31
  | Component library | `package.json` dependencies (MUI, Chakra, shadcn, etc.) |
32
- | Design system | `.claude/vibe/design-system/*/MASTER.md` |
33
- | Existing context | `.claude/vibe/design-context.json` (if updating) |
32
+ | Design system | `.vibe/design-system/*/MASTER.md` |
33
+ | Existing context | `.vibe/design-context.json` (if updating) |
34
34
 
35
35
  ### Step 2: Ask Clarifying Questions
36
36
 
@@ -59,7 +59,7 @@ Present findings from Step 1, then ask what's missing:
59
59
 
60
60
  ### Step 3: Save Context
61
61
 
62
- Write gathered context to `.claude/vibe/design-context.json` using the Write tool.
62
+ Write gathered context to `.vibe/design-context.json` using the Write tool.
63
63
 
64
64
  **Schema (v1):**
65
65
 
@@ -118,7 +118,7 @@ When `/design-teach` is run again and `design-context.json` already exists:
118
118
  Each design-* skill does the following when it runs:
119
119
 
120
120
  ```
121
- 1. Read `.claude/vibe/design-context.json`
121
+ 1. Read `.vibe/design-context.json`
122
122
  2. File not found → print "Run /design-teach first for better results" → continue with defaults
123
123
  3. Parse failure (invalid JSON) → warn "design-context.json parse failed" + continue with defaults → recommend re-running /design-teach
124
124
  4. Success → apply context to analysis criteria
@@ -172,7 +172,7 @@ PRE-SHIP Phase:
172
172
  - Dark mode: Required
173
173
 
174
174
  ### Saved
175
- ✅ .claude/vibe/design-context.json updated
175
+ ✅ .vibe/design-context.json updated
176
176
  ```
177
177
 
178
178
  ## Important
@@ -10,7 +10,7 @@
10
10
  "brand": {
11
11
  "personality": ["professional", "clean", "trustworthy", "efficient"],
12
12
  "tone": "professional",
13
- "existingAssets": ".claude/vibe/brand/brand-guide.pdf"
13
+ "existingAssets": ".vibe/brand/brand-guide.pdf"
14
14
  },
15
15
  "aesthetic": {
16
16
  "style": "minimal",
@@ -11,7 +11,7 @@ Analyzes git commit history to automatically generate development logs and saves
11
11
 
12
12
  ## Config
13
13
 
14
- `devlog` section in `.claude/vibe/config.json`:
14
+ `devlog` section in `.vibe/config.json`:
15
15
 
16
16
  ```json
17
17
  {
@@ -90,7 +90,7 @@ When user says "MDC 준비해줘" or similar:
90
90
 
91
91
  ## State Management
92
92
 
93
- **Location**: `.claude/vibe/.event_state.json` (project-local, gitignored)
93
+ **Location**: `.vibe/.event_state.json` (project-local, gitignored)
94
94
 
95
95
  ### Error Recovery
96
96
 
@@ -61,14 +61,14 @@ For every decision point in the SPEC, resolve it NOW:
61
61
 
62
62
  ### Step 3: GENERATE — Write the ExecPlan
63
63
 
64
- Output format: `.claude/vibe/specs/{feature-name}-execplan.md`
64
+ Output format: `.vibe/specs/{feature-name}-execplan.md`
65
65
 
66
66
  ```markdown
67
67
  # ExecPlan: {feature-name}
68
68
 
69
69
  ## Meta
70
- - SPEC: .claude/vibe/specs/{name}.md
71
- - Feature: .claude/vibe/features/{name}.feature
70
+ - SPEC: .vibe/specs/{name}.md
71
+ - Feature: .vibe/features/{name}.feature
72
72
  - Generated: {timestamp}
73
73
  - Phases: {count}
74
74
  - Scenarios: {count}
@@ -118,7 +118,7 @@ Output format: `.claude/vibe/specs/{feature-name}-execplan.md`
118
118
 
119
119
  ### Step 4: PERSIST — Save and Link
120
120
 
121
- 1. Save ExecPlan to `.claude/vibe/specs/{feature-name}-execplan.md`
121
+ 1. Save ExecPlan to `.vibe/specs/{feature-name}-execplan.md`
122
122
  2. Save session context: `save_memory("execplan-{feature}", {summary})`
123
123
  3. Output execution command:
124
124
 
@@ -128,7 +128,7 @@ Ready to execute:
128
128
 
129
129
  Or hand off to new session:
130
130
  /vibe.utils --continue
131
- → Load: .claude/vibe/specs/{feature-name}-execplan.md
131
+ → Load: .vibe/specs/{feature-name}-execplan.md
132
132
  ```
133
133
 
134
134
  ## Quality Checks
@@ -18,7 +18,7 @@ Reads a SPEC document and breaks it into a structured hierarchy of phases and ta
18
18
  - Produce a flat numbered task list with parent-phase references
19
19
 
20
20
  ## Input
21
- - SPEC document path (e.g., `.claude/vibe/specs/my-feature.spec.md`)
21
+ - SPEC document path (e.g., `.vibe/specs/my-feature.spec.md`)
22
22
  - Optional: existing codebase context to detect which files already exist
23
23
 
24
24
  ## Output
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Field | Value |
6
6
  |-------|-------|
7
- | SPEC | `.claude/vibe/specs/{{FEATURE_NAME}}.md` |
8
- | Feature | `.claude/vibe/features/{{FEATURE_NAME}}.feature` |
7
+ | SPEC | `.vibe/specs/{{FEATURE_NAME}}.md` |
8
+ | Feature | `.vibe/features/{{FEATURE_NAME}}.feature` |
9
9
  | Generated | {{GENERATED_DATE}} |
10
10
  | Phases | {{PHASE_COUNT}} |
11
11
  | Scenarios | {{SCENARIO_COUNT}} |
@@ -63,7 +63,7 @@ Parallel research complete
63
63
 
64
64
  Synthesize results
65
65
 
66
- Persist to .claude/vibe/research/<topic-slug>/
66
+ Persist to .vibe/research/<topic-slug>/
67
67
  ├── synthesis.md (conversational report)
68
68
  ├── awesome-list.md (curated links/repos)
69
69
  └── paper.md (structured survey for /vibe.spec Context)
@@ -75,7 +75,7 @@ Reference during implementation
75
75
 
76
76
  ### Output Location (SSOT)
77
77
 
78
- All research artifacts live under `.claude/vibe/research/<topic-slug>/`. Reference `paper.md` explicitly when writing a SPEC (e.g. paste its path into the Context section). Re-running research on the same topic overwrites unless the slug collides across dates (then `-YYYYMMDD` suffix).
78
+ All research artifacts live under `.vibe/research/<topic-slug>/`. Reference `paper.md` explicitly when writing a SPEC (e.g. paste its path into the Context section). Re-running research on the same topic overwrites unless the slug collides across dates (then `-YYYYMMDD` suffix).
79
79
 
80
80
  > Wire-up note: `/vibe.spec` does **not** yet auto-scan this directory — that integration is a follow-up. For now, cite the path manually.
81
81
 
@@ -98,7 +98,7 @@ Pass `--ephemeral` to skip persistence when exploring throwaway questions.
98
98
 
99
99
  - [ ] All 4 research agents returned results (or documented why not)
100
100
  - [ ] Results synthesized into actionable recommendations
101
- - [ ] Three artifacts written to `.claude/vibe/research/<slug>/` (synthesis / awesome-list / paper) — unless `--ephemeral`
101
+ - [ ] Three artifacts written to `.vibe/research/<slug>/` (synthesis / awesome-list / paper) — unless `--ephemeral`
102
102
  - [ ] Every awesome-list entry has a one-line "why"
103
103
  - [ ] Key findings reflected in SPEC Context section or implementation notes
104
104
  - [ ] Conflicting recommendations resolved with reasoning
@@ -36,7 +36,7 @@ agents: [best-practices, framework-docs, codebase-patterns, security-advisory, s
36
36
  ### Phase 5: Persist as Reusable Dataset
37
37
  - **Agent**: orchestrator (self)
38
38
  - **Input**: Synthesis (Phase 3) + ranked output (Phase 4)
39
- - **Output**: Three files under `.claude/vibe/research/<topic-slug>/`:
39
+ - **Output**: Three files under `.vibe/research/<topic-slug>/`:
40
40
  - `synthesis.md` — conversational synthesis (from `templates/synthesis.md`)
41
41
  - `awesome-list.md` — curated links/repos by category (from `templates/awesome-list.md`)
42
42
  - `paper.md` — structured survey for `/vibe.spec` Context injection (from `templates/paper.md`)
@@ -85,4 +85,4 @@ Parallel research across four specialized agents (best-practices, framework-docs
85
85
 
86
86
  ---
87
87
 
88
- **Reuse**: cite this file by path (`.claude/vibe/research/{{SLUG}}/paper.md`) when writing a SPEC — paste the Findings and Recommendation sections into the SPEC's Context block.
88
+ **Reuse**: cite this file by path (`.vibe/research/{{SLUG}}/paper.md`) when writing a SPEC — paste the Findings and Recommendation sections into the SPEC's Context block.
@@ -23,7 +23,7 @@ priority: 60
23
23
  ## Directory Structure
24
24
 
25
25
  ```
26
- .claude/vibe/todos/
26
+ .vibe/todos/
27
27
  ├── P1-security-sql-injection.md
28
28
  ├── P2-perf-n1-query.md
29
29
  ├── P3-style-extract-helper.md
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: vibe-contract
3
3
  tier: core
4
- description: "API contract drift detection. Extracts HTTP/GraphQL/event/public-function contracts from SPEC into .claude/vibe/contracts/<feature>.md, compares to implementation, and fails loudly on breaking drift (missing endpoints, removed required fields, type changes). P1 drifts auto-register as regressions via vibe-regress. Must use this skill when user runs /vibe.contract, when /vibe.spec completes, when /vibe.verify passes scenarios, or when the user says 'contract', 'API schema', 'breaking change', 'drift', '계약', '스키마 바뀜'."
4
+ description: "API contract drift detection. Extracts HTTP/GraphQL/event/public-function contracts from SPEC into .vibe/contracts/<feature>.md, compares to implementation, and fails loudly on breaking drift (missing endpoints, removed required fields, type changes). P1 drifts auto-register as regressions via vibe-regress. Must use this skill when user runs /vibe.contract, when /vibe.spec completes, when /vibe.verify passes scenarios, or when the user says 'contract', 'API schema', 'breaking change', 'drift', '계약', '스키마 바뀜'."
5
5
  triggers: [contract, drift, "계약", "API 변경", "breaking change", "schema drift"]
6
6
  priority: 70
7
7
  chain-next: []
@@ -18,7 +18,7 @@ Hidden vibe-coding weakness: as the implementation grows, response shapes drift
18
18
  ## Storage Contract
19
19
 
20
20
  ```
21
- .claude/vibe/contracts/
21
+ .vibe/contracts/
22
22
  <feature>.md # contract SSOT (extracted from SPEC)
23
23
  <feature>.snapshot.md # implementation snapshot (last check)
24
24
  ```
@@ -28,7 +28,7 @@ Hidden vibe-coding weakness: as the implementation grows, response shapes drift
28
28
  ```yaml
29
29
  ---
30
30
  feature: string
31
- extracted-from: .claude/vibe/specs/<feature>.md
31
+ extracted-from: .vibe/specs/<feature>.md
32
32
  extracted-at: ISO-8601
33
33
  source-spec-hash: sha256 # for change detection
34
34
  endpoints:
@@ -75,14 +75,14 @@ endpoints:
75
75
  3. Extraction failure (no such section) → **exit cleanly with `no-contract` state**. Not every feature has an API.
76
76
  4. Success → convert to the frontmatter structure
77
77
  5. `source-spec-hash`: sha256 of SPEC content (for next extract to detect change)
78
- 6. Save to `.claude/vibe/contracts/<feature>.md` (no-op if file exists with the same hash)
78
+ 6. Save to `.vibe/contracts/<feature>.md` (no-op if file exists with the same hash)
79
79
 
80
80
  **Caveat**: extraction is LLM-driven. Mark low-confidence fields with `# unconfirmed` so the user can review.
81
81
 
82
82
  ### 2. `check <feature>` — contract vs implementation
83
83
 
84
84
  **Steps**:
85
- 1. Load `.claude/vibe/contracts/<feature>.md`. If missing → **suggest extract first**.
85
+ 1. Load `.vibe/contracts/<feature>.md`. If missing → **suggest extract first**.
86
86
  2. For each endpoint, find implementation:
87
87
  - http: detect framework (Express, Fastify, Next.js API routes, Hono, ...)
88
88
  - graphql: locate resolver files
@@ -90,7 +90,7 @@ endpoints:
90
90
  - function: module export
91
91
  3. Extract implementation signature/schema → compare against contract
92
92
  4. Classify drift (severity table in command file)
93
- 5. Persist snapshot at `.claude/vibe/contracts/<feature>.snapshot.md` (current implementation state)
93
+ 5. Persist snapshot at `.vibe/contracts/<feature>.snapshot.md` (current implementation state)
94
94
 
95
95
  ### 3. `diff <feature>` — changes since last snapshot
96
96
 
@@ -20,7 +20,7 @@ chain-next: [vibe-plan]
20
20
 
21
21
  **Skip when**:
22
22
  - Small bug fix on an existing project
23
- - `.claude/vibe/plans/{feature}.md` already exists (→ only update via `vibe-plan`)
23
+ - `.vibe/plans/{feature}.md` already exists (→ only update via `vibe-plan`)
24
24
 
25
25
  ## Core Loop
26
26
 
@@ -51,7 +51,7 @@ chain-next: [vibe-plan]
51
51
  └──────────────────────┘
52
52
 
53
53
  4. Save collected results
54
- .claude/vibe/interviews/{feature}.md
54
+ .vibe/interviews/{feature}.md
55
55
 
56
56
  5. chain-next: vibe-plan
57
57
  ```
@@ -206,7 +206,7 @@ Incomplete items will be marked as "TBD" in the plan.
206
206
 
207
207
  ## Step 4: Save Collected Results
208
208
 
209
- **Output file**: `.claude/vibe/interviews/{feature-name}.md`
209
+ **Output file**: `.vibe/interviews/{feature-name}.md`
210
210
 
211
211
  **Structure**:
212
212
 
@@ -262,7 +262,7 @@ stoppedBy: user | auto
262
262
  ### Update `.last-feature` pointer
263
263
 
264
264
  ```
265
- Write ".claude/vibe/.last-feature" ← feature-name (single line)
265
+ Write ".vibe/.last-feature" ← feature-name (single line)
266
266
 
267
267
  Run immediately after saving the interview file in Step 4.
268
268
  This pointer is used by /vibe.spec (no args) for Smart Resume.
@@ -278,7 +278,7 @@ After the interview is complete, the `vibe-plan` skill is automatically activate
278
278
  ✅ Interview complete!
279
279
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
280
280
 
281
- 📄 .claude/vibe/interviews/{feature-name}.md
281
+ 📄 .vibe/interviews/{feature-name}.md
282
282
  Required: 8/8
283
283
  Optional: 12/14
284
284
  Discovered: 3
@@ -345,7 +345,7 @@ User: 3
345
345
  Claude: ⚠️ All required items complete. 10 optional items will be marked as TBD.
346
346
 
347
347
  ✅ Interview complete!
348
- 📄 .claude/vibe/interviews/parallax-website.md
348
+ 📄 .vibe/interviews/parallax-website.md
349
349
 
350
350
  → vibe-plan skill is starting plan creation...
351
351
  ```
@@ -11,7 +11,7 @@
11
11
 
12
12
  ### R2. existing-project-context
13
13
  **Q**: 기존 프로젝트의 기술 스택을 확인했나요?
14
- **힌트**: CLAUDE.md, package.json, .claude/vibe/config.json 읽어서 자동 파악.
14
+ **힌트**: CLAUDE.md, package.json, .vibe/config.json 읽어서 자동 파악.
15
15
  **follow-up**: 파악 결과를 사용자에게 요약해 확인 받기.
16
16
 
17
17
  ### R3. affected-areas