minimal-vibe-coding-kit 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) 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/daily-workflow-curator/SKILL.md +3 -3
  8. package/.agents/skills/parallel-analysis/SKILL.md +160 -0
  9. package/.agents/skills/path-sensitive-shell-safety/SKILL.md +68 -0
  10. package/.agents/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  11. package/.agents/skills/vibekit-init/SKILL.md +6 -6
  12. package/.claude/commands/vibe-finalize.md +1 -1
  13. package/.claude/rules/security.md +2 -0
  14. package/.claude/rules/tooling.md +1 -1
  15. package/.claude/skills/agentshield-security-review/SKILL.md +6 -6
  16. package/.claude/skills/agentshield-security-review/references/native-install.md +10 -10
  17. package/.claude/skills/agentshield-security-review/references/report-template.md +1 -1
  18. package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +3 -3
  19. package/.claude/skills/autoresearch-coding/README.md +1 -1
  20. package/.claude/skills/autoresearch-coding/SKILL.md +4 -4
  21. package/.claude/skills/daily-workflow-curator/SKILL.md +3 -3
  22. package/.claude/skills/parallel-analysis/SKILL.md +160 -0
  23. package/.claude/skills/path-sensitive-shell-safety/SKILL.md +68 -0
  24. package/.claude/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  25. package/.claude/skills/vibekit-init/SKILL.md +6 -6
  26. package/.codex-plugin/plugin.json +2 -2
  27. package/.cursor/commands/vibe-finalize.md +1 -1
  28. package/.cursor/rules/001-vibe-core.mdc +1 -1
  29. package/.cursor/rules/010-init.mdc +1 -1
  30. package/.cursor/rules/020-security-agentshield.mdc +2 -2
  31. package/.cursor/rules/030-autoresearch-loop.mdc +1 -1
  32. package/.cursor/skills/parallel-analysis/SKILL.md +160 -0
  33. package/.cursor/skills/path-sensitive-shell-safety/SKILL.md +68 -0
  34. package/.cursor/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  35. package/.vibekit/commands/vibe-finalize.md +3 -0
  36. package/{.vbkit-docs → .vibekit/docs}/AUTORESEARCH_LEDGER.md +3 -3
  37. package/{.vbkit-docs → .vibekit/docs}/BACKBONE_REFERENCE.md +1 -1
  38. package/{.vbkit-docs → .vibekit/docs}/INSTALL.md +16 -16
  39. package/{.vbkit-docs → .vibekit/docs}/RESEARCH_NOTES.md +1 -1
  40. package/{.vbkit-docs → .vibekit/docs}/SECURITY_MODEL.md +2 -2
  41. package/{.vbkit-docs → .vibekit/docs}/TOOLING_GUIDE.md +2 -2
  42. package/{.vbkit-docs → .vibekit/docs}/templates/CONTEXT_TEMPLATE.md +1 -1
  43. package/{.vbkit-docs → .vibekit/docs}/templates/PRD_TEMPLATE.md +1 -1
  44. package/{CLAUDE-template.md → .vibekit/init/CLAUDE-template.md} +1 -1
  45. package/{FIRST_PROMPT.md → .vibekit/init/FIRST_PROMPT.md} +6 -6
  46. package/{FIRST_TIME_INIT.md → .vibekit/init/FIRST_TIME_INIT.md} +14 -14
  47. package/{.vbkit-scripts → .vibekit/scripts}/agentshield-probe.mjs +1 -1
  48. package/{.vbkit-scripts → .vibekit/scripts}/daily-enhance.mjs +3 -3
  49. package/{.vbkit-scripts → .vibekit/scripts}/doctor.mjs +6 -6
  50. package/{.vbkit-scripts → .vibekit/scripts}/init-backbone.mjs +22 -22
  51. package/{.vbkit-scripts → .vibekit/scripts}/mvck.mjs +61 -25
  52. package/{.vbkit-scripts → .vibekit/scripts}/test-install.mjs +32 -18
  53. package/{.vbkit-scripts → .vibekit/scripts}/validate-kit.mjs +47 -31
  54. package/{.vbkit-scripts → .vibekit/scripts}/vibekit-finalize.mjs +7 -7
  55. package/{skills → .vibekit/skills}/agentshield-security-review/SKILL.md +6 -6
  56. package/{skills → .vibekit/skills}/agentshield-security-review/references/native-install.md +10 -10
  57. package/{skills → .vibekit/skills}/agentshield-security-review/references/report-template.md +1 -1
  58. package/{skills → .vibekit/skills}/agentshield-security-review/scripts/agentshield_repo_probe.py +3 -3
  59. package/{skills → .vibekit/skills}/autoresearch-coding/README.md +1 -1
  60. package/{skills → .vibekit/skills}/autoresearch-coding/SKILL.md +4 -4
  61. package/{skills → .vibekit/skills}/daily-workflow-curator/SKILL.md +3 -3
  62. package/.vibekit/skills/parallel-analysis/SKILL.md +160 -0
  63. package/.vibekit/skills/path-sensitive-shell-safety/SKILL.md +68 -0
  64. package/.vibekit/skills/path-sensitive-shell-safety/references/workflow.md +127 -0
  65. package/{skills → .vibekit/skills}/vibekit-init/SKILL.md +6 -6
  66. package/AGENTS.md +5 -2
  67. package/CHANGELOG.md +13 -2
  68. package/CONTRIBUTING.md +3 -3
  69. package/README.md +133 -394
  70. package/README.vi.md +135 -334
  71. package/backbone.yml +8 -7
  72. package/bin/mvck.js +1 -1
  73. package/bin/vibe-kit.js +1 -1
  74. package/install.ps1 +1 -1
  75. package/install.sh +5 -3
  76. package/package.json +22 -18
  77. package/.vbkit-commands/vibe-finalize.md +0 -3
  78. /package/{.vbkit-commands → .vibekit/commands}/autoresearch-coding.md +0 -0
  79. /package/{.vbkit-commands → .vibekit/commands}/council.md +0 -0
  80. /package/{.vbkit-commands → .vibekit/commands}/daily-enhance.md +0 -0
  81. /package/{.vbkit-commands → .vibekit/commands}/init-vibe.md +0 -0
  82. /package/{.vbkit-commands → .vibekit/commands}/security-scan.md +0 -0
  83. /package/{.vbkit-docs → .vibekit/docs}/backbone.schema.json +0 -0
  84. /package/{.vbkit-scripts → .vibekit/scripts}/pack-dry-run.mjs +0 -0
  85. /package/{skills → .vibekit/skills}/agentshield-security-review/agents/openai.yaml +0 -0
  86. /package/{skills → .vibekit/skills}/agentshield-security-review/references/review-checklist.md +0 -0
  87. /package/{skills → .vibekit/skills}/autoresearch-coding/references/experiment-contract.md +0 -0
  88. /package/{skills → .vibekit/skills}/autoresearch-coding/references/metric-extraction.md +0 -0
  89. /package/{skills → .vibekit/skills}/autoresearch-coding/references/result-ledger.md +0 -0
  90. /package/{skills → .vibekit/skills}/autoresearch-coding/scripts/log_result.py +0 -0
  91. /package/{skills → .vibekit/skills}/autoresearch-coding/scripts/run_logged.py +0 -0
  92. /package/{skills → .vibekit/skills}/clearthought/SKILL.md +0 -0
  93. /package/{skills → .vibekit/skills}/clearthought/examples/decision-framework.md +0 -0
  94. /package/{skills → .vibekit/skills}/clearthought/examples/metagame-examples.md +0 -0
  95. /package/{skills → .vibekit/skills}/clearthought/examples/sequential-thinking.md +0 -0
  96. /package/{skills → .vibekit/skills}/clearthought/references/output-schemas.md +0 -0
  97. /package/{skills → .vibekit/skills}/clearthought/references/parameter-reference.md +0 -0
  98. /package/{skills → .vibekit/skills}/coding-level/SKILL.md +0 -0
  99. /package/{skills → .vibekit/skills}/coding-level/references/level-0.md +0 -0
  100. /package/{skills → .vibekit/skills}/coding-level/references/level-1.md +0 -0
  101. /package/{skills → .vibekit/skills}/coding-level/references/level-2.md +0 -0
  102. /package/{skills → .vibekit/skills}/coding-level/references/level-3.md +0 -0
  103. /package/{skills → .vibekit/skills}/coding-level/references/level-4.md +0 -0
  104. /package/{skills → .vibekit/skills}/coding-level/references/level-5.md +0 -0
  105. /package/{skills → .vibekit/skills}/memento/SKILL.md +0 -0
  106. /package/{skills → .vibekit/skills}/reviewing-4p-priorities/SKILL.md +0 -0
  107. /package/{skills → .vibekit/skills}/reviewing-4p-priorities/examples.md +0 -0
  108. /package/{skills → .vibekit/skills}/sequential-thinking/SKILL.md +0 -0
  109. /package/{skills → .vibekit/skills}/sequential-thinking/examples/adaptive-depth.md +0 -0
  110. /package/{skills → .vibekit/skills}/sequential-thinking/examples/branching-exploration.md +0 -0
  111. /package/{skills → .vibekit/skills}/sequential-thinking/examples/linear-reasoning.md +0 -0
  112. /package/{skills → .vibekit/skills}/sequential-thinking/examples/revision-pattern.md +0 -0
  113. /package/{skills → .vibekit/skills}/sequential-thinking/references/output-schema.md +0 -0
  114. /package/{skills → .vibekit/skills}/sequential-thinking/references/parameters.md +0 -0
  115. /package/{skills → .vibekit/skills}/sequential-thinking/references/patterns.md +0 -0
  116. /package/{skills → .vibekit/skills}/visual-design-loop/SKILL.md +0 -0
  117. /package/{skills → .vibekit/skills}/visual-design-loop/agents/openai.yaml +0 -0
