minimal-vibe-coding-kit 0.4.1 → 0.5.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 (207) hide show
  1. package/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  2. package/.agents/skills/claim/SKILL.md +82 -0
  3. package/.agents/skills/prompt-sharpener/SKILL.md +54 -0
  4. package/.agents/skills/tutien/SKILL.md +74 -0
  5. package/.agents/skills/tutien/references/classification.md +64 -0
  6. package/.agents/skills/tutien/references/lore-sources.md +15 -0
  7. package/.agents/skills/tutien/references/privacy.md +33 -0
  8. package/.agents/skills/tutien/references/schema.md +75 -0
  9. package/.agents/skills/tutien/references/scoring-and-realms.md +37 -0
  10. package/.agents/skills/tutien/references/voice-and-mode.md +44 -0
  11. package/.agents/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
  12. package/.agents/skills/tutien/scripts/adapters/git.mjs +48 -0
  13. package/.agents/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
  14. package/.agents/skills/tutien/scripts/analyze-history.mjs +84 -0
  15. package/.agents/skills/tutien/scripts/catalog.mjs +130 -0
  16. package/.agents/skills/tutien/scripts/classify.mjs +311 -0
  17. package/.agents/skills/tutien/scripts/command.mjs +107 -0
  18. package/.agents/skills/tutien/scripts/compare.mjs +41 -0
  19. package/.agents/skills/tutien/scripts/metrics.mjs +306 -0
  20. package/.agents/skills/tutien/scripts/normalize-events.mjs +68 -0
  21. package/.agents/skills/tutien/scripts/redact.mjs +30 -0
  22. package/.agents/skills/tutien/scripts/render-report.mjs +423 -0
  23. package/.agents/skills/tutien/scripts/run-tutien.mjs +272 -0
  24. package/.agents/skills/tutien/scripts/score.mjs +97 -0
  25. package/.agents/skills/tutien/scripts/snapshot.mjs +76 -0
  26. package/.agents/skills/tutien/scripts/villains.mjs +196 -0
  27. package/.agents/skills/vibekit-init/SKILL.md +2 -2
  28. package/.claude/settings.json +10 -3
  29. package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  30. package/.claude/skills/claim/SKILL.md +82 -0
  31. package/.claude/skills/prompt-sharpener/SKILL.md +54 -0
  32. package/.claude/skills/tutien/SKILL.md +74 -0
  33. package/.claude/skills/tutien/references/classification.md +64 -0
  34. package/.claude/skills/tutien/references/lore-sources.md +15 -0
  35. package/.claude/skills/tutien/references/privacy.md +33 -0
  36. package/.claude/skills/tutien/references/schema.md +75 -0
  37. package/.claude/skills/tutien/references/scoring-and-realms.md +37 -0
  38. package/.claude/skills/tutien/references/voice-and-mode.md +44 -0
  39. package/.claude/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
  40. package/.claude/skills/tutien/scripts/adapters/git.mjs +48 -0
  41. package/.claude/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
  42. package/.claude/skills/tutien/scripts/analyze-history.mjs +84 -0
  43. package/.claude/skills/tutien/scripts/catalog.mjs +130 -0
  44. package/.claude/skills/tutien/scripts/classify.mjs +311 -0
  45. package/.claude/skills/tutien/scripts/command.mjs +107 -0
  46. package/.claude/skills/tutien/scripts/compare.mjs +41 -0
  47. package/.claude/skills/tutien/scripts/metrics.mjs +306 -0
  48. package/.claude/skills/tutien/scripts/normalize-events.mjs +68 -0
  49. package/.claude/skills/tutien/scripts/redact.mjs +30 -0
  50. package/.claude/skills/tutien/scripts/render-report.mjs +423 -0
  51. package/.claude/skills/tutien/scripts/run-tutien.mjs +272 -0
  52. package/.claude/skills/tutien/scripts/score.mjs +97 -0
  53. package/.claude/skills/tutien/scripts/snapshot.mjs +76 -0
  54. package/.claude/skills/tutien/scripts/villains.mjs +196 -0
  55. package/.claude/skills/vibekit-init/SKILL.md +2 -2
  56. package/.codex/rules/vibekit.rules +77 -0
  57. package/.codex-plugin/plugin.json +1 -1
  58. package/.cursor/cli.json +18 -0
  59. package/.cursor/settings.json +15 -8
  60. package/.cursor/skills/claim/SKILL.md +82 -0
  61. package/.cursor/skills/prompt-sharpener/SKILL.md +54 -0
  62. package/.cursor/skills/tutien/SKILL.md +74 -0
  63. package/.cursor/skills/tutien/references/classification.md +64 -0
  64. package/.cursor/skills/tutien/references/lore-sources.md +15 -0
  65. package/.cursor/skills/tutien/references/privacy.md +33 -0
  66. package/.cursor/skills/tutien/references/schema.md +75 -0
  67. package/.cursor/skills/tutien/references/scoring-and-realms.md +37 -0
  68. package/.cursor/skills/tutien/references/voice-and-mode.md +44 -0
  69. package/.cursor/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
  70. package/.cursor/skills/tutien/scripts/adapters/git.mjs +48 -0
  71. package/.cursor/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
  72. package/.cursor/skills/tutien/scripts/analyze-history.mjs +84 -0
  73. package/.cursor/skills/tutien/scripts/catalog.mjs +130 -0
  74. package/.cursor/skills/tutien/scripts/classify.mjs +311 -0
  75. package/.cursor/skills/tutien/scripts/command.mjs +107 -0
  76. package/.cursor/skills/tutien/scripts/compare.mjs +41 -0
  77. package/.cursor/skills/tutien/scripts/metrics.mjs +306 -0
  78. package/.cursor/skills/tutien/scripts/normalize-events.mjs +68 -0
  79. package/.cursor/skills/tutien/scripts/redact.mjs +30 -0
  80. package/.cursor/skills/tutien/scripts/render-report.mjs +423 -0
  81. package/.cursor/skills/tutien/scripts/run-tutien.mjs +272 -0
  82. package/.cursor/skills/tutien/scripts/score.mjs +97 -0
  83. package/.cursor/skills/tutien/scripts/snapshot.mjs +76 -0
  84. package/.cursor/skills/tutien/scripts/villains.mjs +196 -0
  85. package/.grok/README.md +13 -0
  86. package/.grok/config.example.toml +13 -0
  87. package/.grok/config.toml +29 -0
  88. package/.grok/rules/safe-delete.md +11 -0
  89. package/.grok/rules/security.md +5 -0
  90. package/.grok/rules/vibe-core.md +8 -0
  91. package/.grok/skills/agentshield-security-review/SKILL.md +75 -0
  92. package/.grok/skills/agentshield-security-review/agents/openai.yaml +5 -0
  93. package/.grok/skills/agentshield-security-review/references/native-install.md +97 -0
  94. package/.grok/skills/agentshield-security-review/references/report-template.md +54 -0
  95. package/.grok/skills/agentshield-security-review/references/review-checklist.md +45 -0
  96. package/.grok/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +135 -0
  97. package/.grok/skills/autoresearch-coding/README.md +15 -0
  98. package/.grok/skills/autoresearch-coding/SKILL.md +101 -0
  99. package/.grok/skills/autoresearch-coding/references/experiment-contract.md +13 -0
  100. package/.grok/skills/autoresearch-coding/references/metric-extraction.md +8 -0
  101. package/.grok/skills/autoresearch-coding/references/result-ledger.md +15 -0
  102. package/.grok/skills/autoresearch-coding/scripts/log_result.py +24 -0
  103. package/.grok/skills/autoresearch-coding/scripts/run_logged.py +30 -0
  104. package/.grok/skills/claim/SKILL.md +82 -0
  105. package/.grok/skills/clearthought/SKILL.md +100 -0
  106. package/.grok/skills/clearthought/examples/decision-framework.md +441 -0
  107. package/.grok/skills/clearthought/examples/metagame-examples.md +536 -0
  108. package/.grok/skills/clearthought/examples/sequential-thinking.md +380 -0
  109. package/.grok/skills/clearthought/references/output-schemas.md +494 -0
  110. package/.grok/skills/clearthought/references/parameter-reference.md +482 -0
  111. package/.grok/skills/coding-level/SKILL.md +34 -0
  112. package/.grok/skills/coding-level/references/level-0.md +131 -0
  113. package/.grok/skills/coding-level/references/level-1.md +118 -0
  114. package/.grok/skills/coding-level/references/level-2.md +140 -0
  115. package/.grok/skills/coding-level/references/level-3.md +142 -0
  116. package/.grok/skills/coding-level/references/level-4.md +152 -0
  117. package/.grok/skills/coding-level/references/level-5.md +84 -0
  118. package/.grok/skills/daily-workflow-curator/SKILL.md +52 -0
  119. package/.grok/skills/memento/SKILL.md +36 -0
  120. package/.grok/skills/parallel-analysis/SKILL.md +160 -0
  121. package/.grok/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  122. package/.grok/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  123. package/.grok/skills/prompt-sharpener/SKILL.md +54 -0
  124. package/.grok/skills/reviewing-4p-priorities/SKILL.md +72 -0
  125. package/.grok/skills/reviewing-4p-priorities/examples.md +298 -0
  126. package/.grok/skills/sequential-thinking/SKILL.md +106 -0
  127. package/.grok/skills/sequential-thinking/examples/adaptive-depth.md +542 -0
  128. package/.grok/skills/sequential-thinking/examples/branching-exploration.md +474 -0
  129. package/.grok/skills/sequential-thinking/examples/linear-reasoning.md +210 -0
  130. package/.grok/skills/sequential-thinking/examples/revision-pattern.md +304 -0
  131. package/.grok/skills/sequential-thinking/references/output-schema.md +483 -0
  132. package/.grok/skills/sequential-thinking/references/parameters.md +463 -0
  133. package/.grok/skills/sequential-thinking/references/patterns.md +666 -0
  134. package/.grok/skills/tutien/SKILL.md +74 -0
  135. package/.grok/skills/tutien/references/classification.md +64 -0
  136. package/.grok/skills/tutien/references/lore-sources.md +15 -0
  137. package/.grok/skills/tutien/references/privacy.md +33 -0
  138. package/.grok/skills/tutien/references/schema.md +75 -0
  139. package/.grok/skills/tutien/references/scoring-and-realms.md +37 -0
  140. package/.grok/skills/tutien/references/voice-and-mode.md +44 -0
  141. package/.grok/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
  142. package/.grok/skills/tutien/scripts/adapters/git.mjs +48 -0
  143. package/.grok/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
  144. package/.grok/skills/tutien/scripts/analyze-history.mjs +84 -0
  145. package/.grok/skills/tutien/scripts/catalog.mjs +130 -0
  146. package/.grok/skills/tutien/scripts/classify.mjs +311 -0
  147. package/.grok/skills/tutien/scripts/command.mjs +107 -0
  148. package/.grok/skills/tutien/scripts/compare.mjs +41 -0
  149. package/.grok/skills/tutien/scripts/metrics.mjs +306 -0
  150. package/.grok/skills/tutien/scripts/normalize-events.mjs +68 -0
  151. package/.grok/skills/tutien/scripts/redact.mjs +30 -0
  152. package/.grok/skills/tutien/scripts/render-report.mjs +423 -0
  153. package/.grok/skills/tutien/scripts/run-tutien.mjs +272 -0
  154. package/.grok/skills/tutien/scripts/score.mjs +97 -0
  155. package/.grok/skills/tutien/scripts/snapshot.mjs +76 -0
  156. package/.grok/skills/tutien/scripts/villains.mjs +196 -0
  157. package/.grok/skills/vibekit-init/SKILL.md +52 -0
  158. package/.grok/skills/visual-design-loop/SKILL.md +103 -0
  159. package/.grok/skills/visual-design-loop/agents/openai.yaml +4 -0
  160. package/.vibekit/docs/BACKBONE_REFERENCE.md +3 -1
  161. package/.vibekit/docs/INSTALL.md +11 -7
  162. package/.vibekit/docs/SECURITY_MODEL.md +1 -1
  163. package/.vibekit/docs/TOOLING_GUIDE.md +5 -0
  164. package/.vibekit/docs/templates/CONTEXT_TEMPLATE.md +1 -1
  165. package/.vibekit/init/CLAUDE-template.md +3 -0
  166. package/.vibekit/init/FIRST_PROMPT.md +1 -1
  167. package/.vibekit/init/FIRST_TIME_INIT.md +2 -2
  168. package/.vibekit/scripts/doctor.mjs +11 -4
  169. package/.vibekit/scripts/mvck.mjs +27 -12
  170. package/.vibekit/scripts/pack-dry-run.mjs +38 -3
  171. package/.vibekit/scripts/test-install.mjs +8 -0
  172. package/.vibekit/scripts/validate-kit.mjs +116 -41
  173. package/.vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  174. package/.vibekit/skills/claim/SKILL.md +82 -0
  175. package/.vibekit/skills/prompt-sharpener/SKILL.md +54 -0
  176. package/.vibekit/skills/skills-manifest.json +27 -0
  177. package/.vibekit/skills/tutien/SKILL.md +74 -0
  178. package/.vibekit/skills/tutien/references/classification.md +64 -0
  179. package/.vibekit/skills/tutien/references/lore-sources.md +15 -0
  180. package/.vibekit/skills/tutien/references/privacy.md +33 -0
  181. package/.vibekit/skills/tutien/references/schema.md +75 -0
  182. package/.vibekit/skills/tutien/references/scoring-and-realms.md +37 -0
  183. package/.vibekit/skills/tutien/references/voice-and-mode.md +44 -0
  184. package/.vibekit/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
  185. package/.vibekit/skills/tutien/scripts/adapters/git.mjs +48 -0
  186. package/.vibekit/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
  187. package/.vibekit/skills/tutien/scripts/analyze-history.mjs +84 -0
  188. package/.vibekit/skills/tutien/scripts/catalog.mjs +130 -0
  189. package/.vibekit/skills/tutien/scripts/classify.mjs +311 -0
  190. package/.vibekit/skills/tutien/scripts/command.mjs +107 -0
  191. package/.vibekit/skills/tutien/scripts/compare.mjs +41 -0
  192. package/.vibekit/skills/tutien/scripts/metrics.mjs +306 -0
  193. package/.vibekit/skills/tutien/scripts/normalize-events.mjs +68 -0
  194. package/.vibekit/skills/tutien/scripts/redact.mjs +30 -0
  195. package/.vibekit/skills/tutien/scripts/render-report.mjs +423 -0
  196. package/.vibekit/skills/tutien/scripts/run-tutien.mjs +272 -0
  197. package/.vibekit/skills/tutien/scripts/score.mjs +97 -0
  198. package/.vibekit/skills/tutien/scripts/snapshot.mjs +76 -0
  199. package/.vibekit/skills/tutien/scripts/villains.mjs +196 -0
  200. package/.vibekit/skills/vibekit-init/SKILL.md +2 -2
  201. package/AGENTS.md +2 -2
  202. package/CHANGELOG.md +40 -0
  203. package/README.md +60 -51
  204. package/backbone.yml +2 -1
  205. package/docs/README.vi.md +61 -52
  206. package/docs/README.zh-CN.md +277 -0
  207. package/package.json +15 -4
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: vibekit-init
3
+ description: Initialize or repair Minimal Vibe Coding Kit in an existing project. Use for first prompt, backbone.yml setup, CLAUDE.md merge, AGENTS.md merge, Cursor rules setup, Codex skill setup, or Grok setup. Always show requirements and a diff before writing.
4
+ disable-model-invocation: true
5
+ argument-hint: target path; profiles claude,cursor,codex,grok; write yes/no
6
+ ---
7
+
8
+ # Vibe Kit Init
9
+
10
+ Initialize the kit safely.
11
+
12
+ ## Required behavior
13
+
14
+ 1. Print the requirements checklist from `.vibekit/init/FIRST_TIME_INIT.md`.
15
+ 2. Run or emulate detection, including repo-specific conventions, project mode, and PRD presence:
16
+
17
+ ```bash
18
+ node .vibekit/scripts/init-backbone.mjs . --propose
19
+ ```
20
+
21
+ 3. Run the project-understanding step below.
22
+ 4. Propose a unified diff for `backbone.yml`, its `conventions` rules, managed blocks, and any new `.vibekit/docs/PRD.md`.
23
+ 5. Ask: `Apply this proposed backbone and convention rules? Reply yes, edit, or abort.`
24
+ 6. Write only after explicit `yes`.
25
+ 7. Validate after writing.
26
+
27
+ ## Project understanding (PRD)
28
+
29
+ Detection reports `project.mode` (`greenfield` = no source yet, `brownfield` = existing code) and whether a PRD exists.
30
+
31
+ - Always offer a short interview, regardless of whether docs already exist: what the project is and who it is for, the core problem and primary focus now, what success looks like, key constraints/non-goals, and (brownfield) which area to improve first.
32
+ - If no PRD is found, propose creating `.vibekit/docs/PRD.md` from `.vibekit/docs/templates/PRD_TEMPLATE.md` using the answers, and set `project.prd` to that path.
33
+ - If a PRD exists, read it, link it in `project.prd`, and offer to refresh it without overwriting unapproved content.
34
+ - Keep the PRD short; it captures intent, not a full spec. Record domain terms in `.vibekit/docs/CONTEXT.md` (scaffold from `.vibekit/docs/templates/CONTEXT_TEMPLATE.md`) and link it in `project.context`.
35
+
36
+ ## Convention detection
37
+
38
+ - Infer naming, directory layout, architecture, shared resource access, localization/message access, generated definitions, and per-app/package differences from existing files.
39
+ - Prefer existing constants, registries, generated APIs, and helper modules over hardcoded literals when the repo already has them.
40
+ - If no convention is clear, mark it as not detected and ask before introducing a broad new pattern.
41
+ - Store confirmed project rules in `backbone.yml` under `conventions`; later work must follow those rules unless the user edits them.
42
+
43
+ ## Merge policy
44
+
45
+ - Never overwrite existing `CLAUDE.md` or `AGENTS.md`.
46
+ - Replace only content between Minimal Vibe managed markers.
47
+ - Preserve user content outside managed markers.
48
+ - Keep `CLAUDE.md` and `AGENTS.md` concise.
49
+
50
+ ## Completion
51
+
52
+ Report initialized status, validation command, validation result, PRD path, and next recommended skill. Once the user confirms setup is complete, offer graduation (`node .vibekit/scripts/vibekit-finalize.mjs . --propose`) to move one-time bootstrap files into the cleanup folder.
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: visual-design-loop
3
+ description: Run an iterative visual design improvement loop for UI/product polish tasks. Use when a request involves screenshots, rendering, visual review, frontend polish, layout/typography/color refinement, design QA, or a Claude/Codex loop goal that touches a visible product surface.
4
+ ---
5
+
6
+ # Visual Design Loop
7
+
8
+ Use this skill to improve a visible UI through controlled render-review-fix loops. Keep the brief and existing project conventions as the source of truth; do not add new product requirements just because a screen could be enhanced.
9
+
10
+ ## Contract
11
+
12
+ Before editing, resolve and state:
13
+
14
+ - Goal.
15
+ - Target surface: route, page, component, flow, or supplied screenshot.
16
+ - Source of truth: current brief plus repo instructions, design system, nearby UI, and `backbone.yml` when present.
17
+ - Render method: local URL, app command, Storybook story, preview command, static file, or supplied screenshot.
18
+ - Screenshot method: browser screenshot, Playwright, in-app browser, provided image, or equivalent.
19
+ - Editable paths.
20
+ - Protected paths.
21
+ - Budget: default 3 loops.
22
+ - Timeout: default 10 minutes per loop.
23
+ - Log path: `/tmp/design-{project_slug}.md`.
24
+
25
+ If render or screenshot capture is missing and cannot be inferred safely, ask for the missing command, URL, or image before editing.
26
+
27
+ ## Baseline
28
+
29
+ 1. Render the target surface.
30
+ 2. Capture or inspect the baseline screenshot.
31
+ 3. Review visible issues only; do not invent findings.
32
+ 4. Create or update `/tmp/design-{project_slug}.md`.
33
+ 5. Log the baseline screenshot, visual score, main issues, and any render constraints.
34
+
35
+ Derive `project_slug` from `backbone.yml` `project.name` when available; otherwise use the repository directory name.
36
+
37
+ ## Visual rubric
38
+
39
+ Score screenshots from 1 to 5 using:
40
+
41
+ - Visual hierarchy: primary content and action are obvious.
42
+ - Layout and spacing: alignment, rhythm, density, whitespace.
43
+ - Typography: scale, contrast, readability, consistency.
44
+ - Color and contrast: accessible, intentional, not noisy.
45
+ - Component consistency: matches nearby UI and design system.
46
+ - Responsiveness: works at relevant viewport sizes.
47
+ - Interaction states: hover, focus, disabled, empty, loading, and error states when relevant.
48
+ - Product fit: improves the brief without adding unnecessary features.
49
+
50
+ ## Loop
51
+
52
+ For each loop:
53
+
54
+ 1. Review the latest screenshot.
55
+ 2. Identify the highest-impact visual issue.
56
+ 3. Form one small hypothesis.
57
+ 4. Apply one targeted fix inside editable paths only.
58
+ 5. Render again.
59
+ 6. Capture the after screenshot.
60
+ 7. Compare before and after.
61
+ 8. Keep the change only if quality improves, or if quality is equal with simpler and safer implementation.
62
+ 9. Revert only your own loop changes if the result is worse.
63
+ 10. Run the repo validation command when code changed.
64
+ 11. Append the loop result to `/tmp/design-{project_slug}.md`.
65
+
66
+ Each loop entry must include:
67
+
68
+ - Loop number.
69
+ - Screenshot reviewed.
70
+ - Issue found.
71
+ - Hypothesis.
72
+ - Fix applied.
73
+ - Before/after judgment.
74
+ - Rubric score before.
75
+ - Rubric score after.
76
+ - Validation result.
77
+ - Remaining concerns.
78
+ - Stop/continue decision.
79
+
80
+ ## Stop criteria
81
+
82
+ Stop when:
83
+
84
+ - The design is polished enough for the brief.
85
+ - The latest loop gives no meaningful improvement.
86
+ - Further changes would be subjective or overworked.
87
+ - Budget is reached.
88
+ - Validation fails for a non-trivial reason.
89
+ - A product or design decision is required from the user.
90
+ - Render or screenshot tooling is unavailable.
91
+
92
+ ## Final report
93
+
94
+ Report:
95
+
96
+ - Baseline score.
97
+ - Final score.
98
+ - Screenshots reviewed.
99
+ - Changes kept.
100
+ - Changes discarded, if any.
101
+ - Validation result.
102
+ - Remaining risks or design decisions.
103
+ - Log path.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Visual Design Loop"
3
+ short_description: "Iterative screenshot-based UI polish loop"
4
+ default_prompt: "Use $visual-design-loop to render, screenshot, review, and improve this UI until it is polished but not overworked."
@@ -10,7 +10,7 @@
10
10
  - `conventions`: user-reviewed project rules inferred from existing code.
