minimal-vibe-coding-kit 0.4.0 → 0.4.2

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/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  2. package/.agents/skills/coding-level/SKILL.md +8 -1
  3. package/.agents/skills/path-sensitive-shell-safety/SKILL.md +1 -0
  4. package/.agents/skills/prompt-sharpener/SKILL.md +54 -0
  5. package/.agents/skills/vibekit-init/SKILL.md +2 -2
  6. package/.claude/rules/safe-delete.md +11 -0
  7. package/.claude/settings.json +10 -3
  8. package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  9. package/.claude/skills/coding-level/SKILL.md +8 -1
  10. package/.claude/skills/path-sensitive-shell-safety/SKILL.md +1 -0
  11. package/.claude/skills/prompt-sharpener/SKILL.md +54 -0
  12. package/.claude/skills/vibekit-init/SKILL.md +2 -2
  13. package/.codex/rules/vibekit.rules +77 -0
  14. package/.codex-plugin/plugin.json +1 -1
  15. package/.cursor/cli.json +18 -0
  16. package/.cursor/rules/040-safe-delete.mdc +16 -0
  17. package/.cursor/settings.json +15 -8
  18. package/.cursor/skills/coding-level/SKILL.md +8 -1
  19. package/.cursor/skills/path-sensitive-shell-safety/SKILL.md +1 -0
  20. package/.cursor/skills/prompt-sharpener/SKILL.md +54 -0
  21. package/.grok/README.md +13 -0
  22. package/.grok/config.example.toml +13 -0
  23. package/.grok/config.toml +29 -0
  24. package/.grok/rules/safe-delete.md +11 -0
  25. package/.grok/rules/security.md +5 -0
  26. package/.grok/rules/vibe-core.md +8 -0
  27. package/.grok/skills/agentshield-security-review/SKILL.md +75 -0
  28. package/.grok/skills/agentshield-security-review/agents/openai.yaml +5 -0
  29. package/.grok/skills/agentshield-security-review/references/native-install.md +97 -0
  30. package/.grok/skills/agentshield-security-review/references/report-template.md +54 -0
  31. package/.grok/skills/agentshield-security-review/references/review-checklist.md +45 -0
  32. package/.grok/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +135 -0
  33. package/.grok/skills/autoresearch-coding/README.md +15 -0
  34. package/.grok/skills/autoresearch-coding/SKILL.md +101 -0
  35. package/.grok/skills/autoresearch-coding/references/experiment-contract.md +13 -0
  36. package/.grok/skills/autoresearch-coding/references/metric-extraction.md +8 -0
  37. package/.grok/skills/autoresearch-coding/references/result-ledger.md +15 -0
  38. package/.grok/skills/autoresearch-coding/scripts/log_result.py +24 -0
  39. package/.grok/skills/autoresearch-coding/scripts/run_logged.py +30 -0
  40. package/.grok/skills/clearthought/SKILL.md +100 -0
  41. package/.grok/skills/clearthought/examples/decision-framework.md +441 -0
  42. package/.grok/skills/clearthought/examples/metagame-examples.md +536 -0
  43. package/.grok/skills/clearthought/examples/sequential-thinking.md +380 -0
  44. package/.grok/skills/clearthought/references/output-schemas.md +494 -0
  45. package/.grok/skills/clearthought/references/parameter-reference.md +482 -0
  46. package/.grok/skills/coding-level/SKILL.md +34 -0
  47. package/.grok/skills/coding-level/references/level-0.md +131 -0
  48. package/.grok/skills/coding-level/references/level-1.md +118 -0
  49. package/.grok/skills/coding-level/references/level-2.md +140 -0
  50. package/.grok/skills/coding-level/references/level-3.md +142 -0
  51. package/.grok/skills/coding-level/references/level-4.md +152 -0
  52. package/.grok/skills/coding-level/references/level-5.md +84 -0
  53. package/.grok/skills/daily-workflow-curator/SKILL.md +52 -0
  54. package/.grok/skills/memento/SKILL.md +36 -0
  55. package/.grok/skills/parallel-analysis/SKILL.md +160 -0
  56. package/.grok/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  57. package/.grok/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  58. package/.grok/skills/prompt-sharpener/SKILL.md +54 -0
  59. package/.grok/skills/reviewing-4p-priorities/SKILL.md +72 -0
  60. package/.grok/skills/reviewing-4p-priorities/examples.md +298 -0
  61. package/.grok/skills/sequential-thinking/SKILL.md +106 -0
  62. package/.grok/skills/sequential-thinking/examples/adaptive-depth.md +542 -0
  63. package/.grok/skills/sequential-thinking/examples/branching-exploration.md +474 -0
  64. package/.grok/skills/sequential-thinking/examples/linear-reasoning.md +210 -0
  65. package/.grok/skills/sequential-thinking/examples/revision-pattern.md +304 -0
  66. package/.grok/skills/sequential-thinking/references/output-schema.md +483 -0
  67. package/.grok/skills/sequential-thinking/references/parameters.md +463 -0
  68. package/.grok/skills/sequential-thinking/references/patterns.md +666 -0
  69. package/.grok/skills/vibekit-init/SKILL.md +52 -0
  70. package/.grok/skills/visual-design-loop/SKILL.md +103 -0
  71. package/.grok/skills/visual-design-loop/agents/openai.yaml +4 -0
  72. package/.vibekit/docs/BACKBONE_REFERENCE.md +1 -1
  73. package/.vibekit/docs/INSTALL.md +21 -7
  74. package/.vibekit/docs/SECURITY_MODEL.md +1 -1
  75. package/.vibekit/docs/TOOLING_GUIDE.md +5 -0
  76. package/.vibekit/docs/templates/CONTEXT_TEMPLATE.md +1 -1
  77. package/.vibekit/init/CLAUDE-template.md +3 -0
  78. package/.vibekit/init/FIRST_PROMPT.md +1 -1
  79. package/.vibekit/init/FIRST_TIME_INIT.md +34 -2
  80. package/.vibekit/scripts/doctor.mjs +27 -5
  81. package/.vibekit/scripts/init-backbone.mjs +9 -0
  82. package/.vibekit/scripts/mvck.mjs +24 -9
  83. package/.vibekit/scripts/test-install.mjs +8 -0
  84. package/.vibekit/scripts/validate-kit.mjs +104 -39
  85. package/.vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
  86. package/.vibekit/skills/coding-level/SKILL.md +8 -1
  87. package/.vibekit/skills/path-sensitive-shell-safety/SKILL.md +1 -0
  88. package/.vibekit/skills/prompt-sharpener/SKILL.md +54 -0
  89. package/.vibekit/skills/vibekit-init/SKILL.md +2 -2
  90. package/AGENTS.md +3 -2
  91. package/CHANGELOG.md +21 -0
  92. package/README.md +60 -19
  93. package/backbone.yml +2 -1
  94. package/docs/README.vi.md +273 -0
  95. package/package.json +8 -3
  96. package/README.vi.md +0 -232
