@vibe-agent-toolkit/cli 0.1.41-rc.6 → 0.1.41-rc.8

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 (199) hide show
  1. package/README.md +4 -3
  2. package/dist/bin/vat +25 -2
  3. package/dist/bin/vat.js +25 -2
  4. package/dist/bin/vat.js.map +1 -1
  5. package/dist/bin.js +12 -1
  6. package/dist/bin.js.map +1 -1
  7. package/dist/commands/agent/list.d.ts +11 -0
  8. package/dist/commands/agent/list.d.ts.map +1 -1
  9. package/dist/commands/agent/list.js +30 -11
  10. package/dist/commands/agent/list.js.map +1 -1
  11. package/dist/commands/audit/hierarchical-output.d.ts +6 -2
  12. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
  13. package/dist/commands/audit/hierarchical-output.js +93 -50
  14. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  15. package/dist/commands/audit-settings.d.ts +35 -0
  16. package/dist/commands/audit-settings.d.ts.map +1 -1
  17. package/dist/commands/audit-settings.js +121 -51
  18. package/dist/commands/audit-settings.js.map +1 -1
  19. package/dist/commands/audit.d.ts +97 -2
  20. package/dist/commands/audit.d.ts.map +1 -1
  21. package/dist/commands/audit.js +505 -231
  22. package/dist/commands/audit.js.map +1 -1
  23. package/dist/commands/build.d.ts +14 -0
  24. package/dist/commands/build.d.ts.map +1 -1
  25. package/dist/commands/build.js +126 -32
  26. package/dist/commands/build.js.map +1 -1
  27. package/dist/commands/claude/marketplace/license-utils.d.ts +39 -2
  28. package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
  29. package/dist/commands/claude/marketplace/license-utils.js +114 -68
  30. package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
  31. package/dist/commands/claude/marketplace/publish.js +5 -4
  32. package/dist/commands/claude/marketplace/publish.js.map +1 -1
  33. package/dist/commands/claude/marketplace/validate.d.ts +97 -0
  34. package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
  35. package/dist/commands/claude/marketplace/validate.js +157 -49
  36. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  37. package/dist/commands/claude/org/skills.d.ts +11 -3
  38. package/dist/commands/claude/org/skills.d.ts.map +1 -1
  39. package/dist/commands/claude/org/skills.js +70 -20
  40. package/dist/commands/claude/org/skills.js.map +1 -1
  41. package/dist/commands/claude/org/stubs.d.ts +9 -1
  42. package/dist/commands/claude/org/stubs.d.ts.map +1 -1
  43. package/dist/commands/claude/org/stubs.js +11 -3
  44. package/dist/commands/claude/org/stubs.js.map +1 -1
  45. package/dist/commands/claude/plugin/build.d.ts +116 -0
  46. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  47. package/dist/commands/claude/plugin/build.js +173 -40
  48. package/dist/commands/claude/plugin/build.js.map +1 -1
  49. package/dist/commands/claude/plugin/marketplace-json.d.ts +36 -0
  50. package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -0
  51. package/dist/commands/claude/plugin/marketplace-json.js +34 -0
  52. package/dist/commands/claude/plugin/marketplace-json.js.map +1 -0
  53. package/dist/commands/claude/plugin/plugin-json-merge.d.ts +30 -1
  54. package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -1
  55. package/dist/commands/claude/plugin/plugin-json-merge.js +107 -14
  56. package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -1
  57. package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
  58. package/dist/commands/claude/plugin/tree-copy.js +0 -1
  59. package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
  60. package/dist/commands/corpus/report.d.ts +22 -4
  61. package/dist/commands/corpus/report.d.ts.map +1 -1
  62. package/dist/commands/corpus/report.js +1 -0
  63. package/dist/commands/corpus/report.js.map +1 -1
  64. package/dist/commands/corpus/runner.d.ts +16 -1
  65. package/dist/commands/corpus/runner.d.ts.map +1 -1
  66. package/dist/commands/corpus/runner.js +55 -48
  67. package/dist/commands/corpus/runner.js.map +1 -1
  68. package/dist/commands/doctor.d.ts +57 -8
  69. package/dist/commands/doctor.d.ts.map +1 -1
  70. package/dist/commands/doctor.js +142 -67
  71. package/dist/commands/doctor.js.map +1 -1
  72. package/dist/commands/inventory.d.ts +2 -0
  73. package/dist/commands/inventory.d.ts.map +1 -1
  74. package/dist/commands/inventory.js +45 -4
  75. package/dist/commands/inventory.js.map +1 -1
  76. package/dist/commands/phase-utils.d.ts +240 -11
  77. package/dist/commands/phase-utils.d.ts.map +1 -1
  78. package/dist/commands/phase-utils.js +352 -15
  79. package/dist/commands/phase-utils.js.map +1 -1
  80. package/dist/commands/rag/query-command.d.ts +40 -0
  81. package/dist/commands/rag/query-command.d.ts.map +1 -1
  82. package/dist/commands/rag/query-command.js +47 -20
  83. package/dist/commands/rag/query-command.js.map +1 -1
  84. package/dist/commands/resources/index.d.ts.map +1 -1
  85. package/dist/commands/resources/index.js +38 -13
  86. package/dist/commands/resources/index.js.map +1 -1
  87. package/dist/commands/resources/scan.d.ts +37 -0
  88. package/dist/commands/resources/scan.d.ts.map +1 -1
  89. package/dist/commands/resources/scan.js +47 -32
  90. package/dist/commands/resources/scan.js.map +1 -1
  91. package/dist/commands/resources/validate.d.ts +136 -1
  92. package/dist/commands/resources/validate.d.ts.map +1 -1
  93. package/dist/commands/resources/validate.js +121 -68
  94. package/dist/commands/resources/validate.js.map +1 -1
  95. package/dist/commands/skill/review.d.ts.map +1 -1
  96. package/dist/commands/skill/review.js +40 -23
  97. package/dist/commands/skill/review.js.map +1 -1
  98. package/dist/commands/skill/test/run.d.ts +1 -1
  99. package/dist/commands/skill/test/run.d.ts.map +1 -1
  100. package/dist/commands/skill/test/run.js +8 -6
  101. package/dist/commands/skill/test/run.js.map +1 -1
  102. package/dist/commands/skills/build.d.ts +140 -0
  103. package/dist/commands/skills/build.d.ts.map +1 -1
  104. package/dist/commands/skills/build.js +348 -94
  105. package/dist/commands/skills/build.js.map +1 -1
  106. package/dist/commands/skills/command-helpers.d.ts +6 -10
  107. package/dist/commands/skills/command-helpers.d.ts.map +1 -1
  108. package/dist/commands/skills/command-helpers.js +6 -22
  109. package/dist/commands/skills/command-helpers.js.map +1 -1
  110. package/dist/commands/skills/list.d.ts +18 -0
  111. package/dist/commands/skills/list.d.ts.map +1 -1
  112. package/dist/commands/skills/list.js +41 -15
  113. package/dist/commands/skills/list.js.map +1 -1
  114. package/dist/commands/skills/package.d.ts +17 -0
  115. package/dist/commands/skills/package.d.ts.map +1 -1
  116. package/dist/commands/skills/package.js +72 -43
  117. package/dist/commands/skills/package.js.map +1 -1
  118. package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
  119. package/dist/commands/skills/skill-discovery.js +9 -1
  120. package/dist/commands/skills/skill-discovery.js.map +1 -1
  121. package/dist/commands/skills/validate-command.d.ts.map +1 -1
  122. package/dist/commands/skills/validate-command.js +22 -6
  123. package/dist/commands/skills/validate-command.js.map +1 -1
  124. package/dist/commands/skills/validate.d.ts +79 -0
  125. package/dist/commands/skills/validate.d.ts.map +1 -1
  126. package/dist/commands/skills/validate.js +268 -79
  127. package/dist/commands/skills/validate.js.map +1 -1
  128. package/dist/commands/validate.d.ts +18 -0
  129. package/dist/commands/validate.d.ts.map +1 -1
  130. package/dist/commands/validate.js +79 -66
  131. package/dist/commands/validate.js.map +1 -1
  132. package/dist/commands/verify.d.ts +38 -1
  133. package/dist/commands/verify.d.ts.map +1 -1
  134. package/dist/commands/verify.js +247 -84
  135. package/dist/commands/verify.js.map +1 -1
  136. package/dist/index.d.ts +1 -1
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -1
  139. package/dist/index.js.map +1 -1
  140. package/dist/skill-resolution/index.d.ts +1 -1
  141. package/dist/skill-resolution/index.d.ts.map +1 -1
  142. package/dist/skill-resolution/index.js +1 -1
  143. package/dist/skill-resolution/index.js.map +1 -1
  144. package/dist/skill-resolution/packaging-config.d.ts +15 -2
  145. package/dist/skill-resolution/packaging-config.d.ts.map +1 -1
  146. package/dist/skill-resolution/packaging-config.js +39 -2
  147. package/dist/skill-resolution/packaging-config.js.map +1 -1
  148. package/dist/utils/command-error.d.ts +34 -1
  149. package/dist/utils/command-error.d.ts.map +1 -1
  150. package/dist/utils/command-error.js +32 -1
  151. package/dist/utils/command-error.js.map +1 -1
  152. package/dist/utils/config-loader.d.ts.map +1 -1
  153. package/dist/utils/config-loader.js +0 -2
  154. package/dist/utils/config-loader.js.map +1 -1
  155. package/dist/utils/help-loader.d.ts +6 -2
  156. package/dist/utils/help-loader.d.ts.map +1 -1
  157. package/dist/utils/help-loader.js +9 -16
  158. package/dist/utils/help-loader.js.map +1 -1
  159. package/dist/utils/issue-anchor.d.ts +26 -0
  160. package/dist/utils/issue-anchor.d.ts.map +1 -0
  161. package/dist/utils/issue-anchor.js +39 -0
  162. package/dist/utils/issue-anchor.js.map +1 -0
  163. package/dist/utils/issue-rendering.d.ts +149 -0
  164. package/dist/utils/issue-rendering.d.ts.map +1 -0
  165. package/dist/utils/issue-rendering.js +229 -0
  166. package/dist/utils/issue-rendering.js.map +1 -0
  167. package/dist/utils/output.d.ts +80 -9
  168. package/dist/utils/output.d.ts.map +1 -1
  169. package/dist/utils/output.js +138 -23
  170. package/dist/utils/output.js.map +1 -1
  171. package/dist/utils/project-root-policy.d.ts +2 -2
  172. package/dist/utils/project-root-policy.js +2 -2
  173. package/dist/utils/relativize-paths.d.ts +45 -0
  174. package/dist/utils/relativize-paths.d.ts.map +1 -0
  175. package/dist/utils/relativize-paths.js +67 -0
  176. package/dist/utils/relativize-paths.js.map +1 -0
  177. package/dist/utils/resource-loader.d.ts +21 -2
  178. package/dist/utils/resource-loader.d.ts.map +1 -1
  179. package/dist/utils/resource-loader.js +85 -11
  180. package/dist/utils/resource-loader.js.map +1 -1
  181. package/dist/utils/skill-packaging-config.d.ts +22 -1
  182. package/dist/utils/skill-packaging-config.d.ts.map +1 -1
  183. package/dist/utils/skill-packaging-config.js +26 -0
  184. package/dist/utils/skill-packaging-config.js.map +1 -1
  185. package/dist/utils/validate-help-files.d.ts +3 -2
  186. package/dist/utils/validate-help-files.d.ts.map +1 -1
  187. package/dist/utils/validate-help-files.js +48 -5
  188. package/dist/utils/validate-help-files.js.map +1 -1
  189. package/dist/utils/verdict-helpers.d.ts +14 -5
  190. package/dist/utils/verdict-helpers.d.ts.map +1 -1
  191. package/dist/utils/verdict-helpers.js +19 -16
  192. package/dist/utils/verdict-helpers.js.map +1 -1
  193. package/docs/audit.md +40 -14
  194. package/docs/doctor.md +46 -10
  195. package/docs/index.md +1 -1
  196. package/docs/rag.md +9 -4
  197. package/docs/resources.md +54 -22
  198. package/docs/skills.md +11 -7
  199. package/package.json +12 -12