11
11
  - `commands`: install, test, lint, typecheck, build, validate.
12
12
  - `policy`: branch, commit, editable paths, protected paths.
13
- - `agent_surfaces`: Claude, Cursor, Codex, shared skills, shared commands.
13
+ - `agent_surfaces`: Claude, Cursor, Codex, Grok, shared skills, shared commands.
14
14
  - `automation`: autoresearch, daily enhance, finalize (graduation cleanup), security.
15
15
 
16
16
  ## Init status
@@ -40,6 +40,8 @@ If no command is known, leave `validate` as a safe echo and ask the user to fill
40
40
 
41
41
  The `conventions` section is created during first-time init and must be reviewed before writing. It should capture repo-specific rules with evidence, not a fixed framework template.
42
42
 
43
+ `conventions.review_required_before_write: true` means: before writing to agent surfaces or instruction files — rules, skills, workflows, commands, root instruction files, and `backbone.yml` itself — the agent must show the proposed diff and wait for explicit approval. It does not gate ordinary code edits inside `policy.editable_paths`. Skills that offer a "clean, proceed in the same turn" path (for example `claim`) must downgrade to propose-and-wait for writes this flag covers.
44
+
43
45
  Include:
44
46
 
45
47
  - Naming style for files, directories, and symbols.
@@ -26,9 +26,10 @@ node .vibekit/scripts/mvck.mjs install /path/to/project --profile all
26
26
 