@@ -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
@@ -1,5 +1,17 @@
1
1
  # Install guide
2
2
 
3
+ ## Install from npm
4
+
5
+ ```bash
6
+ # one-shot (recommended) — adds nothing to the project's dependencies:
7
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/project
8
+
9
+ # or, after `npm i -D minimal-vibe-coding-kit` inside the project:
10
+ npx mvck install .
11
+ ```
12
+
13
+ `npm i` alone only places the kit in `node_modules/` and nothing is active yet; `mvck install` (alias: `vibe-kit`) is the step that copies the kit files into the repo root.
14
+
3
15
  ## Local install
4
16
 
5
17
  ```bash
@@ -14,9 +26,10 @@ node .vibekit/scripts/mvck.mjs install /path/to/project --profile all
14
26
 
15
27
  Profiles:
16
28
 
17
- - `claude`: `CLAUDE.md`, `.claude/`, Claude skills, agents, commands, rules.
18
- - `cursor`: `.cursor/rules`, `.cursor/commands`, Cursor skill entrypoints.
19
- - `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.
20
33
  - `all`: every profile.
21
34
 
22
35
  ## Safe behavior
@@ -47,7 +60,7 @@ node /path/to/kit/.vibekit/scripts/mvck.mjs update /path/to/project
47
60
 
48
61
  The updater:
49
62
 
50
- - 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;
51
64
  - never overwrites `backbone.yml`, `CLAUDE.md`, `AGENTS.md` content outside the managed block, or `settings.json` files — those are seeded only if missing;
52
65
  - backs up every replaced kit file to `.vibekit/update-backup/<timestamp>/` (disable with `--no-backup`);