package/docs/audit.md CHANGED
@@ -183,9 +183,9 @@ detection strategy doc, workstream B).
183
183
  status: success
184
184
  summary:
185
185
  filesScanned: 42
186
- success: 40
187
- warnings: 2
188
- errors: 0
186
+ filesPassed: 40
187
+ filesWithWarnings: 2
188
+ filesWithErrors: 0
189
189
  marketplaces: 2
190
190
  standalonePlugins: 3
191
191
  standaloneSkills: 5
@@ -313,31 +313,57 @@ Warnings indicate potential issues but don't prevent usage:
313
313
  Structured YAML report for programmatic parsing:
314
314
 
315
315
  ```yaml
316
+ root: /abs/path/to/scan/root # The ONE absolute path in the document
316
317
  status: success | warning | error
317
318
  summary:
318
319
  filesScanned: number
319
- success: number # Files with no issues
320
- warnings: number # Files with warnings only
321
- errors: number # Files with errors
322
- issues:
323
- errors: number # Total error count across all files
324
- warnings: number # Total warning count across all files
325
- info: number # Total info count across all files
320
+ filesPassed: number # Files with no ACTIONABLE issues (info-only counts as passed)
321
+ filesWithWarnings: number # Files whose worst actionable severity is warning
322
+ filesWithErrors: number # Files carrying at least one error
323
+ issueCounts: # FINDINGS, not files — same field name and meaning
324
+ errors: number # as the `issueCounts` on each entry below
325
+ warnings: number
326
+ info: number
326
327
  duration: "123ms"
327
328
  files:
328
- - path: /path/to/resource
329
+ - path: plugins/my-plugin # relative to `root`
329
330
  status: success | warning | error
330
331
  type: plugin | marketplace | registry | skill
331
- issues: []
332
+ issues:
333
+ - location: plugins/my-plugin/.claude-plugin/plugin.json # relative to `root`
332
334
  ```