27
27
  Profiles:
28
28
 
29
- - `claude`: `CLAUDE.md`, `.claude/`, Claude skills, agents, commands, rules.
30
- - `cursor`: `.cursor/rules`, `.cursor/commands`, Cursor skill entrypoints.
31
- - `codex`: `AGENTS.md`, `.agents/skills`, `.codex-plugin`, `.codex` examples.
29
+ - `claude`: `CLAUDE.md`, `.claude/`, Claude skills, agents, commands, rules, deny-list settings.
30
+ - `cursor`: `.cursor/rules`, `.cursor/commands`, `.cursor/cli.json` CLI permissions, Cursor skill entrypoints.
31
+ - `codex`: `AGENTS.md`, `.agents/skills`, `.codex/rules` execution-policy rules, `.codex-plugin`, `.codex` examples.
32
+ - `grok`: `AGENTS.md`, `.grok/rules`, `.grok/skills`, `.grok/config.toml` permission rules, user config example.
32
33
  - `all`: every profile.
33
34
 
34
35
  ## Safe behavior
@@ -59,7 +60,7 @@ node /path/to/kit/.vibekit/scripts/mvck.mjs update /path/to/project
59
60
 
60
61
  The updater:
61
62
 
62
- - refreshes kit-owned surfaces (`.vibekit/skills/`, `.vibekit/commands/`, `.vibekit/scripts/`, `.vibekit/docs/`, and the `.claude/`, `.cursor/`, `.agents/`, `.codex*` mirrors) and adds any new kit skills;
63
+ - refreshes kit-owned surfaces (`.vibekit/skills/`, `.vibekit/commands/`, `.vibekit/scripts/`, `.vibekit/docs/`, and the `.claude/`, `.cursor/`, `.agents/`, `.grok/`, `.codex*` mirrors) and adds any new kit skills;
63
64
  - never overwrites `backbone.yml`, `CLAUDE.md`, `AGENTS.md` content outside the managed block, or `settings.json` files — those are seeded only if missing;
