@vibe-agent-toolkit/cli 0.1.42 → 0.2.0-rc.10

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 (504) hide show
  1. package/README.md +4 -5
  2. package/dist/bin/vat +95 -28
  3. package/dist/bin/vat.js +95 -28
  4. package/dist/bin/vat.js.map +1 -1
  5. package/dist/bin.js +137 -76
  6. package/dist/bin.js.map +1 -1
  7. package/dist/command-loaders.d.ts +44 -0
  8. package/dist/command-loaders.d.ts.map +1 -0
  9. package/dist/command-loaders.js +60 -0
  10. package/dist/command-loaders.js.map +1 -0
  11. package/dist/commands/agent/build.d.ts.map +1 -1
  12. package/dist/commands/agent/build.js +2 -1
  13. package/dist/commands/agent/build.js.map +1 -1
  14. package/dist/commands/agent/import.d.ts.map +1 -1
  15. package/dist/commands/agent/import.js +3 -2
  16. package/dist/commands/agent/import.js.map +1 -1
  17. package/dist/commands/agent/index.js +1 -1
  18. package/dist/commands/agent/install-path.d.ts +36 -0
  19. package/dist/commands/agent/install-path.d.ts.map +1 -0
  20. package/dist/commands/agent/install-path.js +44 -0
  21. package/dist/commands/agent/install-path.js.map +1 -0
  22. package/dist/commands/agent/install.d.ts.map +1 -1
  23. package/dist/commands/agent/install.js +66 -13
  24. package/dist/commands/agent/install.js.map +1 -1
  25. package/dist/commands/agent/installed.d.ts.map +1 -1
  26. package/dist/commands/agent/installed.js +22 -12
  27. package/dist/commands/agent/installed.js.map +1 -1
  28. package/dist/commands/agent/list.d.ts.map +1 -1
  29. package/dist/commands/agent/list.js +2 -1
  30. package/dist/commands/agent/list.js.map +1 -1
  31. package/dist/commands/agent/run.d.ts.map +1 -1
  32. package/dist/commands/agent/run.js +2 -1
  33. package/dist/commands/agent/run.js.map +1 -1
  34. package/dist/commands/agent/uninstall.d.ts.map +1 -1
  35. package/dist/commands/agent/uninstall.js +13 -6
  36. package/dist/commands/agent/uninstall.js.map +1 -1
  37. package/dist/commands/agent/validate.d.ts.map +1 -1
  38. package/dist/commands/agent/validate.js +3 -2
  39. package/dist/commands/agent/validate.js.map +1 -1
  40. package/dist/commands/ard/emit.d.ts +153 -0
  41. package/dist/commands/ard/emit.d.ts.map +1 -0
  42. package/dist/commands/ard/emit.js +276 -0
  43. package/dist/commands/ard/emit.js.map +1 -0
  44. package/dist/commands/ard/index.d.ts +12 -0
  45. package/dist/commands/ard/index.d.ts.map +1 -0
  46. package/dist/commands/ard/index.js +80 -0
  47. package/dist/commands/ard/index.js.map +1 -0
  48. package/dist/commands/ard/surfaces.d.ts +56 -0
  49. package/dist/commands/ard/surfaces.d.ts.map +1 -0
  50. package/dist/commands/ard/surfaces.js +150 -0
  51. package/dist/commands/ard/surfaces.js.map +1 -0
  52. package/dist/commands/audit/distributed-tree.d.ts +60 -2
  53. package/dist/commands/audit/distributed-tree.d.ts.map +1 -1
  54. package/dist/commands/audit/distributed-tree.js +73 -1
  55. package/dist/commands/audit/distributed-tree.js.map +1 -1
  56. package/dist/commands/audit/git-url-clone.d.ts +1 -1
  57. package/dist/commands/audit/git-url-clone.d.ts.map +1 -1
  58. package/dist/commands/audit/git-url-clone.js.map +1 -1
  59. package/dist/commands/audit/hierarchical-output.d.ts +1 -1
  60. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
  61. package/dist/commands/audit/hierarchical-output.js +1 -1
  62. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  63. package/dist/commands/audit/provenance.d.ts.map +1 -1
  64. package/dist/commands/audit/provenance.js +4 -3
  65. package/dist/commands/audit/provenance.js.map +1 -1
  66. package/dist/commands/audit/scan-population.d.ts +158 -0
  67. package/dist/commands/audit/scan-population.d.ts.map +1 -0
  68. package/dist/commands/audit/scan-population.js +292 -0
  69. package/dist/commands/audit/scan-population.js.map +1 -0
  70. package/dist/commands/audit-settings.d.ts.map +1 -1
  71. package/dist/commands/audit-settings.js +6 -5
  72. package/dist/commands/audit-settings.js.map +1 -1
  73. package/dist/commands/audit.d.ts +98 -8
  74. package/dist/commands/audit.d.ts.map +1 -1
  75. package/dist/commands/audit.js +1133 -395
  76. package/dist/commands/audit.js.map +1 -1
  77. package/dist/commands/build.d.ts +1 -1
  78. package/dist/commands/build.d.ts.map +1 -1
  79. package/dist/commands/build.js +40 -36
  80. package/dist/commands/build.js.map +1 -1
  81. package/dist/commands/cache/cache-control.d.ts +82 -0
  82. package/dist/commands/cache/cache-control.d.ts.map +1 -0
  83. package/dist/commands/cache/cache-control.js +86 -0
  84. package/dist/commands/cache/cache-control.js.map +1 -0
  85. package/dist/commands/cache/clear.d.ts +105 -0
  86. package/dist/commands/cache/clear.d.ts.map +1 -0
  87. package/dist/commands/cache/clear.js +248 -0
  88. package/dist/commands/cache/clear.js.map +1 -0
  89. package/dist/commands/cache/index.d.ts +18 -0
  90. package/dist/commands/cache/index.d.ts.map +1 -0
  91. package/dist/commands/cache/index.js +94 -0
  92. package/dist/commands/cache/index.js.map +1 -0
  93. package/dist/commands/claude/claude-config.d.ts.map +1 -1
  94. package/dist/commands/claude/claude-config.js +6 -0
  95. package/dist/commands/claude/claude-config.js.map +1 -1
  96. package/dist/commands/claude/context.d.ts +340 -0
  97. package/dist/commands/claude/context.d.ts.map +1 -0
  98. package/dist/commands/claude/context.js +1080 -0
  99. package/dist/commands/claude/context.js.map +1 -0
  100. package/dist/commands/claude/index.d.ts +14 -0
  101. package/dist/commands/claude/index.d.ts.map +1 -1
  102. package/dist/commands/claude/index.js +22 -2
  103. package/dist/commands/claude/index.js.map +1 -1
  104. package/dist/commands/claude/marketplace/changelog-utils.d.ts +1 -1
  105. package/dist/commands/claude/marketplace/changelog-utils.d.ts.map +1 -1
  106. package/dist/commands/claude/marketplace/changelog-utils.js +1 -2
  107. package/dist/commands/claude/marketplace/changelog-utils.js.map +1 -1
  108. package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
  109. package/dist/commands/claude/marketplace/git-publish.js +40 -31
  110. package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
  111. package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
  112. package/dist/commands/claude/marketplace/license-utils.js +0 -1
  113. package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
  114. package/dist/commands/claude/marketplace/publish-tree.d.ts.map +1 -1
  115. package/dist/commands/claude/marketplace/publish-tree.js +0 -6
  116. package/dist/commands/claude/marketplace/publish-tree.js.map +1 -1
  117. package/dist/commands/claude/marketplace/publish.d.ts.map +1 -1
  118. package/dist/commands/claude/marketplace/publish.js +2 -1
  119. package/dist/commands/claude/marketplace/publish.js.map +1 -1
  120. package/dist/commands/claude/marketplace/validate.d.ts +73 -22
  121. package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
  122. package/dist/commands/claude/marketplace/validate.js +407 -72
  123. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  124. package/dist/commands/claude/org/api-keys.d.ts +0 -3
  125. package/dist/commands/claude/org/api-keys.d.ts.map +1 -1
  126. package/dist/commands/claude/org/api-keys.js +2 -1
  127. package/dist/commands/claude/org/api-keys.js.map +1 -1
  128. package/dist/commands/claude/org/helpers.d.ts +54 -1
  129. package/dist/commands/claude/org/helpers.d.ts.map +1 -1
  130. package/dist/commands/claude/org/helpers.js +42 -7
  131. package/dist/commands/claude/org/helpers.js.map +1 -1
  132. package/dist/commands/claude/org/index.d.ts.map +1 -1
  133. package/dist/commands/claude/org/index.js +24 -16
  134. package/dist/commands/claude/org/index.js.map +1 -1
  135. package/dist/commands/claude/org/invites.d.ts +0 -3
  136. package/dist/commands/claude/org/invites.d.ts.map +1 -1
  137. package/dist/commands/claude/org/invites.js +3 -2
  138. package/dist/commands/claude/org/invites.js.map +1 -1
  139. package/dist/commands/claude/org/skills.d.ts +527 -0
  140. package/dist/commands/claude/org/skills.d.ts.map +1 -1
  141. package/dist/commands/claude/org/skills.js +1414 -108
  142. package/dist/commands/claude/org/skills.js.map +1 -1
  143. package/dist/commands/claude/org/users.d.ts +0 -3
  144. package/dist/commands/claude/org/users.d.ts.map +1 -1
  145. package/dist/commands/claude/org/users.js +6 -3
  146. package/dist/commands/claude/org/users.js.map +1 -1
  147. package/dist/commands/claude/org/workspaces.d.ts +0 -3
  148. package/dist/commands/claude/org/workspaces.d.ts.map +1 -1
  149. package/dist/commands/claude/org/workspaces.js +11 -7
  150. package/dist/commands/claude/org/workspaces.js.map +1 -1
  151. package/dist/commands/claude/plugin/build.d.ts +41 -3
  152. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  153. package/dist/commands/claude/plugin/build.js +147 -80
  154. package/dist/commands/claude/plugin/build.js.map +1 -1
  155. package/dist/commands/claude/plugin/helpers.d.ts.map +1 -1
  156. package/dist/commands/claude/plugin/helpers.js +2 -7
  157. package/dist/commands/claude/plugin/helpers.js.map +1 -1
  158. package/dist/commands/claude/plugin/install.d.ts +12 -0
  159. package/dist/commands/claude/plugin/install.d.ts.map +1 -1
  160. package/dist/commands/claude/plugin/install.js +93 -62
  161. package/dist/commands/claude/plugin/install.js.map +1 -1
  162. package/dist/commands/claude/plugin/list.d.ts.map +1 -1
  163. package/dist/commands/claude/plugin/list.js +3 -2
  164. package/dist/commands/claude/plugin/list.js.map +1 -1
  165. package/dist/commands/claude/plugin/marketplace-json.d.ts +24 -9
  166. package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -1
  167. package/dist/commands/claude/plugin/marketplace-json.js +10 -9
  168. package/dist/commands/claude/plugin/marketplace-json.js.map +1 -1
  169. package/dist/commands/claude/plugin/plugin-changelog.d.ts.map +1 -1
  170. package/dist/commands/claude/plugin/plugin-changelog.js +0 -2
  171. package/dist/commands/claude/plugin/plugin-changelog.js.map +1 -1
  172. package/dist/commands/claude/plugin/plugin-files.d.ts.map +1 -1
  173. package/dist/commands/claude/plugin/plugin-files.js +3 -6
  174. package/dist/commands/claude/plugin/plugin-files.js.map +1 -1
  175. package/dist/commands/claude/plugin/plugin-validators.d.ts.map +1 -1
  176. package/dist/commands/claude/plugin/plugin-validators.js +3 -6
  177. package/dist/commands/claude/plugin/plugin-validators.js.map +1 -1
  178. package/dist/commands/claude/plugin/tree-copy.d.ts +73 -0
  179. package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
  180. package/dist/commands/claude/plugin/tree-copy.js +221 -14
  181. package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
  182. package/dist/commands/claude/plugin/uninstall.d.ts.map +1 -1
  183. package/dist/commands/claude/plugin/uninstall.js +4 -4
  184. package/dist/commands/claude/plugin/uninstall.js.map +1 -1
  185. package/dist/commands/consistency-check.d.ts +17 -15
  186. package/dist/commands/consistency-check.d.ts.map +1 -1
  187. package/dist/commands/consistency-check.js +152 -106
  188. package/dist/commands/consistency-check.js.map +1 -1
  189. package/dist/commands/corpus/index.d.ts.map +1 -1
  190. package/dist/commands/corpus/index.js +3 -0
  191. package/dist/commands/corpus/index.js.map +1 -1
  192. package/dist/commands/corpus/report.d.ts +1 -2
  193. package/dist/commands/corpus/report.d.ts.map +1 -1
  194. package/dist/commands/corpus/report.js +1 -3
  195. package/dist/commands/corpus/report.js.map +1 -1
  196. package/dist/commands/corpus/runner.d.ts +58 -1
  197. package/dist/commands/corpus/runner.d.ts.map +1 -1
  198. package/dist/commands/corpus/runner.js +95 -41
  199. package/dist/commands/corpus/runner.js.map +1 -1
  200. package/dist/commands/corpus/scan.d.ts.map +1 -1
  201. package/dist/commands/corpus/scan.js +20 -12
  202. package/dist/commands/corpus/scan.js.map +1 -1
  203. package/dist/commands/corpus/seed.d.ts +4 -4
  204. package/dist/commands/corpus/seed.d.ts.map +1 -1
  205. package/dist/commands/corpus/seed.js +1 -3
  206. package/dist/commands/corpus/seed.js.map +1 -1
  207. package/dist/commands/doctor.d.ts +50 -0
  208. package/dist/commands/doctor.d.ts.map +1 -1
  209. package/dist/commands/doctor.js +245 -52
  210. package/dist/commands/doctor.js.map +1 -1
  211. package/dist/commands/inventory.d.ts +13 -1
  212. package/dist/commands/inventory.d.ts.map +1 -1
  213. package/dist/commands/inventory.js +128 -17
  214. package/dist/commands/inventory.js.map +1 -1
  215. package/dist/commands/mcp/collections.d.ts +1 -1
  216. package/dist/commands/mcp/collections.d.ts.map +1 -1
  217. package/dist/commands/mcp/list-collections.d.ts.map +1 -1
  218. package/dist/commands/mcp/list-collections.js +2 -1
  219. package/dist/commands/mcp/list-collections.js.map +1 -1
  220. package/dist/commands/mcp/serve.d.ts.map +1 -1
  221. package/dist/commands/mcp/serve.js +3 -2
  222. package/dist/commands/mcp/serve.js.map +1 -1
  223. package/dist/commands/okf/index.d.ts +11 -0
  224. package/dist/commands/okf/index.d.ts.map +1 -0
  225. package/dist/commands/okf/index.js +114 -0
  226. package/dist/commands/okf/index.js.map +1 -0
  227. package/dist/commands/okf/validate.d.ts +191 -0
  228. package/dist/commands/okf/validate.d.ts.map +1 -0
  229. package/dist/commands/okf/validate.js +190 -0
  230. package/dist/commands/okf/validate.js.map +1 -0
  231. package/dist/commands/phase-utils.d.ts +182 -114
  232. package/dist/commands/phase-utils.d.ts.map +1 -1
  233. package/dist/commands/phase-utils.js +154 -163
  234. package/dist/commands/phase-utils.js.map +1 -1
  235. package/dist/commands/positional-args.d.ts.map +1 -1
  236. package/dist/commands/positional-args.js +3 -2
  237. package/dist/commands/positional-args.js.map +1 -1
  238. package/dist/commands/rag/clear-command.d.ts.map +1 -1
  239. package/dist/commands/rag/clear-command.js +2 -1
  240. package/dist/commands/rag/clear-command.js.map +1 -1
  241. package/dist/commands/rag/index-command.d.ts +64 -0
  242. package/dist/commands/rag/index-command.d.ts.map +1 -1
  243. package/dist/commands/rag/index-command.js +72 -6
  244. package/dist/commands/rag/index-command.js.map +1 -1
  245. package/dist/commands/rag/index.d.ts.map +1 -1
  246. package/dist/commands/rag/index.js +23 -10
  247. package/dist/commands/rag/index.js.map +1 -1
  248. package/dist/commands/rag/query-command.d.ts.map +1 -1
  249. package/dist/commands/rag/query-command.js +2 -1
  250. package/dist/commands/rag/query-command.js.map +1 -1
  251. package/dist/commands/rag/stats-command.d.ts.map +1 -1
  252. package/dist/commands/rag/stats-command.js +2 -1
  253. package/dist/commands/rag/stats-command.js.map +1 -1
  254. package/dist/commands/resources/builtin-help.d.ts +27 -0
  255. package/dist/commands/resources/builtin-help.d.ts.map +1 -0
  256. package/dist/commands/resources/builtin-help.js +46 -0
  257. package/dist/commands/resources/builtin-help.js.map +1 -0
  258. package/dist/commands/resources/check-progress.d.ts +154 -0
  259. package/dist/commands/resources/check-progress.d.ts.map +1 -0
  260. package/dist/commands/resources/check-progress.js +222 -0
  261. package/dist/commands/resources/check-progress.js.map +1 -0
  262. package/dist/commands/resources/check-supervisor.d.ts +465 -0
  263. package/dist/commands/resources/check-supervisor.d.ts.map +1 -0
  264. package/dist/commands/resources/check-supervisor.js +573 -0
  265. package/dist/commands/resources/check-supervisor.js.map +1 -0
  266. package/dist/commands/resources/check.d.ts +593 -0
  267. package/dist/commands/resources/check.d.ts.map +1 -0
  268. package/dist/commands/resources/check.js +1365 -0
  269. package/dist/commands/resources/check.js.map +1 -0
  270. package/dist/commands/resources/index.d.ts.map +1 -1
  271. package/dist/commands/resources/index.js +425 -6
  272. package/dist/commands/resources/index.js.map +1 -1
  273. package/dist/commands/resources/query.d.ts +106 -0
  274. package/dist/commands/resources/query.d.ts.map +1 -0
  275. package/dist/commands/resources/query.js +177 -0
  276. package/dist/commands/resources/query.js.map +1 -0
  277. package/dist/commands/resources/scan.d.ts +24 -0
  278. package/dist/commands/resources/scan.d.ts.map +1 -1
  279. package/dist/commands/resources/scan.js +17 -8
  280. package/dist/commands/resources/scan.js.map +1 -1
  281. package/dist/commands/resources/validate.d.ts +57 -4
  282. package/dist/commands/resources/validate.d.ts.map +1 -1
  283. package/dist/commands/resources/validate.js +224 -56
  284. package/dist/commands/resources/validate.js.map +1 -1
  285. package/dist/commands/skill/review-checklist.d.ts +3 -2
  286. package/dist/commands/skill/review-checklist.d.ts.map +1 -1
  287. package/dist/commands/skill/review-checklist.js +40 -2
  288. package/dist/commands/skill/review-checklist.js.map +1 -1
  289. package/dist/commands/skill/review.d.ts +247 -0
  290. package/dist/commands/skill/review.d.ts.map +1 -1
  291. package/dist/commands/skill/review.js +99 -62
  292. package/dist/commands/skill/review.js.map +1 -1
  293. package/dist/commands/skill/test/configure.d.ts +56 -0
  294. package/dist/commands/skill/test/configure.d.ts.map +1 -1
  295. package/dist/commands/skill/test/configure.js +75 -16
  296. package/dist/commands/skill/test/configure.js.map +1 -1
  297. package/dist/commands/skill/test/run.d.ts +63 -10
  298. package/dist/commands/skill/test/run.d.ts.map +1 -1
  299. package/dist/commands/skill/test/run.js +258 -77
  300. package/dist/commands/skill/test/run.js.map +1 -1
  301. package/dist/commands/skills/build.d.ts +94 -4
  302. package/dist/commands/skills/build.d.ts.map +1 -1
  303. package/dist/commands/skills/build.js +325 -97
  304. package/dist/commands/skills/build.js.map +1 -1
  305. package/dist/commands/skills/install.d.ts +2 -1
  306. package/dist/commands/skills/install.d.ts.map +1 -1
  307. package/dist/commands/skills/install.js +20 -31
  308. package/dist/commands/skills/install.js.map +1 -1
  309. package/dist/commands/skills/list.d.ts +2 -1
  310. package/dist/commands/skills/list.d.ts.map +1 -1
  311. package/dist/commands/skills/list.js +44 -26
  312. package/dist/commands/skills/list.js.map +1 -1
  313. package/dist/commands/skills/package.d.ts +24 -3
  314. package/dist/commands/skills/package.d.ts.map +1 -1
  315. package/dist/commands/skills/package.js +42 -17
  316. package/dist/commands/skills/package.js.map +1 -1
  317. package/dist/commands/skills/scope-guard.d.ts.map +1 -1
  318. package/dist/commands/skills/scope-guard.js +3 -5
  319. package/dist/commands/skills/scope-guard.js.map +1 -1
  320. package/dist/commands/skills/shared.d.ts.map +1 -1
  321. package/dist/commands/skills/shared.js +2 -4
  322. package/dist/commands/skills/shared.js.map +1 -1
  323. package/dist/commands/skills/skill-discovery.d.ts +47 -6
  324. package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
  325. package/dist/commands/skills/skill-discovery.js +66 -16
  326. package/dist/commands/skills/skill-discovery.js.map +1 -1
  327. package/dist/commands/skills/source-resolvers.d.ts +15 -0
  328. package/dist/commands/skills/source-resolvers.d.ts.map +1 -1
  329. package/dist/commands/skills/source-resolvers.js +25 -4
  330. package/dist/commands/skills/source-resolvers.js.map +1 -1
  331. package/dist/commands/skills/validate-command.d.ts.map +1 -1
  332. package/dist/commands/skills/validate-command.js +11 -3
  333. package/dist/commands/skills/validate-command.js.map +1 -1
  334. package/dist/commands/skills/validate.d.ts +140 -4
  335. package/dist/commands/skills/validate.d.ts.map +1 -1
  336. package/dist/commands/skills/validate.js +224 -67
  337. package/dist/commands/skills/validate.js.map +1 -1
  338. package/dist/commands/validate.d.ts +1 -1
  339. package/dist/commands/validate.d.ts.map +1 -1
  340. package/dist/commands/validate.js +63 -27
  341. package/dist/commands/validate.js.map +1 -1
  342. package/dist/commands/verify.d.ts +119 -15
  343. package/dist/commands/verify.d.ts.map +1 -1
  344. package/dist/commands/verify.js +357 -142
  345. package/dist/commands/verify.js.map +1 -1
  346. package/dist/index.d.ts +0 -1
  347. package/dist/index.d.ts.map +1 -1
  348. package/dist/index.js +5 -1
  349. package/dist/index.js.map +1 -1
  350. package/dist/report-schemas.d.ts +45 -0
  351. package/dist/report-schemas.d.ts.map +1 -0
  352. package/dist/report-schemas.js +100 -0
  353. package/dist/report-schemas.js.map +1 -0
  354. package/dist/skill-resolution/classify.js +2 -2
  355. package/dist/skill-resolution/classify.js.map +1 -1
  356. package/dist/skill-resolution/packaging-config.d.ts +49 -5
  357. package/dist/skill-resolution/packaging-config.d.ts.map +1 -1
  358. package/dist/skill-resolution/packaging-config.js +59 -19
  359. package/dist/skill-resolution/packaging-config.js.map +1 -1
  360. package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -1
  361. package/dist/skill-resolution/resolve-skill-reference.js +55 -57
  362. package/dist/skill-resolution/resolve-skill-reference.js.map +1 -1
  363. package/dist/utils/agent-discovery.d.ts.map +1 -1
  364. package/dist/utils/agent-discovery.js +22 -11
  365. package/dist/utils/agent-discovery.js.map +1 -1
  366. package/dist/utils/agent-runner.d.ts.map +1 -1
  367. package/dist/utils/agent-runner.js +7 -4
  368. package/dist/utils/agent-runner.js.map +1 -1
  369. package/dist/utils/claude-context-lens.d.ts +34 -0
  370. package/dist/utils/claude-context-lens.d.ts.map +1 -0
  371. package/dist/utils/claude-context-lens.js +39 -0
  372. package/dist/utils/claude-context-lens.js.map +1 -0
  373. package/dist/utils/command-error.d.ts +144 -7
  374. package/dist/utils/command-error.d.ts.map +1 -1
  375. package/dist/utils/command-error.js +179 -16
  376. package/dist/utils/command-error.js.map +1 -1
  377. package/dist/utils/config-loader.d.ts +2 -1
  378. package/dist/utils/config-loader.d.ts.map +1 -1
  379. package/dist/utils/config-loader.js +40 -14
  380. package/dist/utils/config-loader.js.map +1 -1
  381. package/dist/utils/corpus-target.d.ts +26 -0
  382. package/dist/utils/corpus-target.d.ts.map +1 -0
  383. package/dist/utils/corpus-target.js +35 -0
  384. package/dist/utils/corpus-target.js.map +1 -0
  385. package/dist/utils/edge-lens-evaluation.d.ts +83 -0
  386. package/dist/utils/edge-lens-evaluation.d.ts.map +1 -0
  387. package/dist/utils/edge-lens-evaluation.js +110 -0
  388. package/dist/utils/edge-lens-evaluation.js.map +1 -0
  389. package/dist/utils/help-loader.d.ts.map +1 -1
  390. package/dist/utils/help-loader.js +0 -1
  391. package/dist/utils/help-loader.js.map +1 -1
  392. package/dist/utils/issue-anchor.d.ts +2 -2
  393. package/dist/utils/issue-anchor.d.ts.map +1 -1
  394. package/dist/utils/issue-anchor.js +1 -1
  395. package/dist/utils/issue-rendering.d.ts +3 -3
  396. package/dist/utils/issue-rendering.d.ts.map +1 -1
  397. package/dist/utils/issue-rendering.js +3 -3
  398. package/dist/utils/issue-rendering.js.map +1 -1
  399. package/dist/utils/issue-severity.d.ts +12 -5
  400. package/dist/utils/issue-severity.d.ts.map +1 -1
  401. package/dist/utils/issue-severity.js +1 -1
  402. package/dist/utils/issue-severity.js.map +1 -1
  403. package/dist/utils/optional-backend.d.ts +78 -0
  404. package/dist/utils/optional-backend.d.ts.map +1 -0
  405. package/dist/utils/optional-backend.js +117 -0
  406. package/dist/utils/optional-backend.js.map +1 -0
  407. package/dist/utils/output.d.ts +26 -0
  408. package/dist/utils/output.d.ts.map +1 -1
  409. package/dist/utils/output.js +35 -0
  410. package/dist/utils/output.js.map +1 -1
  411. package/dist/utils/package-json.d.ts +24 -0
  412. package/dist/utils/package-json.d.ts.map +1 -0
  413. package/dist/utils/package-json.js +49 -0
  414. package/dist/utils/package-json.js.map +1 -0
  415. package/dist/utils/population-wiring.d.ts +100 -0
  416. package/dist/utils/population-wiring.d.ts.map +1 -0
  417. package/dist/utils/population-wiring.js +98 -0
  418. package/dist/utils/population-wiring.js.map +1 -0
  419. package/dist/utils/project-root-policy.d.ts +20 -0
  420. package/dist/utils/project-root-policy.d.ts.map +1 -1
  421. package/dist/utils/project-root-policy.js +30 -0
  422. package/dist/utils/project-root-policy.js.map +1 -1
  423. package/dist/utils/projection-lenses.d.ts +98 -0
  424. package/dist/utils/projection-lenses.d.ts.map +1 -0
  425. package/dist/utils/projection-lenses.js +203 -0
  426. package/dist/utils/projection-lenses.js.map +1 -0
  427. package/dist/utils/projection-query.d.ts +324 -0
  428. package/dist/utils/projection-query.d.ts.map +1 -0
  429. package/dist/utils/projection-query.js +357 -0
  430. package/dist/utils/projection-query.js.map +1 -0
  431. package/dist/utils/projection-store.d.ts +335 -0
  432. package/dist/utils/projection-store.d.ts.map +1 -0
  433. package/dist/utils/projection-store.js +522 -0
  434. package/dist/utils/projection-store.js.map +1 -0
  435. package/dist/utils/relation-limits.d.ts +50 -0
  436. package/dist/utils/relation-limits.d.ts.map +1 -0
  437. package/dist/utils/relation-limits.js +50 -0
  438. package/dist/utils/relation-limits.js.map +1 -0
  439. package/dist/utils/repeatable-option.d.ts +37 -0
  440. package/dist/utils/repeatable-option.d.ts.map +1 -0
  441. package/dist/utils/repeatable-option.js +39 -0
  442. package/dist/utils/repeatable-option.js.map +1 -0
  443. package/dist/utils/resource-loader.d.ts +132 -2
  444. package/dist/utils/resource-loader.d.ts.map +1 -1
  445. package/dist/utils/resource-loader.js +288 -27
  446. package/dist/utils/resource-loader.js.map +1 -1
  447. package/dist/utils/root-argv.d.ts +53 -0
  448. package/dist/utils/root-argv.d.ts.map +1 -0
  449. package/dist/utils/root-argv.js +215 -0
  450. package/dist/utils/root-argv.js.map +1 -0
  451. package/dist/utils/run-integrity.d.ts +95 -0
  452. package/dist/utils/run-integrity.d.ts.map +1 -0
  453. package/dist/utils/run-integrity.js +102 -0
  454. package/dist/utils/run-integrity.js.map +1 -0
  455. package/dist/utils/skill-discovery.d.ts.map +1 -1
  456. package/dist/utils/skill-discovery.js +2 -1
  457. package/dist/utils/skill-discovery.js.map +1 -1
  458. package/dist/utils/skill-packaging-config.d.ts +63 -1
  459. package/dist/utils/skill-packaging-config.d.ts.map +1 -1
  460. package/dist/utils/skill-packaging-config.js +56 -1
  461. package/dist/utils/skill-packaging-config.js.map +1 -1
  462. package/dist/utils/sqlite-experimental-warning.d.ts +69 -0
  463. package/dist/utils/sqlite-experimental-warning.d.ts.map +1 -0
  464. package/dist/utils/sqlite-experimental-warning.js +144 -0
  465. package/dist/utils/sqlite-experimental-warning.js.map +1 -0
  466. package/dist/utils/url-redact.d.ts.map +1 -1
  467. package/dist/utils/url-redact.js +4 -6
  468. package/dist/utils/url-redact.js.map +1 -1
  469. package/dist/utils/user-context-scanner.d.ts +8 -0
  470. package/dist/utils/user-context-scanner.d.ts.map +1 -1
  471. package/dist/utils/user-context-scanner.js +4 -2
  472. package/dist/utils/user-context-scanner.js.map +1 -1
  473. package/dist/utils/validate-help-files.d.ts.map +1 -1
  474. package/dist/utils/validate-help-files.js +12 -6
  475. package/dist/utils/validate-help-files.js.map +1 -1
  476. package/dist/utils/vat-bin-path.d.ts +36 -0
  477. package/dist/utils/vat-bin-path.d.ts.map +1 -0
  478. package/dist/utils/vat-bin-path.js +48 -0
  479. package/dist/utils/vat-bin-path.js.map +1 -0
  480. package/dist/utils/verdict-helpers.d.ts +1 -1
  481. package/dist/utils/verdict-helpers.d.ts.map +1 -1
  482. package/dist/utils/verdict-helpers.js +1 -1
  483. package/dist/utils/verdict-helpers.js.map +1 -1
  484. package/dist/version.d.ts.map +1 -1
  485. package/dist/version.js +1 -3
  486. package/dist/version.js.map +1 -1
  487. package/docs/agent.md +2 -2
  488. package/docs/audit.md +141 -37
  489. package/docs/doctor.md +7 -6
  490. package/docs/index.md +40 -12
  491. package/docs/mcp.md +2 -2
  492. package/docs/rag.md +3 -2
  493. package/docs/resources.md +13 -3
  494. package/docs/skill-test.md +10 -9
  495. package/docs/skills.md +53 -69
  496. package/package.json +38 -27
  497. package/schemas/ard-emit.json +149 -0
  498. package/schemas/okf-validate.json +170 -0
  499. package/schemas/resources-check.json +229 -0
  500. package/schemas/skill-review.json +230 -0
  501. package/dist/commands/resources/command-helpers.d.ts +0 -5
  502. package/dist/commands/resources/command-helpers.d.ts.map +0 -1
  503. package/dist/commands/resources/command-helpers.js +0 -6
  504. package/dist/commands/resources/command-helpers.js.map +0 -1