333
335
 
336
+ #### One stated root, and everything relative to it
337
+
338
+ `root` is the invocation scan root and the only absolute path a report contains.
339
+ Every `path` and every issue `location` beneath it is forward-slashed and
340
+ relative to that root, so:
341
+
342
+ - `join(root, path)` and `join(root, location)` name real files — a consumer
343
+ never has to guess, or reimplement, the base a value was written against.
344
+ - A `location` identifies a file uniquely across the whole document, even when a
345
+ run spans several projects that share internal layout (two `plugins/plugin-a`
346
+ directories under different parents cannot collapse to one string).
347
+ - Nothing but `root` can leak the developer's or CI runner's home directory.
348
+
349
+ The scan root is an ANCHOR, not a validation-policy boundary. Per-skill
350
+ packaging rules still come from each skill's nearest-ancestor
351
+ `vibe-agent-toolkit.config.yaml` (configs do not compose); that discovery has no
352
+ say in how a path is spelled.
353
+
354
+ `--user` scans three sibling directories (`plugins/`, `skills/`,
355
+ `marketplaces/`), so its `root` is their shared Claude config dir
356
+ (`$CLAUDE_CONFIG_DIR`, else `~/.claude`). A URL audit omits `root`: the clone
357
+ lives in a random tempdir that nothing downstream can resolve, so the provenance
358
+ header states the base instead and paths are relative to the cloned repo.
359
+
334
360
  ### Standard Error (stderr)