64
65
  - backs up every replaced kit file to `.vibekit/update-backup/<timestamp>/` (disable with `--no-backup`);
65
66
  - never deletes files you added, and skips re-seeding one-time files after `mvck finalize`;
@@ -114,7 +115,7 @@ node .vibekit/scripts/mvck.mjs doctor . --write-report
114
115
 
115
116
  ## Native reasoning skills
116
117
 
117
- The installer includes three flexible custom reasoning skills across Claude, Codex, and Cursor. These install as full skill folders, including examples and references for progressive disclosure:
118
+ The installer includes three flexible custom reasoning skills across Claude, Codex, Cursor, and Grok. These install as full skill folders, including examples and references for progressive disclosure:
118
119
 
119
120
  - `clearthought`: clarify ambiguous tasks and choose a reasoning mode.
120
121
  - `sequential-thinking`: split complex work into ordered implementation steps.
@@ -122,11 +123,14 @@ The installer includes three flexible custom reasoning skills across Claude, Cod
122
123
 
123
124
  ## Visual design loop skill
124
125
 
125
- The installer also includes `visual-design-loop` for Claude and Codex surfaces. Use it when a loop goal touches UI polish, screenshots, rendering, visual QA, or visible frontend behavior.
126
+ The installer also includes `visual-design-loop` for Claude, Codex, and Grok surfaces. Use it when a loop goal touches UI polish, screenshots, rendering, visual QA, or visible frontend behavior.
126
127
 