package/dist/version.js CHANGED
@@ -7,9 +7,7 @@ import { fileURLToPath } from 'node:url';
7
7
  import { safePath } from '@vibe-agent-toolkit/utils';
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
9
  // Read version from package.json at build time
10
- const packageJson = JSON.parse(
11
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- path resolved from known __dirname and constant package.json name
12
- readFileSync(safePath.resolve(__dirname, '../package.json'), 'utf-8'));
10
+ const packageJson = JSON.parse(readFileSync(safePath.resolve(__dirname, '../package.json'), 'utf-8'));
13
11
  export const version = packageJson.version;
14
12
  /**
15
13
  * The version line alone: `<ver>` plus whatever the cwd-derived context adds.
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAG,OAAO,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;AAC5B,wIAAwI;AACxI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC;AAOnD;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAA8B;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,GAAG,GAAG,SAAS,OAAO,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;QACrD,KAAK,OAAO;YACV,OAAO,GAAG,GAAG,YAAY,OAAO,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,OAA8B,EAC9B,UAAkB;IAElB,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,UAAU,EAAE,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAG,OAAO,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC;AAOnD;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAA8B;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,GAAG,GAAG,SAAS,OAAO,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;QACrD,KAAK,OAAO;YACV,OAAO,GAAG,GAAG,YAAY,OAAO,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,OAA8B,EAC9B,UAAkB;IAElB,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,UAAU,EAAE,CAAC;AACvE,CAAC"}
package/docs/agent.md CHANGED
@@ -70,7 +70,7 @@ spec:
70
70
  type: template
71
71
  ```
72
72
 
73
- See `@vibe-agent-toolkit/agent-schema` for complete schema reference.
73
+ See `@vibe-agent-toolkit/schema` for complete schema reference.
74
74
 
75
75
  ## Examples
76
76
 
@@ -120,6 +120,6 @@ for terminology.
120
120
 
121
121
  ## See Also
122
122
 
123
- - [@vibe-agent-toolkit/agent-schema](../../agent-schema/README.md) - Schema reference
123
+ - [@vibe-agent-toolkit/schema](../../schema/README.md) - Schema reference
124
124
  - [agent-generator](../../vat-development-agents/agents/agent-generator/README.md) - Example agent
125
125
  - [RAG Commands](./rag.md) - Indexing documentation for RAG tools
package/docs/audit.md CHANGED
@@ -28,7 +28,9 @@ vat audit [git-url-or-path] [options]
28
28
  ### Options
29
29
 
30
30
  - `--user` - Audit user-level Claude plugins installation (`~/.claude/plugins`)
31
- - `-r, --recursive` - Scan directories recursively for all resource types
31
+ - `--no-recursive` - Scan the top level only (recursive scanning is the default; there is no `--recursive` flag)
32
+ - `--compat` - Run compatibility analysis for each plugin; adds a `compatibility:` block to its entry (see [Compatibility and settings blocks](#compatibility-and-settings-blocks))
33
+ - `--settings [file]` - Check each plugin against Claude settings (auto-discovered, or the given file); adds a `settings:` block. Requires `--compat`
32
34
  - `--debug` - Enable debug logging (outputs to stderr)
33
35
 
34
36
  ### Gitignore-aware scanning
@@ -205,25 +207,61 @@ hierarchical:
205
207
  message: Skill exceeds recommended length
206
208
  ```
207
209
 
210
+ ## `status` and the exit code
211
+
212
+ The YAML `status` describes the findings — the worst actionable severity across
213
+ them — and the exit code follows it, exactly as in every other command of this
214
+ CLI. `vat audit` used to be the one exception ("advisory": exit 0 over
215
+ `status: error`), which a CI author reading the shared contract got wrong on
216
+ exactly this verb.
217
+
218
+ A run that audited **zero files** is refused, not passed. An existing directory
219
+ with nothing auditable in it — plugins that moved, a wrong subdirectory, an
220
+ excluded tree, files no lane recognises — used to publish `status: success`
221
+ beside `filesScanned: 0`, which is the same document a clean tree produces. It
222
+ now publishes `status: error` with one non-overridable `RESOURCE_CHECK_BROKEN`
223
+ finding under a top-level `issues:` key (the claim is about the run, so it is
224
+ not a `files[]` row and does not count toward `filesScanned`), and exits `1`.
225
+
226
+ What still sets audit apart from `vat skills validate` is not the exit code but
227
+ what it shows: audit ignores `validation.allow` (every finding is reported and
228
+ counted) and reads `validation.severity` from three scopes. `validation.severity`
229
+ is therefore the dial that decides what gates — set a code to `warning` and it
230
+ stops moving the exit code; set it to `ignore` and it disappears from the report.
231
+
208
232
  ## Exit Codes
209
233
 
210
- `vat audit` is **advisory by design** — it reports every issue it detects but does not block on validation severity. Use `vat skills validate` or `vat skills build` for gated checks (those commands exit `1` on validation errors).
234
+ The three-way contract every command shares:
211
235
 
212
- - **0** - Always, when the audit completes. The report may still contain errors and warnings; check `status` and `summary` in the YAML output to decide whether action is needed.
213
- - **2** - System error: Config invalid, path not found, permission denied, etc. The audit could not run.
236
+ - **0** - The audit completed with nothing at error severity. Warnings and informational findings are in the report, not the exit code.
237
+ - **1** - The audit completed and reports `status: error`: at least one error-severity finding, or zero files audited. A directory or file INSIDE the tree that the scan could not read — permission denied, a vanished mount — is `SCAN_PATH_UNREADABLE` (warning): the run is degraded, not failed, every readable sibling is still validated, and the refused path is reported under `summary.pathsUnreadable` rather than counted in `filesScanned` — so a root with nothing readable audited zero files and is refused like an empty tree. A governing `vibe-agent-toolkit.config.yaml` that cannot be loaded, or whose `skills.include` reaches a directory the crawl cannot list, is warned about once on stderr and filed as `SCAN_PATH_UNREADABLE` on the config file or the directory; the skills it governs are validated config-free rather than dropped. Degrading beats destroying, and the report says where it degraded.
238
+ - **2** - The audit could not run at all, so there is no report to read: the path does not exist or is a file no audit lane recognises (the same ending `vat resources validate` and `vat skill review` give that argument), `--user` with no Claude config directory installed, a git URL that could not be cloned, an unknown flag, or an internal failure (a validator defect). An invalid config and a permission problem inside the tree are **not** exit 2 — they are findings, above.
214
239
 
215
240
  ## Validation Configuration
216
241
 
217
- Audit honors `validation.severity` from `vibe-agent-toolkit.config.yaml` for **display grouping only** — setting a code to `ignore` hides it from output, raising to `error` promotes it in the report's error count. Audit does **not** apply `validation.allow` (per-path allow entries); for that, use `vat skills validate` or `vat skills build`.
242
+ Audit honors `validation.severity` from `vibe-agent-toolkit.config.yaml`: setting a code to `ignore` hides it from the report, and every other level is applied as written — a code raised to `error` is reported as an error, a code lowered to `warning` as a warning. It changes **which findings are reported and at what severity**, and through them the exit code — a code at `error` gates, one lowered to `warning` does not (see [`status` and the exit code](#status-and-the-exit-code)). Audit does **not** apply `validation.allow` (per-path allow entries); for that, use `vat skills validate` or `vat skills build`.
243
+
244
+ Three scopes are read, least specific first — a more specific one naming the same code wins:
218
245
 
219
246
  ```yaml
220
247
  # In vibe-agent-toolkit.config.yaml
248
+ resources:
249
+ validation:
250
+ severity:
251
+ LINK_MISSING_TARGET: ignore # project-wide; the same dial
252
+ # `vat resources validate` reads
221
253
  skills:
222
254
  defaults:
223
255
  validation:
224
256
  severity:
225
- LINK_TO_NAVIGATION_FILE: ignore # hidden from audit output
226
- LINK_DROPPED_BY_DEPTH: error # elevated in the report
257
+ LINK_TO_NAVIGATION_FILE: ignore # project-wide: skills, plugins and
258
+ # marketplaces alike
259
+ LINK_DROPPED_BY_DEPTH: error # elevated in the report
260
+ config:
261
+ my-skill:
262
+ validation:
263
+ severity:
264
+ LINK_DROPPED_BY_DEPTH: info # just this skill
227
265
  ```
228
266
 
229
267
  See `docs/validation-codes.md` for the full code reference.
@@ -237,16 +275,15 @@ Errors prevent the resource from being used correctly:
237
275
  - **Missing manifests/frontmatter**: Resource structure is invalid
238
276
  - **Schema validation failures**: Manifest/frontmatter doesn't match expected format
239
277
  - **Broken links**: Links to non-existent files (Skills only)
240
- - **Reserved words in names**: Using reserved words like "help", "exit" (Skills only)
278
+ - **Reserved words in names**: `anthropic` or `claude` in a skill name (`RESERVED_WORD_IN_NAME`, a warning — Claude Code rejects non-certified skills using them)
241
279
  - **XML tags in frontmatter**: XML-like tags in name/description (Skills only)
242
- - **Windows-style backslashes**: Path separators should be forward slashes (Skills only)
243
280
 
244
281
  ### Warnings (Should Fix)
245
282
 
246
283
  Warnings indicate potential issues but don't prevent usage:
247
284
 
248
285
  - **Skill exceeds recommended length**: Over 5000 lines (Skills only)
249
- - **Compat smells**: Skill requires a runtime capability that isn't available on every surface (browser auth, local shell, external CLI) — see `COMPAT_*` codes in `docs/validation-codes.md`.
286
+ - **Capability observations**: Skill requires a runtime capability that isn't available on every surface — `CAPABILITY_BROWSER_AUTH`, `CAPABILITY_LOCAL_SHELL`, `CAPABILITY_EXTERNAL_CLI` (info); with `--compat`, the per-target verdicts `COMPAT_TARGET_INCOMPATIBLE` / `COMPAT_TARGET_NEEDS_REVIEW` (warning) and `COMPAT_TARGET_UNDECLARED` (info). See `docs/validation-codes.md`.
250
287
 
251
288
  ## Error Codes Reference
252
289
 
@@ -282,13 +319,12 @@ Warnings indicate potential issues but don't prevent usage:
282
319
  | `SKILL_MISSING_NAME` | error | `name` field missing from frontmatter | Add `name` field |
283
320
  | `SKILL_MISSING_DESCRIPTION` | error | `description` field missing from frontmatter | Add `description` field |
284
321
  | `SKILL_NAME_INVALID` | error | Name contains invalid characters | Use only letters, numbers, hyphens, underscores |
285
- | `SKILL_DESCRIPTION_TOO_LONG` | error | Description exceeds 500 characters | Shorten description |
322
+ | `SKILL_DESCRIPTION_TOO_LONG` | error | Description exceeds 1024 characters (the frontmatter schema limit; `SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT` warns earlier at 250, where the Claude Code `/skills` listing truncates) | Shorten description |
286
323
  | `RESERVED_WORD_IN_NAME` | warning | Name contains `anthropic` or `claude`; Claude Code rejects non-certified skills using these words | Rename the skill to avoid these words |
287
324
  | `SKILL_NAME_XML_TAGS` | error | Name contains XML-like tags | Remove XML tags from name |
288
325
  | `SKILL_DESCRIPTION_XML_TAGS` | error | Description contains XML-like tags | Remove XML tags from description |
289
326
  | `SKILL_DESCRIPTION_EMPTY` | error | Description is empty or whitespace | Provide meaningful description |
290
327
  | `SKILL_MISCONFIGURED_LOCATION` | error | Standalone skill in `~/.claude/plugins/` won't be recognized | Move to `~/.claude/skills/` for standalone skills, or add `.claude-plugin/plugin.json` for a proper plugin |
291
- | `PATH_STYLE_WINDOWS` | error | Windows-style backslashes in paths | Use forward slashes (/) instead |
292
328
  | `LINK_INTEGRITY_BROKEN` | error | Link to non-existent file | Fix or remove broken link |
293
329
 
294
330
  ### Skill Warnings
@@ -296,9 +332,12 @@ Warnings indicate potential issues but don't prevent usage:
296
332
  | Code | Severity | Description | Fix |
297
333
  |------|----------|-------------|-----|
298
334
  | `SKILL_TOO_LONG` | warning | Skill exceeds 5000 lines | Consider splitting into multiple skills |
299
- | `COMPAT_REQUIRES_BROWSER_AUTH` | warning | Skill needs browser login (MSAL, SSO, OAuth) | See `docs/validation-codes.md#compat_requires_browser_auth` |
300
- | `COMPAT_REQUIRES_LOCAL_SHELL` | warning | Skill needs local shell/environment tools (Bash, Edit, Write, NotebookEdit) | See `docs/validation-codes.md#compat_requires_local_shell` |
301
- | `COMPAT_REQUIRES_EXTERNAL_CLI` | warning | Skill invokes unbundled CLI (az, aws, gcloud, etc.) | See `docs/validation-codes.md#compat_requires_external_cli` |
335
+ | `CAPABILITY_BROWSER_AUTH` | info | Skill needs browser login (MSAL, SSO, OAuth) | See `docs/validation-codes.md#capability_browser_auth` |
336
+ | `CAPABILITY_LOCAL_SHELL` | info | Skill needs local shell/environment tools (Bash, Edit, Write, NotebookEdit) | See `docs/validation-codes.md#capability_local_shell` |
337
+ | `CAPABILITY_EXTERNAL_CLI` | info | Skill invokes an unbundled CLI (az, aws, gcloud, etc.) | See `docs/validation-codes.md#capability_external_cli` |
338
+ | `COMPAT_TARGET_INCOMPATIBLE` | warning | With `--compat`: a declared target cannot run the skill | See `docs/validation-codes.md#compat_target_incompatible` |
339
+ | `COMPAT_TARGET_NEEDS_REVIEW` | warning | With `--compat`: a declared target may not run the skill | See `docs/validation-codes.md#compat_target_needs_review` |
340
+ | `COMPAT_TARGET_UNDECLARED` | info | With `--compat`: the skill declares no `targets` | See `docs/validation-codes.md#compat_target_undeclared` |
302
341
 
303
342
  ### Format Detection Errors
304
343
 
@@ -316,14 +355,20 @@ Structured YAML report for programmatic parsing:
316
355
  root: /abs/path/to/scan/root # The ONE absolute path in the document
317
356
  status: success | warning | error
318
357
  summary:
319
- filesScanned: number
358
+ filesScanned: number # Files the audit READ — never a path it could not
320
359
  filesPassed: number # Files with no ACTIONABLE issues (info-only counts as passed)
321
360
  filesWithWarnings: number # Files whose worst actionable severity is warning
322
361
  filesWithErrors: number # Files carrying at least one error
362
+ pathsUnreadable: number # `files[]` rows that are a refused path (SCAN_PATH_UNREADABLE),
363
+ # outside every count above: files.length === filesScanned + pathsUnreadable
323
364
  issueCounts: # FINDINGS, not files — same field name and meaning
324
- errors: number # as the `issueCounts` on each entry below
325
- warnings: number
365
+ errors: number # as the `issueCounts` on each entry below,
366
+ warnings: number # plus the run-level `issues` when present
326
367
  info: number
368
+ issues: # Only when the RUN itself is refused — a run over
369
+ - code: RESOURCE_CHECK_BROKEN # zero files. Not a file, so not in `files[]`.
370
+ severity: error
371
+ message: ...
327
372
  duration: "123ms"
328
373
  files:
329
374
  - path: plugins/my-plugin # relative to `root`
@@ -357,6 +402,70 @@ say in how a path is spelled.
357
402
  lives in a random tempdir that nothing downstream can resolve, so the provenance
358
403
  header states the base instead and paths are relative to the cloned repo.
359
404
 
405
+ #### Compatibility and settings blocks
406
+
407
+ Under `--compat`, every `claude-plugin` entry carries a `compatibility:` block;
408
+ under `--compat --settings`, a `settings:` block beside it. **Both blocks are
409
+ always present for every plugin the run was asked about** — a lane that could
410
+ not run says so in its block rather than leaving it out, because a plugin the
411
+ check could not answer for must never look like one the operator never asked
412
+ about.
413
+
414
+ ```yaml
415
+ files:
416
+ - path: plugins/my-plugin
417
+ type: claude-plugin
418
+ compatibility: # the analyzer's verdicts…
419
+ plugin: my-plugin
420
+ declaredTargets: [claude-code]
421
+ observations: [...]
422
+ verdicts: [...]
423
+ unchecked: [] # files the analysis could not read; verdicts were computed without them
424
+ settings:
425
+ compatible: false # true ONLY when conflicts and unchecked are both empty
426
+ conflicts:
427
+ - type: tool-blocked
428
+ detail: Tool "Bash" in skills/deploy/SKILL.md blocked by org policy (permissions.deny)
429
+ blockedBy: permissions.deny
430
+ value: Bash
431
+ settingsFile: /etc/claude-code/managed-settings.json
432
+ settingsLevel: managed
433
+ unchecked: # present only when non-empty
434
+ - path: skills/locked/SKILL.md # relative to `root`
435
+ reason: "EACCES: permission denied, open 'skills/locked/SKILL.md'"
436
+ - path: plugins/other-plugin
437
+ type: claude-plugin
438
+ compatibility: # …or the reason there are none
439
+ analyzed: false
440
+ reason: "EACCES: permission denied, scandir 'plugins/other-plugin/skills/locked'"
441
+ settings:
442
+ compatible: false
443
+ conflicts: []
444
+ unchecked:
445
+ - path: plugins/other-plugin/skills/locked
446
+ reason: "EACCES: permission denied, scandir 'plugins/other-plugin/skills/locked'"
447
+ ```
448
+
449
+ `settings.unchecked` lists every path the settings check enumerated but could
450
+ not compare: a `SKILL.md` it could not read or whose frontmatter is not a YAML
451
+ mapping (the same file the validator reports as `SKILL_MISSING_FRONTMATTER`), or
452
+ a directory it could not list — in which case any skill beneath it is unseen
453
+ and unnamed. The check follows symlinks the way the validator lane does, so a
454
+ plugin whose `skills/` points at a shared tree is checked, not skipped.
455
+ `compatible` is `false` whenever anything is listed here: zero conflicts over a
456
+ skill that was never read is not compatibility. The two compat lanes are
457
+ independent — a plugin-wide analyzer failure (no valid `plugin.json`, or a root
458
+ that cannot be listed) does not stop the settings check. A single file the
459
+ analyzer cannot read, list or parse is listed under `compatibility.unchecked`
460
+ (root-relative, with the OS or parser reason) and every other file is still
461
+ analyzed; the verdicts are computed WITHOUT the unchecked files, so an empty
462
+ `verdicts` beside a non-empty `unchecked` is a verdict over fewer files than
463
+ the plugin ships.
464
+
465
+ Both outcomes are also said on stderr without `--debug`: a
466
+ `Compatibility analysis could not run for <plugin>: <reason>` line, and totals
467
+ for conflicts found and paths the settings check could not compare.
468
+
360
469
  ### Standard Error (stderr)
361
470
 
362
471
  Human-readable error messages and logs. Paths are root-relative here too:
@@ -416,7 +525,7 @@ This scans:
416
525
  Scan directory tree for all resources:
417
526
 
418
527
  ```bash
419
- vat audit ./resources --recursive
528
+ vat audit ./resources
420
529
  ```
421
530
 
422
531
  Finds and validates:
@@ -433,21 +542,17 @@ Use in CI pipeline:
433
542
  #!/bin/bash
434
543
  set -e
435
544
 
436
- # Audit all resources (always exits 0 unless system error)
437
- vat audit --recursive > audit-report.yaml
438
-
439
- # Check YAML status field — audit itself doesn't fail on validation errors
440
- STATUS=$(grep '^status:' audit-report.yaml | awk '{print $2}')
441
- if [ "$STATUS" = "error" ]; then
442
- echo "Audit report contains validation errors"
545
+ # Audit all resources: exit 1 on an error-severity finding, 2 if the audit could not run
546
+ if ! vat audit > audit-report.yaml; then
547
+ echo "Audit found errors (or could not run) — see the report"
443
548
  cat audit-report.yaml
444
549
  exit 1
445
550
  fi
446
551
 
447
- echo "Audit clean — no validation errors in report"
552
+ echo "Audit clean — no error-severity findings"
448
553
  ```
449
554
 
450
- To gate on validation errors directly (exits `1` automatically), use `vat skills validate` instead:
555
+ To gate with `validation.allow` honoured (audit ignores it), use `vat skills validate` instead:
451
556
 
452
557
  ```bash
453
558
  #!/bin/bash
@@ -469,7 +574,7 @@ jobs:
469
574
  - uses: actions/checkout@v4
470
575
  - uses: oven-sh/setup-bun@v1
471
576
  - run: npm install -g vibe-agent-toolkit
472
- - run: vat audit --recursive
577
+ - run: vat audit
473
578
  ```
474
579
 
475
580
  ## Troubleshooting
@@ -488,7 +593,7 @@ jobs:
488
593
  - Ensure plugin has `.claude-plugin/plugin.json` or `.claude-plugin/marketplace.json`
489
594
  - Ensure registry files are named `installed_plugins.json` or `known_marketplaces.json`
490
595
  - Ensure skill files are named `SKILL.md`
491
- - Use `--recursive` to scan subdirectories
596
+ - Scanning is recursive by default; make sure you did not pass `--no-recursive`
492
597
 
493
598
  ### "Permission denied" on Windows
494
599
 
@@ -503,7 +608,7 @@ jobs:
503
608
  **Solution**: Redirect stdout to file, only show stderr:
504
609
 
505
610
  ```bash
506
- vat audit --recursive > audit.yaml 2>&1
611
+ vat audit > audit.yaml 2>&1
507
612
  if [ $? -ne 0 ]; then
508
613
  echo "Audit failed, see audit.yaml"
509
614
  exit 1
@@ -593,10 +698,10 @@ governing context rather than a single top-level `projectRoot`:
593
698
  reported as ungoverned (an audit finding, not a fatal error). This lets `vat
594
699
  audit` work on external community trees, downloaded plugin bundles, and
595
700
  monorepos with multiple sub-package configs.
596
- - **Config**: accept defaults. Per-skill `validation.severity` and
597
- `validation.allow` overrides come from whichever
598
- `vibe-agent-toolkit.config.yaml` each skill walks up to. The audit itself
599
- always exits 0 (advisory) regardless of severity outcomes.
701
+ - **Config**: accept defaults. Per-skill `validation.severity` overrides come
702
+ from whichever `vibe-agent-toolkit.config.yaml` each skill walks up to;
703
+ `validation.allow` is not applied by audit (see the config section above).
704
+ The exit code follows the report's `status`, like every other command.
600
705
 
601
706
  The per-skill walk-up is cached via a module-level two-layer cache and pre-warmed
602
707
  during top-down descent for efficiency on large trees.
@@ -604,11 +709,10 @@ during top-down descent for efficiency on large trees.
604
709
  See [Roots and Config — Canonical Concepts](../../../docs/concepts/roots-and-config.md)
605
710
  for the `projectRoot` ladder and the audit walk-up model. See
606
711
  [`docs/skill-quality-and-compatibility.md`](../../../docs/skill-quality-and-compatibility.md)
607
- for VAT's advisory-audit stance.
712
+ for VAT's audit stance.
608
713
 
609
714
  ## Related Commands
610
715
 
611
- - `vat agent audit <path>` - Legacy skill-only audit (deprecated)
612
716
  - `vat doctor` - Check environment and installation health
613
717
  - `vat resources validate` - Validate markdown resources (links, anchors)
614
718
 
package/docs/doctor.md CHANGED
@@ -12,7 +12,7 @@ providing actionable suggestions for any problems found.
12
12
  **Purpose:** Check environment and project setup health
13
13
 
14
14
  **What it checks:**
15
- 1. Node.js version (>=20 required)
15
+ 1. Node.js version (>=22.13.0 required — the range comes from the CLI's own `engines.node`)
16
16
  2. Git installed and version
17
17
  3. Current directory is a git repository
18
18
  4. Configuration file exists (vibe-agent-toolkit.config.yaml)
@@ -35,6 +35,7 @@ providing actionable suggestions for any problems found.
35
35
  **Exit Codes:**
36
36
  - `0` - No check failed (an undetermined check is reported in the output, not fatal)
37
37
  - `1` - One or more checks failed
38
+ - `2` - Doctor itself could not run (an internal failure, an unknown flag); no verdict was produced
38
39
 
39
40
  **Output:** Human-friendly formatted text with emojis. The summary always prints the
40
41
  full outcome distribution and, when the concise view hides checks, how many it hid —
@@ -96,7 +97,7 @@ Running diagnostic checks...
96
97
  Current: 0.1.0 — up to date
97
98
 
98
99
  ✅ Node.js version
99
- v22.0.0 (meets requirement: >=20.0.0)
100
+ v22.13.0 (meets requirement: >=22.13.0)
100
101
 
101
102
  ✅ Git installed
102
103
  git version 2.43.0
@@ -148,12 +149,12 @@ Running diagnostic checks...
148
149
 
149
150
  When checks fail, doctor provides specific suggestions:
150
151
 
151
- ### Node.js Version Too Old
152
+ ### Node.js Version Out of Range
152
153
 
153
154
  ```
154
155
  ❌ Node.js version
155
- v18.0.0 is too old. Node.js 20+ required.
156
- 💡 Upgrade Node.js: https://nodejs.org/ or use nvm
156
+ v22.4.0 does not satisfy the required range. Node.js >=22.13.0 required.
157
+ 💡 Install a Node.js version in that range: https://nodejs.org/ or use nvm
157
158
  ```
158
159
 
159
160
  ### Git Not Installed
@@ -248,7 +249,7 @@ fi
248
249
 
249
250
  ### Node.js Version Check
250
251
 
251
- - **Requirement:** Node.js 20 or higher
252
+ - **Requirement:** Node.js >=22.13.0, read at runtime from the CLI's `engines.node` so this check cannot drift behind the floor. Checked against `process.version` — the interpreter running VAT — not against a spawned `node` from `PATH`, which differs under any version manager.
252
253
  - **Why:** VAT uses modern JavaScript features
253
254
  - **Fix:** Install Node.js from https://nodejs.org/ or use nvm
254
255
 
package/docs/index.md CHANGED
@@ -23,6 +23,8 @@ Markdown resource scanning, link validation, and frontmatter validation (run bef
23
23
  5. **Validates frontmatter against JSON Schemas** (per-collection)
24
24
  6. Reports broken links and validation errors to stderr
25
25
 
26
+ **Note:** External URLs are not validated (by design — avoids flaky network checks). Only internal file links and anchors are checked.
27
+
26
28
  **Per-collection frontmatter validation:**
27
29
 
28
30
  Define collections in `vibe-agent-toolkit.config.yaml` to validate frontmatter fields, types, and patterns using JSON Schemas. Collections support strict mode (no extra fields) or permissive mode (extra fields allowed).
@@ -92,7 +94,7 @@ Diagnose vat setup and environment health
92
94
 
93
95
  **What it does:**
94
96
 
95
- - Checks Node.js version (>=20 required)
97
+ - Checks Node.js version (>=22.13.0 required)
96
98
  - Checks Git installation and repository
97
99
  - Validates configuration file exists and is valid
98
100
  - Checks vat version and available updates
@@ -104,6 +106,7 @@ Diagnose vat setup and environment health
104
106
 
105
107
  - `0` - No check failed (a check that could not be determined is reported as ❓, not fatal)
106
108
  - `1` - One or more checks failed
109
+ - `2` - Doctor itself could not run (an internal failure; no verdict was produced)
107
110
 
108
111
  **Creates/modifies:** None (read-only diagnostics)
109
112
 
@@ -167,7 +170,7 @@ Execute agent locally for testing
167
170
  **Exit codes:**
168
171
 
169
172
  - `0` - Execution succeeded
170
- - `1` - Execution failed
173
+ - `2` - Execution failed (the agent could not run, or threw)
171
174
 
172
175
  **Creates/modifies:** Depends on agent behavior
173
176
 
@@ -196,9 +199,8 @@ Run a packaged skill's eval suite in a headless, context-isolated Claude session
196
199
  **Exit codes:**
197
200
 
198
201
  - `0` - Run completed, all expectations passed
199
- - `1` - Harness broke (internal error, stall, timeout)
200
- - `2` - Preflight failure (bad config, unresolvable required companion, auth guard)
201
- - `3` - Bootstrap failure
202
+ - `1` - Run completed and at least one eval failed
203
+ - `2` - The harness could not run; a `Reason: internal | preflight | bootstrap` line on stderr says why
202
204
  - `4` - Eval failure (run completed, expectations did not all pass)
203
205
 
204
206
  **Creates/modifies:** A harness directory (removed unless `--keep`)
@@ -235,7 +237,8 @@ Create vector embeddings for semantic search over documentation
235
237
  **Exit codes:**
236
238
 
237
239
  - `0` - Indexing succeeded
238
- - `1` - Indexing failed
240
+ - `1` - Indexing completed but some resources could not be indexed (the report names them)
241
+ - `2` - Indexing could not run (no provider, unreadable config)
239
242
 
240
243
  **Creates/modifies:**
241
244
 
@@ -266,7 +269,7 @@ Search indexed documentation semantically
266
269
  **Exit codes:**
267
270
 
268
271
  - `0` - Search succeeded
269
- - `1` - Search failed (no index, query error)
272
+ - `2` - Search could not run (no index, query error)
270
273
 
271
274
  **Creates/modifies:** None (read-only query)
272
275
 
@@ -286,9 +289,28 @@ vat rag search "agent deployment" --limit 5
286
289
  - `--help --verbose` - Show comprehensive help (this output)
287
290
  - `--cwd <dir>` - Change working directory before running any command
288
291
  - `--debug` - Enable debug logging
292
+ - `--no-cache` - Disable VAT's on-disk caches for this run, including in spawned child phases
293
+ (equivalent to `VAT_CACHE=0`; see [Environment Variables](#vat_cache)). Clear what is already
294
+ stored with `vat cache clear`.
289
295
 
290
296
  ## Environment Variables
291
297
 
298
+ ### VAT_CACHE
299
+ Set to `0` to disable VAT's on-disk caches for the run — the parse cache and the external-URL
300
+ validation caches, which share `<tmpdir>/.vat-cache/`:
301
+
302
+ ```bash
303
+ VAT_CACHE=0 vat validate
304
+ ```
305
+
306
+ The root `--no-cache` flag is the same switch: it sets this variable. The variable is what makes it
307
+ work, because `vat validate`, `vat verify` and `vat build` do their parsing in spawned child
308
+ processes, and only the environment crosses that boundary — a flag parsed in the parent would never
309
+ reach them.
310
+
311
+ Caching is a pure optimisation: a run with it off produces identical results, only slower. Use
312
+ `vat cache clear` to discard what is already stored.
313
+
292
314
  ### VAT_DEBUG
293
315
  Enable detailed wrapper diagnostics showing context detection and resolution:
294
316
 
@@ -407,7 +429,6 @@ its policy. The full matrix and rationale live in
407
429
  Place `vibe-agent-toolkit.config.yaml` at project root:
408
430
 
409
431
  ```yaml
410
- version: 1
411
432
  resources:
412
433
  include:
413
434
  - "docs/**/*.md"
