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.
- package/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.agents/skills/claim/SKILL.md +82 -0
- package/.agents/skills/prompt-sharpener/SKILL.md +54 -0
- package/.agents/skills/tutien/SKILL.md +74 -0
- package/.agents/skills/tutien/references/classification.md +64 -0
- package/.agents/skills/tutien/references/lore-sources.md +15 -0
- package/.agents/skills/tutien/references/privacy.md +33 -0
- package/.agents/skills/tutien/references/schema.md +75 -0
- package/.agents/skills/tutien/references/scoring-and-realms.md +37 -0
- package/.agents/skills/tutien/references/voice-and-mode.md +44 -0
- package/.agents/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
- package/.agents/skills/tutien/scripts/adapters/git.mjs +48 -0
- package/.agents/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
- package/.agents/skills/tutien/scripts/analyze-history.mjs +84 -0
- package/.agents/skills/tutien/scripts/catalog.mjs +130 -0
- package/.agents/skills/tutien/scripts/classify.mjs +311 -0
- package/.agents/skills/tutien/scripts/command.mjs +107 -0
- package/.agents/skills/tutien/scripts/compare.mjs +41 -0
- package/.agents/skills/tutien/scripts/metrics.mjs +306 -0
- package/.agents/skills/tutien/scripts/normalize-events.mjs +68 -0
- package/.agents/skills/tutien/scripts/redact.mjs +30 -0
- package/.agents/skills/tutien/scripts/render-report.mjs +423 -0
- package/.agents/skills/tutien/scripts/run-tutien.mjs +272 -0
- package/.agents/skills/tutien/scripts/score.mjs +97 -0
- package/.agents/skills/tutien/scripts/snapshot.mjs +76 -0
- package/.agents/skills/tutien/scripts/villains.mjs +196 -0
- package/.agents/skills/vibekit-init/SKILL.md +2 -2
- package/.claude/settings.json +10 -3
- package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.claude/skills/claim/SKILL.md +82 -0
- package/.claude/skills/prompt-sharpener/SKILL.md +54 -0
- package/.claude/skills/tutien/SKILL.md +74 -0
- package/.claude/skills/tutien/references/classification.md +64 -0
- package/.claude/skills/tutien/references/lore-sources.md +15 -0
- package/.claude/skills/tutien/references/privacy.md +33 -0
- package/.claude/skills/tutien/references/schema.md +75 -0
- package/.claude/skills/tutien/references/scoring-and-realms.md +37 -0
- package/.claude/skills/tutien/references/voice-and-mode.md +44 -0
- package/.claude/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
- package/.claude/skills/tutien/scripts/adapters/git.mjs +48 -0
- package/.claude/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
- package/.claude/skills/tutien/scripts/analyze-history.mjs +84 -0
- package/.claude/skills/tutien/scripts/catalog.mjs +130 -0
- package/.claude/skills/tutien/scripts/classify.mjs +311 -0
- package/.claude/skills/tutien/scripts/command.mjs +107 -0
- package/.claude/skills/tutien/scripts/compare.mjs +41 -0
- package/.claude/skills/tutien/scripts/metrics.mjs +306 -0
- package/.claude/skills/tutien/scripts/normalize-events.mjs +68 -0
- package/.claude/skills/tutien/scripts/redact.mjs +30 -0
- package/.claude/skills/tutien/scripts/render-report.mjs +423 -0
- package/.claude/skills/tutien/scripts/run-tutien.mjs +272 -0
- package/.claude/skills/tutien/scripts/score.mjs +97 -0
- package/.claude/skills/tutien/scripts/snapshot.mjs +76 -0
- package/.claude/skills/tutien/scripts/villains.mjs +196 -0
- package/.claude/skills/vibekit-init/SKILL.md +2 -2
- package/.codex/rules/vibekit.rules +77 -0
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor/cli.json +18 -0
- package/.cursor/settings.json +15 -8
- package/.cursor/skills/claim/SKILL.md +82 -0
- package/.cursor/skills/prompt-sharpener/SKILL.md +54 -0
- package/.cursor/skills/tutien/SKILL.md +74 -0
- package/.cursor/skills/tutien/references/classification.md +64 -0
- package/.cursor/skills/tutien/references/lore-sources.md +15 -0
- package/.cursor/skills/tutien/references/privacy.md +33 -0
- package/.cursor/skills/tutien/references/schema.md +75 -0
- package/.cursor/skills/tutien/references/scoring-and-realms.md +37 -0
- package/.cursor/skills/tutien/references/voice-and-mode.md +44 -0
- package/.cursor/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
- package/.cursor/skills/tutien/scripts/adapters/git.mjs +48 -0
- package/.cursor/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
- package/.cursor/skills/tutien/scripts/analyze-history.mjs +84 -0
- package/.cursor/skills/tutien/scripts/catalog.mjs +130 -0
- package/.cursor/skills/tutien/scripts/classify.mjs +311 -0
- package/.cursor/skills/tutien/scripts/command.mjs +107 -0
- package/.cursor/skills/tutien/scripts/compare.mjs +41 -0
- package/.cursor/skills/tutien/scripts/metrics.mjs +306 -0
- package/.cursor/skills/tutien/scripts/normalize-events.mjs +68 -0
- package/.cursor/skills/tutien/scripts/redact.mjs +30 -0
- package/.cursor/skills/tutien/scripts/render-report.mjs +423 -0
- package/.cursor/skills/tutien/scripts/run-tutien.mjs +272 -0
- package/.cursor/skills/tutien/scripts/score.mjs +97 -0
- package/.cursor/skills/tutien/scripts/snapshot.mjs +76 -0
- package/.cursor/skills/tutien/scripts/villains.mjs +196 -0
- package/.grok/README.md +13 -0
- package/.grok/config.example.toml +13 -0
- package/.grok/config.toml +29 -0
- package/.grok/rules/safe-delete.md +11 -0
- package/.grok/rules/security.md +5 -0
- package/.grok/rules/vibe-core.md +8 -0
- package/.grok/skills/agentshield-security-review/SKILL.md +75 -0
- package/.grok/skills/agentshield-security-review/agents/openai.yaml +5 -0
- package/.grok/skills/agentshield-security-review/references/native-install.md +97 -0
- package/.grok/skills/agentshield-security-review/references/report-template.md +54 -0
- package/.grok/skills/agentshield-security-review/references/review-checklist.md +45 -0
- package/.grok/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +135 -0
- package/.grok/skills/autoresearch-coding/README.md +15 -0
- package/.grok/skills/autoresearch-coding/SKILL.md +101 -0
- package/.grok/skills/autoresearch-coding/references/experiment-contract.md +13 -0
- package/.grok/skills/autoresearch-coding/references/metric-extraction.md +8 -0
- package/.grok/skills/autoresearch-coding/references/result-ledger.md +15 -0
- package/.grok/skills/autoresearch-coding/scripts/log_result.py +24 -0
- package/.grok/skills/autoresearch-coding/scripts/run_logged.py +30 -0
- package/.grok/skills/claim/SKILL.md +82 -0
- package/.grok/skills/clearthought/SKILL.md +100 -0
- package/.grok/skills/clearthought/examples/decision-framework.md +441 -0
- package/.grok/skills/clearthought/examples/metagame-examples.md +536 -0
- package/.grok/skills/clearthought/examples/sequential-thinking.md +380 -0
- package/.grok/skills/clearthought/references/output-schemas.md +494 -0
- package/.grok/skills/clearthought/references/parameter-reference.md +482 -0
- package/.grok/skills/coding-level/SKILL.md +34 -0
- package/.grok/skills/coding-level/references/level-0.md +131 -0
- package/.grok/skills/coding-level/references/level-1.md +118 -0
- package/.grok/skills/coding-level/references/level-2.md +140 -0
- package/.grok/skills/coding-level/references/level-3.md +142 -0
- package/.grok/skills/coding-level/references/level-4.md +152 -0
- package/.grok/skills/coding-level/references/level-5.md +84 -0
- package/.grok/skills/daily-workflow-curator/SKILL.md +52 -0
- package/.grok/skills/memento/SKILL.md +36 -0
- package/.grok/skills/parallel-analysis/SKILL.md +160 -0
- package/.grok/skills/path-sensitive-shell-safety/SKILL.md +69 -0
- package/.grok/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
- package/.grok/skills/prompt-sharpener/SKILL.md +54 -0
- package/.grok/skills/reviewing-4p-priorities/SKILL.md +72 -0
- package/.grok/skills/reviewing-4p-priorities/examples.md +298 -0
- package/.grok/skills/sequential-thinking/SKILL.md +106 -0
- package/.grok/skills/sequential-thinking/examples/adaptive-depth.md +542 -0
- package/.grok/skills/sequential-thinking/examples/branching-exploration.md +474 -0
- package/.grok/skills/sequential-thinking/examples/linear-reasoning.md +210 -0
- package/.grok/skills/sequential-thinking/examples/revision-pattern.md +304 -0
- package/.grok/skills/sequential-thinking/references/output-schema.md +483 -0
- package/.grok/skills/sequential-thinking/references/parameters.md +463 -0
- package/.grok/skills/sequential-thinking/references/patterns.md +666 -0
- package/.grok/skills/tutien/SKILL.md +74 -0
- package/.grok/skills/tutien/references/classification.md +64 -0
- package/.grok/skills/tutien/references/lore-sources.md +15 -0
- package/.grok/skills/tutien/references/privacy.md +33 -0
- package/.grok/skills/tutien/references/schema.md +75 -0
- package/.grok/skills/tutien/references/scoring-and-realms.md +37 -0
- package/.grok/skills/tutien/references/voice-and-mode.md +44 -0
- package/.grok/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
- package/.grok/skills/tutien/scripts/adapters/git.mjs +48 -0
- package/.grok/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
- package/.grok/skills/tutien/scripts/analyze-history.mjs +84 -0
- package/.grok/skills/tutien/scripts/catalog.mjs +130 -0
- package/.grok/skills/tutien/scripts/classify.mjs +311 -0
- package/.grok/skills/tutien/scripts/command.mjs +107 -0
- package/.grok/skills/tutien/scripts/compare.mjs +41 -0
- package/.grok/skills/tutien/scripts/metrics.mjs +306 -0
- package/.grok/skills/tutien/scripts/normalize-events.mjs +68 -0
- package/.grok/skills/tutien/scripts/redact.mjs +30 -0
- package/.grok/skills/tutien/scripts/render-report.mjs +423 -0
- package/.grok/skills/tutien/scripts/run-tutien.mjs +272 -0
- package/.grok/skills/tutien/scripts/score.mjs +97 -0
- package/.grok/skills/tutien/scripts/snapshot.mjs +76 -0
- package/.grok/skills/tutien/scripts/villains.mjs +196 -0
- package/.grok/skills/vibekit-init/SKILL.md +52 -0
- package/.grok/skills/visual-design-loop/SKILL.md +103 -0
- package/.grok/skills/visual-design-loop/agents/openai.yaml +4 -0
- package/.vibekit/docs/BACKBONE_REFERENCE.md +3 -1
- package/.vibekit/docs/INSTALL.md +11 -7
- package/.vibekit/docs/SECURITY_MODEL.md +1 -1
- package/.vibekit/docs/TOOLING_GUIDE.md +5 -0
- package/.vibekit/docs/templates/CONTEXT_TEMPLATE.md +1 -1
- package/.vibekit/init/CLAUDE-template.md +3 -0
- package/.vibekit/init/FIRST_PROMPT.md +1 -1
- package/.vibekit/init/FIRST_TIME_INIT.md +2 -2
- package/.vibekit/scripts/doctor.mjs +11 -4
- package/.vibekit/scripts/mvck.mjs +27 -12
- package/.vibekit/scripts/pack-dry-run.mjs +38 -3
- package/.vibekit/scripts/test-install.mjs +8 -0
- package/.vibekit/scripts/validate-kit.mjs +116 -41
- package/.vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.vibekit/skills/claim/SKILL.md +82 -0
- package/.vibekit/skills/prompt-sharpener/SKILL.md +54 -0
- package/.vibekit/skills/skills-manifest.json +27 -0
- package/.vibekit/skills/tutien/SKILL.md +74 -0
- package/.vibekit/skills/tutien/references/classification.md +64 -0
- package/.vibekit/skills/tutien/references/lore-sources.md +15 -0
- package/.vibekit/skills/tutien/references/privacy.md +33 -0
- package/.vibekit/skills/tutien/references/schema.md +75 -0
- package/.vibekit/skills/tutien/references/scoring-and-realms.md +37 -0
- package/.vibekit/skills/tutien/references/voice-and-mode.md +44 -0
- package/.vibekit/skills/tutien/scripts/adapters/generic-jsonl.mjs +82 -0
- package/.vibekit/skills/tutien/scripts/adapters/git.mjs +48 -0
- package/.vibekit/skills/tutien/scripts/adapters/plain-transcript.mjs +37 -0
- package/.vibekit/skills/tutien/scripts/analyze-history.mjs +84 -0
- package/.vibekit/skills/tutien/scripts/catalog.mjs +130 -0
- package/.vibekit/skills/tutien/scripts/classify.mjs +311 -0
- package/.vibekit/skills/tutien/scripts/command.mjs +107 -0
- package/.vibekit/skills/tutien/scripts/compare.mjs +41 -0
- package/.vibekit/skills/tutien/scripts/metrics.mjs +306 -0
- package/.vibekit/skills/tutien/scripts/normalize-events.mjs +68 -0
- package/.vibekit/skills/tutien/scripts/redact.mjs +30 -0
- package/.vibekit/skills/tutien/scripts/render-report.mjs +423 -0
- package/.vibekit/skills/tutien/scripts/run-tutien.mjs +272 -0
- package/.vibekit/skills/tutien/scripts/score.mjs +97 -0
- package/.vibekit/skills/tutien/scripts/snapshot.mjs +76 -0
- package/.vibekit/skills/tutien/scripts/villains.mjs +196 -0
- package/.vibekit/skills/vibekit-init/SKILL.md +2 -2
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +40 -0
- package/README.md +60 -51
- package/backbone.yml +2 -1
- package/docs/README.vi.md +61 -52
- package/docs/README.zh-CN.md +277 -0
- 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.
|
|
@@ -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.
|
package/.vibekit/docs/INSTALL.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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 =
|
|
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'))
|
|
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
|
-
|
|
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
|
-
|
|
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) {
|