127
128
  ## User-invoked utility skills
128
129
 
129
- Two user-invoked skills install across Claude, Codex, and Cursor surfaces:
130
+ Five user-invoked skills install across Claude, Codex, Cursor, and Grok surfaces:
130
131
 
131
132
  - `memento`: write a `MEMENTO.md` working note before closing a multi-day task (`/memento`), then resume from it in the next session (`/memento resume`).
132
133
  - `coding-level`: set the explanation register from 0 (ELI5) to 5 (expert peer) with `/coding-level N`; stays active until reinvoked.
134
+ - `prompt-sharpener`: sharpen a rough prompt into a precise one with `/prompt-sharpener <rough prompt>`, then execute the sharpened version immediately in the same turn.
135
+ - `claim`: vet a request to bring something new into the repo with `/claim <request>` — validate URLs and references against official sources, check fit with existing rules and skills, confirm anything unclear, then integrate and document it.
136
+ - `tutien`: turn Git history and explicitly supplied AI-chat exports into a private, funny xianxia "cultivation" report with `/tutien` (realm, token use, workflow habits, evidence-bound suggestions); read-only, aggregate-only by default, and `/tutien off` disables the mode.
@@ -5,7 +5,7 @@
5
5
  Review these before merging changes:
6
6
 
7
7
  - `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`
8
- - `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`
8
+ - `.claude/**`, `.cursor/**`, `.agents/**`, `.grok/**`, `.codex-plugin/**`
9
9
  - `.vibekit/skills/**`, `.vibekit/commands/**`, `.vibekit/scripts/**`, `hooks/**`
10
10
  - `.mcp.json`, `mcp.json`, `mcp-configs/**`
11
11
  - installer scripts and CI workflows
@@ -12,11 +12,16 @@ Use `.cursor/rules/*.mdc`. The kit creates always-on core rules plus scoped rule
12
12
 
13
13
  Use `AGENTS.md` for repo instructions and `.agents/skills/*/SKILL.md` for skills. The kit also includes `.codex-plugin/plugin.json` so the shared skills can be packaged as a plugin.
14
14
 
15
+ ## Grok
16
+
17
+ Grok Build reads `AGENTS.md` natively plus every `*.md` rule in `.grok/rules/`, and repository skills from `.grok/skills/*/SKILL.md` (user-invocable skills appear as `/<skill-name>` slash commands). Permission deny rules are user-level only: see `.grok/config.example.toml` for the `~/.grok/config.toml` setup.
18
+
15
19
  ## Shared skill strategy
16
20
 
17
21
  Canonical skill bodies live in `.vibekit/skills/<skill-name>/`. Harness-specific folders contain small shims:
18
22
 
19
23
  - `.claude/skills/<skill-name>/SKILL.md`
20
24
  - `.agents/skills/<skill-name>/SKILL.md`
25
+ - `.grok/skills/<skill-name>/SKILL.md`
21
26
 
22
27
  This reduces drift while still giving each tool the path it expects.
@@ -1,7 +1,7 @@
1
1
  # Project context
2
2
 
3
3
  > Scaffolded by Minimal Vibe Coding Kit. A short, shared glossary and map so any