@@ -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
 
@@ -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.
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: parallel-analysis
3
+ description: Fan out 2-5 independent read-only analysis lanes across the repo using your configured executor (Cursor CLI Composer, Claude subagents, or Codex CLI), then merge the lane reports and verify them with a refutation pass. Use for repo-wide questions, large uncommitted-diff reviews, multi-doc reading, impact analysis, or consistency audits. On first use it asks which provider/model to use and saves the answer so it never asks again.
4
+ argument-hint: "<analysis question, diff, or review target>"
5
+ user-invocable: true
6
+ effort: medium
7
+ ---
8
+
9
+ # Parallel Analysis (Multi-Agent Fan-Out)
10
+
11
+ Split a large analysis into independent read-only lanes, run them concurrently
12
+ with the configured executor, merge the lane reports, and verify merged claims
13
+ with a skeptical refutation pass. One round of parallel lanes replaces slow
14
+ serial reading; the verification lane replaces manual double-checking.
15
+
16
+ This skill is project-agnostic: it works in any repo where the kit is
17
+ installed, using that repo's `backbone.yml` (if present) for boundaries.
18
+
19
+ ## Best Use
20
+
21
+ - Repo-wide questions ("where is X handled, what depends on Y").
22
+ - Reviewing a large uncommitted diff by concern (backend vs frontend vs i18n
23
+ vs scripts).
24
+ - Reading several large docs, plans, or reference trees at once.
25
+ - Pre-change impact analysis across packages/apps listed in `backbone.yml`
26
+ `paths.apps`.
27
+ - Consistency audits (docs vs code, rules vs skills, config vs actual layout).
28
+
29
+ Do NOT use for single-file questions or quick lookups; direct reads are faster.
30
+
31
+ ## Executor Setup (first use only)
32
+
33
+ Lane execution is delegated to ONE configured executor. The choice is stored
34
+ in `.vibekit/parallel-analysis.json`; while that file exists and its preflight
35
+ passes, NEVER ask again.
36
+
37
+ 1. **If `.vibekit/parallel-analysis.json` exists**: read it, run the matching
38
+ preflight below, and proceed silently on success. If preflight fails
39
+ (binary missing, logged out), tell the user what broke, offer to re-run
40
+ setup, and update the file with their answer.
41
+ 2. **If it does not exist**: detect what is available, then ask the user ONE
42
+ question — "Which provider should run parallel analysis lanes?" — using the
43
+ harness-native prompt (AskUserQuestion in Claude Code; a plain chat
44
+ question in Cursor/Codex). Offer, in this order:
45
+ - **Cursor CLI + Composer 2.5 Fast (recommended)** — fastest lane executor;
46
+ requires `cursor-agent` installed and logged in.
47
+ - **Claude subagents** — no extra install; lanes run as read-only Claude
48
+ Code subagents (Explore/general-purpose). Choose this automatically if
49
+ the user declines external CLIs.
50
+ - **Codex CLI** — lanes run via `codex exec` in a read-only sandbox with
51
+ the best available Codex model.
52
+ 3. **Resolve the model** for the chosen provider (see per-executor notes),
53
+ confirm the resolved value in one line, and write the config file. Include
54
+ a fallback executor so lanes still run when the primary is unavailable.
55
+
56
+ ### Preflights and model resolution
57
+
58
+ - `cursor-cli`: `cursor-agent status` must report logged in (otherwise the
59
+ user runs `cursor-agent login` once). Resolve the model with
60
+ `cursor-agent --list-models` and prefer the Composer 2.5 fast variant
61
+ (e.g. `composer-2.5-fast`); if absent, use the newest Composer model and
62
+ record what was picked.
63
+ - `claude-subagents`: available whenever running inside Claude Code; no
64
+ binary needed. Use read-only subagent types only.
65
+ - `codex-cli`: `codex --version` must succeed. Use the CLI's default/best
66
+ coding model unless the user names one; record the resolved model.
67
+
68
+ ### Config file — `.vibekit/parallel-analysis.json`
69
+
70
+ ```json
71
+ {
72
+ "executor": "cursor-cli",
73
+ "model": "composer-2.5-fast",
74
+ "fallback": "claude-subagents",
75
+ "configuredAt": "2026-07-16T07:30:00Z"
76
+ }
77
+ ```
78
+
79
+ `executor` is one of `cursor-cli` | `claude-subagents` | `codex-cli`. The file
80
+ is local state (gitignored by default); a team may commit it deliberately to
81
+ share a default. To change the choice later, delete the file or ask for
82
+ "parallel-analysis setup" again.
83
+
84
+ ## Running a lane (per executor)
85
+
86
+ Every lane is READ-ONLY: search, read, summarize — never edit files, execute
87
+ project binaries, run hooks, or trigger installs/deploys/migrations.
88
+
89
+ - `cursor-cli`:
90
+
91
+ ```sh
92
+ cursor-agent -p --mode ask --output-format text \
93
+ --model "<configured-model>" \
94
+ --workspace "<repo-root>" \
95
+ "<lane brief>"
96
+ ```
97
+
98
+ Never pass `--force` or `--yolo`; `--mode ask` keeps Composer read-only.
99
+ One workspace per lane; a question spanning multiple repos becomes one lane
100
+ per repo.
101
+ - `claude-subagents`: launch each lane as a read-only subagent with the lane
102
+ brief as its prompt, all lanes in ONE message so they run concurrently.
103
+ - `codex-cli`:
104
+
105
+ ```sh
106
+ codex exec --sandbox read-only -C "<repo-root>" "<lane brief>"
107
+ ```
108
+
109
+ If the harness cannot run lanes concurrently (plain CLI loop), run them
110
+ back-to-back without changing the briefs — merge and verification stay the
111
+ same.
112
+
113
+ ## Workflow
114
+
115
+ 1. **Scope.** State the question in one sentence. Split it into 2-5 lanes that
116
+ are independent of each other (by directory, package, concern, or doc set).
117
+ If lanes would depend on each other's output, merge them or run two rounds.
118
+ 2. **Brief.** Give each lane a numbered brief: exact paths, the questions to
119
+ answer, and the required return format ("facts only, numbered sections,
120
+ findings as `file:line — issue — why it matters`").
121
+ 3. **Launch all lanes at once** with the configured executor.
122
+ 4. **Prepare while waiting.** Build the merge skeleton; do not duplicate lane
123
+ work.
124
+ 5. **Merge.** Combine lane reports into one findings list. Mark conflicts
125
+ between lanes and unknowns explicitly — never average away a disagreement.
126
+ 6. **Verify.** Run one verification lane that receives the merged claims (not
127
+ the reasoning) with the instruction: "Default-skeptical: confirm or refute
128
+ each claim against the repo with file:line evidence." Drop or re-investigate
129
+ every refuted claim; never silently keep one.
130
+ 7. **Deliver.** Report merged findings, what was verified, and remaining
131
+ unknowns. For issue triage, classify surviving findings with the
132
+ `reviewing-4p-priorities` skill (P0-P4). Decisions and edits stay in the
133
+ main session under the repo's normal review rules.
134
+
135
+ ## Lane brief template
136
+
137
+ ```text
138
+ Lane <n>: <one-line purpose>
139
+ Workspace: <repo root>
140
+ Paths: <exact dirs/files>
141
+ Read-only. Do not modify anything or execute binaries/scripts.
142
+ Questions:
143
+ 1. <specific question>
144
+ 2. <specific question>
145
+ Return: numbered sections matching the questions, facts only,
146
+ findings as file:line — issue — why it matters.
147
+ ```
148
+
149
+ ## Guardrails
150
+
151
+ - 2-5 lanes per round; needing more means the question is under-scoped.
152
+ - Lanes are read-only; only the main session edits files. Agent-surface edits
153
+ (`backbone.yml`, `AGENTS.md`, `CLAUDE.md`, `.claude/**`, `.cursor/**`,
154
+ `.agents/**`, `.codex/**`, kit skills/commands) additionally require the
155
+ `agentshield-security-review` skill afterwards.
156
+ - Respect `backbone.yml` `policy.protected_paths` in every lane brief.
157
+ - Never put secrets in lane briefs or executor prompts: no `.env*` contents,
158
+ credentials, tokens, private keys, or customer data.
159
+ - This skill produces analysis, not decisions; a lane may not conclude
160
+ "therefore change X" without main-session review.