53
66
  - never deletes files you added, and skips re-seeding one-time files after `mvck finalize`;
@@ -102,7 +115,7 @@ node .vibekit/scripts/mvck.mjs doctor . --write-report
102
115
 
103
116
  ## Native reasoning skills
104
117
 
105
- 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:
106
119
 
107
120
  - `clearthought`: clarify ambiguous tasks and choose a reasoning mode.
108
121
  - `sequential-thinking`: split complex work into ordered implementation steps.
@@ -110,11 +123,12 @@ The installer includes three flexible custom reasoning skills across Claude, Cod
110
123
 
111
124
  ## Visual design loop skill
112
125
 
113
- 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.
114
127
 
115
128
  ## User-invoked utility skills
116
129
 
117
- Two user-invoked skills install across Claude, Codex, and Cursor surfaces:
130
+ Three user-invoked skills install across Claude, Codex, Cursor, and Grok surfaces:
118
131
 
119
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`).
120
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.
@@ -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
@@ -16,11 +16,14 @@ This file is intentionally small. Shared rules live in `AGENTS.md`, project fact
16
16
  - `/autoresearch-coding` - run a metric-driven improvement loop.
17
17
  - `/security-scan` - run AgentShield-style review.
18
18
  - `/daily-enhance` - propose rule, skill, and workflow improvements.
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.
19
21
 
20
22
  ## Hard rules
21
23
 
22
24
  - Show a diff and wait for explicit approval before changing root instruction files, `backbone.yml`, rules, skills, or workflows.
23
25
  - Do not deploy, rotate secrets, run migrations, delete data, or rewrite remote history without explicit approval.
26
+ - Prefer `trash` over `rm` for deletions; permanent deletes need explicit approval of the exact paths (see `.claude/rules/safe-delete.md`).
24
27
  - Keep `.autoresearch/`, `results.tsv`, and `.vibekit/reports/` local unless the user asks to commit them.
25
28
 
26
29
  ## English Learning & Grammar Correction
@@ -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.
@@ -69,6 +69,38 @@ Then:
69
69
  - Record domain terms and acronyms in `.vibekit/docs/CONTEXT.md` (scaffold from `.vibekit/docs/templates/CONTEXT_TEMPLATE.md`) and link it in `project.context`, so future agents stay concise.
70
70
  - Keep the PRD short: it captures intent and focus, not a full specification.
71
71
 
72
+ ## Setup preferences
73
+
74
+ Ask these two questions right after the PRD interview. Persist both answers as `backbone.yml` `conventions.custom_rules` entries in the same proposed diff.
75
+
76
+ ### 1. Safe delete (trash instead of rm)
77
+
78
+ 1. Detect first: run `command -v trash` (read-only).
79
+ 2. If `trash` is available, ask: "Use `trash` instead of `rm` for deletions so they are recoverable? (recommended: yes)"
80
+ 3. If `trash` is missing, recommend installing it, then ask the same question:
81
+ - macOS 14 or newer: already built in at `/usr/bin/trash`, nothing to install.
82
+ - Older macOS: `brew install trash` (https://formulae.brew.sh/formula/trash)
83
+ - Linux: `sudo apt install trash-cli` or `pip install trash-cli` (https://github.com/andreafrancia/trash-cli)
84
+ - Any OS with Node.js: `npm install --global trash-cli` (https://github.com/sindresorhus/trash-cli)
85
+ 4. Record the answer as a custom rule:
86
+ - yes: `Deletion safety: use trash instead of rm; permanent deletes require explicit approval of the exact paths.`
87
+ - no: `Deletion safety: user declined trash; list the exact paths and wait for approval before any rm.`
88
+
89
+ ### 2. Default coding level
90
+
91
+ Show this table exactly and ask: "Which explanation level should I use by default? Reply 0-5. You can change it anytime with `/coding-level N`."
92
+
93
+ | N | Level | Short description |
94
+ | --- | --- | --- |
95
+ | 0 | ELI5 | New to code. Everything in plain words, no jargon. |
96
+ | 1 | Junior | Knows the basics. Explains the why behind every step. |
97
+ | 2 | Mid-level | Comfortable coder. Patterns, architecture, trade-offs. |
98
+ | 3 | Senior | Concise. Trade-offs, edge cases, operational concerns. |
99
+ | 4 | Tech Lead | Strategic. Risk, ROI, team and organizational impact. |
100
+ | 5 | God | Expert peer. Minimal explanation, maximum signal. |
101
+
102
+ Record the answer as a custom rule: `Default coding level: N (<Level>) - apply this explanation depth every session; change with /coding-level N.`
103
+
72
104
  ## FIRST_TIME_INIT_RULES
73
105
 
74
106
  Create project rules from evidence in the existing repo, not from a fixed language or framework template.
@@ -153,6 +153,13 @@ function statusLine(ok, label, detail) {
153
153
  return `${ok ? 'PASS' : 'WARN'} ${label}${detail ? ` - ${detail}` : ''}`;
154
154
  }
155
155
 
156
+ const TRASH_INSTALL_HINT = 'macOS 14+ has it built in; older macOS: brew install trash; Linux: sudo apt install trash-cli; any OS with Node: npm i -g trash-cli';
157
+
158
+ function trashAvailable() {
159
+ const result = spawnSync('trash', ['--help'], { encoding: 'utf8' });
160
+ return !(result.error && result.error.code === 'ENOENT');
161
+ }
162
+
156
163
  const backbone = parseBackbone();
157
164
  const packageJson = readJson('package.json');
158
165
  const isKitTemplate = packageJson?.name === 'minimal-vibe-coding-kit';
@@ -163,7 +170,8 @@ const surfaces = {
163
170
  agents: exists('AGENTS.md'),
164
171
  claude: exists('CLAUDE.md') || exists('.vibekit/init/CLAUDE-template.md') || exists('.claude'),
165
172
  cursor: exists('.cursor/rules'),
166
- codex: exists('.agents') || exists('.codex-plugin/plugin.json')
173
+ codex: exists('.agents') || exists('.codex-plugin/plugin.json'),
174
+ grok: exists('.grok')
167
175
  };
168
176
  const managedBlocks = {
169
177
  AGENTS: countManaged('AGENTS.md'),
@@ -183,7 +191,8 @@ const nativeSkillSurfaces = {
183
191
  shared: '.vibekit/skills',
184
192
  claude: '.claude/skills',
185
193
  codex: '.agents/skills',
186
- cursor: '.cursor/skills'
194
+ cursor: '.cursor/skills',
195
+ grok: '.grok/skills'
187
196
  };
188
197
  const missingNativeSkills = [];
189
198
  for (const [surface, dir] of Object.entries(nativeSkillSurfaces)) {
@@ -194,8 +203,11 @@ for (const [surface, dir] of Object.entries(nativeSkillSurfaces)) {
194
203
  const commands = commandMap();
195
204
  const validation = runNodeScript('.vibekit/scripts/validate-kit.mjs');
196
205
  const probe = runProbe();
206
+ const hasTrash = trashAvailable();
197
207
  const risks = [];
198
208
 
209
+ if (!hasTrash) risks.push(`trash command not found; agents fall back to asking before rm. Install it for recoverable deletes (${TRASH_INSTALL_HINT}).`);
210
+
199
211
  if (!backbone) risks.push('backbone.yml is missing.');
200
212
  else if (backbone.templateStatus !== 'initialized' && !isKitTemplate) risks.push(`backbone.yml is ${backbone.templateStatus || 'unknown'}; run init before relying on it.`);
201
213
  if (!Object.values(surfaces).some(Boolean)) risks.push('No AI agent surfaces were detected.');
@@ -238,12 +250,18 @@ const report = {
238
250
  command: probe.command,
239
251
  status: probe.status
240
252
  },
253
+ safeDelete: {
254
+ trashAvailable: hasTrash,
255
+ installHint: hasTrash ? null : TRASH_INSTALL_HINT
256
+ },
241
257
  aiRulesLoaded: {
242
258
  sharedSkills: listFiles('.vibekit/skills').filter((f) => f.endsWith('SKILL.md')).length,
243
259
  claudeSkills: listFiles('.claude/skills').filter((f) => f.endsWith('SKILL.md')).length,
244
260
  codexSkills: listFiles('.agents/skills').filter((f) => f.endsWith('SKILL.md')).length,
245
261
  cursorSkills: listFiles('.cursor/skills').filter((f) => f.endsWith('SKILL.md')).length,
246
- 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
247
265
  },
248
266
  recommendedFirstPrompt: 'Read AGENTS.md and backbone.yml, run mvck doctor ., then propose a small safe plan before editing.',
249
267
  knownRisks: risks
@@ -256,7 +274,8 @@ function renderMarkdown(data) {
256
274
  statusLine(Boolean(commands.validate), 'validation command detected', commands.validate || 'missing'),
257
275
  statusLine(protectedSane, 'protected paths are sane', `${data.protectedPaths.length} entries`),
258
276
  statusLine(validation.found && validation.status === 0, 'validation runs', validation.found ? `exit ${validation.status}` : 'missing'),
259
- statusLine(probe.found && probe.status === 0, 'AgentShield probe runs', probe.found ? `exit ${probe.status}` : 'missing')
277
+ statusLine(probe.found && probe.status === 0, 'AgentShield probe runs', probe.found ? `exit ${probe.status}` : 'missing'),
278
+ statusLine(hasTrash, 'trash command available for safe deletes', hasTrash ? 'deletions are recoverable' : TRASH_INSTALL_HINT)
260
279
  ];
261
280
 
262
281
  return `# Vibe Report
