minimal-vibe-coding-kit 0.3.0 → 0.4.1

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 (123) hide show
  1. package/.agents/skills/agentshield-security-review/SKILL.md +6 -6
  2. package/.agents/skills/agentshield-security-review/references/native-install.md +10 -10
  3. package/.agents/skills/agentshield-security-review/references/report-template.md +1 -1
  4. package/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +3 -3
  5. package/.agents/skills/autoresearch-coding/README.md +1 -1
  6. package/.agents/skills/autoresearch-coding/SKILL.md +4 -4
  7. package/.agents/skills/coding-level/SKILL.md +8 -1
  8. package/.agents/skills/daily-workflow-curator/SKILL.md +3 -3
  9. package/.agents/skills/parallel-analysis/SKILL.md +160 -0
  10. package/.agents/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  11. package/.agents/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  12. package/.agents/skills/vibekit-init/SKILL.md +6 -6
  13. package/.claude/commands/vibe-finalize.md +1 -1
  14. package/.claude/rules/safe-delete.md +11 -0
  15. package/.claude/rules/security.md +2 -0
  16. package/.claude/rules/tooling.md +1 -1
  17. package/.claude/skills/agentshield-security-review/SKILL.md +6 -6
  18. package/.claude/skills/agentshield-security-review/references/native-install.md +10 -10
  19. package/.claude/skills/agentshield-security-review/references/report-template.md +1 -1
  20. package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +3 -3
  21. package/.claude/skills/autoresearch-coding/README.md +1 -1
  22. package/.claude/skills/autoresearch-coding/SKILL.md +4 -4
  23. package/.claude/skills/coding-level/SKILL.md +8 -1
  24. package/.claude/skills/daily-workflow-curator/SKILL.md +3 -3
  25. package/.claude/skills/parallel-analysis/SKILL.md +160 -0
  26. package/.claude/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  27. package/.claude/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  28. package/.claude/skills/vibekit-init/SKILL.md +6 -6
  29. package/.codex-plugin/plugin.json +2 -2
  30. package/.cursor/commands/vibe-finalize.md +1 -1
  31. package/.cursor/rules/001-vibe-core.mdc +1 -1
  32. package/.cursor/rules/010-init.mdc +1 -1
  33. package/.cursor/rules/020-security-agentshield.mdc +2 -2
  34. package/.cursor/rules/030-autoresearch-loop.mdc +1 -1
  35. package/.cursor/rules/040-safe-delete.mdc +16 -0
  36. package/.cursor/skills/coding-level/SKILL.md +8 -1
  37. package/.cursor/skills/parallel-analysis/SKILL.md +160 -0
  38. package/.cursor/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  39. package/.cursor/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  40. package/.vibekit/commands/vibe-finalize.md +3 -0
  41. package/{.vbkit-docs → .vibekit/docs}/AUTORESEARCH_LEDGER.md +3 -3
  42. package/{.vbkit-docs → .vibekit/docs}/BACKBONE_REFERENCE.md +1 -1
  43. package/{.vbkit-docs → .vibekit/docs}/INSTALL.md +28 -16
  44. package/{.vbkit-docs → .vibekit/docs}/RESEARCH_NOTES.md +1 -1
  45. package/{.vbkit-docs → .vibekit/docs}/SECURITY_MODEL.md +2 -2
  46. package/{.vbkit-docs → .vibekit/docs}/TOOLING_GUIDE.md +2 -2
  47. package/{.vbkit-docs → .vibekit/docs}/templates/CONTEXT_TEMPLATE.md +1 -1
  48. package/{.vbkit-docs → .vibekit/docs}/templates/PRD_TEMPLATE.md +1 -1
  49. package/{CLAUDE-template.md → .vibekit/init/CLAUDE-template.md} +3 -1
  50. package/{FIRST_PROMPT.md → .vibekit/init/FIRST_PROMPT.md} +6 -6
  51. package/{FIRST_TIME_INIT.md → .vibekit/init/FIRST_TIME_INIT.md} +46 -14
  52. package/{.vbkit-scripts → .vibekit/scripts}/agentshield-probe.mjs +1 -1
  53. package/{.vbkit-scripts → .vibekit/scripts}/daily-enhance.mjs +3 -3
  54. package/{.vbkit-scripts → .vibekit/scripts}/doctor.mjs +22 -7
  55. package/{.vbkit-scripts → .vibekit/scripts}/init-backbone.mjs +31 -22
  56. package/{.vbkit-scripts → .vibekit/scripts}/mvck.mjs +61 -25
  57. package/{.vbkit-scripts → .vibekit/scripts}/test-install.mjs +32 -18
  58. package/{.vbkit-scripts → .vibekit/scripts}/validate-kit.mjs +47 -31
  59. package/{.vbkit-scripts → .vibekit/scripts}/vibekit-finalize.mjs +7 -7
  60. package/{skills → .vibekit/skills}/agentshield-security-review/SKILL.md +6 -6
  61. package/{skills → .vibekit/skills}/agentshield-security-review/references/native-install.md +10 -10
  62. package/{skills → .vibekit/skills}/agentshield-security-review/references/report-template.md +1 -1
  63. package/{skills → .vibekit/skills}/agentshield-security-review/scripts/agentshield_repo_probe.py +3 -3
  64. package/{skills → .vibekit/skills}/autoresearch-coding/README.md +1 -1
  65. package/{skills → .vibekit/skills}/autoresearch-coding/SKILL.md +4 -4
  66. package/{skills → .vibekit/skills}/coding-level/SKILL.md +8 -1
  67. package/{skills → .vibekit/skills}/daily-workflow-curator/SKILL.md +3 -3
  68. package/.vibekit/skills/parallel-analysis/SKILL.md +160 -0
  69. package/.vibekit/skills/path-sensitive-shell-safety/SKILL.md +69 -0
  70. package/.vibekit/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  71. package/{skills → .vibekit/skills}/vibekit-init/SKILL.md +6 -6
  72. package/AGENTS.md +6 -2
  73. package/CHANGELOG.md +24 -2
  74. package/CONTRIBUTING.md +3 -3
  75. package/README.md +147 -372
  76. package/backbone.yml +8 -7
  77. package/bin/mvck.js +1 -1
  78. package/bin/vibe-kit.js +1 -1
  79. package/docs/README.vi.md +268 -0
  80. package/install.ps1 +1 -1
  81. package/install.sh +5 -3
  82. package/package.json +23 -19
  83. package/.vbkit-commands/vibe-finalize.md +0 -3
  84. package/README.vi.md +0 -431
  85. /package/{.vbkit-commands → .vibekit/commands}/autoresearch-coding.md +0 -0
  86. /package/{.vbkit-commands → .vibekit/commands}/council.md +0 -0
  87. /package/{.vbkit-commands → .vibekit/commands}/daily-enhance.md +0 -0
  88. /package/{.vbkit-commands → .vibekit/commands}/init-vibe.md +0 -0
  89. /package/{.vbkit-commands → .vibekit/commands}/security-scan.md +0 -0
  90. /package/{.vbkit-docs → .vibekit/docs}/backbone.schema.json +0 -0
  91. /package/{.vbkit-scripts → .vibekit/scripts}/pack-dry-run.mjs +0 -0
  92. /package/{skills → .vibekit/skills}/agentshield-security-review/agents/openai.yaml +0 -0
  93. /package/{skills → .vibekit/skills}/agentshield-security-review/references/review-checklist.md +0 -0
  94. /package/{skills → .vibekit/skills}/autoresearch-coding/references/experiment-contract.md +0 -0
  95. /package/{skills → .vibekit/skills}/autoresearch-coding/references/metric-extraction.md +0 -0
  96. /package/{skills → .vibekit/skills}/autoresearch-coding/references/result-ledger.md +0 -0
  97. /package/{skills → .vibekit/skills}/autoresearch-coding/scripts/log_result.py +0 -0
  98. /package/{skills → .vibekit/skills}/autoresearch-coding/scripts/run_logged.py +0 -0
  99. /package/{skills → .vibekit/skills}/clearthought/SKILL.md +0 -0
  100. /package/{skills → .vibekit/skills}/clearthought/examples/decision-framework.md +0 -0
  101. /package/{skills → .vibekit/skills}/clearthought/examples/metagame-examples.md +0 -0
  102. /package/{skills → .vibekit/skills}/clearthought/examples/sequential-thinking.md +0 -0
  103. /package/{skills → .vibekit/skills}/clearthought/references/output-schemas.md +0 -0
  104. /package/{skills → .vibekit/skills}/clearthought/references/parameter-reference.md +0 -0
  105. /package/{skills → .vibekit/skills}/coding-level/references/level-0.md +0 -0
  106. /package/{skills → .vibekit/skills}/coding-level/references/level-1.md +0 -0
  107. /package/{skills → .vibekit/skills}/coding-level/references/level-2.md +0 -0
  108. /package/{skills → .vibekit/skills}/coding-level/references/level-3.md +0 -0
  109. /package/{skills → .vibekit/skills}/coding-level/references/level-4.md +0 -0
  110. /package/{skills → .vibekit/skills}/coding-level/references/level-5.md +0 -0
  111. /package/{skills → .vibekit/skills}/memento/SKILL.md +0 -0
  112. /package/{skills → .vibekit/skills}/reviewing-4p-priorities/SKILL.md +0 -0
  113. /package/{skills → .vibekit/skills}/reviewing-4p-priorities/examples.md +0 -0
  114. /package/{skills → .vibekit/skills}/sequential-thinking/SKILL.md +0 -0
  115. /package/{skills → .vibekit/skills}/sequential-thinking/examples/adaptive-depth.md +0 -0
  116. /package/{skills → .vibekit/skills}/sequential-thinking/examples/branching-exploration.md +0 -0
  117. /package/{skills → .vibekit/skills}/sequential-thinking/examples/linear-reasoning.md +0 -0
  118. /package/{skills → .vibekit/skills}/sequential-thinking/examples/revision-pattern.md +0 -0
  119. /package/{skills → .vibekit/skills}/sequential-thinking/references/output-schema.md +0 -0
  120. /package/{skills → .vibekit/skills}/sequential-thinking/references/parameters.md +0 -0
  121. /package/{skills → .vibekit/skills}/sequential-thinking/references/patterns.md +0 -0
  122. /package/{skills → .vibekit/skills}/visual-design-loop/SKILL.md +0 -0
  123. /package/{skills → .vibekit/skills}/visual-design-loop/agents/openai.yaml +0 -0