4
- > agent (Claude, Cursor, Codex) navigates this project with less back-and-forth.
4
+ > agent (Claude, Cursor, Codex, Grok) navigates this project with less back-and-forth.
5
5
  > Keep it current and terse — definitions, not prose.
6
6
 
7
7
  ## Domain glossary
@@ -17,6 +17,9 @@ This file is intentionally small. Shared rules live in `AGENTS.md`, project fact
17
17
  - `/security-scan` - run AgentShield-style review.
18
18
  - `/daily-enhance` - propose rule, skill, and workflow improvements.
19
19
  - `/coding-level N` - set explanation depth 0-5; the project default lives in `backbone.yml` `conventions.custom_rules`.
20
+ - `/prompt-sharpener <rough prompt>` - sharpen a rough prompt into a precise one, then execute it in the same turn.
21
+ - `/claim <request>` - vet a request to bring something new into the repo (validate sources, fit-check, confirm, integrate, document).
22
+ - `/tutien` - private, funny xianxia "cultivation" progress report from Git history + supplied AI-chat exports; `/tutien off` disables it.
20
23
 
21
24
  ## Hard rules
22
25
 
@@ -36,7 +36,7 @@ Use the autoresearch-coding skill.
36
36
  Goal: improve this Minimal Vibe Coding Kit for existing projects in any language.
37
37
  Metric command: node .vibekit/scripts/validate-kit.mjs .
38
38
  Direction: higher.
39
- Editable paths: README.md .vibekit/docs .vibekit/scripts skills .vibekit/commands .claude .cursor .agents .codex-plugin .github backbone.yml AGENTS.md .vibekit/init/CLAUDE-template.md .vibekit/init/FIRST_TIME_INIT.md package.json install.sh install.ps1.
39
+ Editable paths: README.md .vibekit/docs .vibekit/scripts skills .vibekit/commands .claude .cursor .agents .grok .codex-plugin .github backbone.yml AGENTS.md .vibekit/init/CLAUDE-template.md .vibekit/init/FIRST_TIME_INIT.md package.json install.sh install.ps1.
40
40
  Protected paths: .git .env* node_modules vendor secrets lockfiles.
41
41
  Budget: 3.
42
42
  ```
@@ -1,6 +1,6 @@
1
1
  # .vibekit/init/FIRST_TIME_INIT.md - bootstrap runbook
2
2
 
3
- Audience: Claude, Cursor, Codex, or any AI coding agent in a repo that just received Minimal Vibe Coding Kit.
3
+ Audience: Claude, Cursor, Codex, Grok, or any AI coding agent in a repo that just received Minimal Vibe Coding Kit.
4
4
 
5
5
  Keep this flow short. Detailed schema notes live in `.vibekit/docs/BACKBONE_REFERENCE.md`.
6
6
 
@@ -11,7 +11,7 @@ Before writing anything, print this checklist and mark each item as found, missi
11
11
  1. `backbone.yml` exists.
12
12
  2. `AGENTS.md` exists or will be created/merged.
13
13
  3. `CLAUDE.md` exists or will be created from `.vibekit/init/CLAUDE-template.md` when Claude support is installed.
14
- 4. At least one harness folder exists: `.claude/`, `.cursor/`, `.agents/`, or `.codex-plugin/`.
14
+ 4. At least one harness folder exists: `.claude/`, `.cursor/`, `.agents/`, `.grok/`, or `.codex-plugin/`.
15
15
  5. Git status is known. If user changes exist, do not overwrite them.
16
16
  6. A validation command is inferred or set to `node .vibekit/scripts/validate-kit.mjs .` for the kit itself.
17
17
  7. Protected paths include `.env*`, secrets, lockfiles, generated files, build output, migrations, and infra unless the user says otherwise.
@@ -170,7 +170,8 @@ const surfaces = {
170
170
  agents: exists('AGENTS.md'),
171
171
  claude: exists('CLAUDE.md') || exists('.vibekit/init/CLAUDE-template.md') || exists('.claude'),
172
172
  cursor: exists('.cursor/rules'),
173
- codex: exists('.agents') || exists('.codex-plugin/plugin.json')
173
+ codex: exists('.agents') || exists('.codex-plugin/plugin.json'),
174
+ grok: exists('.grok')
174
175
  };
175
176
  const managedBlocks = {
176
177
  AGENTS: countManaged('AGENTS.md'),
@@ -190,7 +191,8 @@ const nativeSkillSurfaces = {
190
191
  shared: '.vibekit/skills',
191
192
  claude: '.claude/skills',
192
193
  codex: '.agents/skills',
193
- cursor: '.cursor/skills'
194
+ cursor: '.cursor/skills',
195
+ grok: '.grok/skills'
194
196
  };
195
197
  const missingNativeSkills = [];
196
198
  for (const [surface, dir] of Object.entries(nativeSkillSurfaces)) {
@@ -257,7 +259,9 @@ const report = {
257
259
  claudeSkills: listFiles('.claude/skills').filter((f) => f.endsWith('SKILL.md')).length,
258
260
  codexSkills: listFiles('.agents/skills').filter((f) => f.endsWith('SKILL.md')).length,
259
261
  cursorSkills: listFiles('.cursor/skills').filter((f) => f.endsWith('SKILL.md')).length,
260
- cursorRules: listFiles('.cursor/rules').filter((f) => f.endsWith('.mdc')).length
262
+ cursorRules: listFiles('.cursor/rules').filter((f) => f.endsWith('.mdc')).length,
263
+ grokSkills: listFiles('.grok/skills').filter((f) => f.endsWith('SKILL.md')).length,
264
+ grokRules: listFiles('.grok/rules').filter((f) => f.endsWith('.md')).length
261
265
  },
262
266
  recommendedFirstPrompt: 'Read AGENTS.md and backbone.yml, run mvck doctor ., then propose a small safe plan before editing.',
263
267
  knownRisks: risks
@@ -308,15 +312,18 @@ ${(data.protectedPaths.length ? data.protectedPaths : ['not declared']).map((ite
308
312
  - Claude surface: ${data.agentSurfaces.claude ? 'yes' : 'no'}
309
313
  - Cursor surface: ${data.agentSurfaces.cursor ? 'yes' : 'no'}
310
314
  - Codex surface: ${data.agentSurfaces.codex ? 'yes' : 'no'}
315
+ - Grok surface: ${data.agentSurfaces.grok ? 'yes' : 'no'}
311
316
  - Shared skills: ${data.aiRulesLoaded.sharedSkills}
312
317
  - Claude skills: ${data.aiRulesLoaded.claudeSkills}
313
318
  - Codex skills: ${data.aiRulesLoaded.codexSkills}
314
319
  - Cursor skills: ${data.aiRulesLoaded.cursorSkills}
315
320
  - Cursor rules: ${data.aiRulesLoaded.cursorRules}
321
+ - Grok skills: ${data.aiRulesLoaded.grokSkills}
322
+ - Grok rules: ${data.aiRulesLoaded.grokRules}
316
323
 
317
324
  ## Native reasoning skills
318
325
 
319
- ${data.nativeReasoningSkills.names.map((skill) => `- ${skill}: ${data.nativeReasoningSkills.missing.some((item) => item.endsWith(`:${skill}`)) ? 'missing on one or more surfaces' : 'available on shared, Claude, Codex, and Cursor'}`).join('\n')}
326
+ ${data.nativeReasoningSkills.names.map((skill) => `- ${skill}: ${data.nativeReasoningSkills.missing.some((item) => item.endsWith(`:${skill}`)) ? 'missing on one or more surfaces' : 'available on shared, Claude, Codex, Cursor, and Grok'}`).join('\n')}
320
327
 
321
328
  ## Recommended first prompt
322
329
 
@@ -13,8 +13,8 @@ function usage() {
13
13
  console.log(`Minimal Vibe Coding Kit