335
361
 
336
- Human-readable error messages and logs:
362
+ Human-readable error messages and logs. Paths are root-relative here too:
337
363
 
338
364
  ```
339
365
  ERROR: Audit failed: 2 file(s) with errors
340
- ERROR: /path/to/skill.md:
366
+ ERROR: skills/my-skill/SKILL.md:
341
367
  ERROR: [SKILL_MISSING_NAME] name field is required in frontmatter
342
368
  ERROR: at: line 1
343
369
  ERROR: fix: Add 'name: skill-name' to frontmatter
package/docs/doctor.md CHANGED
@@ -21,13 +21,24 @@ providing actionable suggestions for any problems found.
21
21
  7. CLI build status (when running from VAT source tree)
22
22
 
23
23
  **Options:**
24
- - `--verbose` - Show all checks (including passing ones)
24
+ - `--verbose` - Show all checks (including passing and skipped ones)
25
+
26
+ **Check outcomes:**
27
+
28
+ | Icon | Outcome | Meaning |
29
+ |------|---------|---------|
30
+ | ✅ | `pass` | The check ran and the thing is fine |
31
+ | ❌ | `fail` | The check ran and the thing is wrong — the only outcome that affects the exit code |
32
+ | ❓ | `undetermined` | The check could not reach an answer (registry unreachable, file unreadable). **Nothing was verified** — this is not a pass |
33
+ | ⏭️ | `skipped` | The check does not apply here (e.g. a VAT-source-tree-only check outside the source tree) |
25
34
 
26
35
  **Exit Codes:**
27
- - `0` - All checks passed
36
+ - `0` - No check failed (an undetermined check is reported in the output, not fatal)
28
37
  - `1` - One or more checks failed
29
38
 
30
- **Output:** Human-friendly formatted text with emojis
39
+ **Output:** Human-friendly formatted text with emojis. The summary always prints the
40
+ full outcome distribution and, when the concise view hides checks, how many it hid —
41
+ so the counts can never contradict the list above them.
31
42
 
32
43
  ## Usage Examples
33
44
 
@@ -39,17 +50,34 @@ Check all diagnostic items and show only failures:
39
50
  vat doctor
40
51
  ```
