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
|
@@ -33,30 +33,53 @@ function listFiles(rel) {
|
|
|
33
33
|
return out.sort();
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
// Surface presence: end-user repos may install only some profiles, so
|
|
37
|
+
// per-surface files are required only when that surface is installed.
|
|
38
|
+
// The kit source repo always validates every surface.
|
|
39
|
+
const isKitSourceRepo = readJson('package.json')?.name === 'minimal-vibe-coding-kit';
|
|
40
|
+
const surfacePresent = {
|
|
41
|
+
claude: isKitSourceRepo || exists('.claude'),
|
|
42
|
+
cursor: isKitSourceRepo || exists('.cursor'),
|
|
43
|
+
codex: isKitSourceRepo || exists('.agents') || exists('.codex') || exists('.codex-plugin'),
|
|
44
|
+
grok: isKitSourceRepo || exists('.grok')
|
|
45
|
+
};
|
|
46
|
+
for (const [surface, present] of Object.entries(surfacePresent)) {
|
|
47
|
+
if (!present) console.log(`INFO surface ${surface} not installed; skipping its checks`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const KIT_SKILLS = [
|
|
51
|
+
'autoresearch-coding', 'agentshield-security-review', 'daily-workflow-curator', 'vibekit-init',
|
|
52
|
+
'clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'visual-design-loop',
|
|
53
|
+
'path-sensitive-shell-safety', 'memento', 'coding-level', 'parallel-analysis', 'prompt-sharpener'
|
|
54
|
+
];
|
|
55
|
+
const CURSOR_KIT_SKILLS = [
|
|
56
|
+
'clearthought', 'sequential-thinking', 'reviewing-4p-priorities', 'path-sensitive-shell-safety',
|
|
57
|
+
'memento', 'coding-level', 'parallel-analysis', 'prompt-sharpener'
|
|
58
|
+
];
|
|
59
|
+
|
|
36
60
|
const required = [
|
|
37
61
|
'AGENTS.md', '.vibekit/init/CLAUDE-template.md', '.vibekit/init/FIRST_TIME_INIT.md', '.vibekit/init/FIRST_PROMPT.md', 'backbone.yml',
|
|
38
62
|
'.vibekit/scripts/mvck.mjs', '.vibekit/scripts/init-backbone.mjs', '.vibekit/scripts/daily-enhance.mjs', '.vibekit/scripts/validate-kit.mjs',
|
|
39
63
|
'.vibekit/scripts/doctor.mjs', '.vibekit/scripts/agentshield-probe.mjs', '.vibekit/scripts/vibekit-finalize.mjs',
|
|
40
|
-
|
|
41
|
-
'.vibekit/
|
|
42
|
-
'.vibekit/skills/path-sensitive-shell-safety/SKILL.md', '.vibekit/skills/memento/SKILL.md', '.vibekit/skills/coding-level/SKILL.md', '.vibekit/skills/parallel-analysis/SKILL.md',
|
|
43
|
-
'.vibekit/docs/templates/PRD_TEMPLATE.md', '.vibekit/docs/templates/CONTEXT_TEMPLATE.md',
|
|
44
|
-
'.codex/README.md', '.codex/config.example.toml',
|
|
45
|
-
'.claude/skills/autoresearch-coding/SKILL.md', '.claude/skills/agentshield-security-review/SKILL.md',
|
|
46
|
-
'.claude/skills/daily-workflow-curator/SKILL.md', '.claude/skills/vibekit-init/SKILL.md',
|
|
47
|
-
'.claude/skills/clearthought/SKILL.md', '.claude/skills/sequential-thinking/SKILL.md', '.claude/skills/reviewing-4p-priorities/SKILL.md', '.claude/skills/visual-design-loop/SKILL.md',
|
|
48
|
-
'.claude/skills/path-sensitive-shell-safety/SKILL.md', '.claude/skills/memento/SKILL.md', '.claude/skills/coding-level/SKILL.md',
|
|
49
|
-
'.claude/skills/parallel-analysis/SKILL.md',
|
|
50
|
-
'.cursor/rules/001-vibe-core.mdc', '.cursor/skills/clearthought/SKILL.md', '.cursor/skills/sequential-thinking/SKILL.md', '.cursor/skills/reviewing-4p-priorities/SKILL.md',
|
|
51
|
-
'.cursor/skills/path-sensitive-shell-safety/SKILL.md',
|
|
52
|
-
'.cursor/skills/memento/SKILL.md', '.cursor/skills/coding-level/SKILL.md', '.cursor/skills/parallel-analysis/SKILL.md',
|
|
53
|
-
'.agents/skills/autoresearch-coding/SKILL.md', '.agents/skills/agentshield-security-review/SKILL.md',
|
|
54
|
-
'.agents/skills/daily-workflow-curator/SKILL.md', '.agents/skills/vibekit-init/SKILL.md',
|
|
55
|
-
'.agents/skills/clearthought/SKILL.md', '.agents/skills/sequential-thinking/SKILL.md', '.agents/skills/reviewing-4p-priorities/SKILL.md', '.agents/skills/visual-design-loop/SKILL.md',
|
|
56
|
-
'.agents/skills/path-sensitive-shell-safety/SKILL.md', '.agents/skills/memento/SKILL.md', '.agents/skills/coding-level/SKILL.md',
|
|
57
|
-
'.agents/skills/parallel-analysis/SKILL.md',
|
|
58
|
-
'.codex-plugin/plugin.json'
|
|
64
|
+
...KIT_SKILLS.map((skill) => `.vibekit/skills/${skill}/SKILL.md`),
|
|
65
|
+
'.vibekit/docs/templates/PRD_TEMPLATE.md', '.vibekit/docs/templates/CONTEXT_TEMPLATE.md'
|
|
59
66
|
];
|
|
67
|
+
if (surfacePresent.claude) {
|
|
68
|
+
required.push(...KIT_SKILLS.map((skill) => `.claude/skills/${skill}/SKILL.md`));
|
|
69
|
+
}
|
|
70
|
+
if (surfacePresent.cursor) {
|
|
71
|
+
required.push('.cursor/rules/001-vibe-core.mdc', '.cursor/cli.json',
|
|
72
|
+
...CURSOR_KIT_SKILLS.map((skill) => `.cursor/skills/${skill}/SKILL.md`));
|
|
73
|
+
}
|
|
74
|
+
if (surfacePresent.codex) {
|
|
75
|
+
required.push('.codex/README.md', '.codex/config.example.toml', '.codex/rules/vibekit.rules', '.codex-plugin/plugin.json',
|
|
76
|
+
...KIT_SKILLS.map((skill) => `.agents/skills/${skill}/SKILL.md`));
|
|
77
|
+
}
|
|
78
|
+
if (surfacePresent.grok) {
|
|
79
|
+
required.push('.grok/README.md', '.grok/config.example.toml', '.grok/config.toml',
|
|
80
|
+
'.grok/rules/vibe-core.md', '.grok/rules/security.md', '.grok/rules/safe-delete.md',
|
|
81
|
+
...KIT_SKILLS.map((skill) => `.grok/skills/${skill}/SKILL.md`));
|
|
82
|
+
}
|
|
60
83
|
|
|
61
84
|
const reasoningSkillResources = {
|
|
62
85
|
'clearthought': [
|
|
@@ -83,7 +106,12 @@ const reasoningSkillResources = {
|
|
|
83
106
|
]
|
|
84
107
|
};
|
|
85
108
|
|
|
86
|
-
|
|
109
|
+
const reasoningSurfaceDirs = ['.vibekit/skills'];
|
|
110
|
+
if (surfacePresent.claude) reasoningSurfaceDirs.push('.claude/skills');
|
|
111
|
+
if (surfacePresent.cursor) reasoningSurfaceDirs.push('.cursor/skills');
|
|
112
|
+
if (surfacePresent.codex) reasoningSurfaceDirs.push('.agents/skills');
|
|
113
|
+
if (surfacePresent.grok) reasoningSurfaceDirs.push('.grok/skills');
|
|
114
|
+
for (const surface of reasoningSurfaceDirs) {
|
|
87
115
|
for (const [skill, files] of Object.entries(reasoningSkillResources)) {
|
|
88
116
|
for (const file of files) required.push(`${surface}/${skill}/${file}`);
|
|
89
117
|
}
|
|
@@ -94,7 +122,6 @@ if (exists('README.md')) ok('optional README.md present');
|
|
|
94
122
|
else console.log('INFO optional README.md not present in target project');
|
|
95
123
|
|
|
96
124
|
// Kit-maintainer files: required in the kit source repo, intentionally absent in end-user installs.
|
|
97
|
-
const isKitSourceRepo = readJson('package.json')?.name === 'minimal-vibe-coding-kit';
|
|
98
125
|
if (isKitSourceRepo) {
|
|
99
126
|
for (const rel of ['.vibekit/scripts/test-install.mjs', '.vibekit/scripts/pack-dry-run.mjs', '.vibekit/docs/RESEARCH_NOTES.md', '.vibekit/docs/AUTORESEARCH_LEDGER.md']) {
|
|
100
127
|
exists(rel) ? ok(`kit-source file ${rel}`) : fail(`missing kit-source file ${rel}`);
|
|
@@ -116,18 +143,19 @@ if (exists('.vibekit/docs/AUTORESEARCH_LEDGER.md')) {
|
|
|
116
143
|
}
|
|
117
144
|
|
|
118
145
|
const skillMirrors = {
|
|
119
|
-
'autoresearch-coding': ['.claude/skills/autoresearch-coding', '.agents/skills/autoresearch-coding'],
|
|
120
|
-
'agentshield-security-review': ['.claude/skills/agentshield-security-review', '.agents/skills/agentshield-security-review'],
|
|
121
|
-
'daily-workflow-curator': ['.claude/skills/daily-workflow-curator', '.agents/skills/daily-workflow-curator'],
|
|
122
|
-
'vibekit-init': ['.claude/skills/vibekit-init', '.agents/skills/vibekit-init'],
|
|
123
|
-
'clearthought': ['.claude/skills/clearthought', '.cursor/skills/clearthought', '.agents/skills/clearthought'],
|
|
124
|
-
'sequential-thinking': ['.claude/skills/sequential-thinking', '.cursor/skills/sequential-thinking', '.agents/skills/sequential-thinking'],
|
|
125
|
-
'reviewing-4p-priorities': ['.claude/skills/reviewing-4p-priorities', '.cursor/skills/reviewing-4p-priorities', '.agents/skills/reviewing-4p-priorities'],
|
|
126
|
-
'path-sensitive-shell-safety': ['.claude/skills/path-sensitive-shell-safety', '.cursor/skills/path-sensitive-shell-safety', '.agents/skills/path-sensitive-shell-safety'],
|
|
127
|
-
'visual-design-loop': ['.claude/skills/visual-design-loop', '.agents/skills/visual-design-loop'],
|
|
128
|
-
'memento': ['.claude/skills/memento', '.cursor/skills/memento', '.agents/skills/memento'],
|
|
129
|
-
'coding-level': ['.claude/skills/coding-level', '.cursor/skills/coding-level', '.agents/skills/coding-level'],
|
|
130
|
-
'parallel-analysis': ['.claude/skills/parallel-analysis', '.cursor/skills/parallel-analysis', '.agents/skills/parallel-analysis']
|
|
146
|
+
'autoresearch-coding': ['.claude/skills/autoresearch-coding', '.agents/skills/autoresearch-coding', '.grok/skills/autoresearch-coding'],
|
|
147
|
+
'agentshield-security-review': ['.claude/skills/agentshield-security-review', '.agents/skills/agentshield-security-review', '.grok/skills/agentshield-security-review'],
|
|
148
|
+
'daily-workflow-curator': ['.claude/skills/daily-workflow-curator', '.agents/skills/daily-workflow-curator', '.grok/skills/daily-workflow-curator'],
|
|
149
|
+
'vibekit-init': ['.claude/skills/vibekit-init', '.agents/skills/vibekit-init', '.grok/skills/vibekit-init'],
|
|
150
|
+
'clearthought': ['.claude/skills/clearthought', '.cursor/skills/clearthought', '.agents/skills/clearthought', '.grok/skills/clearthought'],
|
|
151
|
+
'sequential-thinking': ['.claude/skills/sequential-thinking', '.cursor/skills/sequential-thinking', '.agents/skills/sequential-thinking', '.grok/skills/sequential-thinking'],
|
|
152
|
+
'reviewing-4p-priorities': ['.claude/skills/reviewing-4p-priorities', '.cursor/skills/reviewing-4p-priorities', '.agents/skills/reviewing-4p-priorities', '.grok/skills/reviewing-4p-priorities'],
|
|
153
|
+
'path-sensitive-shell-safety': ['.claude/skills/path-sensitive-shell-safety', '.cursor/skills/path-sensitive-shell-safety', '.agents/skills/path-sensitive-shell-safety', '.grok/skills/path-sensitive-shell-safety'],
|
|
154
|
+
'visual-design-loop': ['.claude/skills/visual-design-loop', '.agents/skills/visual-design-loop', '.grok/skills/visual-design-loop'],
|
|
155
|
+
'memento': ['.claude/skills/memento', '.cursor/skills/memento', '.agents/skills/memento', '.grok/skills/memento'],
|
|
156
|
+
'coding-level': ['.claude/skills/coding-level', '.cursor/skills/coding-level', '.agents/skills/coding-level', '.grok/skills/coding-level'],
|
|
157
|
+
'parallel-analysis': ['.claude/skills/parallel-analysis', '.cursor/skills/parallel-analysis', '.agents/skills/parallel-analysis', '.grok/skills/parallel-analysis'],
|
|
158
|
+
'prompt-sharpener': ['.claude/skills/prompt-sharpener', '.cursor/skills/prompt-sharpener', '.agents/skills/prompt-sharpener', '.grok/skills/prompt-sharpener']
|
|
131
159
|
};
|
|
132
160
|
|
|
133
161
|
function validateSkillMirror(sourceRel, mirrorRel) {
|
|
@@ -164,8 +192,15 @@ function validateSkillMirror(sourceRel, mirrorRel) {
|
|
|
164
192
|
if (mismatches === 0) ok(`skill mirror ${mirrorRel} matches ${sourceRel} (${sourceFiles.length} files)`);
|
|
165
193
|
}
|
|
166
194
|
|
|
195
|
+
const mirrorSurface = (mirror) => mirror.startsWith('.claude/') ? 'claude'
|
|
196
|
+
: mirror.startsWith('.cursor/') ? 'cursor'
|
|
197
|
+
: mirror.startsWith('.agents/') ? 'codex'
|
|
198
|
+
: 'grok';
|
|
167
199
|
for (const [skill, mirrors] of Object.entries(skillMirrors)) {
|
|
168
|
-
for (const mirror of mirrors)
|
|
200
|
+
for (const mirror of mirrors) {
|
|
201
|
+
if (!surfacePresent[mirrorSurface(mirror)]) continue;
|
|
202
|
+
validateSkillMirror(`.vibekit/skills/${skill}`, mirror);
|
|
203
|
+
}
|
|
169
204
|
}
|
|
170
205
|
|
|
171
206
|
function parseFrontmatter(text) {
|
|
@@ -179,7 +214,7 @@ function parseFrontmatter(text) {
|
|
|
179
214
|
return fields;
|
|
180
215
|
}
|
|
181
216
|
|
|
182
|
-
for (const surface of ['.vibekit/skills', '.claude/skills', '.cursor/skills', '.agents/skills']) {
|
|
217
|
+
for (const surface of ['.vibekit/skills', '.claude/skills', '.cursor/skills', '.agents/skills', '.grok/skills']) {
|
|
183
218
|
if (!exists(surface)) continue;
|
|
184
219
|
for (const file of listFiles(surface).filter((f) => f.endsWith('SKILL.md'))) {
|
|
185
220
|
const rel = `${surface}/${file}`;
|
|
@@ -198,7 +233,9 @@ function stripFrontmatter(text) {
|
|
|
198
233
|
|
|
199
234
|
if (exists('.vibekit/commands')) {
|
|
200
235
|
const canonicalCmds = listFiles('.vibekit/commands').filter((f) => f.endsWith('.md'));
|
|
201
|
-
const cmdMirrors = {
|
|
236
|
+
const cmdMirrors = {};
|
|
237
|
+
if (surfacePresent.claude) cmdMirrors['.claude/commands'] = true;
|
|
238
|
+
if (surfacePresent.cursor) cmdMirrors['.cursor/commands'] = true;
|
|
202
239
|
for (const [mirrorDir, stripFm] of Object.entries(cmdMirrors)) {
|
|
203
240
|
if (!exists(mirrorDir)) { warn(`command mirror dir missing: ${mirrorDir}`); continue; }
|
|
204
241
|
for (const file of canonicalCmds) {
|
|
@@ -213,7 +250,7 @@ if (exists('.vibekit/commands')) {
|
|
|
213
250
|
}
|
|
214
251
|
}
|
|
215
252
|
|
|
216
|
-
for (const rel of ['package.json', '.claude/settings.json', '.cursor/settings.json', '.codex-plugin/plugin.json']) {
|
|
253
|
+
for (const rel of ['package.json', '.claude/settings.json', '.cursor/settings.json', '.cursor/cli.json', '.codex-plugin/plugin.json']) {
|
|
217
254
|
if (!exists(rel)) continue;
|
|
218
255
|
try { JSON.parse(read(rel)); ok(`valid JSON ${rel}`); } catch (error) { fail(`invalid JSON ${rel}: ${error.message}`); }
|
|
219
256
|
}
|
|
@@ -271,6 +308,33 @@ if (claudeSettings?.permissions?.deny && cursorSettings?.permissions?.deny) {
|
|
|
271
308
|
if (parity) ok(`deny list category parity across .claude and .cursor (${claudeCats.size} categories)`);
|
|
272
309
|
}
|
|
273
310
|
|
|
311
|
+
// Guardrail lint: catches known-dead deny patterns at the syntax level. It does
|
|
312
|
+
// not replace native checks — verify semantics with each tool's own validator
|
|
313
|
+
// (e.g. `codex execpolicy check`, `grok inspect`).
|
|
314
|
+
for (const [rel, settings] of [['.claude/settings.json', claudeSettings], ['.cursor/settings.json', cursorSettings]]) {
|
|
315
|
+
const deny = settings?.permissions?.deny;
|
|
316
|
+
if (!Array.isArray(deny)) continue;
|
|
317
|
+
const piped = deny.filter((rule) => rule.includes('|'));
|
|
318
|
+
piped.length === 0
|
|
319
|
+
? ok(`${rel} deny rules avoid pipe-spanning patterns (subcommands are matched independently)`)
|
|
320
|
+
: fail(`${rel} deny rules span a pipe and never match: ${piped.join(', ')}`);
|
|
321
|
+
const yesFirst = deny.some((rule) => rule.startsWith('Bash(npx --yes') || rule.startsWith('Bash(npx -y'));
|
|
322
|
+
yesFirst
|
|
323
|
+
? ok(`${rel} denies leading npx --yes/-y forms`)
|
|
324
|
+
: fail(`${rel} missing deny for leading npx --yes/-y forms`);
|
|
325
|
+
}
|
|
326
|
+
if (surfacePresent.cursor && exists('.cursor/cli.json')) {
|
|
327
|
+
const cursorCli = readJson('.cursor/cli.json');
|
|
328
|
+
Array.isArray(cursorCli?.permissions?.deny) && cursorCli.permissions.deny.includes('Shell(rm)')
|
|
329
|
+
? ok('.cursor/cli.json denies Shell(rm)')
|
|
330
|
+
: fail('.cursor/cli.json missing permissions.deny entry Shell(rm)');
|
|
331
|
+
}
|
|
332
|
+
if (surfacePresent.codex) requireText('.codex/rules/vibekit.rules', 'decision = "forbidden"', 'Codex rules include forbidden decisions');
|
|
333
|
+
if (surfacePresent.grok) {
|
|
334
|
+
requireText('.grok/config.toml', '[permission]', 'Grok project config declares [permission] rules');
|
|
335
|
+
requireText('.grok/config.toml', '"Bash(rm *)"', 'Grok project config denies rm');
|
|
336
|
+
}
|
|
337
|
+
|
|
274
338
|
if (pkg?.name === 'minimal-vibe-coding-kit') {
|
|
275
339
|
for (const rel of ['SECURITY.md', 'CONTRIBUTING.md', 'CODE_OF_CONDUCT.md', '.github/dependabot.yml', '.github/workflows/vibekit-validate.yml', '.vibekit/docs/backbone.schema.json']) {
|
|
276
340
|
exists(rel) ? ok(`release safety file ${rel}`) : fail(`missing release safety file ${rel}`);
|
|
@@ -381,7 +445,8 @@ function validateBackboneSchema(text) {
|
|
|
381
445
|
if (!surfacePath || surfacePath === 'null') continue;
|
|
382
446
|
const cleanPath = surfacePath.replace(/^["']|["']$/g, '');
|
|
383
447
|
if (exists(cleanPath)) ok(`agent_surfaces path exists: ${cleanPath}`);
|
|
384
|
-
else fail(`agent_surfaces path missing: ${cleanPath}`);
|
|
448
|
+
else if (isKitSourceRepo) fail(`agent_surfaces path missing: ${cleanPath}`);
|
|
449
|
+
else warn(`agent_surfaces path missing: ${cleanPath} (profile-scoped install?)`);
|
|
385
450
|
}
|
|
386
451
|
}
|
|
387
452
|
|
|
@@ -401,7 +466,7 @@ const riskyPatterns = [
|
|
|
401
466
|
{ pattern: 'ignore previous' + ' instructions', message: 'prompt injection phrase' }
|
|
402
467
|
];
|
|
403
468
|
|
|
404
|
-
const scanDirs = ['.claude', '.cursor', '.agents', '.codex-plugin', '.vibekit/skills', '.vibekit/commands', '.vibekit/scripts', 'AGENTS.md', '.vibekit/init/CLAUDE-template.md'];
|
|
469
|
+
const scanDirs = ['.claude', '.cursor', '.agents', '.grok', '.codex-plugin', '.vibekit/skills', '.vibekit/commands', '.vibekit/scripts', 'AGENTS.md', '.vibekit/init/CLAUDE-template.md'];
|
|
405
470
|
function walk(item) {
|
|
406
471
|
const p = path.join(root, item);
|
|
407
472
|
if (!fs.existsSync(p)) return [];
|
|
@@ -15,10 +15,11 @@ PATTERNS = {
|
|
|
15
15
|
"repo_instructions": ["CLAUDE.md", "AGENTS.md", ".github/copilot-instructions.md"],
|
|
16
16
|
"claude": [".claude", ".claude-plugin", "agents"],
|
|
17
17
|
"codex": [".codex", ".codex-plugin"],
|
|
18
|
-
"
|
|
18
|
+
"grok": [".grok"],
|
|
19
|
+
"shared_skills": [".vibekit/skills", ".claude/skills", ".cursor/skills", ".agents/skills", ".grok/skills", "skills"],
|
|
19
20
|
"shared_commands": [".vibekit/commands"],
|
|
20
21
|
"kit_scripts": [".vibekit/scripts"],
|
|
21
|
-
"hooks": ["hooks", ".claude/hooks", ".agents/hooks"],
|
|
22
|
+
"hooks": ["hooks", ".claude/hooks", ".agents/hooks", ".grok/hooks"],
|
|
22
23
|
"mcp": [".mcp.json", "mcp.json", "mcp-configs"],
|
|
23
24
|
"ci": [".github/workflows"],
|
|
24
25
|
}
|
|
@@ -55,6 +56,27 @@ def safe_read(path: Path, limit: int = 200_000) -> str:
|
|
|
55
56
|
return ""
|
|
56
57
|
|
|
57
58
|
|
|
59
|
+
def deny_block_lines(text: str) -> set[int]:
|
|
60
|
+
"""Line indexes inside a permissions deny array (JSON `"deny": [` or TOML `deny = [`).
|
|
61
|
+
|
|
62
|
+
Deny rules quote dangerous patterns in order to block them, so a marker on
|
|
63
|
+
those lines is defensive, not suspicious. Allow/ask blocks are still scanned.
|
|
64
|
+
"""
|
|
65
|
+
covered: set[int] = set()
|
|
66
|
+
inside = False
|
|
67
|
+
for idx, line in enumerate(text.splitlines()):
|
|
68
|
+
stripped = line.strip()
|
|
69
|
+
if not inside and "[" in stripped and ('"deny"' in stripped or stripped.startswith("deny =") or stripped.startswith("deny=")):
|
|
70
|
+
covered.add(idx)
|
|
71
|
+
inside = "]" not in stripped.split("[", 1)[1]
|
|
72
|
+
continue
|
|
73
|
+
if inside:
|
|
74
|
+
covered.add(idx)
|
|
75
|
+
if "]" in stripped:
|
|
76
|
+
inside = False
|
|
77
|
+
return covered
|
|
78
|
+
|
|
79
|
+
|
|
58
80
|
def main() -> int:
|
|
59
81
|
parser = argparse.ArgumentParser(description="Inventory Claude/Codex AgentShield surfaces")
|
|
60
82
|
parser.add_argument("path", nargs="?", default=".", help="Repository root")
|
|
@@ -77,8 +99,11 @@ def main() -> int:
|
|
|
77
99
|
if file_path.suffix.lower() not in {".md", ".json", ".toml", ".yaml", ".yml", ".sh", ".js", ".ts"}:
|
|
78
100
|
continue
|
|
79
101
|
text = safe_read(file_path)
|
|
102
|
+
skip_lines = deny_block_lines(text)
|
|
103
|
+
lines = text.splitlines()
|
|
80
104
|
for marker in SUSPICIOUS_TEXT:
|
|
81
|
-
if marker in
|
|
105
|
+
hits = [idx for idx, line in enumerate(lines) if marker in line]
|
|
106
|
+
if any(idx not in skip_lines for idx in hits):
|
|
82
107
|
suspicious.append({
|
|
83
108
|
"path": str(file_path.relative_to(root)),
|
|
84
109
|
"marker": marker,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: coding-level
|
|
3
|
-
description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked.
|
|
3
|
+
description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked. A project default may be recorded in backbone.yml conventions.custom_rules.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
argument-hint: "[0-5]"
|
|
6
6
|
---
|
|
@@ -20,6 +20,13 @@ argument-hint: "[0-5]"
|
|
|
20
20
|
|
|
21
21
|
1. Read `$ARGUMENTS` as N. If N is not an integer 0–5, reply with the table above and ask for a valid N.
|
|
22
22
|
2. Read `references/level-<N>.md`, state once which level is now active, and apply that persona to every reply until `/coding-level` is invoked again.
|
|
23
|
+
3. Ask once: "Save level N as the project default?" If yes, add or update the `Default coding level: N` entry in `backbone.yml` `conventions.custom_rules` (show the diff and wait for approval, per kit rules).
|
|
24
|
+
|
|
25
|
+
## Project default
|
|
26
|
+
|
|
27
|
+
- First-time init records a default as a `backbone.yml` `conventions.custom_rules` entry: `Default coding level: N (<Register>)`.
|
|
28
|
+
- Sessions without an explicit `/coding-level` start from that default level.
|
|
29
|
+
- `/coding-level N` overrides the default for the current session only, unless the user saves it in step 3.
|
|
23
30
|
|
|
24
31
|
## Scope
|
|
25
32
|
|
|
@@ -48,6 +48,7 @@ No empty, unset, broad, symlinked, or unintended path may reach a destructive co
|
|
|
48
48
|
|
|
49
49
|
## Required outcomes
|
|
50
50
|
|
|
51
|
+
- Prefer a recoverable delete (`trash`) over permanent `rm` for user files; permanent deletion requires explicit confirmation of the exact paths. If `trash` is missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`).
|
|
51
52
|
- A blank branch may follow the documented default-branch fallback policy.
|
|
52
53
|
- An explicit branch must fail if missing; never silently deploy another branch.
|
|
53
54
|
- A blank folder/base value must fail before any `rm`, `mv`, `cp`, `rsync`, `find`, Docker, or Git cleanup command runs.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prompt-sharpener
|
|
3
|
+
description: Sharpen a rough prompt into a precise one — same intent, sharper not longer — then execute the sharpened version immediately in the same turn.
|
|
4
|
+
argument-hint: "the rough prompt to sharpen and execute"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Prompt Sharpener
|
|
9
|
+
|
|
10
|
+
The text the user types after the invocation is the **raw prompt**. Upgrade it into a prompt that is **sharper, not longer** — keep the original intent, constraints, and language — then execute the upgraded version immediately in the same turn. No text after the invocation → ask the user what they want and stop.
|
|
11
|
+
|
|
12
|
+
## Step 1 — Diagnose the raw prompt
|
|
13
|
+
|
|
14
|
+
Scan for every ailment below; each ailment found gets its cure applied directly in the upgraded prompt. Cure silently; call out a cure only when it could shift the user's intent.
|
|
15
|
+
|
|
16
|
+
- Vague verbs or adjectives ("help me", "make it nicer") → concrete, measurable operations and parameters.
|
|
17
|
+
- Two tasks in one prompt → split into an explicit execution order.
|
|
18
|
+
- No success criteria → add a binary pass/fail `Done when`.
|
|
19
|
+
- Emotional description ("everything is broken") → extract the specific technical symptom.
|
|
20
|
+
- "The whole app" scope → pin exact files/functions/directories; coding tasks always get a **scope lock** (edit only inside X, leave the rest untouched).
|
|
21
|
+
- Relies on memory of an old session → copy the decisions already settled in this conversation (stack, architecture, what was tried and failed) into the `Context` block.
|
|
22
|
+
- Invitation to fabricate ("what do experts say about X?") → anchor grounding: state only what can be verified; when unsure, say so explicitly.
|
|
23
|
+
- No output format → fix the structure and length; when the format is hard to describe in words, include 2-3 sample examples (including an edge case) in the `Output Contract`.
|
|
24
|
+
|
|
25
|
+
Done when: the raw prompt has been checked against the full list and no ailment is left without its cure in the upgraded prompt.
|
|
26
|
+
|
|
27
|
+
## Step 2 — Build the upgraded prompt
|
|
28
|
+
|
|
29
|
+
Classify the task (coding / research / writing / analysis / planning / review), then assemble blocks in this order — add a block only when it raises precision; small tasks need just 2-3 blocks:
|
|
30
|
+
|
|
31
|
+
`Objective` → `Context` → `Work Style` → `Tool Rules` → `Output Contract` → `Verification` → `Done Criteria`
|
|
32
|
+
|
|
33
|
+
Focus per task type:
|
|
34
|
+
|
|
35
|
+
- Coding: scope lock, smallest correct change, validation after the edit — default to the `validate` command in `backbone.yml` when the repo has one.
|
|
36
|
+
- Research: source quality, citations, explicit uncertainty.
|
|
37
|
+
- Writing: audience, voice, length.
|
|
38
|
+
- Review: group findings by severity, name the failure mode.
|
|
39
|
+
|
|
40
|
+
Construction rules:
|
|
41
|
+
|
|
42
|
+
- Write constraints with the strongest signal words: MUST instead of "should", NEVER instead of "avoid".
|
|
43
|
+
- Missing information → state the assumption in `Context` and keep going; stop to ask only when the task is destructive or irreversible.
|
|
44
|
+
- Say _what_ to verify; let the model regulate its own depth of thought.
|
|
45
|
+
- Repo work MUST respect `backbone.yml` conventions and protected paths; when the upgraded task is a large decomposition or a risky decision, its `Work Style` block may direct Step 3 to open with the `sequential-thinking` or `clearthought` skill.
|
|
46
|
+
- Closing audit: reread every sentence; if cutting it would not change the output, cut it — every remaining word is **load-bearing**.
|
|
47
|
+
|
|
48
|
+
Done when the upgraded prompt scores on all 6 points: intent preserved — ambiguity reduced — right depth — clear output — has verification — has a stopping point.
|
|
49
|
+
|
|
50
|
+
## Step 3 — Present and execute
|
|
51
|
+
|
|
52
|
+
Print the upgraded prompt in a single code block, with at most 2 sentences on the key changes. Then treat it as the user's official request: start executing immediately in the same turn, researching and editing according to its own `Tool Rules`.
|
|
53
|
+
|
|
54
|
+
Done when the upgraded prompt's `Done Criteria` are satisfied.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
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,
|
|
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
4
|
disable-model-invocation: true
|
|
5
|
-
argument-hint: target path; profiles claude,cursor,codex; write yes/no
|
|
5
|
+
argument-hint: target path; profiles claude,cursor,codex,grok; write yes/no
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Vibe Kit Init
|
package/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
Shared instructions for Claude, Cursor, Codex, and other coding agents.
|
|
3
|
+
Shared instructions for Claude, Cursor, Codex, Grok, and other coding agents.
|
|
4
4
|
|
|
5
5
|
<!-- BEGIN: minimal-vibe-coding-kit -->
|
|
6
6
|
## Minimal Vibe Coding Kit
|
|
@@ -31,10 +31,11 @@ Track every loop in `/tmp/design-{project_slug}.md`. Each loop entry must includ
|
|
|
31
31
|
### Safety
|
|
32
32
|
|
|
33
33
|
- Never print full secrets.
|
|
34
|
+
- Prefer `trash` over `rm` for deletions so they stay recoverable. Check `command -v trash` first; if missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`) instead of falling back to `rm`. Permanent deletes require explicit user approval of the exact paths.
|
|
34
35
|
- Do not run untrusted hooks, MCP servers, deploy scripts, package lifecycle scripts, migrations, or destructive shell commands just to inspect a repo.
|
|
35
36
|
- Do not modify protected paths from `backbone.yml` without explicit approval.
|
|
36
37
|
- Before editing or approving shell/deploy/installer/repair logic that uses path variables or destructive commands (`rm`, `mv`, `cp -a`, `rsync --delete`, `find -delete`, `git clean`, checkout replacement), use `path-sensitive-shell-safety` and prove base/folder/repo values are non-empty, contained, quoted, and not broad system paths.
|
|
37
|
-
- If a task changes agent surfaces (`CLAUDE.md`, `AGENTS.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`, `.vibekit/skills/**`, `.vibekit/commands/**`, `.vibekit/scripts/**`, hooks, MCP config), run the AgentShield probe or explain why it was skipped.
|
|
38
|
+
- If a task changes agent surfaces (`CLAUDE.md`, `AGENTS.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.grok/**`, `.codex-plugin/**`, `.vibekit/skills/**`, `.vibekit/commands/**`, `.vibekit/scripts/**`, hooks, MCP config), run the AgentShield probe or explain why it was skipped.
|
|
38
39
|
|
|
39
40
|
### Skills to prefer
|
|
40
41
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.2 — 2026-07-18
|
|
4
|
+
|
|
5
|
+
- Added a Grok Build (Grok CLI) surface across the kit: `.grok/rules/` (always-on, every `*.md` loaded), `.grok/skills/` (all 13 kit skills, user-invocable as `/<skill-name>`), `.grok/README.md`, and project-scoped `[permission]` deny rules in `.grok/config.toml` mirroring the kit's dangerous-command deny list; `config.example.toml` documents the user-level `~/.grok/config.toml` settings. Added a `grok` install/update profile to `mvck.mjs` (included in `all`) and registered Grok everywhere Claude/Cursor/Codex already were: `validate-kit.mjs`, npm package files, `backbone.yml` `agent_surfaces`, `AGENTS.md`, the AgentShield probe, both READMEs, `INSTALL.md`, `BACKBONE_REFERENCE.md`, `CONTEXT_TEMPLATE.md`, `FIRST_TIME_INIT.md`, and `vibekit-init`.
|
|
6
|
+
- Added `prompt-sharpener` skill (shared + Claude/Cursor/Codex/Grok mirrors), an English rewrite of a collected `sharpen` skill: `/prompt-sharpener <rough prompt>` diagnoses a raw prompt against a defect checklist (vague verbs, mixed tasks, missing success criteria, unbounded scope, missing output format), rebuilds it as a sharper prompt (`Objective` → `Context` → `Work Style` → `Tool Rules` → `Output Contract` → `Verification` → `Done Criteria`), prints it in one code block, then executes it in the same turn.
|
|
7
|
+
- Corrected the dangerous-command guardrails after a cross-tool documentation review. Removed the pipe-spanning `curl *|*sh` / `wget *|*sh` deny rules from `.claude/settings.json` and `.cursor/settings.json` — Claude Code evaluates each piped subcommand independently, so they never matched — in favor of denying bare shell interpreters (`sh`, `bash`, `zsh`, and their `-` stdin forms, which is what `curl ... | sh` actually executes), and fixed the `npx` rules to also cover the common leading `--yes`/`-y` forms.
|
|
8
|
+
- Added each tool's actual documented project-level permission mechanism, since only Claude Code and Cursor's Claude-schema file had one before: `.cursor/cli.json` with `Shell(...)` rules for Cursor CLI (the real mechanism Cursor reads; the Claude-schema `settings.json` is kept only as reference), experimental `.codex/rules/vibekit.rules` execution-policy rules for Codex (`forbidden` decisions with `match`/`not_match` fixtures, active once the project `.codex/` layer is trusted), and the `.grok/config.toml` rules above.
|
|
9
|
+
- `validate-kit` now lints deny lists for pipe-spanning patterns and missing leading `npx --yes`/`-y` coverage, and is profile-aware: per-surface files are required only when that surface is installed (the kit source repo still validates everything), so a `claude`-only or `grok`-only install passes its own validation; `test-install` runs an install+validate cycle for each single profile.
|
|
10
|
+
- `mvck update` treats `.cursor/cli.json` and `.grok/config.toml` as user-owned (seeded once, never overwritten). The AgentShield probe's suspicious-marker scan now skips lines inside permission `deny` arrays, so the kit's own deny rules no longer flag themselves as suspicious; allow/ask blocks are still scanned.
|
|
11
|
+
- Synced version to 0.4.2 in `package.json`, both README badges, and `.codex-plugin/plugin.json`.
|
|
12
|
+
|
|
13
|
+
## 0.4.1 — 2026-07-17
|
|
14
|
+
|
|
15
|
+
- Added a safe-delete guardrail across all three surfaces: new `.claude/rules/safe-delete.md` and `.cursor/rules/040-safe-delete.mdc` (always-on), a `### Safety` bullet in the `AGENTS.md` managed block for Codex, and a trash-first outcome in the `path-sensitive-shell-safety` skill (all mirrors). Agents prefer the recoverable `trash` command over `rm`, check `command -v trash` first, and recommend an install when missing (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`). `rm` was already deny-listed for Claude Code and Cursor in the kit settings.
|
|
16
|
+
- First-time init now asks two setup preferences and records them in `backbone.yml` `conventions.custom_rules`: use `trash` instead of `rm` (with availability detection and install hints), and a default coding level chosen from a 0–5 table with one-line descriptions. Mirrored in the `init-backbone.mjs --propose` interview output.
|
|
17
|
+
- `coding-level` skill (all mirrors): sessions now start from the `Default coding level: N` entry in `backbone.yml` when present; `/coding-level N` still overrides per session and can save a new default with approval. `CLAUDE-template.md` now lists `/coding-level` and the safe-delete rule.
|
|
18
|
+
- `mvck doctor` reports a new safe-delete check: whether the `trash` command is available, with the per-OS install hint when it is not.
|
|
19
|
+
- Fixed the npm package page rendering the Vietnamese README: moved `README.vi.md` to `docs/README.vi.md` so npm's readme detection always picks `README.md`.
|
|
20
|
+
- Added an "Install from npm" section to `README.md`, `docs/README.vi.md`, and `.vibekit/docs/INSTALL.md`: one-shot `npx --yes minimal-vibe-coding-kit@latest install <path>`, or `npm i -D minimal-vibe-coding-kit` followed by `npx mvck install .`, with a note that files in `node_modules/` stay inactive until `mvck install` copies them into the repo root.
|
|
21
|
+
- Switched README install/update/profile examples to the published npm package; the `github:` form and local `install.sh` remain documented as alternatives.
|
|
22
|
+
- Synced version to 0.4.1 in `package.json`, both README badges, and `.codex-plugin/plugin.json`; added an npm badge.
|
|
23
|
+
|
|
3
24
|
## 0.4.0 — 2026-07-16
|
|
4
25
|
|
|
5
26
|
- Trimmed the end-user install payload: `mvck install`/`update` no longer copy kit-maintainer files (`test-install.mjs`, `pack-dry-run.mjs`, `.vibekit/docs/RESEARCH_NOTES.md`, `.vibekit/docs/AUTORESEARCH_LEDGER.md`); `validate-kit` requires them only in the kit source repo.
|
package/README.md
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
**Read in:** **English** · [Tiếng Việt](README.vi.md)
|
|
3
|
+
**Read in:** **English** · [Tiếng Việt](docs/README.vi.md)
|
|
4
4
|
|
|
5
5
|
# Minimal Vibe Coding Kit
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](https://www.npmjs.com/package/minimal-vibe-coding-kit)
|
|
9
|
+
[](CHANGELOG.md)
|
|
9
10
|

|
|
10
11
|

|
|
11
12
|

|
|
13
|
+

|
|
12
14
|

|
|
13
15
|

|
|
14
16
|
|
|
15
|
-
**One installable AI-coding workflow kit for Claude Code, Cursor, and
|
|
17
|
+
**One installable AI-coding workflow kit for Claude Code, Cursor, Codex, and Grok — any repo, any language.**
|
|
16
18
|
|
|
17
19
|
Install → paste one prompt → approve the proposal → code with guardrails.
|
|
18
20
|
|
|
@@ -22,11 +24,13 @@ Install → paste one prompt → approve the proposal → code with guardrails.
|
|
|
22
24
|
|
|
23
25
|
## What is this?
|
|
24
26
|
|
|
25
|
-
A small kit of shared **rules**, **skills**, and **commands**, plus one **`backbone.yml`** manifest, so Claude Code, Cursor, and
|
|
27
|
+
A small kit of shared **rules**, **skills**, and **commands**, plus one **`backbone.yml`** manifest, so Claude Code, Cursor, Codex, and Grok all understand your project the same way.
|
|
26
28
|
|
|
27
29
|
- Never overwrites your existing `CLAUDE.md` / `AGENTS.md` — it only adds managed blocks.
|
|
28
30
|
- Every setup write waits for your explicit approval.
|
|
29
31
|
- Security review of agent surfaces (AgentShield) is part of the normal workflow.
|
|
32
|
+
- Safe deletes by default: all agents prefer the recoverable `trash` command (init checks it and recommends an install if missing), backed by each tool's documented guardrail config — Claude Code deny rules (`.claude/settings.json`), Cursor CLI permissions (`.cursor/cli.json`), Codex execution-policy rules (`.codex/rules/`, experimental, active once the project is trusted), and Grok project permission rules (`.grok/config.toml`).
|
|
33
|
+
- First-time init asks two setup preferences — use `trash` instead of `rm`, and your default explanation level (0–5, changeable anytime with `/coding-level N`) — and records both in `backbone.yml`.
|
|
30
34
|
|
|
31
35
|
## Quick Start
|
|
32
36
|
|
|
@@ -35,12 +39,12 @@ Three steps, about two minutes.
|
|
|
35
39
|
**1. Install into your project** (no clone needed):
|
|
36
40
|
|
|
37
41
|
```bash
|
|
38
|
-
npx
|
|
42
|
+
npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
|
|
39
43
|
```
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
Already ran `npm i minimal-vibe-coding-kit`, or prefer GitHub or a local clone? See [Install from npm](#install-from-npm).
|
|
42
46
|
|
|
43
|
-
**2. Open the project in Claude Code, Cursor, or
|
|
47
|
+
**2. Open the project in Claude Code, Cursor, Codex, or Grok and paste:**
|
|
44
48
|
|
|
45
49
|
```text
|
|
46
50
|
Read .vibekit/init/FIRST_TIME_INIT.md and initialize this repo with Minimal Vibe Coding Kit.
|
|
@@ -58,6 +62,39 @@ Optional health check any time:
|
|
|
58
62
|
node .vibekit/scripts/mvck.mjs doctor .
|
|
59
63
|
```
|
|
60
64
|
|
|
65
|
+
## Install from npm
|
|
66
|
+
|
|
67
|
+
The kit is published on npm as [`minimal-vibe-coding-kit`](https://www.npmjs.com/package/minimal-vibe-coding-kit). It is a **scaffolding CLI, not a library** — files sitting in `node_modules/` do nothing by themselves. Running `install` once copies the kit into your repo root, exactly like the GitHub installer does.
|
|
68
|
+
|
|
69
|
+
**Option A — one-shot (recommended).** Nothing is added to your project's dependencies:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Option B — as a dependency.** If the package is (or will be) in your `package.json`, one more command is required:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm i -D minimal-vibe-coding-kit
|
|
79
|
+
npx mvck install . # required — copies the kit out of node_modules into your repo
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
> **Important:** `npm i` alone only downloads the kit into `node_modules/` — nothing is active yet.
|
|
83
|
+
> `mvck install` is the step that copies `.claude/`, `.cursor/`, `.agents/`, `.vibekit/`, and `backbone.yml` into your repo root.
|
|
84
|
+
|
|
85
|
+
Either way, the short `mvck` command (alias: `vibe-kit`) is then available via `npx`:
|
|
86
|
+
|
|
87
|
+
| Short command | What it does |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| `npx mvck install .` | Copy the kit into the repo (`--profile`, `--dry-run`, `--force`) |
|
|
90
|
+
| `npx mvck update .` | Refresh kit-owned files after a new kit release |
|
|
91
|
+
| `npx mvck doctor .` | Read-only health check |
|
|
92
|
+
| `npx mvck validate .` | Structure validation |
|
|
93
|
+
|
|
94
|
+
Then continue with **step 2** of the Quick Start (paste the init prompt).
|
|
95
|
+
|
|
96
|
+
Other install paths: `npx github:giang6283623/minimal-vibe-coding-kit install /path/to/your-project`, or from a local clone `./install.sh /path/to/your-project` (Windows: `./install.ps1 -Target C:\path\to\your-project`).
|
|
97
|
+
|
|
61
98
|
## What lands in your repo
|
|
62
99
|
|
|
63
100
|
Install adds exactly this — nothing else in your project is touched:
|
|
@@ -72,6 +109,7 @@ your-project/
|
|
|
72
109
|
├── .cursor/ ← Cursor: rules, commands, skills
|
|
73
110
|
├── .agents/ ← Codex / portable skills
|
|
74
111
|
├── .codex/ .codex-plugin/ ← Codex config example + plugin manifest
|
|
112
|
+
├── .grok/ ← Grok Build: rules, skills, config example
|
|
75
113
|
└── .vibekit/ ← everything kit-owned, in ONE folder
|
|
76
114
|
├── skills/ ← canonical shared skills (mirrored to the harness dirs)
|
|
77
115
|
├── commands/ ← shared command prompts
|
|
@@ -85,7 +123,7 @@ Existing files are never replaced — the kit merges managed blocks (`BEGIN/END:
|
|
|
85
123
|
## How the pieces connect
|
|
86
124
|
|
|
87
125
|
```text
|
|
88
|
-
You (prompt) ──▶ Claude Code / Cursor / Codex
|
|
126
|
+
You (prompt) ──▶ Claude Code / Cursor / Codex / Grok
|
|
89
127
|
│ reads first
|
|
90
128
|
▼
|
|
91
129
|
backbone.yml + AGENTS.md / CLAUDE.md + rules
|
|
@@ -106,11 +144,12 @@ You (prompt) ──▶ Claude Code / Cursor / Codex
|
|
|
106
144
|
|
|
107
145
|
1. **Just code.** Ask for features and fixes normally; the agent follows `backbone.yml` conventions and keeps diffs small.
|
|
108
146
|
2. **Big or vague task?** Start with the `clearthought` or `sequential-thinking` skill to get a plan first.
|
|
109
|
-
3. **
|
|
110
|
-
4. **
|
|
111
|
-
5. **
|
|
112
|
-
6. **
|
|
113
|
-
7. **
|
|
147
|
+
3. **Complex task but only a rough prompt?** `/prompt-sharpener <rough prompt>` sharpens it into a precise prompt and executes it in the same turn.
|
|
148
|
+
4. **Repo-wide question or big review?** Use `parallel-analysis` — it fans out read-only analysis lanes and verifies the merged result.
|
|
149
|
+
5. **Changed `.claude/`, skills, hooks, or installer scripts?** Run `/security-scan` before merging.
|
|
150
|
+
6. **Want measurable improvements?** Run `/autoresearch-coding` with a metric and budget.
|
|
151
|
+
7. **Keep the setup sharp:** `/daily-enhance` proposes improvements — it never applies them silently.
|
|
152
|
+
8. **Onboarding finished for good?** `/vibe-finalize` moves one-time bootstrap files out.
|
|
114
153
|
|
|
115
154
|
## Commands
|
|
116
155
|
|
|
@@ -125,7 +164,7 @@ You (prompt) ──▶ Claude Code / Cursor / Codex
|
|
|
125
164
|
|
|
126
165
|
## Skills
|
|
127
166
|
|
|
128
|
-
All
|
|
167
|
+
All 13 skills live in `.vibekit/skills/` and are mirrored for each tool. Invoke them by name ("Use the X skill…") or via the commands above.
|
|
129
168
|
|
|
130
169
|
| Skill | Use it when | Example prompt |
|
|
131
170
|
| --- | --- | --- |
|
|
@@ -141,6 +180,7 @@ All 12 skills live in `.vibekit/skills/` and are mirrored for each tool. Invoke
|
|
|
141
180
|
| `reviewing-4p-priorities` | Triaging bugs/findings into P0–P4 fix order. | "Use reviewing-4p-priorities. Classify these findings and give a fix sequence." |
|
|
142
181
|
| `memento` | Multi-day tasks: save context before stopping, resume next session. | "/memento — write MEMENTO.md with Goal, Done, Stuck, Next." |
|
|
143
182
|
| `coding-level` | Setting how detailed explanations should be (0 = ELI5 … 5 = expert). | "/coding-level 2" |
|
|
183
|
+
| `prompt-sharpener` | A complex task but only a rough prompt: sharpen it, then execute it in the same turn. | "/prompt-sharpener make the settings page load faster" |
|
|
144
184
|
|
|
145
185
|
## Advanced
|
|
146
186
|
|
|
@@ -149,9 +189,10 @@ All 12 skills live in `.vibekit/skills/` and are mirrored for each tool. Invoke
|
|
|
149
189
|
Install only the surfaces you use (default is `all`):
|
|
150
190
|
|
|
151
191
|
```bash
|
|
152
|
-
npx
|
|
153
|
-
npx
|
|
154
|
-
npx
|
|
192
|
+
npx --yes minimal-vibe-coding-kit@latest install . --profile claude # Claude Code only
|
|
193
|
+
npx --yes minimal-vibe-coding-kit@latest install . --profile claude,cursor # Claude + Cursor
|
|
194
|
+
npx --yes minimal-vibe-coding-kit@latest install . --profile codex # Codex / AGENTS.md agents
|
|
195
|
+
npx --yes minimal-vibe-coding-kit@latest install . --profile grok # Grok Build CLI
|
|
155
196
|
```
|
|
156
197
|
|
|
157
198
|
Flags: `--force` (overwrite existing kit files), `--dry-run` (preview), `--json` (machine-readable plan).
|
|
@@ -161,8 +202,8 @@ Flags: `--force` (overwrite existing kit files), `--dry-run` (preview), `--json`
|
|
|
161
202
|
Run inside your project when the kit ships new skills or scripts:
|
|
162
203
|
|
|
163
204
|
```bash
|
|
164
|
-
npx
|
|
165
|
-
npx
|
|
205
|
+
npx --yes minimal-vibe-coding-kit@latest update . --dry-run # preview
|
|
206
|
+
npx --yes minimal-vibe-coding-kit@latest update . # apply
|
|
166
207
|
```
|
|
167
208
|
|
|
168
209
|
`update` refreshes **kit-owned files only**, never touches `backbone.yml` or your own content, updates managed blocks in place, and backs up changed files to `.vibekit/update-backup/<timestamp>/`. Details: [.vibekit/docs/INSTALL.md](.vibekit/docs/INSTALL.md).
|