@vibe-agent-toolkit/cli 0.1.0-rc.7

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 (162) hide show
  1. package/README.md +125 -0
  2. package/dist/bin/vat.d.ts +7 -0
  3. package/dist/bin/vat.d.ts.map +1 -0
  4. package/dist/bin/vat.js +52 -0
  5. package/dist/bin/vat.js.map +1 -0
  6. package/dist/bin.d.ts +7 -0
  7. package/dist/bin.d.ts.map +1 -0
  8. package/dist/bin.js +103 -0
  9. package/dist/bin.js.map +1 -0
  10. package/dist/commands/agent/audit.d.ts +9 -0
  11. package/dist/commands/agent/audit.d.ts.map +1 -0
  12. package/dist/commands/agent/audit.js +139 -0
  13. package/dist/commands/agent/audit.js.map +1 -0
  14. package/dist/commands/agent/build.d.ts +13 -0
  15. package/dist/commands/agent/build.d.ts.map +1 -0
  16. package/dist/commands/agent/build.js +52 -0
  17. package/dist/commands/agent/build.js.map +1 -0
  18. package/dist/commands/agent/help.d.ts +5 -0
  19. package/dist/commands/agent/help.d.ts.map +1 -0
  20. package/dist/commands/agent/help.js +10 -0
  21. package/dist/commands/agent/help.js.map +1 -0
  22. package/dist/commands/agent/import.d.ts +10 -0
  23. package/dist/commands/agent/import.d.ts.map +1 -0
  24. package/dist/commands/agent/import.js +50 -0
  25. package/dist/commands/agent/import.js.map +1 -0
  26. package/dist/commands/agent/index.d.ts +7 -0
  27. package/dist/commands/agent/index.d.ts.map +1 -0
  28. package/dist/commands/agent/index.js +293 -0
  29. package/dist/commands/agent/index.js.map +1 -0
  30. package/dist/commands/agent/install.d.ts +15 -0
  31. package/dist/commands/agent/install.d.ts.map +1 -0
  32. package/dist/commands/agent/install.js +107 -0
  33. package/dist/commands/agent/install.js.map +1 -0
  34. package/dist/commands/agent/installed.d.ts +13 -0
  35. package/dist/commands/agent/installed.d.ts.map +1 -0
  36. package/dist/commands/agent/installed.js +106 -0
  37. package/dist/commands/agent/installed.js.map +1 -0
  38. package/dist/commands/agent/list.d.ts +8 -0
  39. package/dist/commands/agent/list.d.ts.map +1 -0
  40. package/dist/commands/agent/list.js +41 -0
  41. package/dist/commands/agent/list.js.map +1 -0
  42. package/dist/commands/agent/run.d.ts +17 -0
  43. package/dist/commands/agent/run.d.ts.map +1 -0
  44. package/dist/commands/agent/run.js +44 -0
  45. package/dist/commands/agent/run.js.map +1 -0
  46. package/dist/commands/agent/uninstall.d.ts +13 -0
  47. package/dist/commands/agent/uninstall.d.ts.map +1 -0
  48. package/dist/commands/agent/uninstall.js +48 -0
  49. package/dist/commands/agent/uninstall.js.map +1 -0
  50. package/dist/commands/agent/validate.d.ts +8 -0
  51. package/dist/commands/agent/validate.d.ts.map +1 -0
  52. package/dist/commands/agent/validate.js +51 -0
  53. package/dist/commands/agent/validate.js.map +1 -0
  54. package/dist/commands/rag/clear-command.d.ts +10 -0
  55. package/dist/commands/rag/clear-command.d.ts.map +1 -0
  56. package/dist/commands/rag/clear-command.js +22 -0
  57. package/dist/commands/rag/clear-command.js.map +1 -0
  58. package/dist/commands/rag/command-helpers.d.ts +27 -0
  59. package/dist/commands/rag/command-helpers.d.ts.map +1 -0
  60. package/dist/commands/rag/command-helpers.js +58 -0
  61. package/dist/commands/rag/command-helpers.js.map +1 -0
  62. package/dist/commands/rag/help.d.ts +5 -0
  63. package/dist/commands/rag/help.d.ts.map +1 -0
  64. package/dist/commands/rag/help.js +10 -0
  65. package/dist/commands/rag/help.js.map +1 -0
  66. package/dist/commands/rag/index-command.d.ts +10 -0
  67. package/dist/commands/rag/index-command.d.ts.map +1 -0
  68. package/dist/commands/rag/index-command.js +49 -0
  69. package/dist/commands/rag/index-command.js.map +1 -0
  70. package/dist/commands/rag/index.d.ts +7 -0
  71. package/dist/commands/rag/index.d.ts.map +1 -0
  72. package/dist/commands/rag/index.js +168 -0
  73. package/dist/commands/rag/index.js.map +1 -0
  74. package/dist/commands/rag/query-command.d.ts +11 -0
  75. package/dist/commands/rag/query-command.d.ts.map +1 -0
  76. package/dist/commands/rag/query-command.js +54 -0
  77. package/dist/commands/rag/query-command.js.map +1 -0
  78. package/dist/commands/rag/stats-command.d.ts +10 -0
  79. package/dist/commands/rag/stats-command.d.ts.map +1 -0
  80. package/dist/commands/rag/stats-command.js +25 -0
  81. package/dist/commands/rag/stats-command.js.map +1 -0
  82. package/dist/commands/resources/command-helpers.d.ts +5 -0
  83. package/dist/commands/resources/command-helpers.d.ts.map +1 -0
  84. package/dist/commands/resources/command-helpers.js +6 -0
  85. package/dist/commands/resources/command-helpers.js.map +1 -0
  86. package/dist/commands/resources/help.d.ts +5 -0
  87. package/dist/commands/resources/help.d.ts.map +1 -0
  88. package/dist/commands/resources/help.js +10 -0
  89. package/dist/commands/resources/help.js.map +1 -0
  90. package/dist/commands/resources/index.d.ts +7 -0
  91. package/dist/commands/resources/index.d.ts.map +1 -0
  92. package/dist/commands/resources/index.js +64 -0
  93. package/dist/commands/resources/index.js.map +1 -0
  94. package/dist/commands/resources/scan.d.ts +9 -0
  95. package/dist/commands/resources/scan.d.ts.map +1 -0
  96. package/dist/commands/resources/scan.js +47 -0
  97. package/dist/commands/resources/scan.js.map +1 -0
  98. package/dist/commands/resources/validate.d.ts +9 -0
  99. package/dist/commands/resources/validate.d.ts.map +1 -0
  100. package/dist/commands/resources/validate.js +61 -0
  101. package/dist/commands/resources/validate.js.map +1 -0
  102. package/dist/index.d.ts +14 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +15 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/schemas/config.d.ts +1034 -0
  107. package/dist/schemas/config.d.ts.map +1 -0
  108. package/dist/schemas/config.js +135 -0
  109. package/dist/schemas/config.js.map +1 -0
  110. package/dist/utils/agent-discovery.d.ts +32 -0
  111. package/dist/utils/agent-discovery.d.ts.map +1 -0
  112. package/dist/utils/agent-discovery.js +108 -0
  113. package/dist/utils/agent-discovery.js.map +1 -0
  114. package/dist/utils/agent-runner.d.ts +22 -0
  115. package/dist/utils/agent-runner.d.ts.map +1 -0
  116. package/dist/utils/agent-runner.js +120 -0
  117. package/dist/utils/agent-runner.js.map +1 -0
  118. package/dist/utils/command-error.d.ts +19 -0
  119. package/dist/utils/command-error.d.ts.map +1 -0
  120. package/dist/utils/command-error.js +36 -0
  121. package/dist/utils/command-error.js.map +1 -0
  122. package/dist/utils/config-loader.d.ts +12 -0
  123. package/dist/utils/config-loader.d.ts.map +1 -0
  124. package/dist/utils/config-loader.js +39 -0
  125. package/dist/utils/config-loader.js.map +1 -0
  126. package/dist/utils/help-loader.d.ts +12 -0
  127. package/dist/utils/help-loader.d.ts.map +1 -0
  128. package/dist/utils/help-loader.js +39 -0
  129. package/dist/utils/help-loader.js.map +1 -0
  130. package/dist/utils/logger.d.ts +14 -0
  131. package/dist/utils/logger.d.ts.map +1 -0
  132. package/dist/utils/logger.js +21 -0
  133. package/dist/utils/logger.js.map +1 -0
  134. package/dist/utils/output.d.ts +20 -0
  135. package/dist/utils/output.d.ts.map +1 -0
  136. package/dist/utils/output.js +40 -0
  137. package/dist/utils/output.js.map +1 -0
  138. package/dist/utils/project-root.d.ts +11 -0
  139. package/dist/utils/project-root.d.ts.map +1 -0
  140. package/dist/utils/project-root.js +35 -0
  141. package/dist/utils/project-root.js.map +1 -0
  142. package/dist/utils/resource-loader.d.ts +30 -0
  143. package/dist/utils/resource-loader.d.ts.map +1 -0
  144. package/dist/utils/resource-loader.js +63 -0
  145. package/dist/utils/resource-loader.js.map +1 -0
  146. package/dist/utils/scope-locations.d.ts +17 -0
  147. package/dist/utils/scope-locations.d.ts.map +1 -0
  148. package/dist/utils/scope-locations.js +40 -0
  149. package/dist/utils/scope-locations.js.map +1 -0
  150. package/dist/utils/validate-help-files.d.ts +14 -0
  151. package/dist/utils/validate-help-files.d.ts.map +1 -0
  152. package/dist/utils/validate-help-files.js +61 -0
  153. package/dist/utils/validate-help-files.js.map +1 -0
  154. package/dist/version.d.ts +13 -0
  155. package/dist/version.d.ts.map +1 -0
  156. package/dist/version.js +27 -0
  157. package/dist/version.js.map +1 -0
  158. package/docs/agent.md +100 -0
  159. package/docs/index.md +65 -0
  160. package/docs/rag.md +449 -0
  161. package/docs/resources.md +158 -0
  162. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/agent/import.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQxD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,OAA6B;IAE7B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,eAAe;QACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,2BAA2B,iBAAiB,EAAE,CAAC,CAAC;QAE7D,gCAAgC;QAChC,MAAM,aAAa,GAA6C;YAC9D,SAAS,EAAE,iBAAiB;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;SAC9B,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,gBAAgB;YAChB,MAAM,MAAM,GAAG;gBACb,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI;aACxC,CAAC;YAEF,eAAe,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI;SACxC,CAAC;QAEF,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Agent command group
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createAgentCommand(): Command;
6
+ export { showAgentVerboseHelp } from './help.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,kBAAkB,IAAI,OAAO,CAsT5C;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Agent command group
3
+ */
4
+ import { Command } from 'commander';
5
+ import { auditCommand } from './audit.js';
6
+ import { buildCommand } from './build.js';
7
+ import { importCommand } from './import.js';
8
+ import { installAgent } from './install.js';
9
+ import { installedCommand } from './installed.js';
10
+ import { listCommand } from './list.js';
11
+ import { runCommand } from './run.js';
12
+ import { uninstallAgent } from './uninstall.js';
13
+ import { validateCommand } from './validate.js';
14
+ const DEBUG_OPTION_DESC = 'Enable debug logging';
15
+ const SCOPE_OPTION = '--scope <scope>';
16
+ const SCOPE_OPTION_DESC = 'Installation scope (user, project)';
17
+ const SCOPE_DEFAULT = 'user';
18
+ const RUNTIME_OPTION = '--runtime <name>';
19
+ const RUNTIME_OPTION_DESC = 'Target runtime';
20
+ const RUNTIME_DEFAULT = 'claude-skill';
21
+ const DEV_MODE_DESC = 'Development mode (symlink instead of copy)';
22
+ export function createAgentCommand() {
23
+ const agent = new Command('agent');
24
+ agent
25
+ .description('Manage and execute AI agents')
26
+ .option('--verbose', 'Show verbose help')
27
+ .helpCommand(false)
28
+ .addHelpText('after', `
29
+ Description:
30
+ Define AI agents using Kubernetes-style YAML manifests with LLM
31
+ configuration, tools, prompts, and resources.
32
+
33
+ Example:
34
+ $ vat agent list # List discovered agents
35
+ $ vat agent validate agent-generator # Validate by name
36
+ $ vat agent build agent-generator # Build as Claude Skill
37
+ $ vat agent run agent-generator "Create a PR review agent" # Execute agent
38
+
39
+ Configuration:
40
+ Create agent.yaml in your agent directory. See --help --verbose for details.
41
+ `);
42
+ agent
43
+ .command('list')
44
+ .description('List all discovered agents')
45
+ .option('--debug', DEBUG_OPTION_DESC)
46
+ .action(listCommand)
47
+ .addHelpText('after', `
48
+ Description:
49
+ Discovers agents in common locations and lists them with their metadata.
50
+
51
+ Search paths:
52
+ - packages/vat-development-agents/agents/
53
+ - agents/
54
+ - . (current directory)
55
+
56
+ Example:
57
+ $ vat agent list # List all agents
58
+ $ vat agent list --debug # Show discovery details
59
+ `);
60
+ agent
61
+ .command('build <pathOrName>')
62
+ .description('Build agent for deployment target')
63
+ .option('--target <type>', 'Build target (skill, langchain, etc.)', 'skill')
64
+ .option('--output <path>', 'Output directory (default: dist/vat-bundles/<target>/<agent>)')
65
+ .option('--debug', DEBUG_OPTION_DESC)
66
+ .action(buildCommand)
67
+ .addHelpText('after', `
68
+ Description:
69
+ Packages an agent for a specific deployment target. Converts agent manifest,
70
+ prompts, and resources into target-specific format.
71
+
72
+ Argument: agent name OR path to agent directory/manifest file
73
+
74
+ Targets:
75
+ - skill: Claude Skills (for Claude Desktop/Code)
76
+ - More targets coming soon (langchain, etc.)
77
+
78
+ Output:
79
+ Default location: dist/vat-bundles/<target>/<agent-name>/
80
+
81
+ Exit Codes:
82
+ 0 - Success | 1 - Build error | 2 - System error
83
+
84
+ Examples:
85
+ $ vat agent build agent-generator # Build as Claude Skill
86
+ $ vat agent build agent-generator --target skill # Explicit target
87
+ $ vat agent build ./my-agent --output ./my-skill # Custom output path
88
+ `);
89
+ agent
90
+ .command('run <pathOrName> <userInput>')
91
+ .description('Execute an agent with user input')
92
+ .option('--debug', DEBUG_OPTION_DESC)
93
+ .action(runCommand)
94
+ .addHelpText('after', `
95
+ Description:
96
+ Executes an agent by loading its manifest, prompts, and calling the
97
+ configured LLM provider with the user input. Response is output to stdout.
98
+
99
+ Argument: agent name OR path to agent directory/manifest file
100
+ User input: The input text/query for the agent
101
+
102
+ Exit Codes:
103
+ 0 - Success | 1 - Execution error | 2 - System error
104
+
105
+ Examples:
106
+ $ vat agent run agent-generator "Create a code review agent"
107
+ $ vat agent run ./my-agent "analyze this code"
108
+ $ vat agent run my-agent "help me with..." --debug
109
+
110
+ Requirements:
111
+ - ANTHROPIC_API_KEY environment variable (for Anthropic-based agents)
112
+ - Valid agent manifest with prompts configured
113
+ `);
114
+ agent
115
+ .command('validate <pathOrName>')
116
+ .description('Validate agent manifest and prerequisites')
117
+ .option('--debug', DEBUG_OPTION_DESC)
118
+ .action(validateCommand)
119
+ .addHelpText('after', `
120
+ Description:
121
+ Validates agent manifest schema (using @vibe-agent-toolkit/agent-schema),
122
+ LLM configuration, tool definitions, and resource availability. Outputs
123
+ YAML validation report to stdout, errors to stderr.
124
+
125
+ Argument: agent name OR path to agent directory/manifest file
126
+
127
+ Validation Checks:
128
+ - Manifest schema (apiVersion, kind, metadata, spec)
129
+ - LLM provider and model configuration
130
+ - Tool configurations (RAG databases)
131
+ - Resource files (prompts, docs, templates)
132
+ - Prompt references ($ref paths)
133
+
134
+ Exit Codes:
135
+ 0 - Valid | 1 - Validation errors | 2 - System error
136
+
137
+ Examples:
138
+ $ vat agent validate agent-generator # Validate by name
139
+ $ vat agent validate ./my-agent # Validate by path
140
+ $ vat agent validate ./agent.yaml # Validate specific file
141
+ `);
142
+ agent
143
+ .command('audit [path]')
144
+ .description('Audit Claude Skills for quality and compatibility')
145
+ .option('-r, --recursive', 'Scan directories recursively for SKILL.md files')
146
+ .option('--debug', DEBUG_OPTION_DESC)
147
+ .action(auditCommand)
148
+ .addHelpText('after', `
149
+ Description:
150
+ Audits Claude Skills (SKILL.md files) for quality, correctness, and
151
+ console compatibility. Validates frontmatter, links, naming conventions,
152
+ and warns about console-incompatible features. Outputs YAML report to
153
+ stdout, errors/warnings to stderr.
154
+
155
+ Path can be: directory, single SKILL.md file, or VAT agent directory
156
+ Default: current directory
157
+
158
+ Validation Checks:
159
+ Errors (must fix):
160
+ - Missing or invalid frontmatter (name, description)
161
+ - Broken links to other files
162
+ - Reserved words in names (anthropic, claude)
163
+ - XML tags in frontmatter fields
164
+ - Windows-style backslashes in paths
165
+
166
+ Warnings (should fix):
167
+ - Skill exceeds recommended length (>5000 lines)
168
+ - References console-incompatible tools (Write, Edit, Bash)
169
+
170
+ Exit Codes:
171
+ 0 - Success | 1 - Errors found | 2 - System error
172
+
173
+ Examples:
174
+ $ vat agent audit # Audit current directory
175
+ $ vat agent audit ./my-skill/SKILL.md # Audit single skill
176
+ $ vat agent audit ./skills --recursive # Audit all skills recursively
177
+ `);
178
+ agent
179
+ .command('import <skillPath>')
180
+ .description('Import Claude Skill (SKILL.md) to VAT agent format (agent.yaml)')
181
+ .option('-o, --output <path>', 'Output path for agent.yaml (default: same directory as SKILL.md)')
182
+ .option('-f, --force', 'Overwrite existing agent.yaml')
183
+ .option('--debug', DEBUG_OPTION_DESC)
184
+ .action(importCommand)
185
+ .addHelpText('after', `
186
+ Description:
187
+ Converts a third-party Claude Skill (SKILL.md) to VAT agent format
188
+ (agent.yaml). Validates the skill frontmatter and creates a proper VAT
189
+ agent manifest with the claude-skills runtime.
190
+
191
+ Use this to import existing Claude Skills into your VAT project for
192
+ further customization or to use with VAT's build and deployment tools.
193
+
194
+ Conversion:
195
+ - Extracts name, description, license from SKILL.md frontmatter
196
+ - Creates agent.yaml with runtime: claude-skills
197
+ - Preserves version from metadata.version or defaults to 0.1.0
198
+ - Validates frontmatter before conversion
199
+
200
+ Exit Codes:
201
+ 0 - Success | 1 - Validation/conversion error | 2 - System error
202
+
203
+ Examples:
204
+ $ vat agent import ./my-skill/SKILL.md # Import to same directory
205
+ $ vat agent import ./SKILL.md -o ./agent.yaml # Custom output path
206
+ $ vat agent import ./SKILL.md --force # Overwrite existing
207
+ `);
208
+ agent
209
+ .command('install <agentName>')
210
+ .description('Install agent to Claude Skills directory')
211
+ .option(SCOPE_OPTION, SCOPE_OPTION_DESC, SCOPE_DEFAULT)
212
+ .option('--dev', DEV_MODE_DESC)
213
+ .option('--force', 'Overwrite existing installation')
214
+ .option(RUNTIME_OPTION, RUNTIME_OPTION_DESC, RUNTIME_DEFAULT)
215
+ .option('--debug', DEBUG_OPTION_DESC)
216
+ .action(installAgent)
217
+ .addHelpText('after', `
218
+ Description:
219
+ Installs a built agent skill to Claude Skills directory. By default,
220
+ copies to user scope (~/.claude/skills/). Use --dev for symlink mode
221
+ (rapid development iteration).
222
+
223
+ Scopes:
224
+ - user: ~/.claude/skills/ (default, personal skills)
225
+ - project: ./.claude/skills/ (project-local skills)
226
+
227
+ Exit Codes:
228
+ 0 - Success | 1 - Installation error | 2 - System error
229
+
230
+ Examples:
231
+ $ vat agent install agent-generator # Install to user scope
232
+ $ vat agent install agent-generator --scope project # Install to project
233
+ $ vat agent install agent-generator --dev # Symlink for dev mode
234
+ $ vat agent install agent-generator --force # Overwrite existing
235
+
236
+ Note: --dev (symlink) not supported on Windows. Use WSL for development.
237
+ `);
238
+ agent
239
+ .command('uninstall <agentName>')
240
+ .description('Uninstall agent from Claude Skills directory')
241
+ .option(SCOPE_OPTION, SCOPE_OPTION_DESC, SCOPE_DEFAULT)
242
+ .option(RUNTIME_OPTION, RUNTIME_OPTION_DESC, RUNTIME_DEFAULT)
243
+ .option('--debug', DEBUG_OPTION_DESC)
244
+ .action(uninstallAgent)
245
+ .addHelpText('after', `
246
+ Description:
247
+ Removes an installed agent skill from Claude Skills directory.
248
+ Handles both copied installations and symlinks.
249
+
250
+ Scopes:
251
+ - user: ~/.claude/skills/ (default)
252
+ - project: ./.claude/skills/
253
+
254
+ Exit Codes:
255
+ 0 - Success | 1 - Not installed | 2 - System error
256
+
257
+ Examples:
258
+ $ vat agent uninstall agent-generator # Remove from user scope
259
+ $ vat agent uninstall agent-generator --scope project # Remove from project
260
+ `);
261
+ agent
262
+ .command('installed')
263
+ .description('List installed agent skills')
264
+ .option(SCOPE_OPTION, 'Filter by scope (user, project, all)', 'all')
265
+ .option(RUNTIME_OPTION, RUNTIME_OPTION_DESC, RUNTIME_DEFAULT)
266
+ .option('--debug', DEBUG_OPTION_DESC)
267
+ .action(installedCommand)
268
+ .addHelpText('after', `
269
+ Description:
270
+ Lists all installed agent skills across scopes. Shows installation
271
+ type (copied or symlinked) and location.
272
+
273
+ Scopes:
274
+ - all: Scan all scopes (default)
275
+ - user: Only ~/.claude/skills/
276
+ - project: Only ./.claude/skills/
277
+
278
+ Output:
279
+ YAML summary → stdout (for programmatic parsing)
280
+ Human-readable list → stderr
281
+
282
+ Exit Codes:
283
+ 0 - Success | 2 - System error
284
+
285
+ Examples:
286
+ $ vat agent installed # List all installed skills
287
+ $ vat agent installed --scope user # Only user scope
288
+ $ vat agent installed --scope project # Only project scope
289
+ `);
290
+ return agent;
291
+ }
292
+ export { showAgentVerboseHelp } from './help.js';
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Install agent to Claude Skills directory
3
+ */
4
+ export interface InstallOptions {
5
+ scope?: 'user' | 'project';
6
+ dev?: boolean;
7
+ force?: boolean;
8
+ runtime?: string;
9
+ debug?: boolean;
10
+ }
11
+ /**
12
+ * Install agent command
13
+ */
14
+ export declare function installAgent(agentName: string, options: InstallOptions): Promise<void>;
15
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/install.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Install agent to Claude Skills directory
3
+ */
4
+ import fs from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import { loadAgentManifest } from '@vibe-agent-toolkit/agent-config';
7
+ import { copyDirectory } from '@vibe-agent-toolkit/utils';
8
+ import { resolveAgentPath } from '../../utils/agent-discovery.js';
9
+ import { handleCommandError } from '../../utils/command-error.js';
10
+ import { createLogger } from '../../utils/logger.js';
11
+ import { validateAndGetScopeLocation } from '../../utils/scope-locations.js';
12
+ /**
13
+ * Install agent command
14
+ */
15
+ export async function installAgent(agentName, options) {
16
+ const logger = createLogger(options.debug ? { debug: true } : {});
17
+ const startTime = Date.now();
18
+ try {
19
+ const { runtime = 'claude-skill', scope = 'user', dev = false, force = false } = options;
20
+ // Windows check for dev mode
21
+ if (dev && process.platform === 'win32') {
22
+ throw new Error('--dev (symlink) not supported on Windows.\n' +
23
+ 'Use copy mode (omit --dev) or WSL for development.');
24
+ }
25
+ // Validate scope and get target location
26
+ const targetLocation = validateAndGetScopeLocation(runtime, scope);
27
+ // Find built skill
28
+ const builtSkillPath = await findBuiltSkill(agentName, runtime, logger);
29
+ const installPath = path.join(targetLocation, agentName);
30
+ // Ensure target directory exists
31
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Path constructed from validated scope location
32
+ await fs.mkdir(targetLocation, { recursive: true });
33
+ // Check if already installed
34
+ try {
35
+ await fs.access(installPath);
36
+ if (!force) {
37
+ logger.error(`\n${agentName} already installed at ${installPath}\n` +
38
+ `Use --force to overwrite\n`);
39
+ process.exit(1);
40
+ }
41
+ // Remove existing if force flag is set
42
+ await fs.rm(installPath, { recursive: true, force: true });
43
+ }
44
+ catch {
45
+ // Not installed, continue
46
+ }
47
+ if (dev) {
48
+ // Symlink for development
49
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Paths from validated sources
50
+ await fs.symlink(builtSkillPath, installPath, 'dir');
51
+ logger.info(`✓ Symlinked ${agentName} to ${installPath} (dev mode)`);
52
+ logger.info(` Rebuild agent to see changes immediately`);
53
+ }
54
+ else {
55
+ // Copy for production
56
+ await copyDirectory(builtSkillPath, installPath);
57
+ logger.info(`✓ Installed ${agentName} to ${installPath}`);
58
+ }
59
+ const duration = Date.now() - startTime;
60
+ logger.debug(`Install completed in ${duration}ms`);
61
+ process.exit(0);
62
+ }
63
+ catch (error) {
64
+ handleCommandError(error, logger, startTime, 'Install');
65
+ }
66
+ }
67
+ /**
68
+ * Find built skill bundle
69
+ */
70
+ async function findBuiltSkill(agentName, runtime, logger) {
71
+ // Resolve agent path
72
+ const agentPath = await resolveAgentPath(agentName, logger);
73
+ const manifest = await loadAgentManifest(agentPath);
74
+ // Find package root by walking up from manifest path
75
+ const packageRoot = await findAgentPackageRoot(manifest.__manifestPath ?? agentPath);
76
+ // Runtime-specific bundle location
77
+ const runtimeDir = runtime === 'claude-skill' ? 'skill' : runtime;
78
+ const builtPath = path.join(packageRoot, 'dist', 'vat-bundles', runtimeDir, manifest.metadata.name);
79
+ try {
80
+ await fs.access(builtPath);
81
+ return builtPath;
82
+ }
83
+ catch {
84
+ throw new Error(`Built skill not found at ${builtPath}\n` +
85
+ `Run: vat agent build ${agentName} --runtime ${runtime}`);
86
+ }
87
+ }
88
+ /**
89
+ * Find the agent package root (directory containing package.json)
90
+ */
91
+ async function findAgentPackageRoot(manifestPath) {
92
+ let currentDir = path.dirname(path.resolve(manifestPath));
93
+ // Walk up until we find a package.json or hit the filesystem root
94
+ while (currentDir !== path.dirname(currentDir)) {
95
+ const packageJsonPath = path.join(currentDir, 'package.json');
96
+ try {
97
+ await fs.access(packageJsonPath);
98
+ return currentDir;
99
+ }
100
+ catch {
101
+ currentDir = path.dirname(currentDir);
102
+ }
103
+ }
104
+ throw new Error(`Could not find package.json for agent at ${manifestPath}. ` +
105
+ `Agent must be within an npm package to install.`);
106
+ }
107
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/agent/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * List installed agents command
3
+ */
4
+ export interface InstalledCommandOptions {
5
+ scope?: 'user' | 'project' | 'all';
6
+ runtime?: string;
7
+ debug?: boolean;
8
+ }
9
+ /**
10
+ * List installed agents command
11
+ */
12
+ export declare function installedCommand(options: InstalledCommandOptions): Promise<void>;
13
+ //# sourceMappingURL=installed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/installed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AASD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtF"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * List installed agents command
3
+ */
4
+ import fs from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import yaml from 'yaml';
7
+ import { handleCommandError } from '../../utils/command-error.js';
8
+ import { createLogger } from '../../utils/logger.js';
9
+ import { SCOPE_LOCATIONS } from '../../utils/scope-locations.js';
10
+ /**
11
+ * List installed agents command
12
+ */
13
+ export async function installedCommand(options) {
14
+ const logger = createLogger(options.debug ? { debug: true } : {});
15
+ const startTime = Date.now();
16
+ try {
17
+ const { runtime = 'claude-skill', scope = 'all' } = options;
18
+ const scopeLocations = SCOPE_LOCATIONS[runtime];
19
+ if (!scopeLocations) {
20
+ throw new Error(`Runtime '${runtime}' not implemented`);
21
+ }
22
+ // Determine which scopes to scan
23
+ const scopesToScan = scope === 'all' ? Object.keys(scopeLocations) : [scope];
24
+ const skills = await scanForInstalledSkills(scopeLocations, scopesToScan);
25
+ if (skills.length === 0) {
26
+ logger.info('No installed skills found');
27
+ const duration = Date.now() - startTime;
28
+ logger.debug(`List completed in ${duration}ms`);
29
+ // Output YAML for programmatic parsing
30
+ const output = {
31
+ status: 'success',
32
+ skills: [],
33
+ scanned: scopesToScan,
34
+ duration,
35
+ };
36
+ console.log(yaml.stringify(output));
37
+ process.exit(0);
38
+ return;
39
+ }
40
+ // Output to stderr (human-readable)
41
+ logger.info('\nInstalled Skills:\n');
42
+ for (const skill of skills) {
43
+ const typeIndicator = skill.type === 'symlink' ? '→' : '✓';
44
+ logger.info(` ${typeIndicator} ${skill.name} (${skill.scope})`);
45
+ if (skill.type === 'symlink') {
46
+ logger.info(` ${skill.path}`);
47
+ }
48
+ }
49
+ logger.info('');
50
+ const duration = Date.now() - startTime;
51
+ logger.debug(`List completed in ${duration}ms`);
52
+ // Output YAML to stdout for programmatic parsing
53
+ const output = {
54
+ status: 'success',
55
+ skills: skills.map((s) => ({
56
+ name: s.name,
57
+ scope: s.scope,
58
+ type: s.type,
59
+ path: s.path,
60
+ })),
61
+ scanned: scopesToScan,
62
+ duration,
63
+ };
64
+ console.log(yaml.stringify(output));
65
+ process.exit(0);
66
+ }
67
+ catch (error) {
68
+ handleCommandError(error, logger, startTime, 'Installed');
69
+ }
70
+ }
71
+ /**
72
+ * Scan locations for installed skills
73
+ */
74
+ async function scanForInstalledSkills(scopeLocations, scopesToScan) {
75
+ const skills = [];
76
+ for (const currentScope of scopesToScan) {
77
+ const location = scopeLocations[currentScope];
78
+ if (!location)
79
+ continue;
80
+ try {
81
+ await fs.access(location);
82
+ }
83
+ catch {
84
+ // Directory doesn't exist, skip
85
+ continue;
86
+ }
87
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Path from validated scope location
88
+ const entries = await fs.readdir(location, { withFileTypes: true });
89
+ for (const entry of entries) {
90
+ if (!entry.isDirectory() && !entry.isSymbolicLink())
91
+ continue;
92
+ const skillPath = path.join(location, entry.name);
93
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Path from validated scope + entry name
94
+ const stats = await fs.lstat(skillPath);
95
+ const isSymlink = stats.isSymbolicLink();
96
+ skills.push({
97
+ name: entry.name,
98
+ scope: currentScope,
99
+ type: isSymlink ? 'symlink' : 'installed',
100
+ path: skillPath,
101
+ });
102
+ }
103
+ }
104
+ return skills;
105
+ }
106
+ //# sourceMappingURL=installed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed.js","sourceRoot":"","sources":["../../../src/commands/agent/installed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Agent list command - discovers and lists all agents
3
+ */
4
+ export interface ListCommandOptions {
5
+ debug?: boolean;
6
+ }
7
+ export declare function listCommand(options: ListCommandOptions): Promise<void>;
8
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC5E"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Agent list command - discovers and lists all agents
3
+ */
4
+ import { discoverAgents } from '../../utils/agent-discovery.js';
5
+ import { handleCommandError } from '../../utils/command-error.js';
6
+ import { createLogger } from '../../utils/logger.js';
7
+ import { writeYamlOutput } from '../../utils/output.js';
8
+ export async function listCommand(options) {
9
+ const logger = createLogger(options.debug ? { debug: true } : {});
10
+ const startTime = Date.now();
11
+ try {
12
+ logger.debug('Discovering agents...');
13
+ logger.debug(`Search paths: packages/vat-development-agents/agents, agents, .`);
14
+ const agents = await discoverAgents();
15
+ const output = {
16
+ status: 'success',
17
+ agents: agents.map(agent => ({
18
+ name: agent.name,
19
+ version: agent.version,
20
+ path: agent.path,
21
+ })),
22
+ count: agents.length,
23
+ duration: `${Date.now() - startTime}ms`,
24
+ };
25
+ writeYamlOutput(output);
26
+ if (agents.length === 0) {
27
+ logger.info('No agents discovered');
28
+ }
29
+ else {
30
+ logger.info(`Found ${agents.length} agent(s):`);
31
+ for (const agent of agents) {
32
+ logger.info(` ${agent.name} (${agent.version}) - ${agent.path}`);
33
+ }
34
+ }
35
+ process.exit(0);
36
+ }
37
+ catch (error) {
38
+ handleCommandError(error, logger, startTime, 'AgentList');
39
+ }
40
+ }
41
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;YACH,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI;SACxC,CAAC;QAEF,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;YAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}