41
52
 
42
- Output when all checks pass:
53
+ Output when all checks pass (the concise view prints no check blocks, and says so):
43
54
  ```
44
55
  🩺 vat doctor
45
56
 
46
57
  Running diagnostic checks...
47
58
 
48
- 📊 Results: 7/7 checks passed
59
+ 📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
60
+ 7 not shown (nothing to report) — re-run with --verbose to see every check.
49
61
 
50
62
  ✨ All checks passed! Your vat setup looks healthy.
51
63
  ```
52
64
 
65
+ Output when a check could not be determined (here: the npm registry was unreachable):
66
+ ```
67
+ 🩺 vat doctor
68
+
69
+ Running diagnostic checks...
70
+
71
+ ❓ vat version
72
+ Unable to check for updates: not found: npm
73
+
74
+ 📊 Results: 7 checks — 6 passed, 0 failed, 1 undetermined, 0 skipped
75
+ 6 not shown (nothing to report) — re-run with --verbose to see every check.
76
+
77
+ ❓ Nothing failed, but 1 check(s) could not be determined — that is not the same as healthy.
78
+ ```
79
+ Exit code is still `0` — nothing failed — but the run is *not* reported as healthy.
80
+
53
81
  ### Verbose Mode
54
82
 
55
83
  Show all checks including passing ones:
@@ -85,7 +113,7 @@ Running diagnostic checks...
85
113
  ✅ CLI build status
86
114
  Build is up to date (v0.1.0)
87
115
 
88
- 📊 Results: 7/7 checks passed
116
+ 📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
89
117
 
90
118
  ✨ All checks passed! Your vat setup looks healthy.
91
119
  ```
@@ -110,7 +138,8 @@ Output:
110
138
 
111
139
  Running diagnostic checks...
112
140
 
113
- 📊 Results: 7/7 checks passed
141
+ 📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
142
+ 7 not shown (nothing to report) — re-run with --verbose to see every check.
114
143
 
115
144
  ✨ All checks passed! Your vat setup looks healthy.
116
145
  ```
@@ -250,14 +279,20 @@ fi
250
279
  ### VAT Version Check
251
280
 
252
281
  - **Purpose:** Inform about available updates (advisory only)
253
- - **Always passes:** This check never fails
282
+ - **Never fails:** an available update is a `pass` with a suggestion
283
+ - **Undetermined:** if the npm registry cannot be reached, the outcome is
284
+ `undetermined` (❓), not `pass` — doctor did not verify that you are current
254
285
  - **Suggestion:** Shows upgrade command if update available
255
286
 
256
287
  ### CLI Build Status Check
257
288
 
258
289
  - **When:** Only runs when in VAT source tree
259
290
  - **Purpose:** Ensure CLI build matches source version (for VAT developers)
260
- - **Skipped:** When running installed VAT globally
291
+ - **Skipped (⏭️):** When running installed VAT globally, or when no project root
292
+ was detected — the check does not apply
293
+ - **Undetermined (❓):** When the version files exist but cannot be read or
294
+ parsed. Doctor cannot tell whether the build is stale, which is different from
295
+ the check not applying
261
296
  - **Fix:** Run `bun run build` in VAT source directory
262
297
 
263
298
  ## Requirements
@@ -278,4 +313,5 @@ for terminology.
278
313
  - Run `vat doctor` before reporting issues to verify environment
279
314
  - Use `--verbose` flag when debugging to see all check details
280
315
  - Doctor checks can be run from any subdirectory in your project
281
- - Exit code 0 means all checks passed (useful for scripts)
316
+ - Exit code 0 means no check *failed*; read the counts line to see whether any
317
+ check was undetermined (useful for scripts)
package/docs/index.md CHANGED
@@ -102,7 +102,7 @@ Diagnose vat setup and environment health
102
102
 
103
103
  **Exit codes:**
104
104
 
105
- - `0` - All checks passed
105
+ - `0` - No check failed (a check that could not be determined is reported as ❓, not fatal)
106
106
  - `1` - One or more checks failed