@@ -419,9 +440,17 @@ resources:
419
440
 
420
441
  ## Exit Code Summary
421
442
 
422
- - `0` - Success (validation passed, scan completed, build succeeded)
423
- - `1` - Expected failures (validation errors, broken links, build failures)
424
- - `2` - System errors (invalid config, directory not found, missing dependencies)
443
+ One contract, every command:
444
+
445
+ - `0` - **OK.** The command ran and found nothing at error severity. Warnings and informational findings are in the document, not the exit code (a command that offers `--strict` promotes warnings).
446
+ - `1` - **Findings.** The command ran to completion and what it examined failed its gate: an error-severity finding, a failed eval, a broken link, a partial index.
447
+ - `2` - **Error.** The command could not do its job: a usage mistake (unknown flag or verb, a retired `--only`), a root path that does not exist or is not something the verb can act on, an unreadable config, a missing dependency, an internal failure (a crash anywhere in a command ends on `2`, never on Node's default `1`). Where a verb has more than one such cause it says which on stderr (`vat skill test run` prints `Reason: …`) — never in a fourth exit code. A path INSIDE a tree that the command cannot read is a finding, not an error: `vat audit` degrades it to `SCAN_PATH_UNREADABLE` and exits `0` or `1` on what it could read.
448
+
449
+ A CI wrapper reads `$?` the same way for every verb:
450
+
451
+ ```bash
452
+ case $? in 0) ;; 1) echo findings ;; *) echo broken; exit 1 ;; esac
453
+ ```
425
454
 
426
455
  ## Output Formats
427
456
 
@@ -456,6 +485,5 @@ vat rag search "markdown validation"
456
485
 
457
486
  ## More Information
458
487
 
459
- - **Agent guidance:** `docs/cli/CLAUDE.md` (strategic patterns for AI agents)
460
488
  - **Documentation:** https://github.com/jdutton/vibe-agent-toolkit
461
489
  - **Issues:** https://github.com/jdutton/vibe-agent-toolkit/issues
package/docs/mcp.md CHANGED
@@ -152,8 +152,8 @@ MCP agent packages must export collections via the `/mcp-collections` entrypoint
152
152
  ### Example: `src/mcp-collections.ts`
153
153
 
154
154
  ```typescript
155
- import type { Agent, OneShotAgentOutput } from '@vibe-agent-toolkit/agent-schema';
156
- import { createSuccess } from '@vibe-agent-toolkit/agent-schema';
155
+ import type { Agent, OneShotAgentOutput } from '@vibe-agent-toolkit/schema';
156
+ import { createSuccess } from '@vibe-agent-toolkit/schema';
157
157
 
158
158
  export interface MCPAgentRegistration {
159
159
  name: string;
package/docs/rag.md CHANGED
@@ -53,7 +53,8 @@ vat rag clear
53
53
 
54
54
  **Exit Codes:**
55
55
  - `0` - Indexing completed successfully
56
- - `2` - System error (config invalid, database error, etc.)
56
+ - `1` - Indexed with errors: the run finished, `status: partial`, and `errors` names each resource whose content is NOT in the index — one the provider failed to chunk or embed, or one the crawl enumerated but could not read (a permission-denied file is reported here, never silently dropped)
57
+ - `2` - System error (config invalid, database error, a `rag_documents` table whose columns an earlier build typed differently — the message names the columns and `vat rag clear` is the remedy, etc.)
57
58
 
58
59
  **Output:** YAML on stdout with indexing statistics
59
60
 
@@ -68,6 +69,7 @@ vat rag index docs/
68
69
  # status: success
69
70
  # resourcesIndexed: 12
70
71
  # resourcesSkipped: 0
72
+ # resourcesEmpty: 0 # frontmatter-only or blank files: counted, not stored
71
73
  # resourcesUpdated: 0
72
74
  # chunksCreated: 48
73
75
  # chunksDeleted: 0
@@ -277,7 +279,6 @@ rebuild the database from your markdown source files.
277
279
  RAG respects the same `vibe-agent-toolkit.config.yaml` patterns as other commands:
278
280
 
279
281
  ```yaml
280
- version: 1
281
282
  resources:
282
283
  include:
283
284
  - "docs/**/*.md"
package/docs/resources.md CHANGED
@@ -31,16 +31,23 @@ including link integrity checking and anchor validation.
31
31
  - `--debug` - Enable debug logging
32
32
  - `--verbose` - Add a `files:` list with per-file link/anchor counts and checksums
33
33
  - `--collection <id>` - Only report files in the named collection (config mode — no path argument)
34
+ - `--format <format>` - `yaml` (default) or `json`. The same document either way
34
35
 
35
36
  **Exit Codes:**
36
37
  - `0` - Always (scan is informational)
37
38
  - `2` - System error (file access, parsing error)
38
39
 
39
- **Output:** YAML on stdout, logs on stderr
40
+ **Output:** YAML on stdout (JSON with `--format json`), logs on stderr
40
41
 
41
42
  `root` is stated once and is the only absolute path in the document; every
42
43
  `path` beneath it is relative to it.
43
44
 
45
+ `lane` names which enumerator produced the population — `walk` (the default
46
+ crawl) or `projection` (`VAT_RESOURCES_CRAWL=projection`). Two scans of one tree
47
+ that report different populations are only interpretable if each says which lane
48
+ produced it, so the field is derived from the load that ran rather than read back
49
+ from the environment.
50
+
44
51
  **Example:**
45
52
  ```bash
46
53
  # Recursively scan all *.md files under docs/
@@ -107,7 +114,11 @@ for the loud-cwd fallback policy and the projectRoot discovery ladder.
107
114
 
108
115
  **Exit Codes:**
109
116
  - `0` - Validation passed
110
- - `1` - Validation errors found
117
+ - `1` - Validation errors found — including a run that scanned no file at all
118
+ (`filesScanned: 0`), which is reported as one non-overridable
119
+ `RESOURCE_CHECK_BROKEN` error rather than as a pass: a `--collection` that
120
+ matched nothing or a path with no markdown is not a verdict about anything.
121
+ The reason and the remedy are also printed on stderr as a warning
111
122
  - `2` - System error
112
123
 
113
124
  **Output:**
@@ -185,7 +196,6 @@ behind RFC-3986-compliant leading-`/` resolution.
185
196
  Place `vibe-agent-toolkit.config.yaml` at project root:
186
197
 
187
198
  ```yaml
188
- version: 1
189
199
  resources:
190
200
  include:
191
201
  - "docs/**/*.md"
@@ -161,21 +161,22 @@ The suite is never copied into anything the executor can reach. Each eval's decl
161
161
 
162
162
  ## Exit codes
163
163
 
164
- The harness deliberately separates "the evals failed" from "the harness broke", so
165
- CI can tolerate one and gate on the other.
164
+ The same three-way contract as every other `vat` command, so a CI consumer can
165
+ tolerate eval failures while failing closed on a harness that could not run.
166
166
 
167
- - `0` - Run completed, all expectations passed
168
- - `1` - Harness broke (internal error, stall, timeout, grader nonce failure)
169
- - `2` - Preflight failure (bad config, unresolvable required companion, auth guard, `build` hook failed)
170
- - `3` - Bootstrap failure
171
- - `4` - **Eval failure** — the run completed but expectations did not all pass
167
+ - `0` - Run completed, all expectations passed (or `--allow-eval-failure` suppressed a failing verdict)
168
+ - `1` - **Eval failure** — the run completed and produced a valid `grading.json`; expectations did not all pass
169
+ - `2` - The harness could not run. A `Reason: <reason>` line on stderr says why:
170
+ - `internal` — the harness broke (executor/grader crash, stall, timeout, grader nonce failure)
171
+ - `preflight` — the environment or inputs need fixing (bad config, unresolvable required companion, auth guard, missing security ack, `build` hook failed)
172
+ - `bootstrap` — `evals.json` was absent, so VAT wrote a starter template next to the skill source; fill it in and re-run
172
173
 
173
174
  ```bash
174
175
  vat skill test run my-skill --i-understand-this-runs-skill-code
175
176
  case $? in
176
177
  0) ;;
177
- 4) echo "evals failed (tolerated)" ;;
178
- *) exit 1 ;; # harness broke — fail the build
178
+ 1) echo "evals failed (tolerated)" ;;
179
+ *) exit 1 ;; # harness could not run — fail the build; read Reason: on stderr
179
180
  esac
180
181
  ```
181
182