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.
- package/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.agents/skills/coding-level/SKILL.md +8 -1
- package/.agents/skills/path-sensitive-shell-safety/SKILL.md +1 -0
- package/.agents/skills/prompt-sharpener/SKILL.md +54 -0
- package/.agents/skills/vibekit-init/SKILL.md +2 -2
- package/.claude/rules/safe-delete.md +11 -0
- package/.claude/settings.json +10 -3
- package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.claude/skills/coding-level/SKILL.md +8 -1
- package/.claude/skills/path-sensitive-shell-safety/SKILL.md +1 -0
- package/.claude/skills/prompt-sharpener/SKILL.md +54 -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/rules/040-safe-delete.mdc +16 -0
- package/.cursor/settings.json +15 -8
- package/.cursor/skills/coding-level/SKILL.md +8 -1
- package/.cursor/skills/path-sensitive-shell-safety/SKILL.md +1 -0
- package/.cursor/skills/prompt-sharpener/SKILL.md +54 -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/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/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 +1 -1
- package/.vibekit/docs/INSTALL.md +21 -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 +34 -2
- package/.vibekit/scripts/doctor.mjs +27 -5
- package/.vibekit/scripts/init-backbone.mjs +9 -0
- package/.vibekit/scripts/mvck.mjs +24 -9
- package/.vibekit/scripts/test-install.mjs +8 -0
- package/.vibekit/scripts/validate-kit.mjs +104 -39
- package/.vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +28 -3
- package/.vibekit/skills/coding-level/SKILL.md +8 -1
- package/.vibekit/skills/path-sensitive-shell-safety/SKILL.md +1 -0
- package/.vibekit/skills/prompt-sharpener/SKILL.md +54 -0
- package/.vibekit/skills/vibekit-init/SKILL.md +2 -2
- package/AGENTS.md +3 -2
- package/CHANGELOG.md +21 -0
- package/README.md +60 -19
- package/backbone.yml +2 -1
- package/docs/README.vi.md +273 -0
- package/package.json +8 -3
- 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.
|
|
@@ -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
|
package/.vibekit/docs/INSTALL.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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'))
|
|
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) {
|