107
107
 
108
108
  **Creates/modifies:** None (read-only diagnostics)
package/docs/rag.md CHANGED
@@ -36,10 +36,15 @@ vat rag clear
36
36
  5. Supports incremental updates (skips files with unchanged content)
37
37
 
38
38
  **Path Argument Behavior:**
39
- - `[path]` specifies the **base directory** to start crawling from
40
- - Recursively finds all `*.md` files under that directory (default pattern: `**/*.md`)
41
- - When path is specified, **config patterns are ignored** (to avoid pattern conflicts)
42
- - To use config patterns, run without path argument: `vat rag index`
39
+ - `[path]` restricts the crawl to that subtree of the project
40
+ - Recursively finds all `*.md` / `*.html` files under that directory
41
+ - The path **replaces** the config's `resources.include` patterns
42
+ - The config's `resources.exclude` patterns **still apply**, so a path run never
43
+ indexes build output or vendored trees the project excluded
44
+ - If the path lies outside the project root the config's patterns cannot apply;
45
+ they are dropped and a warning is printed
46
+ - To index the project's full configured set, run without a path argument:
47
+ `vat rag index`
43
48
 
44
49
  **Options:**
45
50
  - `[path]` - Base directory to crawl (defaults to current directory)
package/docs/resources.md CHANGED
@@ -18,14 +18,19 @@ including link integrity checking and anchor validation.
18
18
  4. Exits 0 always (informational only)
19
19
 
20
20
  **Path Argument:**
21
- - `[path]` specifies the **base directory** to start crawling from
22
- - Recursively finds all `*.md` files under that directory (default pattern: `**/*.md`)
23
- - When path is specified, **config patterns are ignored** (to avoid pattern conflicts)
24
- - To use config patterns, run without path argument: `vat resources scan`
21
+ - `[path]` restricts the scan to that subtree of the project
22
+ - Recursively finds all `*.md` / `*.html` files under that directory
23
+ - The path **replaces** the config's `resources.include` patterns
24
+ - The config's `resources.exclude` patterns **still apply** — a path run never
25
+ scans build output, vendored trees, or test fixtures the project excluded
26
+ - To scan the project's full configured set, run without a path argument:
27
+ `vat resources scan`
25
28
 
26
29
  **Options:**
27
30
  - `[path]` - Base directory to crawl (defaults to current directory)
28
31
  - `--debug` - Enable debug logging
32
+ - `--verbose` - Add a `files:` list with per-file link/anchor counts and checksums
33
+ - `--collection <id>` - Only report files in the named collection (config mode — no path argument)
29
34
 
30
35
  **Exit Codes:**
31
36
  - `0` - Always (scan is informational)
@@ -33,23 +38,28 @@ including link integrity checking and anchor validation.
33
38
 
34
39
  **Output:** YAML on stdout, logs on stderr
35
40
 
41
+ `root` is stated once and is the only absolute path in the document; every
42
+ `path` beneath it is relative to it.
43
+
36
44
  **Example:**
37
45
  ```bash
38
46
  # Recursively scan all *.md files under docs/
39
- vat resources scan docs/
47
+ vat resources scan docs/ --verbose
40
48
  # Equivalent to: find all files matching docs/**/*.md pattern
41
49
 
42
50
  # Output:
43
51
  # ---
44
52
  # status: success
53
+ # root: /home/you/my-project
45
54
  # filesScanned: 12
46
55
  # linksFound: 47
47
56
  # anchorsFound: 23
57
+ # durationSecs: 0.234
48
58
  # files:
49
59
  # - path: docs/README.md
50
60
  # links: 5
51
61
  # anchors: 3
52
- # duration: 234ms
62
+ # checksum: 47dd7b50af765df240fe2514f029fc697c907fc37a3267e22060f2f9f611975c
53
63
  # ---
54
64
  ```
55
65
 
@@ -78,14 +88,21 @@ for the loud-cwd fallback policy and the projectRoot discovery ladder.
78
88
  4. Exits 0 if valid, 1 if errors found
79
89
 
80
90
  **Path Argument:**
