craftdesk 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +1609 -132
  3. package/dist/commands/add.d.ts +5 -0
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +306 -8
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/convert.d.ts +8 -0
  8. package/dist/commands/convert.d.ts.map +1 -0
  9. package/dist/commands/convert.js +146 -0
  10. package/dist/commands/convert.js.map +1 -0
  11. package/dist/commands/detect-agents.d.ts +14 -0
  12. package/dist/commands/detect-agents.d.ts.map +1 -0
  13. package/dist/commands/detect-agents.js +86 -0
  14. package/dist/commands/detect-agents.js.map +1 -0
  15. package/dist/commands/embed.d.ts +14 -0
  16. package/dist/commands/embed.d.ts.map +1 -0
  17. package/dist/commands/embed.js +147 -0
  18. package/dist/commands/embed.js.map +1 -0
  19. package/dist/commands/info.d.ts +8 -0
  20. package/dist/commands/info.d.ts.map +1 -0
  21. package/dist/commands/info.js +66 -0
  22. package/dist/commands/info.js.map +1 -0
  23. package/dist/commands/init.d.ts +5 -0
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +8 -2
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/install.d.ts +5 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +24 -4
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/list.d.ts +5 -0
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +75 -7
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/login.d.ts +8 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +158 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/logout.d.ts +8 -0
  40. package/dist/commands/logout.d.ts.map +1 -0
  41. package/dist/commands/logout.js +51 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/outdated.d.ts +23 -0
  44. package/dist/commands/outdated.d.ts.map +1 -0
  45. package/dist/commands/outdated.js +268 -0
  46. package/dist/commands/outdated.js.map +1 -0
  47. package/dist/commands/publish.d.ts +8 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +203 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/remove.d.ts +5 -0
  52. package/dist/commands/remove.d.ts.map +1 -1
  53. package/dist/commands/remove.js +51 -10
  54. package/dist/commands/remove.js.map +1 -1
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.d.ts.map +1 -0
  57. package/dist/commands/search.js +60 -0
  58. package/dist/commands/search.js.map +1 -0
  59. package/dist/commands/setup-multi-agent.d.ts +17 -0
  60. package/dist/commands/setup-multi-agent.d.ts.map +1 -0
  61. package/dist/commands/setup-multi-agent.js +188 -0
  62. package/dist/commands/setup-multi-agent.js.map +1 -0
  63. package/dist/commands/sync.d.ts +14 -0
  64. package/dist/commands/sync.d.ts.map +1 -0
  65. package/dist/commands/sync.js +144 -0
  66. package/dist/commands/sync.js.map +1 -0
  67. package/dist/commands/unembed.d.ts +14 -0
  68. package/dist/commands/unembed.d.ts.map +1 -0
  69. package/dist/commands/unembed.js +96 -0
  70. package/dist/commands/unembed.js.map +1 -0
  71. package/dist/commands/update.d.ts +8 -0
  72. package/dist/commands/update.d.ts.map +1 -0
  73. package/dist/commands/update.js +372 -0
  74. package/dist/commands/update.js.map +1 -0
  75. package/dist/commands/verify.d.ts +14 -0
  76. package/dist/commands/verify.d.ts.map +1 -0
  77. package/dist/commands/verify.js +143 -0
  78. package/dist/commands/verify.js.map +1 -0
  79. package/dist/commands/whoami.d.ts +8 -0
  80. package/dist/commands/whoami.d.ts.map +1 -0
  81. package/dist/commands/whoami.js +58 -0
  82. package/dist/commands/whoami.js.map +1 -0
  83. package/dist/converters/base-converter.d.ts +89 -0
  84. package/dist/converters/base-converter.d.ts.map +1 -0
  85. package/dist/converters/base-converter.js +249 -0
  86. package/dist/converters/base-converter.js.map +1 -0
  87. package/dist/converters/continue-converter.d.ts +53 -0
  88. package/dist/converters/continue-converter.d.ts.map +1 -0
  89. package/dist/converters/continue-converter.js +243 -0
  90. package/dist/converters/continue-converter.js.map +1 -0
  91. package/dist/converters/cursor-converter.d.ts +70 -0
  92. package/dist/converters/cursor-converter.d.ts.map +1 -0
  93. package/dist/converters/cursor-converter.js +272 -0
  94. package/dist/converters/cursor-converter.js.map +1 -0
  95. package/dist/index.js +56 -3
  96. package/dist/index.js.map +1 -1
  97. package/dist/services/agent-detector.d.ts +57 -0
  98. package/dist/services/agent-detector.d.ts.map +1 -0
  99. package/dist/services/agent-detector.js +146 -0
  100. package/dist/services/agent-detector.js.map +1 -0
  101. package/dist/services/config-manager.d.ts +128 -10
  102. package/dist/services/config-manager.d.ts.map +1 -1
  103. package/dist/services/config-manager.js +190 -18
  104. package/dist/services/config-manager.js.map +1 -1
  105. package/dist/services/converter.d.ts +53 -0
  106. package/dist/services/converter.d.ts.map +1 -0
  107. package/dist/services/converter.js +185 -0
  108. package/dist/services/converter.js.map +1 -0
  109. package/dist/services/craft-wrapper.d.ts +108 -0
  110. package/dist/services/craft-wrapper.d.ts.map +1 -0
  111. package/dist/services/craft-wrapper.js +268 -0
  112. package/dist/services/craft-wrapper.js.map +1 -0
  113. package/dist/services/git-resolver.d.ts +9 -3
  114. package/dist/services/git-resolver.d.ts.map +1 -1
  115. package/dist/services/git-resolver.js +44 -20
  116. package/dist/services/git-resolver.js.map +1 -1
  117. package/dist/services/gitignore-manager.d.ts +74 -0
  118. package/dist/services/gitignore-manager.d.ts.map +1 -0
  119. package/dist/services/gitignore-manager.js +188 -0
  120. package/dist/services/gitignore-manager.js.map +1 -0
  121. package/dist/services/installer.d.ts +60 -1
  122. package/dist/services/installer.d.ts.map +1 -1
  123. package/dist/services/installer.js +295 -20
  124. package/dist/services/installer.js.map +1 -1
  125. package/dist/services/multi-agent-sync.d.ts +88 -0
  126. package/dist/services/multi-agent-sync.d.ts.map +1 -0
  127. package/dist/services/multi-agent-sync.js +316 -0
  128. package/dist/services/multi-agent-sync.js.map +1 -0
  129. package/dist/services/plugin-resolver.d.ts +80 -0
  130. package/dist/services/plugin-resolver.d.ts.map +1 -0
  131. package/dist/services/plugin-resolver.js +183 -0
  132. package/dist/services/plugin-resolver.js.map +1 -0
  133. package/dist/services/registry-client.d.ts +132 -5
  134. package/dist/services/registry-client.d.ts.map +1 -1
  135. package/dist/services/registry-client.js +239 -34
  136. package/dist/services/registry-client.js.map +1 -1
  137. package/dist/services/settings-manager.d.ts +151 -0
  138. package/dist/services/settings-manager.d.ts.map +1 -0
  139. package/dist/services/settings-manager.js +333 -0
  140. package/dist/services/settings-manager.js.map +1 -0
  141. package/dist/types/claude-settings.d.ts +155 -0
  142. package/dist/types/claude-settings.d.ts.map +1 -0
  143. package/dist/types/claude-settings.js +20 -0
  144. package/dist/types/claude-settings.js.map +1 -0
  145. package/dist/types/converter.d.ts +98 -0
  146. package/dist/types/converter.d.ts.map +1 -0
  147. package/dist/types/converter.js +6 -0
  148. package/dist/types/converter.js.map +1 -0
  149. package/dist/types/craftdesk-json.d.ts +76 -3
  150. package/dist/types/craftdesk-json.d.ts.map +1 -1
  151. package/dist/types/craftdesk-lock.d.ts +62 -1
  152. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  153. package/dist/types/multi-agent.d.ts +85 -0
  154. package/dist/types/multi-agent.d.ts.map +1 -0
  155. package/dist/types/multi-agent.js +6 -0
  156. package/dist/types/multi-agent.js.map +1 -0
  157. package/dist/utils/crypto.d.ts +23 -0
  158. package/dist/utils/crypto.d.ts.map +1 -0
  159. package/dist/utils/crypto.js +52 -0
  160. package/dist/utils/crypto.js.map +1 -0
  161. package/dist/utils/file-system.d.ts +43 -0
  162. package/dist/utils/file-system.d.ts.map +1 -1
  163. package/dist/utils/file-system.js +45 -2
  164. package/dist/utils/file-system.js.map +1 -1
  165. package/dist/utils/logger.d.ts +75 -0
  166. package/dist/utils/logger.d.ts.map +1 -1
  167. package/dist/utils/logger.js +76 -1
  168. package/dist/utils/logger.js.map +1 -1
  169. package/dist/utils/version-utils.d.ts +63 -0
  170. package/dist/utils/version-utils.d.ts.map +1 -0
  171. package/dist/utils/version-utils.js +130 -0
  172. package/dist/utils/version-utils.js.map +1 -0
  173. package/package.json +36 -9
  174. package/.claude/settings.local.json +0 -19
  175. package/.github/workflows/ci.yml +0 -94
  176. package/API.md +0 -414
  177. package/TESTING.md +0 -263
  178. package/dist/commands/config.d.ts +0 -3
  179. package/dist/commands/config.d.ts.map +0 -1
  180. package/dist/commands/config.js +0 -56
  181. package/dist/commands/config.js.map +0 -1
  182. package/dist/types/config.d.ts +0 -17
  183. package/dist/types/config.d.ts.map +0 -1
  184. package/dist/types/config.js +0 -3
  185. package/dist/types/config.js.map +0 -1
  186. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  187. package/examples/craftdesk-all-sources.json +0 -79
  188. package/examples/craftdesk-git-monorepo.json +0 -41
  189. package/examples/craftdesk-multi-registry.json +0 -40
  190. package/examples/craftdesk-with-registries.json +0 -49
  191. package/examples/simple-craftdesk.json +0 -10
  192. package/src/commands/add.ts +0 -314
  193. package/src/commands/init.ts +0 -55
  194. package/src/commands/install.ts +0 -126
  195. package/src/commands/list.ts +0 -126
  196. package/src/commands/remove.ts +0 -82
  197. package/src/index.ts +0 -56
  198. package/src/services/config-manager.ts +0 -150
  199. package/src/services/git-resolver.ts +0 -373
  200. package/src/services/installer.ts +0 -314
  201. package/src/services/registry-client.ts +0 -163
  202. package/src/types/craftdesk-json.ts +0 -53
  203. package/src/types/craftdesk-lock.ts +0 -38
  204. package/src/utils/file-system.ts +0 -55
  205. package/src/utils/logger.ts +0 -82
  206. package/tests/fixtures/craftdesk-git.json +0 -17
  207. package/tests/fixtures/craftdesk.json +0 -15
  208. package/tests/helpers/test-utils.ts +0 -60
  209. package/tests/integration/init-command.test.ts +0 -70
  210. package/tests/integration/list-command.test.ts +0 -77
  211. package/tests/unit/config-manager.test.ts +0 -228
  212. package/tests/unit/git-resolver.test.ts +0 -303
  213. package/tests/unit/installer.test.ts +0 -105
  214. package/tsconfig.json +0 -20
  215. package/vitest.config.ts +0 -29