@@ -6,7 +6,7 @@ import { spawnSync } from 'node:child_process';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const __filename = fileURLToPath(import.meta.url);
9
- const kitRoot = path.resolve(path.dirname(__filename), '..');
9
+ const kitRoot = path.resolve(path.dirname(__filename), '..', '..');
10
10
  const node = process.execPath;
11
11
  const keep = process.argv.includes('--keep');
12
12
  const temps = [];
@@ -44,21 +44,35 @@ function count(text, marker) {
44
44
 
45
45
  try {
46
46
  const clean = tempDir('clean');
47
- run(['.vbkit-scripts/mvck.mjs', 'install', clean, '--profile', 'all']);
48
- run(['.vbkit-scripts/validate-kit.mjs', clean]);
47
+ run(['.vibekit/scripts/mvck.mjs', 'install', clean, '--profile', 'all']);
48
+ run(['.vibekit/scripts/validate-kit.mjs', clean]);
49
49
  assert(fs.existsSync(path.join(clean, 'AGENTS.md')), 'clean install creates AGENTS.md');
50
- assert(fs.existsSync(path.join(clean, '.vbkit-commands')), 'clean install creates .vbkit-commands');
51
- assert(fs.existsSync(path.join(clean, '.vbkit-scripts')), 'clean install creates .vbkit-scripts');
52
- assert(fs.existsSync(path.join(clean, '.vbkit-docs')), 'clean install creates .vbkit-docs');
50
+ assert(fs.existsSync(path.join(clean, '.vibekit/commands')), 'clean install creates .vibekit/commands');
51
+ assert(fs.existsSync(path.join(clean, '.vibekit/scripts')), 'clean install creates .vibekit/scripts');
52
+ assert(fs.existsSync(path.join(clean, '.vibekit/docs')), 'clean install creates .vibekit/docs');
53
53
  assert(!fs.existsSync(path.join(clean, 'commands')), 'clean install does not create root commands');
54
54
  assert(!fs.existsSync(path.join(clean, 'scripts')), 'clean install does not create root scripts');
55
55
  assert(!fs.existsSync(path.join(clean, 'docs')), 'clean install does not create root docs');
56
+ assert(fs.existsSync(path.join(clean, '.vibekit/skills/vibekit-init/SKILL.md')), 'clean install creates .vibekit/skills');
57
+ assert(fs.existsSync(path.join(clean, '.vibekit/init/FIRST_TIME_INIT.md')), 'clean install seeds init files under .vibekit/init');
58
+ assert(!fs.existsSync(path.join(clean, 'skills')), 'clean install does not create root skills');
59
+ assert(!fs.existsSync(path.join(clean, '.vbkit-scripts')), 'clean install does not create legacy .vbkit-scripts');
60
+ assert(!fs.existsSync(path.join(clean, '.vbkit-commands')), 'clean install does not create legacy .vbkit-commands');
61
+ assert(!fs.existsSync(path.join(clean, '.vbkit-docs')), 'clean install does not create legacy .vbkit-docs');
62
+ assert(!fs.existsSync(path.join(clean, 'FIRST_TIME_INIT.md')), 'clean install does not seed root FIRST_TIME_INIT.md');
63
+ assert(!fs.existsSync(path.join(clean, '.vibekit/scripts/test-install.mjs')), 'clean install omits kit-dev test-install.mjs');
64
+ assert(!fs.existsSync(path.join(clean, '.vibekit/scripts/pack-dry-run.mjs')), 'clean install omits kit-dev pack-dry-run.mjs');
65
+ assert(!fs.existsSync(path.join(clean, '.vibekit/docs/RESEARCH_NOTES.md')), 'clean install omits maintainer RESEARCH_NOTES.md');
66
+ assert(!fs.existsSync(path.join(clean, '.vibekit/docs/AUTORESEARCH_LEDGER.md')), 'clean install omits maintainer AUTORESEARCH_LEDGER.md');
67
+ assert(fs.existsSync(path.join(clean, '.vibekit/docs/INSTALL.md')), 'clean install keeps end-user docs like INSTALL.md');
68
+ run(['.vibekit/scripts/mvck.mjs', 'install', clean, '--profile', 'bogus'], { expect: 1 });
69
+ assert(true, 'install rejects an unknown --profile value');
56
70
 
57
71
  const existing = tempDir('existing');
58
72
  fs.writeFileSync(path.join(existing, 'AGENTS.md'), '# Existing\n');
59
73
  fs.writeFileSync(path.join(existing, 'CLAUDE.md'), '# Existing Claude\n');
60
- run(['.vbkit-scripts/mvck.mjs', 'install', existing, '--profile', 'all']);
61
- run(['.vbkit-scripts/mvck.mjs', 'install', existing, '--profile', 'all']);
74
+ run(['.vibekit/scripts/mvck.mjs', 'install', existing, '--profile', 'all']);
75
+ run(['.vibekit/scripts/mvck.mjs', 'install', existing, '--profile', 'all']);
62
76
 
63
77
  const agents = fs.readFileSync(path.join(existing, 'AGENTS.md'), 'utf8');
64
78
  const claude = fs.readFileSync(path.join(existing, 'CLAUDE.md'), 'utf8');
@@ -70,39 +84,39 @@ try {
70
84
  assert(count(claude, 'END: minimal-vibe-coding-kit') === 1, 'CLAUDE.md has one managed end marker');
71
85
 
72
86
  const cwdTarget = tempDir('cwd-target');
73
- run([path.join(kitRoot, '.vbkit-scripts/mvck.mjs'), 'install', '--profile', 'all'], { cwd: cwdTarget });
87
+ run([path.join(kitRoot, '.vibekit/scripts/mvck.mjs'), 'install', '--profile', 'all'], { cwd: cwdTarget });
74
88
  assert(fs.existsSync(path.join(cwdTarget, 'backbone.yml')), 'install without target uses current working directory');
75
89
 
76
- const proposed = run([path.join(kitRoot, '.vbkit-scripts/mvck.mjs'), 'init', '--propose'], { cwd: cwdTarget });
90
+ const proposed = run([path.join(kitRoot, '.vibekit/scripts/mvck.mjs'), 'init', '--propose'], { cwd: cwdTarget });
77
91
  assert(proposed.stdout.includes('Proposed backbone.yml'), 'init --propose without target preserves flag');
78
92
 
79
- const jsonPlan = run(['.vbkit-scripts/mvck.mjs', 'install', clean, '--dry-run', '--json']);
93
+ const jsonPlan = run(['.vibekit/scripts/mvck.mjs', 'install', clean, '--dry-run', '--json']);
80
94
  const parsed = JSON.parse(jsonPlan.stdout);
81
95
  assert(parsed.status === 'dry-run' && parsed.dryRun === true, 'install --dry-run --json returns machine-readable plan');
82
96
 
83
97
  const upd = tempDir('update');
84
- run(['.vbkit-scripts/mvck.mjs', 'install', upd, '--profile', 'all']);
98
+ run(['.vibekit/scripts/mvck.mjs', 'install', upd, '--profile', 'all']);
85
99
  assert(fs.existsSync(path.join(upd, '.vibekit/KIT_VERSION')), 'install stamps .vibekit/KIT_VERSION');
86
100
  fs.appendFileSync(path.join(upd, 'backbone.yml'), '# user-custom-line\n');
87
- fs.writeFileSync(path.join(upd, 'skills/memento/SKILL.md'), '# stale kit file\n');
101
+ fs.writeFileSync(path.join(upd, '.vibekit/skills/memento/SKILL.md'), '# stale kit file\n');
88
102
  fs.rmSync(path.join(upd, '.claude/skills/coding-level'), { recursive: true, force: true });
89
103
 
90
- run(['.vbkit-scripts/mvck.mjs', 'update', upd]);
91
- assert(fs.readFileSync(path.join(upd, 'skills/memento/SKILL.md'), 'utf8').includes('name: memento'), 'update refreshes stale kit files');
104
+ run(['.vibekit/scripts/mvck.mjs', 'update', upd]);
105
+ assert(fs.readFileSync(path.join(upd, '.vibekit/skills/memento/SKILL.md'), 'utf8').includes('name: memento'), 'update refreshes stale kit files');
92
106
  assert(fs.existsSync(path.join(upd, '.claude/skills/coding-level/SKILL.md')), 'update re-adds missing kit skill mirrors');
93
107
  assert(fs.readFileSync(path.join(upd, 'backbone.yml'), 'utf8').includes('# user-custom-line'), 'update preserves user-modified backbone.yml');
94
108
  const backupRoot = path.join(upd, '.vibekit', 'update-backup');
95
109
  assert(fs.existsSync(backupRoot) && fs.readdirSync(backupRoot).length >= 1, 'update backs up replaced kit files');
96
- run(['.vbkit-scripts/validate-kit.mjs', upd]);
110
+ run(['.vibekit/scripts/validate-kit.mjs', upd]);
97
111
 
98
112
  const updAgents = fs.readFileSync(path.join(upd, 'AGENTS.md'), 'utf8');
99
113
  assert(count(updAgents, 'BEGIN: minimal-vibe-coding-kit') === 1, 'update keeps one managed begin marker in AGENTS.md');
100
114
 
101
115
  const emptyTarget = tempDir('update-empty');
102
- run(['.vbkit-scripts/mvck.mjs', 'update', emptyTarget], { expect: 1 });
116
+ run(['.vibekit/scripts/mvck.mjs', 'update', emptyTarget], { expect: 1 });
103
117
  assert(true, 'update refuses a target without the kit installed');
104
118
 
105
- const updPlan = run(['.vbkit-scripts/mvck.mjs', 'update', upd, '--dry-run', '--json']);
119
+ const updPlan = run(['.vibekit/scripts/mvck.mjs', 'update', upd, '--dry-run', '--json']);
106
120
  const updParsed = JSON.parse(updPlan.stdout);
107
121
  assert(updParsed.status === 'dry-run' && typeof updParsed.toVersion === 'string', 'update --dry-run --json returns machine-readable plan');
108
122
 
@@ -34,24 +34,27 @@ function listFiles(rel) {
34
34
  }
35
35
 
36
36
  const required = [
37
- 'AGENTS.md', 'CLAUDE-template.md', 'FIRST_TIME_INIT.md', 'FIRST_PROMPT.md', 'backbone.yml',
38
- '.vbkit-scripts/mvck.mjs', '.vbkit-scripts/init-backbone.mjs', '.vbkit-scripts/daily-enhance.mjs', '.vbkit-scripts/validate-kit.mjs',
39
- '.vbkit-scripts/doctor.mjs', '.vbkit-scripts/test-install.mjs', '.vbkit-scripts/agentshield-probe.mjs', '.vbkit-scripts/pack-dry-run.mjs', '.vbkit-scripts/vibekit-finalize.mjs',
40
- 'skills/autoresearch-coding/SKILL.md', 'skills/agentshield-security-review/SKILL.md', 'skills/daily-workflow-curator/SKILL.md', 'skills/vibekit-init/SKILL.md',
41
- 'skills/clearthought/SKILL.md', 'skills/sequential-thinking/SKILL.md', 'skills/reviewing-4p-priorities/SKILL.md', 'skills/visual-design-loop/SKILL.md',
42
- 'skills/memento/SKILL.md', 'skills/coding-level/SKILL.md',
43
- '.vbkit-docs/templates/PRD_TEMPLATE.md', '.vbkit-docs/templates/CONTEXT_TEMPLATE.md',
37
+ 'AGENTS.md', '.vibekit/init/CLAUDE-template.md', '.vibekit/init/FIRST_TIME_INIT.md', '.vibekit/init/FIRST_PROMPT.md', 'backbone.yml',
38
+ '.vibekit/scripts/mvck.mjs', '.vibekit/scripts/init-backbone.mjs', '.vibekit/scripts/daily-enhance.mjs', '.vibekit/scripts/validate-kit.mjs',
39
+ '.vibekit/scripts/doctor.mjs', '.vibekit/scripts/agentshield-probe.mjs', '.vibekit/scripts/vibekit-finalize.mjs',
40
+ '.vibekit/skills/autoresearch-coding/SKILL.md', '.vibekit/skills/agentshield-security-review/SKILL.md', '.vibekit/skills/daily-workflow-curator/SKILL.md', '.vibekit/skills/vibekit-init/SKILL.md',
41
+ '.vibekit/skills/clearthought/SKILL.md', '.vibekit/skills/sequential-thinking/SKILL.md', '.vibekit/skills/reviewing-4p-priorities/SKILL.md', '.vibekit/skills/visual-design-loop/SKILL.md',
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
44
  '.codex/README.md', '.codex/config.example.toml',
45
45
  '.claude/skills/autoresearch-coding/SKILL.md', '.claude/skills/agentshield-security-review/SKILL.md',
46
46
  '.claude/skills/daily-workflow-curator/SKILL.md', '.claude/skills/vibekit-init/SKILL.md',
47
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/memento/SKILL.md', '.claude/skills/coding-level/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',
49
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',
50
- '.cursor/skills/memento/SKILL.md', '.cursor/skills/coding-level/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',
51
53
  '.agents/skills/autoresearch-coding/SKILL.md', '.agents/skills/agentshield-security-review/SKILL.md',
52
54
  '.agents/skills/daily-workflow-curator/SKILL.md', '.agents/skills/vibekit-init/SKILL.md',
53
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',
54
- '.agents/skills/memento/SKILL.md', '.agents/skills/coding-level/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',
55
58
  '.codex-plugin/plugin.json'
56
59
  ];
57
60
 
@@ -74,10 +77,13 @@ const reasoningSkillResources = {
74
77
  ],
75
78
  'reviewing-4p-priorities': [
76
79
  'examples.md'
80
+ ],
81
+ 'path-sensitive-shell-safety': [
82
+ 'references/workflow.md'
77
83
  ]
78
84
  };
79
85
 
80
- for (const surface of ['skills', '.claude/skills', '.cursor/skills', '.agents/skills']) {
86
+ for (const surface of ['.vibekit/skills', '.claude/skills', '.cursor/skills', '.agents/skills']) {
81
87
  for (const [skill, files] of Object.entries(reasoningSkillResources)) {
82
88
  for (const file of files) required.push(`${surface}/${skill}/${file}`);
83
89
  }
@@ -87,18 +93,26 @@ for (const rel of required) exists(rel) ? ok(`required file ${rel}`) : fail(`mis
87
93
  if (exists('README.md')) ok('optional README.md present');
88
94
  else console.log('INFO optional README.md not present in target project');
89
95
 
96
+ // 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
+ if (isKitSourceRepo) {
99
+ 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
+ exists(rel) ? ok(`kit-source file ${rel}`) : fail(`missing kit-source file ${rel}`);
101
+ }
102
+ }
103
+
90
104
  requireText('.github/workflows/vibekit-validate.yml', 'npm test', 'CI workflow runs npm test');
91
105
  requireText('.github/workflows/vibekit-validate.yml', 'npm run security:probe', 'CI workflow runs AgentShield probe');
92
106
  requireText('.github/workflows/vibekit-validate.yml', 'npm run pack:dry-run', 'CI workflow verifies npm package contents');
93
- requireText('.vbkit-docs/AUTORESEARCH_LEDGER.md', 'node .vbkit-scripts/validate-kit.mjs .', 'autoresearch ledger documents validation command');
94
- requireText('.cursor/rules/020-security-agentshield.mdc', 'node .vbkit-scripts/agentshield-probe.mjs .', 'Cursor security rule uses Node AgentShield probe wrapper');
95
- requireText('.vbkit-scripts/doctor.mjs', '.vbkit-scripts/agentshield-probe.mjs', 'doctor uses Node AgentShield probe wrapper');
107
+ requireText('.vibekit/docs/AUTORESEARCH_LEDGER.md', 'node .vibekit/scripts/validate-kit.mjs .', 'autoresearch ledger documents validation command');
108
+ requireText('.cursor/rules/020-security-agentshield.mdc', 'node .vibekit/scripts/agentshield-probe.mjs .', 'Cursor security rule uses Node AgentShield probe wrapper');
109
+ requireText('.vibekit/scripts/doctor.mjs', '.vibekit/scripts/agentshield-probe.mjs', 'doctor uses Node AgentShield probe wrapper');
96
110
 
97
- if (exists('.vbkit-docs/AUTORESEARCH_LEDGER.md')) {
98
- const ledgerText = read('.vbkit-docs/AUTORESEARCH_LEDGER.md');
111
+ if (exists('.vibekit/docs/AUTORESEARCH_LEDGER.md')) {
112
+ const ledgerText = read('.vibekit/docs/AUTORESEARCH_LEDGER.md');
99
113
  const stalePhrases = ['pending during build', 'BUILD_REPORT.md'];
100
114
  const stalePhrase = stalePhrases.find((phrase) => ledgerText.includes(phrase));
101
- stalePhrase ? fail(`.vbkit-docs/AUTORESEARCH_LEDGER.md contains stale phrase: ${stalePhrase}`) : ok('autoresearch ledger has no stale build placeholders');
115
+ stalePhrase ? fail(`.vibekit/docs/AUTORESEARCH_LEDGER.md contains stale phrase: ${stalePhrase}`) : ok('autoresearch ledger has no stale build placeholders');
102
116
  }
103
117
 
104
118
  const skillMirrors = {
@@ -109,9 +123,11 @@ const skillMirrors = {
109
123
  'clearthought': ['.claude/skills/clearthought', '.cursor/skills/clearthought', '.agents/skills/clearthought'],
110
124
  'sequential-thinking': ['.claude/skills/sequential-thinking', '.cursor/skills/sequential-thinking', '.agents/skills/sequential-thinking'],
111
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'],
112
127
  'visual-design-loop': ['.claude/skills/visual-design-loop', '.agents/skills/visual-design-loop'],
113
128
  'memento': ['.claude/skills/memento', '.cursor/skills/memento', '.agents/skills/memento'],
114
- 'coding-level': ['.claude/skills/coding-level', '.cursor/skills/coding-level', '.agents/skills/coding-level']
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']
115
131
  };
116
132
 
117
133
  function validateSkillMirror(sourceRel, mirrorRel) {
@@ -149,7 +165,7 @@ function validateSkillMirror(sourceRel, mirrorRel) {
149
165
  }
150
166
 
151
167
  for (const [skill, mirrors] of Object.entries(skillMirrors)) {
152
- for (const mirror of mirrors) validateSkillMirror(`skills/${skill}`, mirror);
168
+ for (const mirror of mirrors) validateSkillMirror(`.vibekit/skills/${skill}`, mirror);
153
169
  }
154
170
 
155
171
  function parseFrontmatter(text) {
@@ -163,7 +179,7 @@ function parseFrontmatter(text) {
163
179
  return fields;
164
180
  }
165
181
 
166
- for (const surface of ['skills', '.claude/skills', '.cursor/skills', '.agents/skills']) {
182
+ for (const surface of ['.vibekit/skills', '.claude/skills', '.cursor/skills', '.agents/skills']) {
167
183
  if (!exists(surface)) continue;
168
184
  for (const file of listFiles(surface).filter((f) => f.endsWith('SKILL.md'))) {
169
185
  const rel = `${surface}/${file}`;
@@ -180,13 +196,13 @@ function stripFrontmatter(text) {
180
196
  return text.replace(/^---\n[\s\S]*?\n---\n?/, '').trim();
181
197
  }
182
198
 
183
- if (exists('.vbkit-commands')) {
184
- const canonicalCmds = listFiles('.vbkit-commands').filter((f) => f.endsWith('.md'));
199
+ if (exists('.vibekit/commands')) {
200
+ const canonicalCmds = listFiles('.vibekit/commands').filter((f) => f.endsWith('.md'));
185
201
  const cmdMirrors = { '.claude/commands': true, '.cursor/commands': true };
186
202
  for (const [mirrorDir, stripFm] of Object.entries(cmdMirrors)) {
187
203
  if (!exists(mirrorDir)) { warn(`command mirror dir missing: ${mirrorDir}`); continue; }
188
204
  for (const file of canonicalCmds) {
189
- const srcRel = `.vbkit-commands/${file}`;
205
+ const srcRel = `.vibekit/commands/${file}`;
190
206
  const mirRel = `${mirrorDir}/${file}`;
191
207
  if (!exists(mirRel)) { fail(`command mirror ${mirRel} missing`); continue; }
192
208
  const srcText = read(srcRel).trim();
@@ -219,7 +235,7 @@ if (Array.isArray(pkg?.files)) {
219
235
  }
220
236
 
221
237
  if (pkg?.scripts && typeof pkg.scripts === 'object') {
222
- const scriptTargetRe = /node\s+(?:--check\s+)?((?:\.\/)?(?:\.vbkit-scripts|bin)\/[A-Za-z0-9._-]+\.(?:mjs|js))/g;
238
+ const scriptTargetRe = /node\s+(?:--check\s+)?((?:\.\/)?(?:\.vibekit\/scripts|bin)\/[A-Za-z0-9._-]+\.(?:mjs|js))/g;
223
239
  const targets = new Set();
224
240
  for (const command of Object.values(pkg.scripts)) {
225
241
  if (typeof command !== 'string') continue;
@@ -256,15 +272,15 @@ if (claudeSettings?.permissions?.deny && cursorSettings?.permissions?.deny) {
256
272
  }
257
273
 
258
274
  if (pkg?.name === 'minimal-vibe-coding-kit') {
259
- for (const rel of ['SECURITY.md', 'CONTRIBUTING.md', 'CODE_OF_CONDUCT.md', '.github/dependabot.yml', '.github/workflows/vibekit-validate.yml', '.vbkit-docs/backbone.schema.json']) {
275
+ 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']) {
260
276
  exists(rel) ? ok(`release safety file ${rel}`) : fail(`missing release safety file ${rel}`);
261
277
  }
262
278
  }
263
279
 
264
- if (exists('CLAUDE-template.md')) {
265
- const lines = read('CLAUDE-template.md').split(/\r?\n/).length;
266
- if (lines <= 120) ok(`CLAUDE-template.md is concise (${lines} lines)`);
267
- else warn(`CLAUDE-template.md is long (${lines} lines); target <= 120`);
280
+ if (exists('.vibekit/init/CLAUDE-template.md')) {
281
+ const lines = read('.vibekit/init/CLAUDE-template.md').split(/\r?\n/).length;
282
+ if (lines <= 120) ok(`.vibekit/init/CLAUDE-template.md is concise (${lines} lines)`);
283
+ else warn(`.vibekit/init/CLAUDE-template.md is long (${lines} lines); target <= 120`);
268
284
  }
269
285
 
270
286
  if (exists('backbone.yml')) {
@@ -385,7 +401,7 @@ const riskyPatterns = [
385
401
  { pattern: 'ignore previous' + ' instructions', message: 'prompt injection phrase' }
386
402
  ];
387
403
 
388
- const scanDirs = ['.claude', '.cursor', '.agents', '.codex-plugin', 'skills', '.vbkit-commands', '.vbkit-scripts', 'AGENTS.md', 'CLAUDE-template.md'];
404
+ const scanDirs = ['.claude', '.cursor', '.agents', '.codex-plugin', '.vibekit/skills', '.vibekit/commands', '.vibekit/scripts', 'AGENTS.md', '.vibekit/init/CLAUDE-template.md'];
389
405
  function walk(item) {
390
406
  const p = path.join(root, item);
391
407
  if (!fs.existsSync(p)) return [];
@@ -408,7 +424,7 @@ for (const file of scanDirs.flatMap(walk)) {
408
424
  }
409
425
  }
410
426
 
411
- const probe = path.join(root, '.vbkit-scripts/agentshield-probe.mjs');
427
+ const probe = path.join(root, '.vibekit/scripts/agentshield-probe.mjs');
412
428
  if (fs.existsSync(probe)) {
413
429
  const result = spawnSync(process.execPath, [probe, root, '--json'], { encoding: 'utf8' });
414
430
  if (result.status === 0) ok('AgentShield repo probe runs');
@@ -2,7 +2,7 @@
2
2
  // Graduate a consumer project: move one-time bootstrap files into a cleanup
3
3
  // folder once init and the first prompt are complete. Safe, idempotent, and
4
4
  // reversible. Refuses to run on the kit source repo so it never deletes the
5
- // kit's own bootstrap files (and never breaks .vbkit-scripts/validate-kit.mjs).
5
+ // kit's own bootstrap files (and never breaks .vibekit/scripts/validate-kit.mjs).
6
6
  import fs from 'node:fs';
7
7
  import path from 'node:path';
8
8
 
@@ -16,8 +16,8 @@ const json = args.includes('--json');
16
16
  const DEFAULTS = {
17
17
  cleanupDir: '_vibekit-cleanup',
18
18
  marker: '.vibekit/FINALIZE_DONE',
19
- // CLAUDE-template.md is only graduated once CLAUDE.md exists (see below).
20
- oneTimeFiles: ['FIRST_TIME_INIT.md', 'FIRST_PROMPT.md', 'PUSH_TO_GITHUB.md', 'CLAUDE-template.md']
19
+ // .vibekit/init/CLAUDE-template.md is only graduated once CLAUDE.md exists (see below).
20
+ oneTimeFiles: ['.vibekit/init/FIRST_TIME_INIT.md', '.vibekit/init/FIRST_PROMPT.md', '.vibekit/init/PUSH_TO_GITHUB.md', '.vibekit/init/CLAUDE-template.md']
21
21
  };
22
22
 
23
23
  function exists(rel) { return fs.existsSync(path.join(target, rel)); }
@@ -72,7 +72,7 @@ if (pkg?.name === 'minimal-vibe-coding-kit') {
72
72
  if (!exists('backbone.yml')) fail('backbone.yml is missing. Install the kit first.');
73
73
  const status = backboneValue(read('backbone.yml'), 'template_status');
74
74
  if (status !== 'initialized' && !restore) {
75
- fail(`backbone.yml template_status is "${status || 'unknown'}". Run init (FIRST_TIME_INIT.md) before graduating.`);
75
+ fail(`backbone.yml template_status is "${status || 'unknown'}". Run init (.vibekit/init/FIRST_TIME_INIT.md) before graduating.`);
76
76
  }
77
77
 
78
78
  const cfg = loadConfig();
@@ -80,7 +80,7 @@ const cleanupRoot = path.join(target, cfg.cleanupDir);
80
80
  const markerPath = path.join(target, cfg.marker);
81
81
 
82
82
  function graduateFile(rel) {
83
- if (rel === 'CLAUDE-template.md' && !exists('CLAUDE.md')) return false;
83
+ if (rel === '.vibekit/init/CLAUDE-template.md' && !exists('CLAUDE.md')) return false;
84
84
  return exists(rel);
85
85
  }
86
86
 
@@ -132,7 +132,7 @@ if (!shouldWrite) {
132
132
  console.log(`These one-time bootstrap files would move into ${cfg.cleanupDir}/ (then you delete that folder):`);
133
133
  for (const f of planned) console.log(`- ${f}`);
134
134
  if (!planned.length) console.log('- (none found; nothing to graduate)');
135
- console.log(`\nApply with: node .vbkit-scripts/vibekit-finalize.mjs ${args[0] && !args[0].startsWith('--') ? args[0] : '.'} --write --yes`);
135
+ console.log(`\nApply with: node .vibekit/scripts/vibekit-finalize.mjs ${args[0] && !args[0].startsWith('--') ? args[0] : '.'} --write --yes`);
136
136
  console.log('Undo later with: --restore --write');
137
137
  }
138
138
  process.exit(0);
@@ -167,7 +167,7 @@ ${moved.map((m) => `- ${m}`).join('\n')}
167
167
  - Or restore everything to the repo root:
168
168
 
169
169
  \`\`\`bash
170
- node .vbkit-scripts/vibekit-finalize.mjs . --restore --write
170
+ node .vibekit/scripts/vibekit-finalize.mjs . --restore --write
171
171
  \`\`\`
172
172
 
173
173
  The durable project map is \`backbone.yml\`; you do not need these files to keep working.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: agentshield-security-review
3
- description: repository-native security review workflow for Claude Code and Codex projects using the AgentShield concept. Use when auditing or hardening agent configuration, skills, prompts, hooks, MCP servers, permissions, slash commands, Codex plugin files, Claude plugin files, AGENTS.md, CLAUDE.md, or repository-level AI coding-agent surfaces. Prefer this skill before merging changes to .claude, .codex, .codex-plugin, .claude-plugin, .agents, skills, .vbkit-commands, .vbkit-scripts, hooks, mcp configs, or generated code that touches agent execution.
3
+ description: repository-native security review workflow for Claude Code and Codex projects using the AgentShield concept. Use when auditing or hardening agent configuration, skills, prompts, hooks, MCP servers, permissions, slash commands, Codex plugin files, Claude plugin files, AGENTS.md, CLAUDE.md, or repository-level AI coding-agent surfaces. Prefer this skill before merging changes to .claude, .codex, .codex-plugin, .claude-plugin, .agents, .vibekit/skills, .vibekit/commands, .vibekit/scripts, hooks, mcp configs, or generated code that touches agent execution.
4
4
  ---
5
5
 
6
6
  # AgentShield Security Review
@@ -14,7 +14,7 @@ Do not invent findings. Prefer deterministic scanner output when available, then
14
14
  ## Standard workflow
15
15
 
16
16
  1. Identify the repo root and active harness surfaces.
17
- 2. Run `node .vbkit-scripts/agentshield-probe.mjs .` to inventory Claude, Codex, shared skills, hooks, MCP, commands, and repo instruction files.
17
+ 2. Run `node .vibekit/scripts/agentshield-probe.mjs .` to inventory Claude, Codex, shared skills, hooks, MCP, commands, and repo instruction files.
18
18
  3. If Node/npm is available, run AgentShield from the repo root:
19
19
  ```bash
20
20
  npx ecc-agentshield scan --path . --format text
@@ -34,9 +34,9 @@ Do not invent findings. Prefer deterministic scanner output when available, then
34
34
 
35
35
  Use a shared root skill where possible:
36
36
 
37
- - `skills/agentshield-security-review/SKILL.md` is the canonical workflow.
38
- - Claude Code may add a slash-command shim in `.vbkit-commands/security-scan.md` or `.claude/commands/security-scan.md`.
39
- - Codex should consume the same root `skills/` directory through `.codex-plugin/plugin.json` or the repo's native skill/plugin mechanism.
37
+ - `.vibekit/skills/agentshield-security-review/SKILL.md` is the canonical workflow.
38
+ - Claude Code may add a slash-command shim in `.vibekit/commands/security-scan.md` or `.claude/commands/security-scan.md`.
39
+ - Codex should consume the same root `.vibekit/skills/` directory through `.codex-plugin/plugin.json` or the repo's native skill/plugin mechanism.
40
40
  - Do not duplicate divergent Claude and Codex skill bodies. Duplication causes drift.
41
41
 
42
42
  See `references/native-install.md` for copy-ready Claude and Codex snippets.
@@ -48,7 +48,7 @@ Prioritize runtime-active files over examples and docs:
48
48
  1. `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`
49
49
  2. `.claude/settings.json`, `.claude/settings.local.json`, `.claude/agents/*.md`, `.claude/commands/*.md`
50
50
  3. `.codex/config.toml`, `.codex/`, `.codex-plugin/plugin.json`
51
- 4. `.agents/`, `agents/`, `skills/`, `.vbkit-commands/`, `.vbkit-scripts/`, `hooks/`
51
+ 4. `.agents/`, `agents/`, `.vibekit/skills/`, `.vibekit/commands/`, `.vibekit/scripts/`, `hooks/`
52
52
  5. `.mcp.json`, `mcp.json`, `mcp-configs/*.json`
53
53
  6. installer scripts, CI workflows, package scripts, and generated plugin manifests
54
54
 
@@ -7,18 +7,18 @@ Keep one canonical skill and add thin harness adapters.
7
7
  Recommended repo layout:
8
8
 
9
9
  ```text
10
- skills/agentshield-security-review/SKILL.md
11
- skills/agentshield-security-review/references/review-checklist.md
12
- skills/agentshield-security-review/references/report-template.md
13
- skills/agentshield-security-review/scripts/agentshield_repo_probe.py
14
- .vbkit-commands/security-scan.md
10
+ .vibekit/skills/agentshield-security-review/SKILL.md
11
+ .vibekit/skills/agentshield-security-review/references/review-checklist.md
12
+ .vibekit/skills/agentshield-security-review/references/report-template.md
13
+ .vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py
14
+ .vibekit/commands/security-scan.md
15
15
  .codex-plugin/plugin.json
16
16
  .claude-plugin/plugin.json
17
17
  ```
18
18
 
19
19
  ## Claude Code command shim
20
20
 
21
- Create `.vbkit-commands/security-scan.md` or `.claude/commands/security-scan.md`:
21
+ Create `.vibekit/commands/security-scan.md` or `.claude/commands/security-scan.md`:
22
22
 
23
23
  ```markdown
24
24
  ---
@@ -48,7 +48,7 @@ Return grade, score, severity counts, active paths, critical/high findings, and
48
48
 
49
49
  ## Codex plugin pointer
50
50
 
51
- Use the repo-level Codex plugin manifest to point Codex at the same `skills/` directory. Exact schema may vary by Codex plugin version, so preserve the existing repo schema and ensure it references root skills rather than a copied skill body.
51
+ Use the repo-level Codex plugin manifest to point Codex at the same `.vibekit/skills/` directory. Exact schema may vary by Codex plugin version, so preserve the existing repo schema and ensure it references the canonical `.vibekit/skills/` directory rather than a copied skill body.
52
52
 
53
53
  Example intent:
54
54
 
@@ -56,7 +56,7 @@ Example intent:
56
56
  {
57
57
  "name": "your-repo",
58
58
  "version": "0.1.0",
59
- "skills": "./skills",
59
+ "skills": "./.vibekit/skills",
60
60
  "mcp": "./.mcp.json"
61
61
  }
62
62
  ```
@@ -78,8 +78,8 @@ on:
78
78
  - ".claude-plugin/**"
79
79
  - ".agents/**"
80
80
  - "agents/**"
81
- - "skills/**"
82
- - ".vbkit-commands/**"
81
+ - ".vibekit/skills/**"
82
+ - ".vibekit/commands/**"
83
83
  - "hooks/**"
84
84
  - ".mcp.json"
85
85
  - "mcp-configs/**"
@@ -34,7 +34,7 @@ Use this structure for final reports.
34
34
 
35
35
  ## Medium/low findings
36
36
 
37
- Group by theme: permissions, hooks, MCP, prompts, skills, .vbkit-docs/examples.
37
+ Group by theme: permissions, hooks, MCP, prompts, skills, .vibekit/docs/examples.
38
38
 
39
39
  ## Remediation order
40
40
 
@@ -15,9 +15,9 @@ 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
- "shared_skills": ["skills", ".agents/skills"],
19
- "shared_commands": [".vbkit-commands"],
20
- "kit_scripts": [".vbkit-scripts"],
18
+ "shared_skills": [".vibekit/skills", ".claude/skills", ".cursor/skills", ".agents/skills", "skills"],
19
+ "shared_commands": [".vibekit/commands"],
20
+ "kit_scripts": [".vibekit/scripts"],
21
21
  "hooks": ["hooks", ".claude/hooks", ".agents/hooks"],
22
22
  "mcp": [".mcp.json", "mcp.json", "mcp-configs"],
23
23
  "ci": [".github/workflows"],
@@ -11,5 +11,5 @@ Example:
11
11
  For this kit:
12
12
 
13
13
  ```text
14
- /autoresearch-coding goal: improve the kit; metric command: node .vbkit-scripts/validate-kit.mjs .; direction: higher; editable paths: .vbkit-docs .vbkit-scripts skills .vbkit-commands .claude .cursor .agents .codex-plugin; budget: 3
14
+ /autoresearch-coding goal: improve the kit; metric command: node .vibekit/scripts/validate-kit.mjs .; direction: higher; editable paths: .vibekit/docs .vibekit/scripts .vibekit/skills .vibekit/commands .claude .cursor .agents .codex-plugin; budget: 3
15
15
  ```
@@ -28,16 +28,16 @@ For this kit itself, use:
28
28
 
29
29
  ```text
30
30
  goal: improve Minimal Vibe Coding Kit quality
31
- metric command: node .vbkit-scripts/validate-kit.mjs .
31
+ metric command: node .vibekit/scripts/validate-kit.mjs .
32
32
  direction: higher
33
- editable paths: .vbkit-docs .vbkit-scripts skills .vbkit-commands .claude .cursor .agents .codex-plugin .github README.md AGENTS.md CLAUDE-template.md FIRST_TIME_INIT.md FIRST_PROMPT.md backbone.yml package.json install.sh install.ps1
33
+ editable paths: .vibekit/docs .vibekit/scripts .vibekit/skills .vibekit/commands .claude .cursor .agents .codex-plugin .github README.md AGENTS.md .vibekit/init/CLAUDE-template.md .vibekit/init/FIRST_TIME_INIT.md .vibekit/init/FIRST_PROMPT.md backbone.yml package.json install.sh install.ps1
34
34
  protected paths: .git .env* node_modules vendor secrets lockfiles
35
35
  budget: 3
36
36
  ```
37
37
 
38
38
  ## Setup
39
39
 
40
- 1. Read `backbone.yml`. If `meta.template_status` is `uninitialized`, follow `FIRST_TIME_INIT.md` and wait for explicit approval before experiment edits.
40
+ 1. Read `backbone.yml`. If `meta.template_status` is `uninitialized`, follow `.vibekit/init/FIRST_TIME_INIT.md` and wait for explicit approval before experiment edits.
41
41
  2. Inspect `git status --short`.
42
42
  3. If user changes exist, stop unless the user permits dirty-state experimentation.
43
43
  4. Create or switch to an experiment branch named `autoresearch/<date>-<slug>` when a git repo is available. If branch creation is blocked by permissions, ask for approval once and record any approved fallback.
@@ -78,7 +78,7 @@ For each experiment:
78
78
  7. Keep good changes; revert discarded or crashed changes.
79
79
  8. If a crash is from a trivial patch mistake, fix once and rerun.
80
80
 
81
- If a kept change touches agent surfaces such as `AGENTS.md`, `CLAUDE.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`, `skills/**`, `.vbkit-commands/**`, `.vbkit-scripts/**`, hooks, or MCP config, run the AgentShield probe before final reporting.
81
+ If a kept change touches agent surfaces such as `AGENTS.md`, `CLAUDE.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`, `.vibekit/skills/**`, `.vibekit/commands/**`, `.vibekit/scripts/**`, hooks, or MCP config, run the AgentShield probe before final reporting.
82
82
 
83
83
  ## Delegation
84
84
 
@@ -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
 
@@ -14,19 +14,19 @@ Run a daily improvement pass that proposes changes, not silent edits.
14
14
  2. Run:
15
15
 
16
16
  ```bash
17
- node .vbkit-scripts/daily-enhance.mjs . --write-report
17
+ node .vibekit/scripts/daily-enhance.mjs . --write-report
18
18
  ```
19
19
 
20
20
  3. Run validation:
21
21
 
22
22
  ```bash
23
- node .vbkit-scripts/validate-kit.mjs .
23
+ node .vibekit/scripts/validate-kit.mjs .
24
24
  ```
25
25
 
26
26
  4. Run AgentShield read-only probe if present:
27
27
 
28
28
  ```bash
29
- node .vbkit-scripts/agentshield-probe.mjs .
29
+ node .vibekit/scripts/agentshield-probe.mjs .
30
30
  ```
31
31
 
32
32
  5. Identify stale, duplicated, or overly broad rules.