81
- - `[path]` specifies the **base directory** to start crawling from
82
- - Recursively finds all `*.md` files under that directory (default pattern: `**/*.md`)
83
- - When path is specified, **config patterns are ignored** (to avoid pattern conflicts)
84
- - To use config patterns, run without path argument: `vat resources validate`
91
+ - `[path]` restricts the scan to that subtree of the project
92
+ - Recursively finds all `*.md` / `*.html` files under that directory
93
+ - The path **replaces** the config's `resources.include` patterns
94
+ - The config's `resources.exclude` patterns **still apply** — a path run never
95
+ scans build output, vendored trees, or test fixtures the project excluded
96
+ - To scan the project's full configured set, run without a path argument:
97
+ `vat resources validate`
85
98
 
86
99
  **Options:**
87
100
  - `[path]` - Base directory to crawl (defaults to current directory)
88
101
  - `--debug` - Enable debug logging
102
+ - `-v, --verbose` - Show all scanned resources, including those without issues. By
103
+ default `issues` carries one counts-only row per file with findings
104
+ (`{file, errors?, warnings?, info?, codes}`); `--verbose` replaces each row with
105
+ its per-issue detail. Every other output field is identical in both modes.
89
106
  - `--no-check-frontmatter-links` - Skip frontmatter URI-reference link validation across all collections (default: enabled)
90
107
 
91
108
  **Exit Codes:**
@@ -108,8 +125,7 @@ vat resources validate docs/
108
125
  # status: success
109
126
  # filesScanned: 12
110
127
  # linksChecked: 47
111
- # anchorsChecked: 23
112
- # duration: 456ms
128
+ # durationSecs: 0.456
113
129
  # ---
114
130
  ```
115
131
 
@@ -117,21 +133,26 @@ vat resources validate docs/
117
133
  ```bash
118
134
  vat resources validate docs/
119
135
 
120
- # stderr:
121
- # docs/README.md:15:25: Link target not found: ./missing.md
122
- # docs/guide.md:42:10: Broken anchor: #non-existent-section
136
+ # stderr: (file:line:column: severity: message — only `error` fails the run)
137
+ # docs/README.md:15:25: error: Link target not found: ./missing.md
138
+ # docs/guide.md:42:10: error: Broken anchor: #non-existent-section
123
139
 
124
140
  # stdout:
125
141
  # ---
126
- # status: failed
142
+ # status: error
127
143
  # errorsFound: 2
128
- # errors:
144
+ # filesWithErrors: 2
145
+ # issueCounts: { errors: 2, warnings: 0, info: 0 }
146
+ # issueSummary: { LINK_BROKEN_FILE: 1, LINK_BROKEN_ANCHOR: 1 }
147
+ # issues:
129
148
  # - file: docs/README.md
130
- # line: 15
131
- # column: 25
132
- # type: broken-link
133
- # message: Link target not found: ./missing.md
134
- # duration: 456ms
149
+ # issues:
150
+ # - line: 15
151
+ # column: 25
152
+ # code: LINK_BROKEN_FILE
153
+ # severity: error
154
+ # message: Link target not found: ./missing.md
155
+ # durationSecs: 0.456
135
156
  # ---
136
157
  ```
137
158
 
@@ -182,6 +203,17 @@ resources:
182
203
  FRONTMATTER_SCHEMA_ERROR: error
183
204
  ```
184
205
 
206
+ **Dot-directories are scanned.** `**` traverses path segments beginning with a
207
+ dot, so the default `**/*.md` reaches `.claude/`, `.github/` and the like — as do
208
+ your own patterns. Visibility is decided by git and by `exclude`, never by a
209
+ leading dot. To keep a dotted tree out of the scan, exclude it by name:
210
+
211
+ ```yaml
212
+ resources:
213
+ exclude:
214
+ - ".claude/worktrees/**"
215
+ ```
216
+
185
217
  ## Integration with vibe-validate
186
218
 
187
219
  The test-format error output (stderr) integrates seamlessly with vibe-validate:
package/docs/skills.md CHANGED
@@ -22,9 +22,9 @@ skills:
22
22
  LINK_TO_NAVIGATION_FILE: ignore # this skill links to READMEs on purpose
23
23
  ALLOW_EXPIRED: error # zero-tolerance expiry
24
24
  allow:
25
- PACKAGED_UNREFERENCED_FILE:
25
+ LINK_TO_GITIGNORED_FILE:
26
26
  - paths: ["templates/runtime.json"]
27
- reason: "consumed programmatically at runtime"
27
+ reason: "generated at install time, deliberately untracked"
28
28
  expires: "2026-09-30"
29
29
  SKILL_LENGTH_EXCEEDS_RECOMMENDED:
30
30
  - reason: "whole-skill concern; paths defaults to ['**/*']"
@@ -362,11 +362,14 @@ to override (single-skill sources only).
362
362
  | `windsurf` | `~/.codeium/windsurf/skills/` | `.windsurf/skills/` |
363
363
  | `agents` | `~/.agents/skills/` | `.agents/skills/` |
364
364
 
365
- These paths were last reviewed against vendor conventions on 2026-04-08 and are
366
- not verified at build or test time — the tests assert the table's shape, never
367
- that a path is where a platform actually looks. If a vendor moves its convention,
368
- installs land somewhere unread and every VAT check still passes. Re-check the
369
- vendor's documentation before relying on a non-`claude` target.
365
+ These paths were last reviewed against each platform's own published docs on
366
+ 2026-07-30 (all fourteen unchanged) and are not verified at build or test time.
367
+ The tests derive their expectations from the table and assert invariants of it —
368
+ every target present, both scopes relative and forward-slash only, and that the
369
+ resolver composes base + relative path. No test can check that a path is where a
370
+ platform actually looks. If a vendor moves its convention, installs land
371
+ somewhere unread and every VAT check still passes. Re-check the vendor's
372
+ documentation before relying on a non-`claude` target.
370
373
 
371
374
  **Visibility:** VAT's own inspection commands are Claude-scoped — `vat skills
372
375
  list --user` and `vat audit --user` read `~/.claude` only. A skill installed to
@@ -495,6 +498,7 @@ only when the `SKILL.md` declares none.
495
498
  **Output Format:**
496
499
  ```yaml
497
500
  status: success
501
+ root: /abs/path/to/project
498
502
  context: project | user
499
503
  skillsFound: 3
500
504
  skills:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/cli",
3
- "version": "0.1.41-rc.6",
3
+ "version": "0.1.41-rc.8",
4
4
  "description": "Command-line interface for vibe-agent-toolkit",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,16 +41,16 @@
41
41
  "//dependencies-note": "DO NOT add example agent packages or adopter packages here. Adopter packages (like vat-development-agents) depend on the CLI binary at build time — declaring them as deps creates a circular build dependency. They are built in a second turbo pass via package#task overrides in turbo.json.",
42
42
  "dependencies": {
43
43
  "@anthropic-ai/sdk": "^0.71.2",
44
- "@vibe-agent-toolkit/agent-config": "0.1.41-rc.6",
45
- "@vibe-agent-toolkit/agent-schema": "0.1.41-rc.6",
46
- "@vibe-agent-toolkit/agent-skills": "0.1.41-rc.6",
47
- "@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.6",
48
- "@vibe-agent-toolkit/discovery": "0.1.41-rc.6",
49
- "@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.6",
50
- "@vibe-agent-toolkit/rag": "0.1.41-rc.6",
51
- "@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.6",
52
- "@vibe-agent-toolkit/resources": "0.1.41-rc.6",
53
- "@vibe-agent-toolkit/utils": "0.1.41-rc.6",
44
+ "@vibe-agent-toolkit/agent-config": "0.1.41-rc.8",
45
+ "@vibe-agent-toolkit/agent-schema": "0.1.41-rc.8",
46
+ "@vibe-agent-toolkit/agent-skills": "0.1.41-rc.8",
47
+ "@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.8",
48
+ "@vibe-agent-toolkit/discovery": "0.1.41-rc.8",
49
+ "@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.8",
50
+ "@vibe-agent-toolkit/rag": "0.1.41-rc.8",
51
+ "@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.8",
52
+ "@vibe-agent-toolkit/resources": "0.1.41-rc.8",
53
+ "@vibe-agent-toolkit/utils": "0.1.41-rc.8",
54
54
  "adm-zip": "^0.6.0",
55
55
  "commander": "^12.1.0",
56
56
  "picomatch": "^4.0.3",
@@ -65,7 +65,7 @@
65
65
  "@types/picomatch": "^4.0.2",
66
66
  "@types/semver": "^7.7.1",
67
67
  "@types/tar": "^6.1.13",
68
- "@vibe-agent-toolkit/dev-tools": "0.1.41-rc.6",
68
+ "@vibe-agent-toolkit/dev-tools": "0.1.41-rc.8",
69
69
  "rimraf": "^6.0.1",
70
70
  "typescript": "^5.7.3",
71
71
  "vitest": "^3.2.4"