package/README.md CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  > **Dependency management for AI capabilities** - Install, manage, and version control your Claude Code skills, agents, commands, hooks, and plugins.
4
4
 
5
- The official command-line interface for managing CraftDesk AI capabilities. Similar to npm for JavaScript or bundler for Ruby, CraftDesk CLI provides a complete package management solution for AI-powered development tools.
5
+ The command-line interface for managing your Coding AI capabilities. Similar to npm for JavaScript or bundler for Ruby, CraftDesk CLI provides a complete package management solution for AI-powered development tools.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/craftdesk.svg)](https://www.npmjs.com/package/craftdesk)
8
+ [![CI](https://github.com/mensfeld/craftdesk/actions/workflows/ci.yml/badge.svg)](https://github.com/mensfeld/craftdesk/actions/workflows/ci.yml)
8
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
10
 
10
11
  ---
@@ -13,12 +14,17 @@ The official command-line interface for managing CraftDesk AI capabilities. Simi
13
14
 
14
15
  CraftDesk is a package manager for AI capabilities used in Claude Code and other AI development environments. It allows you to:
15
16
 
16
- - **Install AI skills, agents, commands, hooks, and plugins** from git repositories
17
+ - **Install AI skills, agents, commands, hooks, plugins, and collections** from git repositories or registries
18
+ - **Collections** - Curate and share groups of related crafts that work together
19
+ - **Plugin system** - Bundle multiple crafts with automatic dependency resolution
20
+ - **Multi-agent sync** - Share skills across multiple AI assistants (Claude, Cursor, Windsurf, etc.)
17
21
  - **Lock versions** for reproducible environments across teams
18
- - **Manage dependencies** with automatic transitive resolution
22
+ - **Manage dependencies** with automatic recursive installation
19
23
  - **Support monorepos** with subdirectory extraction
20
24
  - **Auto-convert GitHub URLs** - paste any GitHub URL (tree/blob)
21
25
  - **Direct file references** - install single files from repositories
26
+ - **Settings integration** - Automatic registration in `.claude/settings.json`
27
+ - **MCP server support** - Configure Model Context Protocol servers via plugins
22
28
 
23
29
  Think of it as:
24
30
  - **npm** for Node.js → **CraftDesk** for AI capabilities
@@ -40,7 +46,7 @@ npm install -g craftdesk
40
46
  Verify installation:
41
47
  ```bash
42
48
  craftdesk --version
43
- # 0.2.0
49
+ # 0.3.0
44
50
  ```
45
51
 
46
52
  **Requirements:** Node.js >= 18.0.0, Git, npm or yarn
@@ -111,7 +117,27 @@ Total: 2 crafts installed
111
117
  - [What is CraftDesk?](#what-is-craftdesk)
112
118
  - [Quick Start](#quick-start)
113
119
  - [Core Concepts](#core-concepts)
120
+ - [Crafts](#crafts)
121
+ - [Collections](#collections)
122
+ - [Plugin System](#plugin-system)
114
123
  - [Command Reference](#command-reference)
124
+ - [init](#craftdesk-init-options)
125
+ - [install](#craftdesk-install-options)
126
+ - [add](#craftdesk-add-craft-options)
127
+ - [remove](#craftdesk-remove-craft)
128
+ - [list](#craftdesk-list-options)
129
+ - [search](#craftdesk-search-query-options)
130
+ - [info](#craftdesk-info-craft)
131
+ - [outdated](#craftdesk-outdated)
132
+ - [update](#craftdesk-update-craft)
133
+ - [publish](#craftdesk-publish-options)
134
+ - [Embedded/Local Skills](#embeddedlocal-skills)
135
+ - [embed](#craftdesk-embed-name-options)
136
+ - [unembed](#craftdesk-unembed-name-options)
137
+ - [Authentication](#authentication)
138
+ - [login](#craftdesk-login-options)
139
+ - [logout](#craftdesk-logout-options)
140
+ - [whoami](#craftdesk-whoami-options)
115
141
  - [Dependency Sources](#dependency-sources)
116
142
  - [Monorepo Support](#monorepo-support)
117
143
  - [craftdesk.json Reference](#craftdeskjson-reference)
@@ -119,6 +145,7 @@ Total: 2 crafts installed
119
145
  - [CI/CD Integration](#cicd-integration)
120
146
  - [Troubleshooting](#troubleshooting)
121
147
  - [Development](#development)
148
+ - [Documentation](#documentation)
122
149
 
123
150
  ---
124
151
 
@@ -131,7 +158,618 @@ A **craft** is any AI capability:
131
158
  - **Agent** - Autonomous task executor (e.g., code-reviewer, test-runner)
132
159
  - **Command** - Slash command (e.g., /deploy, /analyze)
133
160
  - **Hook** - Event handler (e.g., pre-commit, post-install)
134
- - **Plugin** - Extended functionality or tool integration (e.g., mcp-server, custom-tools)
161
+ - **Plugin** - Bundle of multiple crafts with dependencies and MCP server configuration
162
+ - **Collection** - Curated group of related crafts that work together (e.g., rails-enterprise-stack)
163
+
164
+ ### Format Conversion
165
+
166
+ **Convert CraftDesk crafts to other AI editor formats** for cross-platform use.
167
+
168
+ **Supported Formats:**
169
+ - **Cursor** - Modern `.mdc` format in `.cursor/rules/` directory
170
+ - **Cursor Legacy** - Plain text `.cursorrules` format
171
+ - **Continue.dev** - Prompt and rule files in `.continue/prompts/` and `.continue/rules/`
172
+
173
+ **Why convert formats?**
174
+ - **Use any AI editor** - Write once, deploy to Cursor, Continue, Windsurf, etc.
175
+ - **Team flexibility** - Developers can use their preferred editors
176
+ - **Maximum reach** - Distribute crafts to wider audience
177
+ - **No lock-in** - Not tied to single platform
178
+
179
+ **Basic Usage:**
180
+
181
+ ```bash
182
+ # Convert a craft to Cursor format
183
+ craftdesk convert ./my-craft --to cursor
184
+
185
+ # Convert to Continue.dev format
186
+ craftdesk convert ./my-craft --to continue
187
+
188
+ # Convert to legacy .cursorrules
189
+ craftdesk convert ./my-craft --to cursor-legacy
190
+
191
+ # Convert all installed crafts
192
+ craftdesk convert --all --to cursor --output .cursor/rules
193
+
194
+ # List available formats
195
+ craftdesk convert --list-formats
196
+ ```
197
+
198
+ **Example: Rails Skill → Cursor**
199
+
200
+ Your `SKILL.md`:
201
+ ```markdown
202
+ ---
203
+ name: ruby-on-rails
204
+ description: Ruby on Rails development
205
+ ---
206
+
207
+ ## Instructions
208
+ Expert knowledge of Rails framework...
209
+
210
+ ## Best Practices
211
+ - Use Strong Parameters
212
+ - Follow RESTful conventions
213
+ ```
214
+
215
+ Converted to `.cursor/rules/ruby-on-rails.mdc`:
216
+ ```markdown
217
+ ---
218
+ description: Ruby on Rails development
219
+ globs:
220
+ - "**/*.rb"
221
+ - "**/*.erb"
222
+ - "**/*.haml"
223
+ alwaysApply: true
224
+ ---
225
+
226
+ # Ruby On Rails
227
+
228
+ ## Overview
229
+ Expert knowledge of Rails framework...
230
+
231
+ ## Best Practices
232
+ - Use Strong Parameters
233
+ - Follow RESTful conventions
234
+ ```
235
+
236
+ **Advanced Options:**
237
+
238
+ ```bash
239
+ # Merge modes
240
+ craftdesk convert --to cursor --merge-mode skip # Skip existing files
241
+ craftdesk convert --to cursor --merge-mode append # Append to existing
242
+ craftdesk convert --to cursor --merge-mode overwrite # Overwrite (default)
243
+
244
+ # Custom output directory
245
+ craftdesk convert --to cursor --output /custom/path
246
+
247
+ # Convert specific craft type
248
+ craftdesk convert .claude/skills/ruby-rails --to continue
249
+ ```
250
+
251
+ **What Gets Converted:**
252
+
253
+ | Section | Cursor | Continue |
254
+ |---------|--------|----------|
255
+ | Instructions | ✓ Overview | ✓ Context |
256
+ | Code Patterns | ✓ Code Patterns | ✓ Patterns to Follow |
257
+ | Examples | ✓ Examples | ✓ Examples |
258
+ | Best Practices | ✓ Best Practices | ✓ Best Practices |
259
+ | Pitfalls | ✓ Mistakes to Avoid | ✓ Mistakes to Avoid |
260
+ | Workflows | ✓ Common Workflows | ✓ Step-by-Step Workflows |
261
+
262
+ **Language-Specific Features:**
263
+
264
+ Cursor converter automatically infers file globs based on content:
265
+ - **Ruby/Rails** → `**/*.rb`, `**/*.erb`, config files
266
+ - **TypeScript** → `**/*.ts`, `**/*.tsx`
267
+ - **Python** → `**/*.py`
268
+ - **JavaScript** → `**/*.js`, `**/*.jsx`
269
+ - **And more...** (Go, Rust, PHP, Java, etc.)
270
+
271
+ Continue converter generates:
272
+ - **Prompts** (invokable with `/`) - for manual use
273
+ - **Rules** (automatic) - applied to all matching files
274
+
275
+ **CI/CD Integration:**
276
+
277
+ ```yaml
278
+ # .github/workflows/convert-crafts.yml
279
+ name: Convert Crafts to Multiple Formats
280
+ on: [push]
281
+ jobs:
282
+ convert:
283
+ runs-on: ubuntu-latest
284
+ steps:
285
+ - uses: actions/checkout@v2
286
+ - name: Install CraftDesk
287
+ run: npm install -g craftdesk
288
+ - name: Convert to Cursor
289
+ run: craftdesk convert --all --to cursor --output dist/cursor
290
+ - name: Convert to Continue
291
+ run: craftdesk convert --all --to continue --output dist/continue
292
+ - name: Upload artifacts
293
+ uses: actions/upload-artifact@v2
294
+ with:
295
+ name: converted-crafts
296
+ path: dist/
297
+ ```
298
+
299
+ **Tips:**
300
+
301
+ 1. **Test conversions** - Always verify converted files work in target editor
302
+ 2. **Preserve originals** - Keep SKILL.md as source of truth
303
+ 3. **Update together** - Convert after each craft update
304
+ 4. **Version control** - Commit both source and converted formats
305
+
306
+ ### Multi-Agent Sync
307
+
308
+ **Share skills across multiple AI coding assistants** - Sync your crafts to Claude Code, Cursor, Windsurf, Continue.dev, and more with automatic copy management and drift detection.
309
+
310
+ **Why use multi-agent sync?**
311
+ - **Single source of truth** - Maintain skills in one location (`.claude/skills/`)
312
+ - **Cross-editor compatibility** - Use the same skills in Claude, Cursor, Windsurf, etc.
313
+ - **Team flexibility** - Developers can use their preferred AI assistant
314
+ - **Automatic sync** - Install once, sync everywhere
315
+ - **Drift detection** - SHA-256 checksums detect modifications
316
+ - **Windows compatible** - Copy-based (no symlinks required)
317
+
318
+ **Quick Start:**
319
+
320
+ ```bash
321
+ # 1. Interactive setup (recommended)
322
+ craftdesk setup-multi-agent
323
+
324
+ # 2. Detect available AI assistants
325
+ craftdesk detect-agents
326
+
327
+ # 3. Sync all crafts to configured agents
328
+ craftdesk sync
329
+
330
+ # 4. Verify sync status (check for drift)
331
+ craftdesk verify
332
+ ```
333
+
334
+ **Configuration:**
335
+
336
+ Add to your `craftdesk.json`:
337
+
338
+ ```json
339
+ {
340
+ "name": "my-project",
341
+ "version": "1.0.0",
342
+ "dependencies": {
343
+ "ruby-expert": "^1.0.0"
344
+ },
345
+ "multiAgent": {
346
+ "enabled": true,
347
+ "canonical": ".claude",
348
+ "targets": [
349
+ ".claude/skills",
350
+ ".cursor/skills",
351
+ ".windsurf/skills"
352
+ ],
353
+ "autoSync": true
354
+ }
355
+ }
356
+ ```
357
+
358
+ **How it works:**
359
+
360
+ 1. **Canonical Location** - Skills are installed to `.claude/skills/` (source of truth)
361
+ 2. **Target Directories** - Copies are created in `.cursor/skills/`, `.windsurf/skills/`, etc.
362
+ 3. **Checksum Tracking** - Each copy has a `.craftdesk-checksum` file (SHA-256)
363
+ 4. **Drift Detection** - `craftdesk verify` compares checksums to detect modifications
364
+ 5. **Re-sync** - `craftdesk sync` updates all copies from canonical
365
+
366
+ **Example Workflow:**
367
+
368
+ ```bash
369
+ # Install a new skill
370
+ craftdesk add git+https://github.com/user/ruby-expert.git
371
+
372
+ # Skills auto-sync to all agents (if autoSync: true)
373
+ # ✓ Installed to .claude/skills/ruby-expert
374
+ # ✓ Synced to .cursor/skills/ruby-expert
375
+ # ✓ Synced to .windsurf/skills/ruby-expert
376
+
377
+ # Verify everything is in sync
378
+ craftdesk verify
379
+ # ✅ All 3 craft(s) are in sync!
380
+
381
+ # Later, check for drift
382
+ craftdesk verify
383
+ # ⚠️ ruby-expert
384
+ # Out of sync: .cursor/skills/ruby-expert (modified)
385
+
386
+ # Re-sync to fix drift
387
+ craftdesk sync --craft ruby-expert
388
+ # ✅ Synced ruby-expert to 3 location(s)
389
+ ```
390
+
391
+ **Supported AI Assistants:**
392
+
393
+ | Assistant | Directory | Auto-Detected |
394
+ |-----------|-----------|---------------|
395
+ | **Claude Code** | `.claude/skills/` | ✅ Always enabled (canonical) |
396
+ | **Cursor** | `.cursor/skills/` | ✅ Yes |
397
+ | **Windsurf** | `.windsurf/skills/` | ✅ Yes |
398
+ | **Continue.dev** | `.continue/skills/` | ✅ Yes |
399
+ | **Generic .agents** | `.agents/skills/` | ✅ Yes |
400
+
401
+ **Commands:**
402
+
403
+ ```bash
404
+ # Setup wizard (interactive)
405
+ craftdesk setup-multi-agent
406
+
407
+ # Detect AI assistants in project
408
+ craftdesk detect-agents
409
+ craftdesk detect-agents --verbose
410
+ craftdesk detect-agents --format json
411
+
412
+ # Sync all crafts to all targets
413
+ craftdesk sync
414
+ craftdesk sync --craft ruby-expert # Sync specific craft
415
+ craftdesk sync --dry-run # Preview changes
416
+ craftdesk sync --force # Force re-sync
417
+
418
+ # Verify sync status
419
+ craftdesk verify
420
+ craftdesk verify --craft ruby-expert # Verify specific craft
421
+ craftdesk verify --verbose # Show checksums
422
+ craftdesk verify --format json # JSON output
423
+ ```
424
+
425
+ **Best Practices:**
426
+
427
+ 1. **Use canonical as source of truth** - Always edit skills in `.claude/skills/`
428
+ 2. **Enable autoSync** - New installs automatically sync to all agents
429
+ 3. **Run verify regularly** - Check for drift, especially in teams
430
+ 4. **Sync after manual edits** - If you edit a skill, run `craftdesk sync`
431
+ 5. **Commit canonical only** - Add target directories to `.gitignore`
432
+
433
+ **gitignore Example:**
434
+
435
+ ```gitignore
436
+ # Only track canonical location
437
+ .cursor/skills/*
438
+ .windsurf/skills/*
439
+ .continue/skills/*
440
+
441
+ # Track canonical
442
+ !.claude/skills/
443
+ ```
444
+
445
+ **Why copy instead of symlinks?**
446
+
447
+ We use copy-based sync instead of symlinks for maximum compatibility:
448
+ - ✅ **Windows compatible** - No admin privileges or Developer Mode required
449
+ - ✅ **Git-friendly** - No `core.symlinks` complications
450
+ - ✅ **Reliable** - Works consistently across all platforms
451
+ - ✅ **Simple** - Easy to understand and debug
452
+ - ✅ **Verifiable** - Checksums detect any modifications
453
+
454
+ ---
455
+
456
+ ### Embedded/Local Skills
457
+
458
+ **Commit project-specific skills to your repository** alongside managed dependencies for a hybrid approach to skill management.
459
+
460
+ **What are embedded skills?**
461
+
462
+ Embedded skills are local, project-specific AI capabilities that are:
463
+ - ✅ **Committed to git** - Part of your repository, versioned with your code
464
+ - ✅ **Project-specific** - Custom skills unique to your project
465
+ - ✅ **Team-shared** - Distributed via `git clone` (not `craftdesk install`)
466
+ - ✅ **Auto-synced** - Sync to other AI assistants with multi-agent support
467
+ - ⚠️ **Not managed** - No version updates via `craftdesk update`
468
+
469
+ **When to embed vs. manage:**
470
+
471
+ | Use Case | Embedded | Managed (dependencies) |
472
+ |----------|----------|------------------------|
473
+ | Project-specific business logic | ✅ | ❌ |
474
+ | Custom team workflows | ✅ | ❌ |
475
+ | Proprietary domain knowledge | ✅ | ❌ |
476
+ | Shared/reusable skills | ❌ | ✅ |
477
+ | Skills that need updates | ❌ | ✅ |
478
+ | Skills from registry/git repos | ❌ | ✅ |
479
+
480
+ **Quick Start:**
481
+
482
+ ```bash
483
+ # 1. Create a local skill manually
484
+ mkdir -p .claude/skills/my-project-skill
485
+ cat > .claude/skills/my-project-skill/SKILL.md <<EOF
486
+ ---
487
+ skill: my-project-skill
488
+ version: 1.0.0
489
+ ---
490
+ # My Project Skill
491
+
492
+ Project-specific knowledge about our custom architecture...
493
+ EOF
494
+
495
+ # 2. Register it as embedded
496
+ craftdesk embed my-project-skill
497
+
498
+ # 3. Commit to git
499
+ git add .claude/skills/my-project-skill craftdesk.json
500
+ git commit -m "Add my-project-skill as embedded skill"
501
+
502
+ # Team members get it via git clone (not craftdesk install!)
503
+ ```
504
+
505
+ **Configuration:**
506
+
507
+ Your `craftdesk.json` tracks embedded skills separately from dependencies:
508
+
509
+ ```json
510
+ {
511
+ "name": "my-project",
512
+ "version": "1.0.0",
513
+ "dependencies": {
514
+ "ruby-expert": "^1.0.0", // Managed, from registry
515
+ "postgres-expert": "^2.0.0" // Managed, from git
516
+ },
517
+ "embedded": [
518
+ "my-project-skill", // Embedded, committed to git
519
+ "team-coding-standards" // Embedded, team-specific
520
+ ]
521
+ }
522
+ ```
523
+
524
+ **How .gitignore works:**
525
+
526
+ CraftDesk automatically generates `.claude/skills/.gitignore` to:
527
+ - ✅ **Ignore managed skills** - Not committed (installed via `craftdesk install`)
528
+ - ✅ **Allow embedded skills** - Committed with your code
529
+ - ✅ **Track orphans** - Skills not in either list (commented warnings)
530
+
531
+ Example generated `.gitignore`:
532
+
533
+ ```gitignore
534
+ # Auto-generated by CraftDesk - DO NOT EDIT
535
+ # This file is managed automatically based on craftdesk.json and craftdesk.lock
536
+
537
+ # Managed dependencies (from craftdesk.lock)
538
+ # These are installed via `craftdesk install` and should not be committed
539
+ postgres-expert/
540
+ ruby-expert/
541
+
542
+ # Embedded/local skills (committed to git)
543
+ # These are project-specific and should be committed
544
+ # NOT ignored: my-project-skill/
545
+ # NOT ignored: team-coding-standards/
546
+
547
+ # Untracked (not in craftdesk.json or craftdesk.lock)
548
+ # Add these to dependencies or embedded list, or delete them
549
+ # orphaned-old-skill/
550
+ ```
551
+
552
+ **Commands:**
553
+
554
+ #### `craftdesk embed <name> [options]`
555
+
556
+ Register a skill as embedded (committed to git).
557
+
558
+ **Options:**
559
+ - `--type <type>` - Craft type: skill, agent, command, hook (default: skill)
560
+ - `--skip-sync` - Skip multi-agent sync after embedding
561
+
562
+ **Examples:**
563
+
564
+ ```bash
565
+ # Embed a skill
566
+ craftdesk embed my-local-skill
567
+
568
+ # Embed an agent
569
+ craftdesk embed my-automation-agent --type agent
570
+
571
+ # Embed without syncing to other agents
572
+ craftdesk embed team-workflow --skip-sync
573
+ ```
574
+
575
+ **What happens:**
576
+ 1. ✅ Adds skill to `craftdesk.json` `embedded` array
577
+ 2. ✅ Updates `.claude/skills/.gitignore` to allow the skill
578
+ 3. ✅ Syncs to other AI assistants (if multi-agent enabled)
579
+
580
+ **Requirements:**
581
+ - Skill directory must exist (`.claude/skills/my-local-skill/`)
582
+ - Cannot embed a managed dependency (remove from `dependencies` first)
583
+ - Cannot embed the same skill twice
584
+
585
+ ---
586
+
587
+ #### `craftdesk unembed <name> [options]`
588
+
589
+ Unregister an embedded skill (no longer committed).
590
+
591
+ **Options:**
592
+ - `--remove` - Also delete the skill files from disk
593
+
594
+ **Examples:**
595
+
596
+ ```bash
597
+ # Unembed a skill (files remain on disk)
598
+ craftdesk unembed my-local-skill
599
+
600
+ # Unembed and delete files
601
+ craftdesk unembed old-skill --remove
602
+ ```
603
+
604
+ **What happens:**
605
+ 1. ✅ Removes skill from `craftdesk.json` `embedded` array
606
+ 2. ✅ Updates `.claude/skills/.gitignore` (skill becomes orphaned)
607
+ 3. ⚠️ Skill files remain unless `--remove` is used
608
+
609
+ **After unembedding:**
610
+ - Skill becomes "orphaned" (commented in `.gitignore`)
611
+ - Manually delete files or re-embed it
612
+ - Or add it to `dependencies` to manage it
613
+
614
+ ---
615
+
616
+ **Workflow Examples:**
617
+
618
+ **1. Create and embed a new skill:**
619
+
620
+ ```bash
621
+ # Create skill directory and file
622
+ mkdir -p .claude/skills/deployment-guide
623
+ cat > .claude/skills/deployment-guide/SKILL.md <<'EOF'
624
+ ---
625
+ skill: deployment-guide
626
+ version: 1.0.0
627
+ ---
628
+ # Deployment Guide
629
+
630
+ Our custom deployment process...
631
+ EOF
632
+
633
+ # Embed it
634
+ craftdesk embed deployment-guide
635
+
636
+ # Commit
637
+ git add .claude/skills/deployment-guide craftdesk.json
638
+ git commit -m "Add deployment-guide skill"
639
+ ```
640
+
641
+ **2. Convert managed skill to embedded:**
642
+
643
+ ```bash
644
+ # You have: ruby-expert@1.0.0 (from registry)
645
+ # You want: Modify it and commit to your repo
646
+
647
+ # 1. Remove from dependencies
648
+ craftdesk remove ruby-expert
649
+
650
+ # 2. Skill files are now orphaned (but still on disk)
651
+
652
+ # 3. Embed it
653
+ craftdesk embed ruby-expert
654
+
655
+ # 4. Commit your customized version
656
+ git add .claude/skills/ruby-expert craftdesk.json
657
+ git commit -m "Embed ruby-expert with custom modifications"
658
+ ```
659
+
660
+ **3. List and identify embedded skills:**
661
+
662
+ ```bash
663
+ craftdesk list
664
+
665
+ # Output shows embedded badge:
666
+ # 📚 Skills:
667
+ # ruby-expert@1.0.0
668
+ # postgres-expert@2.0.0
669
+ # my-project-skill@1.0.0 📌 (embedded)
670
+ # team-workflow@1.0.0 📌 (embedded)
671
+ ```
672
+
673
+ **4. Team collaboration:**
674
+
675
+ ```bash
676
+ # Developer A: Creates and embeds skill
677
+ craftdesk embed new-feature-guide
678
+ git add .claude/skills/new-feature-guide craftdesk.json .claude/skills/.gitignore
679
+ git commit -m "Add new-feature-guide"
680
+ git push
681
+
682
+ # Developer B: Pulls and gets skill automatically
683
+ git pull
684
+ # ✅ Skill is ready to use (no craftdesk install needed!)
685
+
686
+ # Multi-agent sync works too (if enabled)
687
+ craftdesk verify
688
+ # ✅ new-feature-guide synced to .cursor/skills/
689
+ # ✅ new-feature-guide synced to .windsurf/skills/
690
+ ```
691
+
692
+ **Best Practices:**
693
+
694
+ 1. **Use embedded for project-specific knowledge** - Custom workflows, business logic, proprietary info
695
+ 2. **Use managed for reusable skills** - Generic skills that can be shared across projects
696
+ 3. **Always commit .gitignore** - CraftDesk auto-generates it, keep it in git
697
+ 4. **Document embedded skills** - Add README explaining their purpose
698
+ 5. **Version embedded skills** - Update version in skill frontmatter when modified
699
+ 6. **Verify multi-agent sync** - Run `craftdesk verify` after embedding
700
+
701
+ ---
702
+
703
+ ### Collections
704
+
705
+ **Collections** are crafts that group related capabilities together. Instead of installing 6 individual crafts, install one collection that includes all of them.
706
+
707
+ **Why use collections?**
708
+ - **Faster onboarding** - One command installs complete workflows
709
+ - **Curated quality** - Experts bundle best-of-breed tools
710
+ - **Consistent stacks** - Teams share identical setups
711
+ - **Versioned together** - Dependencies tested to work together
712
+
713
+ **Example: Rails Enterprise Stack**
714
+
715
+ Create a collection in `craftdesk.json`:
716
+ ```json
717
+ {
718
+ "name": "rails-enterprise-stack",
719
+ "version": "1.0.0",
720
+ "type": "collection",
721
+ "description": "Complete Rails enterprise development setup",
722
+ "dependencies": {
723
+ "ruby-on-rails": "^7.0.0",
724
+ "rspec-testing": "^3.12.0",
725
+ "rubocop-linter": "^1.50.0",
726
+ "sidekiq-background-jobs": "^7.0.0",
727
+ "postgresql-expert": "^15.0.0",
728
+ "devise-auth": "^4.9.0"
729
+ }
730
+ }
731
+ ```
732
+
733
+ **Installing a collection:**
734
+ ```bash
735
+ craftdesk add git+https://github.com/company/rails-enterprise-stack.git
736
+ ```
737
+
738
+ **What happens:**
739
+ 1. CraftDesk reads the collection's `craftdesk.json`
740
+ 2. Recursively resolves all 6 dependencies
741
+ 3. Installs the collection + all dependencies
742
+ 4. Creates lockfile tracking everything
743
+
744
+ **Result:** 7 crafts installed (collection + 6 dependencies)
745
+
746
+ **How collections work:**
747
+
748
+ Collections leverage CraftDesk's **recursive dependency resolution**. When you install a craft with dependencies, CraftDesk:
749
+ 1. Clones the repository
750
+ 2. Reads `craftdesk.json`
751
+ 3. Adds all dependencies to the resolution queue
752
+ 4. Recursively resolves transitive dependencies
753
+ 5. Installs everything with a single lockfile
754
+
755
+ This means **any craft with dependencies acts as a collection** - the `type: "collection"` field just improves discoverability in the registry.
756
+
757
+ **Nested collections:**
758
+
759
+ Collections can depend on other collections:
760
+ ```json
761
+ {
762
+ "name": "full-stack-rails",
763
+ "type": "collection",
764
+ "dependencies": {
765
+ "rails-enterprise-stack": "^1.0.0", // Another collection!
766
+ "frontend-tooling": "^2.1.0", // Another collection!
767
+ "docker-deployment": "^1.5.0"
768
+ }
769
+ }
770
+ ```
771
+
772
+ CraftDesk handles arbitrary nesting depth with circular dependency detection.
135
773
 
136
774
  ### Manifest File: craftdesk.json
137
775
 
@@ -170,169 +808,800 @@ Records exact versions installed (like package-lock.json or Gemfile.lock):
170
808
  }
171
809
  ```
172
810
 
173
- **Always commit this file to version control!**
811
+ **Always commit this file to version control!**
812
+
813
+ ### Security: Checksum Verification
814
+
815
+ CraftDesk automatically verifies the integrity of downloaded packages:
816
+
817
+ - **Registry packages**: SHA-256 checksums are computed when you first add a craft and stored in `craftdesk.lock`
818
+ - **Subsequent installs**: The downloaded file is verified against the stored checksum before extraction
819
+ - **MITM protection**: Prevents tampering during download by detecting any modifications
820
+ - **Git packages**: Git commit hashes serve as checksums - stored in the lockfile and verified during clone
821
+
822
+ **What happens on checksum mismatch:**
823
+ ```
824
+ Error: Checksum verification failed for john/rails-api@2.1.0.
825
+ Expected: a1b2c3d4e5f6...
826
+ This may indicate a corrupted download or a security issue.
827
+ Try running 'craftdesk install --no-lockfile' to re-resolve dependencies.
828
+ ```
829
+
830
+ The lockfile contains SHA-256 hashes that ensure reproducible and secure installations across all team members.
831
+
832
+ ### Install Directory
833
+
834
+ By default, crafts install to `.claude/` in your project:
835
+ ```
836
+ .claude/
837
+ ├── settings.json # Plugin configuration (auto-generated)
838
+ ├── skills/
839
+ │ ├── ruby-on-rails/
840
+ │ └── postgres-expert/
841
+ ├── agents/
842
+ │ └── code-reviewer/
843
+ ├── commands/
844
+ │ └── deploy/
845
+ ├── hooks/
846
+ │ └── pre-commit/
847
+ └── plugins/ # Flat plugin installation
848
+ ├── company-rails-plugin/
849
+ │ ├── plugin.json
850
+ │ ├── PLUGIN.md
851
+ │ └── skills/...
852
+ └── my-skill-plugin/ # Wrapped skill
853
+ ```
854
+
855
+ ---
856
+
857
+ ## Plugin System
858
+
859
+ **New in v0.3.0**: CraftDesk now supports a comprehensive plugin system for bundling multiple crafts with automatic dependency management.
860
+
861
+ ### What are Plugins?
862
+
863
+ Plugins allow you to:
864
+ - **Bundle multiple crafts** (skills, agents, commands, hooks) together
865
+ - **Declare dependencies** that are automatically installed
866
+ - **Configure MCP servers** (Model Context Protocol) for external tools
867
+ - **Share configurations** and related files as a cohesive package
868
+ - **Wrap individual crafts** as plugins for better organization
869
+
870
+ ### Installing Plugins
871
+
872
+ ```bash
873
+ # Install a plugin from registry
874
+ craftdesk add company/rails-standards-plugin
875
+
876
+ # What happens automatically:
877
+ # 1. Plugin is installed to .claude/plugins/company-rails-standards-plugin/
878
+ # 2. Dependencies are resolved and auto-installed
879
+ # 3. Plugin is registered in .claude/settings.json
880
+ # 4. MCP server is configured (if provided)
881
+ # 5. Plugin tree is added to craftdesk.lock
882
+ ```
883
+
884
+ **Example Output**:
885
+ ```
886
+ Adding company/rails-standards-plugin...
887
+ Found company/rails-standards-plugin@2.1.0
888
+ Installing company/rails-standards-plugin...
889
+ Plugin detected - resolving dependencies...
890
+ Resolved 3 total dependencies
891
+ Installing plugin dependency: john/rspec-testing...
892
+ ✓ Resolved john/rspec-testing@1.5.3
893
+ Installing plugin dependency: jane/postgres-toolkit...
894
+ ✓ Resolved jane/postgres-toolkit@3.2.1
895
+ ✓ Installed company/rails-standards-plugin@2.1.0
896
+ Craft added successfully!
897
+ ```
898
+
899
+ ### Plugin Structure
900
+
901
+ A plugin contains a `plugin.json` manifest:
902
+
903
+ ```json
904
+ {
905
+ "name": "company-rails-plugin",
906
+ "version": "2.1.0",
907
+ "type": "plugin",
908
+ "description": "Rails development standards",
909
+ "author": "company",
910
+ "components": {
911
+ "skills": ["coding-standards", "rails-best-practices"],
912
+ "agents": ["standards-enforcer"],
913
+ "commands": ["check-standards"]
914
+ },
915
+ "dependencies": {
916
+ "john/rspec-testing": "^1.5.0",
917
+ "jane/postgres-toolkit": "^3.2.0"
918
+ },
919
+ "mcp": {
920
+ "type": "stdio",
921
+ "command": "/usr/bin/rails-standards-mcp",
922
+ "args": ["--config", ".claude/plugins/company-rails-plugin/config.json"]
923
+ }
924
+ }
925
+ ```
926
+
927
+ ### Automatic Dependency Resolution
928
+
929
+ When you install a plugin, **all dependencies are automatically installed**:
930
+
931
+ ```bash
932
+ $ craftdesk add company/rails-plugin
933
+
934
+ # Installs dependency tree:
935
+ # company/rails-plugin (direct)
936
+ # ├── john/rspec-testing (dependency)
937
+ # └── jane/postgres-toolkit (dependency)
938
+ # └── jane/sql-helpers (nested dependency)
939
+ ```
940
+
941
+ All dependencies are:
942
+ - ✅ Downloaded from their respective sources (registry/git)
943
+ - ✅ Installed to appropriate directories
944
+ - ✅ Verified with integrity checksums
945
+ - ✅ Marked as dependencies in lockfile
946
+ - ✅ Registered in `.claude/settings.json`
947
+
948
+ ### Wrapping Individual Crafts
949
+
950
+ Convert any skill, agent, command, or hook into a plugin:
951
+
952
+ ```bash
953
+ craftdesk add my-skill --as-plugin
954
+ ```
955
+
956
+ **What happens**:
957
+ 1. Original craft installed to `.claude/skills/my-skill/`
958
+ 2. Plugin wrapper created at `.claude/plugins/my-skill-plugin/`
959
+ 3. `plugin.json` and `PLUGIN.md` auto-generated
960
+ 4. Craft files copied to plugin structure
961
+ 5. Registered in settings as wrapped plugin
962
+
963
+ **Use cases**:
964
+ - Add MCP server to existing skill
965
+ - Bundle configuration with craft
966
+ - Prepare for publishing to marketplace
967
+ - Enable/disable craft from Claude Code UI
968
+
969
+ ### Plugin Tree Visualization
970
+
971
+ View your plugin dependency tree:
972
+
973
+ ```bash
974
+ $ craftdesk list
975
+
976
+ my-project@1.0.0
977
+
978
+ 🔌 Plugins:
979
+ company/rails-standards@2.1.0
980
+ ├── john/rspec-testing@1.5.3
981
+ └── jane/postgres-toolkit@3.2.1
982
+ my-skill-plugin@1.0.0
983
+
984
+ 📚 Skills:
985
+ standalone-skill@1.0.0
986
+
987
+ Total: 5 crafts installed
988
+ ```
989
+
990
+ ### Removing Plugins with Dependencies
991
+
992
+ CraftDesk prevents accidental removal of required dependencies:
993
+
994
+ ```bash
995
+ $ craftdesk remove john/rspec-testing
996
+
997
+ Warning: john/rspec-testing is required by:
998
+ - company/rails-standards@2.1.0
999
+
1000
+ Use --force to remove anyway
1001
+ ```
1002
+
1003
+ Force removal:
1004
+ ```bash
1005
+ craftdesk remove john/rspec-testing --force
1006
+ ```
1007
+
1008
+ ### Settings Integration
1009
+
1010
+ Plugins are automatically registered in `.claude/settings.json`:
1011
+
1012
+ ```json
1013
+ {
1014
+ "version": "1.0.0",
1015
+ "plugins": {
1016
+ "company-rails-plugin": {
1017
+ "name": "company-rails-plugin",
1018
+ "version": "2.1.0",
1019
+ "enabled": true,
1020
+ "installPath": "plugins/company-rails-plugin",
1021
+ "dependencies": ["john-rspec-testing", "jane-postgres-toolkit"],
1022
+ "mcp": {
1023
+ "type": "stdio",
1024
+ "command": "/usr/bin/rails-standards-mcp",
1025
+ "args": ["--config", ".claude/plugins/company-rails-plugin/config.json"]
1026
+ }
1027
+ }
1028
+ }
1029
+ }
1030
+ ```
1031
+
1032
+ **For complete details**, see [DEPENDENCY_MANAGEMENT.md](./DEPENDENCY_MANAGEMENT.md)
1033
+
1034
+ ---
1035
+
1036
+ ## Command Reference
1037
+
1038
+ ### `craftdesk init [options]`
1039
+
1040
+ Initialize a new craftdesk.json file.
1041
+
1042
+ **Options:**
1043
+ - `-y, --yes` - Skip prompts and use defaults
1044
+ - `-n, --name <name>` - Project name (default: directory name)
1045
+ - `-v, --version <version>` - Project version (default: "1.0.0")
1046
+ - `-t, --type <type>` - Project type: skill, agent, command, hook, plugin, or collection (default: "skill")
1047
+ - `-d, --description <desc>` - Project description
1048
+ - `-a, --author <author>` - Author name
1049
+ - `-l, --license <license>` - License (default: "MIT")
1050
+
1051
+ **Examples:**
1052
+ ```bash
1053
+ # Interactive initialization
1054
+ craftdesk init
1055
+
1056
+ # Quick init with defaults
1057
+ craftdesk init -y
1058
+
1059
+ # Specify options
1060
+ craftdesk init --name my-skill --type skill --author "Your Name"
1061
+ ```
1062
+
1063
+ ---
1064
+
1065
+ ### `craftdesk install [options]`
1066
+
1067
+ Install all dependencies from craftdesk.json.
1068
+
1069
+ **Options:**
1070
+ - `--no-lockfile` - Ignore craftdesk.lock and re-resolve dependencies
1071
+ - `--production` - Skip devDependencies
1072
+
1073
+ **Examples:**
1074
+ ```bash
1075
+ # Install all dependencies
1076
+ craftdesk install
1077
+
1078
+ # Or use the alias
1079
+ craftdesk i
1080
+
1081
+ # Production install (skip dev dependencies)
1082
+ craftdesk install --production
1083
+
1084
+ # Force re-resolve (ignore lockfile)
1085
+ craftdesk install --no-lockfile
1086
+ ```
1087
+
1088
+ **What it does:**
1089
+ 1. Reads craftdesk.json
1090
+ 2. Uses craftdesk.lock if present (ensures reproducibility)
1091
+ 3. Resolves dependencies (registry + git sources)
1092
+ 4. Installs to .claude/ directory
1093
+ 5. Updates/creates craftdesk.lock
1094
+
1095
+ ---
1096
+
1097
+ ### `craftdesk add <craft> [options]`
1098
+
1099
+ Add a new dependency and install it immediately.
1100
+
1101
+ **Options:**
1102
+ - `-D, --save-dev` - Save as devDependency
1103
+ - `-O, --save-optional` - Save as optionalDependency
1104
+ - `-E, --save-exact` - Save exact version (no ^ or ~)
1105
+ - `-t, --type <type>` - Specify craft type (skill, agent, command, hook, plugin, collection)
1106
+
1107
+ **Examples:**
1108
+
1109
+ ```bash
1110
+ # GitHub web URLs (auto-converted)
1111
+ craftdesk add https://github.com/user/repo/blob/main/skill.md
1112
+ craftdesk add https://github.com/user/repo/tree/main/skills/auth
1113
+
1114
+ # With explicit type
1115
+ craftdesk add https://github.com/user/repo/blob/main/agent.md --type agent
1116
+
1117
+ # Git dependencies (manual format)
1118
+ craftdesk add git+https://github.com/user/repo.git
1119
+ craftdesk add git+https://github.com/user/repo.git#develop
1120
+ craftdesk add git+https://github.com/user/repo.git#v2.0.0
1121
+
1122
+ # Direct file reference
1123
+ craftdesk add git+https://github.com/user/repo.git#main#file:skill.md
1124
+
1125
+ # Subdirectory (monorepo)
1126
+ craftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth
1127
+ ```
1128
+
1129
+ ---
1130
+
1131
+ ### `craftdesk remove <craft>`
1132
+
1133
+ Remove a dependency from craftdesk.json and the filesystem.
1134
+
1135
+ **Examples:**
1136
+ ```bash
1137
+ craftdesk remove my-skill
1138
+ craftdesk remove my-agent
1139
+ ```
1140
+
1141
+ ---
1142
+
1143
+ ### `craftdesk list [options]`
1144
+
1145
+ List installed crafts.
1146
+
1147
+ **Options:**
1148
+ - `--tree` - Show dependency tree
1149
+ - `--depth <n>` - Limit tree depth
1150
+ - `--json` - Output as JSON
1151
+
1152
+ **Examples:**
1153
+ ```bash
1154
+ # Simple list
1155
+ craftdesk list
1156
+
1157
+ # Show dependency tree
1158
+ craftdesk list --tree
1159
+
1160
+ # Limit tree depth
1161
+ craftdesk list --tree --depth 2
1162
+
1163
+ # JSON output (for scripts)
1164
+ craftdesk list --json
1165
+ ```
1166
+
1167
+ **Example output:**
1168
+ ```
1169
+ my-project@1.0.0
1170
+
1171
+ Installed crafts:
1172
+ • my-skill@main (skill)
1173
+ • code-reviewer@v2.0.1 (agent)
1174
+ • postgres-expert@main (skill)
1175
+
1176
+ Total: 3 crafts installed
1177
+ ```
1178
+
1179
+ ---
1180
+
1181
+ ### `craftdesk search <query> [options]`
1182
+
1183
+ Search for crafts in the registry.
1184
+
1185
+ **Options:**
1186
+ - `-t, --type <type>` - Filter by type (skill, agent, command, hook, plugin, collection)
1187
+
1188
+ **Examples:**
1189
+ ```bash
1190
+ # Search for crafts
1191
+ craftdesk search kafka
1192
+
1193
+ # Search for skills only
1194
+ craftdesk search rails --type skill
1195
+
1196
+ # Search for plugins
1197
+ craftdesk search standards --type plugin
1198
+ ```
1199
+
1200
+ **Example output:**
1201
+ ```
1202
+ Search results for "kafka":
1203
+
1204
+ john/kafka-processing@2.1.0 (skill)
1205
+ Expert knowledge for processing Kafka messages
1206
+
1207
+ jane/kafka-agent@1.5.3 (agent)
1208
+ Autonomous agent for Kafka stream management
1209
+
1210
+ Found 2 crafts
1211
+ ```
1212
+
1213
+ ---
1214
+
1215
+ ### `craftdesk info <craft>`
1216
+
1217
+ Display detailed information about a craft from the registry.
1218
+
1219
+ **Examples:**
1220
+ ```bash
1221
+ # Get info about a craft
1222
+ craftdesk info john/rails-api
1223
+
1224
+ # Get info about a specific version
1225
+ craftdesk info john/rails-api@2.1.0
1226
+ ```
1227
+
1228
+ **Example output:**
1229
+ ```
1230
+ john/rails-api@2.1.0
1231
+
1232
+ Description: Rails API development best practices
1233
+ Type: skill
1234
+ Author: john
1235
+ License: MIT
1236
+ Downloads: 1,234
1237
+
1238
+ Versions:
1239
+ 2.1.0 (latest)
1240
+ 2.0.0
1241
+ 1.5.0
1242
+
1243
+ Dependencies:
1244
+ jane/postgres-toolkit: ^1.0.0
1245
+ ```
1246
+
1247
+ ---
1248
+
1249
+ ### `craftdesk outdated`
1250
+
1251
+ Check for outdated dependencies that have newer versions available.
1252
+
1253
+ **Examples:**
1254
+ ```bash
1255
+ # Check all dependencies
1256
+ craftdesk outdated
1257
+ ```
1258
+
1259
+ **Example output:**
1260
+ ```
1261
+ Checking for outdated dependencies...
1262
+
1263
+ Outdated crafts:
1264
+
1265
+ john/rails-api
1266
+ Current: 2.0.0
1267
+ Latest: 2.1.0
1268
+ Type: skill
1269
+
1270
+ jane/postgres-toolkit
1271
+ Current: 1.2.0
1272
+ Latest: 1.5.0
1273
+ Type: skill
1274
+
1275
+ 2 outdated crafts found
1276
+ Run 'craftdesk update' to update all, or 'craftdesk update <craft>' to update specific crafts.
1277
+ ```
1278
+
1279
+ ---
1280
+
1281
+ ### `craftdesk update [craft]`
1282
+
1283
+ Update dependencies to their latest compatible versions.
1284
+
1285
+ **Examples:**
1286
+ ```bash
1287
+ # Update all outdated dependencies
1288
+ craftdesk update
1289
+
1290
+ # Update a specific craft
1291
+ craftdesk update john/rails-api
1292
+ ```
1293
+
1294
+ **What it does:**
1295
+ 1. Checks for newer versions in the registry
1296
+ 2. Downloads and installs updates
1297
+ 3. Updates craftdesk.lock with new versions
1298
+ 4. Verifies checksums for security
1299
+
1300
+ ---
1301
+
1302
+ ### `craftdesk publish [options]`
1303
+
1304
+ Publish a craft to the registry.
1305
+
1306
+ **Options:**
1307
+ - `--visibility <level>` - Set visibility: public, private, or organization (default: public)
1308
+
1309
+ **Examples:**
1310
+ ```bash
1311
+ # Publish the current craft
1312
+ craftdesk publish
174
1313
 
175
- ### Install Directory
1314
+ # Publish as private
1315
+ craftdesk publish --visibility private
176
1316
 
177
- By default, crafts install to `.claude/` in your project:
178
- ```
179
- .claude/
180
- ├── skills/
181
- │ ├── ruby-on-rails/
182
- │ └── postgres-expert/
183
- ├── agents/
184
- │ └── code-reviewer/
185
- ├── commands/
186
- │ └── deploy/
187
- └── hooks/
188
- └── pre-commit/
1317
+ # Publish to organization only
1318
+ craftdesk publish --visibility organization
189
1319
  ```
190
1320
 
1321
+ **Prerequisites:**
1322
+ - Must be logged in (`craftdesk login`)
1323
+ - Must have a valid `craftdesk.json` in current directory
1324
+ - Craft files must exist (SKILL.md, AGENT.md, etc.)
1325
+
1326
+ **What it does:**
1327
+ 1. Reads craftdesk.json for metadata
1328
+ 2. Collects all craft files
1329
+ 3. Creates a new version on the registry
1330
+ 4. Publishes with specified visibility
1331
+
191
1332
  ---
192
1333
 
193
- ## Command Reference
1334
+ ### `craftdesk setup-multi-agent [options]`
194
1335
 
195
- ### `craftdesk init [options]`
1336
+ Interactive wizard to configure multi-agent sync.
196
1337
 
197
- Initialize a new craftdesk.json file.
1338
+ **Options:**
1339
+ - `--auto-sync` - Enable automatic sync on install/update
1340
+ - `--skip-sync` - Skip initial sync after setup
1341
+
1342
+ **Examples:**
1343
+ ```bash
1344
+ # Interactive setup (recommended)
1345
+ craftdesk setup-multi-agent
1346
+
1347
+ # Setup with auto-sync enabled
1348
+ craftdesk setup-multi-agent --auto-sync
1349
+
1350
+ # Setup without initial sync
1351
+ craftdesk setup-multi-agent --skip-sync
1352
+ ```
1353
+
1354
+ **What it does:**
1355
+ 1. Detects AI coding assistants in your project
1356
+ 2. Lets you choose which agents to sync to
1357
+ 3. Updates `craftdesk.json` with multiAgent configuration
1358
+ 4. Optionally performs initial sync of existing crafts
1359
+
1360
+ ---
1361
+
1362
+ ### `craftdesk detect-agents [options]`
1363
+
1364
+ Detect AI coding assistants installed in the project.
198
1365
 
199
1366
  **Options:**
200
- - `-y, --yes` - Skip prompts and use defaults
201
- - `-n, --name <name>` - Project name (default: directory name)
202
- - `-v, --version <version>` - Project version (default: "1.0.0")
203
- - `-t, --type <type>` - Project type: skill, agent, command, hook, or plugin (default: "skill")
204
- - `-d, --description <desc>` - Project description
205
- - `-a, --author <author>` - Author name
206
- - `-l, --license <license>` - License (default: "MIT")
1367
+ - `-v, --verbose` - Show detailed detection information
1368
+ - `-f, --format <format>` - Output format: text or json (default: text)
207
1369
 
208
1370
  **Examples:**
209
1371
  ```bash
210
- # Interactive initialization
211
- craftdesk init
1372
+ # Detect agents
1373
+ craftdesk detect-agents
212
1374
 
213
- # Quick init with defaults
214
- craftdesk init -y
1375
+ # Verbose output
1376
+ craftdesk detect-agents --verbose
215
1377
 
216
- # Specify options
217
- craftdesk init --name my-skill --type skill --author "Your Name"
1378
+ # JSON output for scripting
1379
+ craftdesk detect-agents --format json
1380
+ ```
1381
+
1382
+ **Example output:**
1383
+ ```
1384
+ 🔍 AI Coding Assistant Detection
1385
+
1386
+ Detected Agents:
1387
+ ✓ Claude Code
1388
+ Directory: .claude/skills
1389
+ Status: ✅ Enabled
1390
+
1391
+ ○ Cursor
1392
+ Directory: .cursor/skills
1393
+ Status: ⚪ Available
1394
+
1395
+ Summary:
1396
+ Detected: 2 agent(s)
1397
+ Enabled: 1 agent(s)
1398
+
1399
+ 💡 Tip:
1400
+ You have multiple agents but sync is only enabled for one.
1401
+ Run `craftdesk setup-multi-agent` to sync across all agents.
218
1402
  ```
219
1403
 
220
1404
  ---
221
1405
 
222
- ### `craftdesk install [options]`
1406
+ ### `craftdesk sync [options]`
223
1407
 
224
- Install all dependencies from craftdesk.json.
1408
+ Sync crafts to all configured AI agents.
225
1409
 
226
1410
  **Options:**
227
- - `--no-lockfile` - Ignore craftdesk.lock and re-resolve dependencies
228
- - `--production` - Skip devDependencies
1411
+ - `-c, --craft <name>` - Sync specific craft by name
1412
+ - `-f, --force` - Force sync even if checksums match
1413
+ - `--dry-run` - Show what would be synced without making changes
229
1414
 
230
1415
  **Examples:**
231
1416
  ```bash
232
- # Install all dependencies
233
- craftdesk install
1417
+ # Sync all crafts
1418
+ craftdesk sync
234
1419
 
235
- # Or use the alias
236
- craftdesk i
1420
+ # Sync specific craft
1421
+ craftdesk sync --craft ruby-expert
237
1422
 
238
- # Production install (skip dev dependencies)
239
- craftdesk install --production
1423
+ # Dry run (preview changes)
1424
+ craftdesk sync --dry-run
240
1425
 
241
- # Force re-resolve (ignore lockfile)
242
- craftdesk install --no-lockfile
1426
+ # Force sync
1427
+ craftdesk sync --force
243
1428
  ```
244
1429
 
245
1430
  **What it does:**
246
- 1. Reads craftdesk.json
247
- 2. Uses craftdesk.lock if present (ensures reproducibility)
248
- 3. Resolves dependencies (registry + git sources)
249
- 4. Installs to .claude/ directory
250
- 5. Updates/creates craftdesk.lock
1431
+ 1. Reads multiAgent configuration from craftdesk.json
1432
+ 2. Copies crafts from canonical location to all targets
1433
+ 3. Calculates and stores SHA-256 checksums
1434
+ 4. Reports sync status for each location
1435
+
1436
+ **Example output:**
1437
+ ```
1438
+ ✅ Synced 5 craft(s)
1439
+
1440
+ ✓ ruby-expert: 3 location(s)
1441
+ ✓ python-expert: 3 location(s)
1442
+ ✓ postgres-expert: 3 location(s)
1443
+ ✓ docker-expert: 3 location(s)
1444
+ ✓ git-expert: 3 location(s)
1445
+
1446
+ Summary:
1447
+ Total synced: 15 location(s)
1448
+ ```
251
1449
 
252
1450
  ---
253
1451
 
254
- ### `craftdesk add <craft> [options]`
1452
+ ### `craftdesk verify [options]`
255
1453
 
256
- Add a new dependency and install it immediately.
1454
+ Verify sync status of crafts across AI agents using checksum validation.
257
1455
 
258
1456
  **Options:**
259
- - `-D, --save-dev` - Save as devDependency
260
- - `-O, --save-optional` - Save as optionalDependency
261
- - `-E, --save-exact` - Save exact version (no ^ or ~)
262
- - `-t, --type <type>` - Specify craft type (skill, agent, command, hook, plugin)
1457
+ - `-c, --craft <name>` - Verify specific craft by name
1458
+ - `-v, --verbose` - Show detailed checksum information
1459
+ - `-f, --format <format>` - Output format: text or json (default: text)
263
1460
 
264
1461
  **Examples:**
265
-
266
1462
  ```bash
267
- # GitHub web URLs (auto-converted)
268
- craftdesk add https://github.com/user/repo/blob/main/skill.md
269
- craftdesk add https://github.com/user/repo/tree/main/skills/auth
1463
+ # Verify all crafts
1464
+ craftdesk verify
270
1465
 
271
- # With explicit type
272
- craftdesk add https://github.com/user/repo/blob/main/agent.md --type agent
1466
+ # Verify specific craft
1467
+ craftdesk verify --craft ruby-expert
273
1468
 
274
- # Git dependencies (manual format)
275
- craftdesk add git+https://github.com/user/repo.git
276
- craftdesk add git+https://github.com/user/repo.git#develop
277
- craftdesk add git+https://github.com/user/repo.git#v2.0.0
1469
+ # Verbose output with checksums
1470
+ craftdesk verify --verbose
278
1471
 
279
- # Direct file reference
280
- craftdesk add git+https://github.com/user/repo.git#main#file:skill.md
1472
+ # JSON output
1473
+ craftdesk verify --format json
1474
+ ```
281
1475
 
282
- # Subdirectory (monorepo)
283
- craftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth
1476
+ **What it does:**
1477
+ 1. Reads multiAgent configuration
1478
+ 2. Calculates SHA-256 checksums for all copies
1479
+ 3. Compares checksums to detect drift
1480
+ 4. Reports which copies are in sync vs. out of sync
1481
+
1482
+ **Example output (in sync):**
1483
+ ```
1484
+ 🔍 Sync Status: All Crafts
1485
+
1486
+ Summary:
1487
+ Total crafts: 5
1488
+ In sync: 5
1489
+ Out of sync: 0
1490
+
1491
+ ✅ All 5 craft(s) are in sync!
1492
+ ```
1493
+
1494
+ **Example output (drift detected):**
1495
+ ```
1496
+ 🔍 Sync Status: All Crafts
1497
+
1498
+ Summary:
1499
+ Total crafts: 5
1500
+ In sync: 4
1501
+ Out of sync: 1
1502
+
1503
+ ❌ Out of Sync (1):
1504
+
1505
+ ruby-expert
1506
+ ⚠️ .cursor/skills/ruby-expert (modified)
1507
+
1508
+ 💡 Run `craftdesk sync` to fix all issues
284
1509
  ```
285
1510
 
286
1511
  ---
287
1512
 
288
- ### `craftdesk remove <craft>`
1513
+ ## Authentication
289
1514
 
290
- Remove a dependency from craftdesk.json and the filesystem.
1515
+ CraftDesk supports authenticated access to private registries.
1516
+
1517
+ ### `craftdesk login [options]`
1518
+
1519
+ Authenticate with a registry using an API token.
1520
+
1521
+ **Options:**
1522
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
291
1523
 
292
1524
  **Examples:**
293
1525
  ```bash
294
- craftdesk remove my-skill
295
- craftdesk remove my-agent
1526
+ # Login to default registry
1527
+ craftdesk login
1528
+
1529
+ # Login to a specific registry
1530
+ craftdesk login --registry https://private.company.com
296
1531
  ```
297
1532
 
1533
+ **How it works:**
1534
+ 1. Prompts for your API token
1535
+ 2. Verifies the token with the registry
1536
+ 3. Stores credentials in `~/.craftdesk/config.json`
1537
+ 4. Token is used for subsequent registry operations
1538
+
1539
+ **Getting an API token:**
1540
+ - Log in to your CraftDesk registry web interface
1541
+ - Navigate to Settings → API Tokens
1542
+ - Generate a new token
1543
+
298
1544
  ---
299
1545
 
300
- ### `craftdesk list [options]`
1546
+ ### `craftdesk logout [options]`
301
1547
 
302
- List installed crafts.
1548
+ Remove stored authentication credentials.
303
1549
 
304
1550
  **Options:**
305
- - `--tree` - Show dependency tree
306
- - `--depth <n>` - Limit tree depth
307
- - `--json` - Output as JSON
1551
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
308
1552
 
309
1553
  **Examples:**
310
1554
  ```bash
311
- # Simple list
312
- craftdesk list
1555
+ # Logout from default registry
1556
+ craftdesk logout
313
1557
 
314
- # Show dependency tree
315
- craftdesk list --tree
1558
+ # Logout from specific registry
1559
+ craftdesk logout --registry https://private.company.com
1560
+ ```
316
1561
 
317
- # Limit tree depth
318
- craftdesk list --tree --depth 2
1562
+ ---
319
1563
 
320
- # JSON output (for scripts)
321
- craftdesk list --json
1564
+ ### `craftdesk whoami [options]`
1565
+
1566
+ Display the currently logged-in user.
1567
+
1568
+ **Options:**
1569
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
1570
+
1571
+ **Examples:**
1572
+ ```bash
1573
+ # Check current user
1574
+ craftdesk whoami
1575
+
1576
+ # Check user for specific registry
1577
+ craftdesk whoami --registry https://private.company.com
322
1578
  ```
323
1579
 
324
1580
  **Example output:**
325
1581
  ```
326
- my-project@1.0.0
1582
+ Logged in to https://craftdesk.ai as john (john@example.com)
1583
+ Organization: acme-corp
1584
+ ```
327
1585
 
328
- Installed crafts:
329
- • my-skill@main (skill)
330
- • code-reviewer@v2.0.1 (agent)
331
- • postgres-expert@main (skill)
1586
+ ---
332
1587
 
333
- Total: 3 crafts installed
1588
+ ### Environment Variable Authentication
1589
+
1590
+ For CI/CD environments, you can use environment variables instead of `craftdesk login`:
1591
+
1592
+ ```bash
1593
+ # For a registry named "company-private" in craftdesk.json
1594
+ export CRAFTDESK_AUTH_COMPANY_PRIVATE=your_api_token_here
1595
+
1596
+ # For the default registry
1597
+ export CRAFTDESK_AUTH_LOCALHOST_3000=your_api_token_here
1598
+
1599
+ # The variable name is derived from the registry URL:
1600
+ # https://example.com -> CRAFTDESK_AUTH_EXAMPLE_COM
334
1601
  ```
335
1602
 
1603
+ Environment variables take precedence over stored credentials.
1604
+
336
1605
  ---
337
1606
 
338
1607
  ### Global Options
@@ -354,9 +1623,75 @@ craftdesk init --help
354
1623
 
355
1624
  ## Dependency Sources
356
1625
 
357
- CraftDesk currently supports Git dependencies. Registry support is under development.
1626
+ CraftDesk supports both registry and git dependencies.
1627
+
1628
+ ### 1. Registry Dependencies (CraftDesk Web API)
1629
+
1630
+ Install crafts from the CraftDesk registry using `author/name` format:
1631
+
1632
+ ```bash
1633
+ # Search for crafts
1634
+ craftdesk search kafka
1635
+
1636
+ # Get information about a craft
1637
+ craftdesk info john/rails-api
358
1638
 
359
- ### 1. GitHub URLs (Easiest)
1639
+ # Add from registry
1640
+ craftdesk add john/rails-api
1641
+ craftdesk add john/rails-api@^2.1.0
1642
+
1643
+ # Add with specific version
1644
+ craftdesk add jane/postgres-expert@1.2.0
1645
+ ```
1646
+
1647
+ **Registry format in craftdesk.json:**
1648
+
1649
+ ```json
1650
+ {
1651
+ "dependencies": {
1652
+ "john/rails-api": "^2.1.0",
1653
+ "jane/kafka-processing": "~1.5.2",
1654
+ "team/postgres-admin": "latest"
1655
+ },
1656
+ "registries": {
1657
+ "default": {
1658
+ "url": "http://localhost:3000"
1659
+ }
1660
+ }
1661
+ }
1662
+ ```
1663
+
1664
+ **Important:** You must configure your registry URL in `craftdesk.json` to use registry-based crafts. Git-based dependencies (GitHub URLs) work without any registry configuration.
1665
+
1666
+ **Private Registry Authentication:**
1667
+
1668
+ For private registries, set authentication tokens via environment variables:
1669
+
1670
+ ```bash
1671
+ # For a registry named "company-private" in craftdesk.json
1672
+ export CRAFTDESK_AUTH_COMPANY_PRIVATE=your_token_here
1673
+
1674
+ # For default registry
1675
+ export CRAFTDESK_AUTH_DEFAULT=your_token_here
1676
+ ```
1677
+
1678
+ Example `craftdesk.json` with private registry:
1679
+
1680
+ ```json
1681
+ {
1682
+ "registries": {
1683
+ "default": {
1684
+ "url": "https://your-registry.com"
1685
+ },
1686
+ "company-private": {
1687
+ "url": "https://private.company.com",
1688
+ "scope": "@company"
1689
+ }
1690
+ }
1691
+ }
1692
+ ```
1693
+
1694
+ ### 2. GitHub URLs (Easiest for Git)
360
1695
 
361
1696
  Simply paste any GitHub URL - it auto-converts to the correct format:
362
1697
 
@@ -371,7 +1706,7 @@ craftdesk add https://github.com/user/repo/blob/main/agent.md
371
1706
  craftdesk add https://github.com/user/repo
372
1707
  ```
373
1708
 
374
- ### 2. Git Dependencies
1709
+ ### 3. Git Dependencies
375
1710
 
376
1711
  From git repositories:
377
1712
 
@@ -402,26 +1737,60 @@ From git repositories:
402
1737
  - `path` - Subdirectory within repo (for monorepos)
403
1738
  - `file` - Direct file path (for single-file crafts)
404
1739
 
405
- ### 3. Registry Dependencies (Coming Soon)
1740
+ ---
406
1741
 
407
- > **Note:** Registry support is currently under development. A self-hosted registry server will be available soon.
1742
+ ## Monorepo Support
408
1743
 
409
- Future registry format:
1744
+ CraftDesk has **full support for monorepo workflows**, allowing you to install crafts from subdirectories within a repository. This is perfect for teams maintaining multiple related crafts in one repository.
410
1745
 
411
- ```json
412
- {
413
- "dependencies": {
414
- "ruby-on-rails": "^7.0.0",
415
- "@company/internal-skill": "^2.0.0"
416
- }
417
- }
1746
+ ### Quick Start: Auto-Converting GitHub URLs
1747
+
1748
+ The easiest way to install from monorepos is to **paste GitHub web URLs directly**:
1749
+
1750
+ ```bash
1751
+ # Subdirectory from monorepo - just paste the GitHub URL!
1752
+ craftdesk add https://github.com/company/monorepo/tree/main/skills/auth
1753
+
1754
+ # Single file from monorepo
1755
+ craftdesk add https://github.com/company/monorepo/blob/main/skills/auth/SKILL.md
1756
+
1757
+ # Works with any branch or tag
1758
+ craftdesk add https://github.com/company/monorepo/tree/v2.0.0/packages/deployer
418
1759
  ```
419
1760
 
420
- ---
1761
+ CraftDesk automatically converts these to the correct git syntax and extracts only the specified subdirectory or file.
421
1762
 
422
- ## Monorepo Support
1763
+ ### Git URL Syntax
1764
+
1765
+ For more control, use explicit git URL syntax with path or file specifiers:
1766
+
1767
+ ```bash
1768
+ # Subdirectory with branch
1769
+ craftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth
423
1770
 
424
- Install multiple crafts from the same git repository using subdirectory paths:
1771
+ # Subdirectory with tag
1772
+ craftdesk add git+https://github.com/company/monorepo.git#v2.0.0#path:packages/deployer
1773
+
1774
+ # Subdirectory with commit hash
1775
+ craftdesk add git+https://github.com/company/monorepo.git#abc123def#path:skills/auth
1776
+
1777
+ # Single file with branch
1778
+ craftdesk add git+https://github.com/company/monorepo.git#main#file:skills/auth/SKILL.md
1779
+
1780
+ # Just path (uses default branch)
1781
+ craftdesk add git+https://github.com/company/monorepo.git#path:skills/auth
1782
+ ```
1783
+
1784
+ **Syntax breakdown:**
1785
+ - `#main` - Branch name
1786
+ - `#v2.0.0` - Git tag
1787
+ - `#abc123def` - Commit hash (full 40-char)
1788
+ - `#path:skills/auth` - Subdirectory to extract
1789
+ - `#file:skill.md` - Single file to extract
1790
+
1791
+ ### Using in craftdesk.json
1792
+
1793
+ Multiple crafts from the same monorepo:
425
1794
 
426
1795
  ```json
427
1796
  {
@@ -436,41 +1805,90 @@ Install multiple crafts from the same git repository using subdirectory paths:
436
1805
  "tag": "v3.2.0",
437
1806
  "path": "agents/processor"
438
1807
  },
439
- "report-generator": {
1808
+ "deploy-script": {
440
1809
  "git": "https://github.com/company/ai-crafts-monorepo.git",
441
1810
  "tag": "v3.2.0",
442
- "path": "skills/reporting"
1811
+ "file": "scripts/deploy.md"
443
1812
  }
444
1813
  }
445
1814
  }
446
1815
  ```
447
1816
 
448
- **Benefits:**
449
- - Single git repository for multiple crafts
450
- - Version them together with git tags
451
- - Each craft installs independently
452
- - Efficient cloning (repo cached during resolution)
1817
+ **Each craft can:**
1818
+ - Use different subdirectories (`path`)
1819
+ - Reference single files (`file`)
1820
+ - Use the same or different tags/branches
1821
+ - Be versioned independently or together
1822
+
1823
+ ### Benefits
1824
+
1825
+ ✅ **Single repository** for multiple related crafts
1826
+ ✅ **Version together** using git tags (or independently with branches)
1827
+ ✅ **Efficient cloning** - repository is cloned once and reused
1828
+ ✅ **Clear organization** - keep related crafts together
1829
+ ✅ **Atomic updates** - update all crafts by changing the tag
1830
+ ✅ **Works with private repos** - standard git authentication
1831
+
1832
+ ### Monorepo Structure Example
453
1833
 
454
- **Monorepo structure example:**
455
1834
  ```
456
1835
  ai-crafts-monorepo/
457
1836
  ├── skills/
458
1837
  │ ├── auth/
459
1838
  │ │ ├── craftdesk.json
460
1839
  │ │ └── SKILL.md
1840
+ │ ├── database/
1841
+ │ │ ├── craftdesk.json
1842
+ │ │ └── SKILL.md
461
1843
  │ └── reporting/
462
1844
  │ ├── craftdesk.json
463
1845
  │ └── SKILL.md
464
1846
  ├── agents/
465
- │ └── processor/
1847
+ │ ├── code-reviewer/
1848
+ │ │ ├── craftdesk.json
1849
+ │ │ └── AGENT.md
1850
+ │ └── test-runner/
466
1851
  │ ├── craftdesk.json
467
1852
  │ └── AGENT.md
468
- └── commands/
469
- └── deploy/
470
- ├── craftdesk.json
471
- └── COMMAND.md
1853
+ ├── commands/
1854
+ │ └── deploy/
1855
+ │ ├── craftdesk.json
1856
+ │ └── COMMAND.md
1857
+ └── scripts/
1858
+ ├── setup.md
1859
+ └── deploy.md
472
1860
  ```
473
1861
 
1862
+ ### Lockfile Tracking
1863
+
1864
+ CraftDesk lockfile tracks the exact subdirectory and commit:
1865
+
1866
+ ```json
1867
+ {
1868
+ "crafts": {
1869
+ "auth-handler": {
1870
+ "git": "https://github.com/company/monorepo.git",
1871
+ "tag": "v3.2.0",
1872
+ "commit": "abc123def456...",
1873
+ "path": "skills/auth",
1874
+ "type": "skill",
1875
+ "version": "3.2.0"
1876
+ }
1877
+ }
1878
+ }
1879
+ ```
1880
+
1881
+ This ensures **reproducible installations** - the exact subdirectory from the exact commit is always installed.
1882
+
1883
+ ### Real-World Example
1884
+
1885
+ ```bash
1886
+ # Install from technicalpickles' monorepo
1887
+ craftdesk add https://github.com/technicalpickles/pickled-claude-plugins/tree/main/plugins/working-in-monorepos/skills/working-in-monorepos
1888
+ ```
1889
+
1890
+ This installs only the `working-in-monorepos` skill from the deeply nested monorepo structure.
1891
+
474
1892
  ---
475
1893
 
476
1894
  ## craftdesk.json Reference
@@ -528,7 +1946,7 @@ Complete specification of the craftdesk.json format:
528
1946
  |-------|------|----------|-------------|
529
1947
  | `name` | string | Yes | Craft name (lowercase, no spaces) |
530
1948
  | `version` | string | Yes | Semantic version (e.g., "1.0.0") |
531
- | `type` | string | No | Craft type: skill, agent, command, hook, plugin |
1949
+ | `type` | string | No | Craft type: skill, agent, command, hook, plugin, collection |
532
1950
  | `description` | string | No | Short description |
533
1951
  | `author` | string | No | Author name and email |
534
1952
  | `license` | string | No | License identifier (e.g., "MIT") |
@@ -740,11 +2158,46 @@ npm test
740
2158
 
741
2159
  ### Publishing
742
2160
 
2161
+ CraftDesk uses automated NPM publishing via GitHub Actions with provenance attestation.
2162
+
2163
+ **Quick release:**
2164
+ ```bash
2165
+ ./scripts/release.sh patch # 0.3.0 → 0.3.1
2166
+ ./scripts/release.sh minor # 0.3.0 → 0.4.0
2167
+ ./scripts/release.sh major # 0.3.0 → 1.0.0
2168
+ ```
2169
+
2170
+ The script will:
2171
+ 1. Bump version in package.json
2172
+ 2. Prompt you to update CHANGELOG.md
2173
+ 3. Commit and push changes
2174
+ 4. Create GitHub release
2175
+ 5. GitHub Actions automatically publishes to NPM with provenance
2176
+
2177
+ **Manual process:**
743
2178
  ```bash
744
2179
  npm version patch
745
- npm publish
2180
+ git add package.json CHANGELOG.md
2181
+ git commit -m "Bump to 0.3.1"
2182
+ git push
2183
+ gh release create v0.3.1 --title "v0.3.1" --generate-notes
746
2184
  ```
747
2185
 
2186
+ See [NPM_PUBLISHING_GUIDE.md](./NPM_PUBLISHING_GUIDE.md) for complete setup instructions.
2187
+
2188
+ ---
2189
+
2190
+ ## Documentation
2191
+
2192
+ ### Core Documentation
2193
+ - **[README.md](./README.md)** - This file, general overview and quick start
2194
+ - **[DEPENDENCY_MANAGEMENT.md](./DEPENDENCY_MANAGEMENT.md)** - Complete guide to dependency management
2195
+ - **[PLUGIN_IMPLEMENTATION_COMPLETE.md](./PLUGIN_IMPLEMENTATION_COMPLETE.md)** - Plugin system implementation details
2196
+
2197
+ ### Additional Resources
2198
+ - **[Package.json](./package.json)** - Project metadata and scripts
2199
+ - **[TypeScript Source](./src/)** - Full source code
2200
+
748
2201
  ---
749
2202
 
750
2203
  ## License
@@ -757,22 +2210,46 @@ MIT
757
2210
 
758
2211
  - **Repository**: [https://github.com/mensfeld/craftdesk](https://github.com/mensfeld/craftdesk)
759
2212
  - **Issues**: [https://github.com/mensfeld/craftdesk/issues](https://github.com/mensfeld/craftdesk/issues)
760
- - **Registry** (Coming Soon): Self-hosted registry server under development
2213
+ - **Registry**: Self-hosted registry server available at [CraftDesk Web](../web)
761
2214
 
762
2215
  ---
763
2216
 
764
2217
  ## Roadmap
765
2218
 
2219
+ ### Completed (v0.3.0)
766
2220
  - ✅ Git dependency support
767
2221
  - ✅ GitHub URL auto-conversion
768
2222
  - ✅ Direct file references
769
2223
  - ✅ Monorepo support
770
2224
  - ✅ Lockfile-based version control
771
- - 🚧 Self-hosted registry server (in development)
772
- - 🚧 Private registry authentication
773
- - 🚧 Dependency conflict resolution
774
- - 🚧 Semantic versioning for registry packages
2225
+ - ✅ Self-hosted registry server support
2226
+ - ✅ ZIP archive extraction for registry crafts
2227
+ - ✅ **Plugin system** with dependency management
2228
+ - ✅ **Auto-install plugin dependencies** (recursive)
2229
+ - ✅ **Settings integration** (.claude/settings.json)
2230
+ - ✅ **MCP server configuration** via plugins
2231
+ - ✅ **Craft wrapping** (--as-plugin flag)
2232
+ - ✅ **Plugin tree visualization**
2233
+ - ✅ **Dependency removal protection**
2234
+ - ✅ SHA-256 checksum verification (MITM protection)
2235
+ - ✅ Registry search and info commands
2236
+ - ✅ `craftdesk publish` command
2237
+ - ✅ `craftdesk outdated` command
2238
+ - ✅ `craftdesk update` command
2239
+ - ✅ **Authentication system** (login/logout/whoami)
2240
+ - ✅ **Private registry authentication** (token-based)
2241
+ - ✅ **Environment variable auth** (CI/CD support)
2242
+ - ✅ Semantic versioning for registry packages
2243
+
2244
+ ### Planned
2245
+ - 🔲 Plugin marketplace/directory
2246
+ - 🔲 `craftdesk validate <plugin>` command
2247
+ - 🔲 Multiple dependency versions support
2248
+ - 🔲 Peer dependency warnings
2249
+ - 🔲 Persistent download cache
2250
+ - 🔲 Offline installation mode
2251
+ - 🔲 Interactive dependency conflict resolution
775
2252
 
776
2253
  ---
777
2254
 
778
- Made for the AI development community
2255
+ Made for the AI development community