14
14
 
15
15
  Usage:
16
- mvck install [target] [--profile all|claude,cursor,codex] [--force] [--dry-run] [--json]
17
- mvck update [target] [--profile all|claude,cursor,codex] [--dry-run] [--json] [--no-backup]
16
+ mvck install [target] [--profile all|claude,cursor,codex,grok] [--force] [--dry-run] [--json]
17
+ mvck update [target] [--profile all|claude,cursor,codex,grok] [--dry-run] [--json] [--no-backup]
18
18
  mvck init [target] [--propose|--write --yes] [--preset nextjs|wordpress|python|laravel|docker]
19
19
  mvck validate [target]
20
20
  mvck doctor [target] [--write-report] [--json]
@@ -158,23 +158,24 @@ const KIT_SCRIPTS = [
158
158
  '.vibekit/scripts/mvck.mjs', '.vibekit/scripts/init-backbone.mjs', '.vibekit/scripts/daily-enhance.mjs', '.vibekit/scripts/validate-kit.mjs',
159
159
  '.vibekit/scripts/doctor.mjs', '.vibekit/scripts/agentshield-probe.mjs', '.vibekit/scripts/vibekit-finalize.mjs'
160
160
  ];
161
- const VALID_PROFILES = new Set(['claude', 'cursor', 'codex']);
161
+ const VALID_PROFILES = new Set(['claude', 'cursor', 'codex', 'grok']);
162
162
 
163
163
  function parseProfiles(profileRaw) {
164
- const profiles = new Set(profileRaw === 'all' ? ['claude', 'cursor', 'codex'] : profileRaw.split(',').map((x) => x.trim()).filter(Boolean));
164
+ const profiles = new Set(profileRaw === 'all' ? ['claude', 'cursor', 'codex', 'grok'] : profileRaw.split(',').map((x) => x.trim()).filter(Boolean));
165
165
  for (const p of profiles) {
166
- if (!VALID_PROFILES.has(p)) throw new Error(`Unknown profile: ${p}. Valid values: all, claude, cursor, codex (comma-separated).`);
166
+ if (!VALID_PROFILES.has(p)) throw new Error(`Unknown profile: ${p}. Valid values: all, claude, cursor, codex, grok (comma-separated).`);
167
167
  }
168
168
  return profiles;
169
169
  }
170
170
  const CLAUDE_DIRS = ['.claude/agents', '.claude/commands', '.claude/rules'];
171
- const CLAUDE_SKILLS = [
172
- 'autoresearch-coding', 'agentshield-security-review', 'daily-workflow-curator', 'vibekit-init', 'visual-design-loop',
173
- 'clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'path-sensitive-shell-safety', 'memento', 'coding-level', 'parallel-analysis'
174
- ];
171
+ // Skill registries come from the central distribution manifest so the
172
+ // installer and the validator cannot drift apart.
173
+ const skillsManifest = JSON.parse(fs.readFileSync(path.join(kitRoot, '.vibekit/skills/skills-manifest.json'), 'utf8'));
174
+ const CLAUDE_SKILLS = skillsManifest.skills.map((s) => s.name);
175
175
  const CURSOR_DIRS = ['.cursor/rules', '.cursor/commands'];