@@ -293,15 +312,18 @@ ${(data.protectedPaths.length ? data.protectedPaths : ['not declared']).map((ite
293
312
  - Claude surface: ${data.agentSurfaces.claude ? 'yes' : 'no'}
294
313
  - Cursor surface: ${data.agentSurfaces.cursor ? 'yes' : 'no'}
295
314
  - Codex surface: ${data.agentSurfaces.codex ? 'yes' : 'no'}
315
+ - Grok surface: ${data.agentSurfaces.grok ? 'yes' : 'no'}
296
316
  - Shared skills: ${data.aiRulesLoaded.sharedSkills}
297
317
  - Claude skills: ${data.aiRulesLoaded.claudeSkills}
298
318
  - Codex skills: ${data.aiRulesLoaded.codexSkills}
299
319
  - Cursor skills: ${data.aiRulesLoaded.cursorSkills}
300
320
  - Cursor rules: ${data.aiRulesLoaded.cursorRules}
321
+ - Grok skills: ${data.aiRulesLoaded.grokSkills}
322
+ - Grok rules: ${data.aiRulesLoaded.grokRules}
301
323
 
302
324
  ## Native reasoning skills
303
325
 
304
- ${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')}
305
327
 
306
328
  ## Recommended first prompt
307
329
 
@@ -1,8 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
4
5
 
5
6
  const args = process.argv.slice(2);
7
+
8
+ function trashAvailable() {
9
+ const result = spawnSync('trash', ['--help'], { encoding: 'utf8' });
10
+ return !(result.error && result.error.code === 'ENOENT');
11
+ }
6
12
  const shouldWrite = args.includes('--write');
7
13
  const yes = args.includes('--yes');
8
14
 
@@ -619,6 +625,9 @@ if (shouldWrite) {
619
625
  console.log(inferred.context === 'none'
620
626
  ? '- Offer to create .vibekit/docs/CONTEXT.md (glossary) from .vibekit/docs/templates/CONTEXT_TEMPLATE.md.'
621
627
  : `- CONTEXT glossary found at ${inferred.context}; keep it current.`);
628
+ console.log('\nSetup preferences (record answers in conventions.custom_rules; see FIRST_TIME_INIT.md "Setup preferences"):');
629
+ console.log(`- Safe delete: trash command ${trashAvailable() ? 'available' : 'NOT found (recommend: macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS `npm i -g trash-cli`)'} - ask: use trash instead of rm? (recommended: yes)`);
630
+ console.log('- Default coding level: ask 0-5 (0 ELI5, 1 Junior, 2 Mid-level, 3 Senior, 4 Tech Lead, 5 God); changeable later with /coding-level N.');
622
631
  console.log('\nConvention review questions:');
623
632
  for (const question of inferred.conventions.reviewQuestions) console.log(`- ${question}`);
624
633
  console.log('\nProposed backbone.yml:\n');
@@ -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
171
  const CLAUDE_SKILLS = [
172
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'
173
+ 'clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'path-sensitive-shell-safety', 'memento', 'coding-level', 'parallel-analysis', 'prompt-sharpener'
174
174
  ];
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 = ['clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'path-sensitive-shell-safety', 'memento', 'coding-level', 'parallel-analysis', 'prompt-sharpener'];
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) {
@@ -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) {