176
- const CURSOR_SKILLS = ['clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'path-sensitive-shell-safety', 'memento', 'coding-level', 'parallel-analysis'];
176
+ const CURSOR_SKILLS = skillsManifest.skills.filter((s) => (s.surfaces || []).includes('cursor')).map((s) => s.name);
177
177
  const CODEX_DIRS = ['.agents', '.codex', '.codex-plugin'];
178
+ const GROK_DIRS = ['.grok'];
178
179
  const GITIGNORE_BLOCK = `# BEGIN: minimal-vibe-coding-kit\n.autoresearch/\nresults.tsv\n.vibekit/INIT_DONE\n.vibekit/FINALIZE_DONE\n.vibekit/reports/\n.vibekit/update-backup/\n_vibekit-cleanup/\nCLAUDE.local.md\n# END: minimal-vibe-coding-kit`;
179
180
 
180
181
  function kitVersion() {
@@ -258,12 +259,18 @@ function install() {
258
259
  actions.push(copyDirSafe(`.cursor/skills/${skill}`, `.cursor/skills/${skill}`, target, opts));
259
260
  }
260
261
  actions.push(copyFileSafe('.cursor/settings.json', '.cursor/settings.json', target, opts));
262
+ actions.push(copyFileSafe('.cursor/cli.json', '.cursor/cli.json', target, opts));
261
263
  }
262
264
  if (profiles.has('codex')) {
263
265
  for (const dir of CODEX_DIRS) {
264
266
  actions.push(copyDirSafe(dir, dir, target, opts));
265
267
  }
266
268
  }
269
+ if (profiles.has('grok')) {
270
+ for (const dir of GROK_DIRS) {
271
+ actions.push(copyDirSafe(dir, dir, target, opts));
272
+ }
273
+ }
267
274
 
268
275
  applyManagedBlocks(target, profiles, actions, { dryRun });
269
276
  writeKitVersion(target, dryRun);
@@ -398,13 +405,21 @@ function update() {
398
405
  if (profiles.has('codex')) {
399
406
  for (const dir of CODEX_DIRS) actions.push(...updateDirSafe(dir, target, opts));
400
407
  }
408
+ if (profiles.has('grok')) {
409
+ // .grok/config.toml holds user-editable permission rules; seed it below instead of overwriting.
410
+ for (const dir of GROK_DIRS) actions.push(...updateDirSafe(dir, target, dir === '.grok' ? { ...opts, exclude: ['config.toml'] } : opts));
411
+ }
401
412
 
402
413
  // User-owned files: seed only when missing, never overwrite. Finalized
403
414
  // projects removed the one-time files on purpose, so skip re-seeding them.
404
415
  const seedFiles = finalized ? ['backbone.yml'] : KIT_SEED_FILES;
405
416
  for (const file of seedFiles) actions.push(copyFileSafe(file, file, target, { force: false, dryRun }));
406
417
  if (profiles.has('claude')) actions.push(copyFileSafe('.claude/settings.json', '.claude/settings.json', target, { force: false, dryRun }));
407
- if (profiles.has('cursor')) actions.push(copyFileSafe('.cursor/settings.json', '.cursor/settings.json', target, { force: false, dryRun }));
418
+ if (profiles.has('cursor')) {
419
+ actions.push(copyFileSafe('.cursor/settings.json', '.cursor/settings.json', target, { force: false, dryRun }));
420
+ actions.push(copyFileSafe('.cursor/cli.json', '.cursor/cli.json', target, { force: false, dryRun }));
421
+ }
422
+ if (profiles.has('grok')) actions.push(copyFileSafe('.grok/config.toml', '.grok/config.toml', target, { force: false, dryRun }));
408
423
 
409
424
  applyManagedBlocks(target, profiles, actions, { dryRun });
410
425
  writeKitVersion(target, dryRun);
@@ -412,7 +427,7 @@ function update() {
412
427
  const summary = { add: 0, update: 0, unchanged: 0, skip: 0, 'managed-block': 0 };
413
428
  for (const a of actions) summary[a.action] = (summary[a.action] || 0) + 1;
414
429
  const backupInfo = backup && backup.count > 0 ? path.relative(target, backup.dir) : null;
415
- const preserved = ['backbone.yml', 'CLAUDE.md', 'AGENTS.md content outside the managed block', '.claude/settings.json', '.cursor/settings.json'];
430
+ const preserved = ['backbone.yml', 'CLAUDE.md', 'AGENTS.md content outside the managed block', '.claude/settings.json', '.cursor/settings.json', '.cursor/cli.json', '.grok/config.toml'];
416
431
 
417
432
  const legacyPaths = detectLegacyLayout(target);
418
433
  if (json) {
@@ -1,16 +1,51 @@
1
1
  #!/usr/bin/env node
2
+ import fs from 'node:fs';
2
3
  import os from 'node:os';
3
4
  import path from 'node:path';
4
5
  import { spawnSync } from 'node:child_process';
5
6
 
6
7
  const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
7
8
  const cache = process.env.MVCK_NPM_CACHE || path.join(os.tmpdir(), 'mvck-npm-cache');
8
- const result = spawnSync(npm, ['pack', '--dry-run'], {
9
- stdio: 'inherit',
9
+ const result = spawnSync(npm, ['pack', '--dry-run', '--json'], {
10
+ encoding: 'utf8',
10
11
  env: {
11
12
  ...process.env,
12
13
  npm_config_cache: cache
13
14
  }
14
15
  });
15
16
 
16
- process.exit(result.status ?? 1);
17
+ if (result.status !== 0) {
18
+ process.stderr.write(result.stderr || '');
19
+ process.exit(result.status ?? 1);
20
+ }
21
+
22
+ let packed;
23
+ try {
24
+ packed = new Set(JSON.parse(result.stdout)[0].files.map((file) => file.path));
25
+ } catch (err) {
26
+ console.error(`FAIL could not parse npm pack --dry-run --json output: ${err.message}`);
27
+ process.exit(1);
28
+ }
29
+
30
+ // Every skill file present on disk must ship in the tarball. A skill directory
31
+ // added without its package.json `files` entry fails here with the missing path.
32
+ const skillRoots = ['.vibekit/skills', '.claude/skills', '.cursor/skills', '.agents/skills', '.grok/skills'];
33
+ const expected = [];
34
+ function walk(dir) {
35
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
36
+ const rel = path.posix.join(dir, entry.name);
37
+ if (entry.isDirectory()) walk(rel);
38
+ else expected.push(rel);
39
+ }
40
+ }
41
+ for (const root of skillRoots) {
42
+ if (fs.existsSync(root)) walk(root);
43
+ }
44
+
45
+ const missing = expected.filter((rel) => !packed.has(rel));
46
+ for (const rel of missing) console.error(`FAIL packaged tarball is missing ${rel}`);
47
+ if (missing.length > 0) {
48
+ console.error(`Pack dry-run: ${missing.length} of ${expected.length} on-disk skill files are not packaged.`);
49
+ process.exit(1);
50
+ }
51
+ console.log(`PASS pack dry-run: all ${expected.length} on-disk skill files are packaged (${packed.size} files in tarball)`);
@@ -120,6 +120,14 @@ try {
120
120
  const updParsed = JSON.parse(updPlan.stdout);
121
121
  assert(updParsed.status === 'dry-run' && typeof updParsed.toVersion === 'string', 'update --dry-run --json returns machine-readable plan');
122
122
 
123
+ // Single-profile installs must pass validation on their own.
124
+ for (const profile of ['claude', 'cursor', 'codex', 'grok']) {
125
+ const solo = tempDir(`profile-${profile}`);
126
+ run(['.vibekit/scripts/mvck.mjs', 'install', solo, '--profile', profile]);
127
+ run(['.vibekit/scripts/validate-kit.mjs', solo]);
128
+ assert(true, `${profile}-only install passes validation`);
129
+ }
130
+
123
131
  console.log('\nInstall behavior tests passed.');
124
132
  } finally {
125
133
  if (!keep) {