craftdesk 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +968 -92
  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 +303 -7
  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/info.d.ts +8 -0
  12. package/dist/commands/info.d.ts.map +1 -0
  13. package/dist/commands/info.js +66 -0
  14. package/dist/commands/info.js.map +1 -0
  15. package/dist/commands/init.d.ts +5 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +9 -3
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +5 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +24 -4
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/list.d.ts +5 -0
  24. package/dist/commands/list.d.ts.map +1 -1
  25. package/dist/commands/list.js +72 -7
  26. package/dist/commands/list.js.map +1 -1
  27. package/dist/commands/login.d.ts +8 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +158 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logout.d.ts +8 -0
  32. package/dist/commands/logout.d.ts.map +1 -0
  33. package/dist/commands/logout.js +51 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/outdated.d.ts +23 -0
  36. package/dist/commands/outdated.d.ts.map +1 -0
  37. package/dist/commands/outdated.js +268 -0
  38. package/dist/commands/outdated.js.map +1 -0
  39. package/dist/commands/publish.d.ts +8 -0
  40. package/dist/commands/publish.d.ts.map +1 -0
  41. package/dist/commands/publish.js +198 -0
  42. package/dist/commands/publish.js.map +1 -0
  43. package/dist/commands/remove.d.ts +5 -0
  44. package/dist/commands/remove.d.ts.map +1 -1
  45. package/dist/commands/remove.js +52 -11
  46. package/dist/commands/remove.js.map +1 -1
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +60 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/update.d.ts +8 -0
  52. package/dist/commands/update.d.ts.map +1 -0
  53. package/dist/commands/update.js +369 -0
  54. package/dist/commands/update.js.map +1 -0
  55. package/dist/commands/whoami.d.ts +8 -0
  56. package/dist/commands/whoami.d.ts.map +1 -0
  57. package/dist/commands/whoami.js +58 -0
  58. package/dist/commands/whoami.js.map +1 -0
  59. package/dist/converters/base-converter.d.ts +89 -0
  60. package/dist/converters/base-converter.d.ts.map +1 -0
  61. package/dist/converters/base-converter.js +249 -0
  62. package/dist/converters/base-converter.js.map +1 -0
  63. package/dist/converters/continue-converter.d.ts +53 -0
  64. package/dist/converters/continue-converter.d.ts.map +1 -0
  65. package/dist/converters/continue-converter.js +243 -0
  66. package/dist/converters/continue-converter.js.map +1 -0
  67. package/dist/converters/cursor-converter.d.ts +70 -0
  68. package/dist/converters/cursor-converter.d.ts.map +1 -0
  69. package/dist/converters/cursor-converter.js +272 -0
  70. package/dist/converters/cursor-converter.js.map +1 -0
  71. package/dist/index.js +35 -4
  72. package/dist/index.js.map +1 -1
  73. package/dist/services/config-manager.d.ts +128 -10
  74. package/dist/services/config-manager.d.ts.map +1 -1
  75. package/dist/services/config-manager.js +189 -18
  76. package/dist/services/config-manager.js.map +1 -1
  77. package/dist/services/converter.d.ts +53 -0
  78. package/dist/services/converter.d.ts.map +1 -0
  79. package/dist/services/converter.js +185 -0
  80. package/dist/services/converter.js.map +1 -0
  81. package/dist/services/craft-wrapper.d.ts +108 -0
  82. package/dist/services/craft-wrapper.d.ts.map +1 -0
  83. package/dist/services/craft-wrapper.js +268 -0
  84. package/dist/services/craft-wrapper.js.map +1 -0
  85. package/dist/services/git-resolver.d.ts +9 -3
  86. package/dist/services/git-resolver.d.ts.map +1 -1
  87. package/dist/services/git-resolver.js +35 -10
  88. package/dist/services/git-resolver.js.map +1 -1
  89. package/dist/services/installer.d.ts +51 -1
  90. package/dist/services/installer.d.ts.map +1 -1
  91. package/dist/services/installer.js +245 -14
  92. package/dist/services/installer.js.map +1 -1
  93. package/dist/services/plugin-resolver.d.ts +80 -0
  94. package/dist/services/plugin-resolver.d.ts.map +1 -0
  95. package/dist/services/plugin-resolver.js +182 -0
  96. package/dist/services/plugin-resolver.js.map +1 -0
  97. package/dist/services/registry-client.d.ts +132 -5
  98. package/dist/services/registry-client.d.ts.map +1 -1
  99. package/dist/services/registry-client.js +239 -34
  100. package/dist/services/registry-client.js.map +1 -1
  101. package/dist/services/settings-manager.d.ts +151 -0
  102. package/dist/services/settings-manager.d.ts.map +1 -0
  103. package/dist/services/settings-manager.js +333 -0
  104. package/dist/services/settings-manager.js.map +1 -0
  105. package/dist/types/claude-settings.d.ts +155 -0
  106. package/dist/types/claude-settings.d.ts.map +1 -0
  107. package/dist/types/claude-settings.js +20 -0
  108. package/dist/types/claude-settings.js.map +1 -0
  109. package/dist/types/converter.d.ts +98 -0
  110. package/dist/types/converter.d.ts.map +1 -0
  111. package/dist/types/converter.js +6 -0
  112. package/dist/types/converter.js.map +1 -0
  113. package/dist/types/craftdesk-json.d.ts +63 -3
  114. package/dist/types/craftdesk-json.d.ts.map +1 -1
  115. package/dist/types/craftdesk-lock.d.ts +62 -1
  116. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  117. package/dist/utils/crypto.d.ts +23 -0
  118. package/dist/utils/crypto.d.ts.map +1 -0
  119. package/dist/utils/crypto.js +52 -0
  120. package/dist/utils/crypto.js.map +1 -0
  121. package/dist/utils/file-system.d.ts +43 -0
  122. package/dist/utils/file-system.d.ts.map +1 -1
  123. package/dist/utils/file-system.js +45 -2
  124. package/dist/utils/file-system.js.map +1 -1
  125. package/dist/utils/logger.d.ts +75 -0
  126. package/dist/utils/logger.d.ts.map +1 -1
  127. package/dist/utils/logger.js +76 -1
  128. package/dist/utils/logger.js.map +1 -1
  129. package/dist/utils/version-utils.d.ts +63 -0
  130. package/dist/utils/version-utils.d.ts.map +1 -0
  131. package/dist/utils/version-utils.js +130 -0
  132. package/dist/utils/version-utils.js.map +1 -0
  133. package/package.json +36 -9
  134. package/.claude/settings.local.json +0 -17
  135. package/.github/workflows/ci.yml +0 -94
  136. package/API.md +0 -414
  137. package/TESTING.md +0 -263
  138. package/dist/commands/config.d.ts +0 -3
  139. package/dist/commands/config.d.ts.map +0 -1
  140. package/dist/commands/config.js +0 -56
  141. package/dist/commands/config.js.map +0 -1
  142. package/dist/types/config.d.ts +0 -17
  143. package/dist/types/config.d.ts.map +0 -1
  144. package/dist/types/config.js +0 -3
  145. package/dist/types/config.js.map +0 -1
  146. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  147. package/examples/craftdesk-all-sources.json +0 -79
  148. package/examples/craftdesk-git-monorepo.json +0 -41
  149. package/examples/craftdesk-multi-registry.json +0 -40
  150. package/examples/craftdesk-with-registries.json +0 -49
  151. package/examples/simple-craftdesk.json +0 -10
  152. package/src/commands/add.ts +0 -314
  153. package/src/commands/init.ts +0 -55
  154. package/src/commands/install.ts +0 -126
  155. package/src/commands/list.ts +0 -126
  156. package/src/commands/remove.ts +0 -82
  157. package/src/index.ts +0 -56
  158. package/src/services/config-manager.ts +0 -150
  159. package/src/services/git-resolver.ts +0 -370
  160. package/src/services/installer.ts +0 -314
  161. package/src/services/registry-client.ts +0 -163
  162. package/src/types/craftdesk-json.ts +0 -53
  163. package/src/types/craftdesk-lock.ts +0 -38
  164. package/src/utils/file-system.ts +0 -55
  165. package/src/utils/logger.ts +0 -82
  166. package/tests/fixtures/craftdesk-git.json +0 -17
  167. package/tests/fixtures/craftdesk.json +0 -15
  168. package/tests/helpers/test-utils.ts +0 -60
  169. package/tests/integration/init-command.test.ts +0 -70
  170. package/tests/integration/list-command.test.ts +0 -77
  171. package/tests/unit/config-manager.test.ts +0 -228
  172. package/tests/unit/git-resolver.test.ts +0 -303
  173. package/tests/unit/installer.test.ts +0 -105
  174. package/tsconfig.json +0 -20
  175. package/vitest.config.ts +0 -29
package/README.md CHANGED
@@ -1,42 +1,29 @@
1
1
  # CraftDesk CLI
2
2
 
3
- > **Dependency management for AI capabilities** - Install, manage, and version control your Claude Code skills, agents, commands, and hooks.
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
  ---
11
12
 
12
- ## Table of Contents
13
-
14
- - [What is CraftDesk?](#what-is-craftdesk)
15
- - [Installation](#installation)
16
- - [Quick Start](#quick-start)
17
- - [Core Concepts](#core-concepts)
18
- - [Command Reference](#command-reference)
19
- - [Dependency Sources](#dependency-sources)
20
- - [Multi-Registry Setup](#multi-registry-setup)
21
- - [Monorepo Support](#monorepo-support)
22
- - [craftdesk.json Reference](#craftdeskjson-reference)
23
- - [craftdesk.lock](#craftdesklock)
24
- - [CI/CD Integration](#cicd-integration)
25
- - [Troubleshooting](#troubleshooting)
26
- - [Development](#development)
27
-
28
- ---
29
-
30
13
  ## What is CraftDesk?
31
14
 
32
15
  CraftDesk is a package manager for AI capabilities used in Claude Code and other AI development environments. It allows you to:
33
16
 
34
- - **Install AI skills, agents, commands, and hooks** 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
35
20
  - **Lock versions** for reproducible environments across teams
36
- - **Manage dependencies** with automatic transitive resolution
21
+ - **Manage dependencies** with automatic recursive installation
37
22
  - **Support monorepos** with subdirectory extraction
38
23
  - **Auto-convert GitHub URLs** - paste any GitHub URL (tree/blob)
39
24
  - **Direct file references** - install single files from repositories
25
+ - **Settings integration** - Automatic registration in `.claude/settings.json`
26
+ - **MCP server support** - Configure Model Context Protocol servers via plugins
40
27
 
41
28
  Think of it as:
42
29
  - **npm** for Node.js → **CraftDesk** for AI capabilities
@@ -47,9 +34,9 @@ Think of it as:
47
34
 
48
35
  ---
49
36
 
50
- ## Installation
37
+ ## Quick Start
51
38
 
52
- ### Global Installation
39
+ ### Install CraftDesk
53
40
 
54
41
  ```bash
55
42
  npm install -g craftdesk
@@ -58,30 +45,10 @@ npm install -g craftdesk
58
45
  Verify installation:
59
46
  ```bash
60
47
  craftdesk --version
61
- # 0.2.0
62
- ```
63
-
64
- ### Local Development Setup
65
-
66
- Clone and link for development:
67
-
68
- ```bash
69
- git clone https://github.com/mensfeld/craftdesk.git
70
- cd craftdesk
71
- npm install
72
- npm link
73
- craftdesk --version
48
+ # 0.3.0
74
49
  ```
75
50
 
76
- ### Requirements
77
-
78
- - Node.js >= 18.0.0
79
- - Git (for git dependencies)
80
- - npm or yarn
81
-
82
- ---
83
-
84
- ## Quick Start
51
+ **Requirements:** Node.js >= 18.0.0, Git, npm or yarn
85
52
 
86
53
  ### 1. Initialize a New Project
87
54
 
@@ -104,17 +71,17 @@ This creates a `craftdesk.json` file:
104
71
  ### 2. Add Dependencies
105
72
 
106
73
  ```bash
107
- # Add from GitHub (auto-converts web URLs)
108
- craftdesk add https://github.com/user/repo/blob/main/skill.md
74
+ # Add a single skill file from GitHub (auto-converts web URLs)
75
+ craftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md
109
76
 
110
77
  # Add from git repository
111
- craftdesk add git+https://github.com/user/custom-agent.git
78
+ craftdesk add git+https://github.com/aviflombaum/rspec-rails-agents.git
112
79
 
113
80
  # Add from monorepo subdirectory
114
- craftdesk add https://github.com/user/repo/tree/main/skills/auth
81
+ craftdesk add https://github.com/technicalpickles/pickled-claude-plugins/tree/main/plugins/working-in-monorepos/skills/working-in-monorepos
115
82
 
116
83
  # Add with explicit type
117
- craftdesk add https://github.com/user/repo/blob/main/agent.md --type agent
84
+ craftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md --type agent
118
85
  ```
119
86
 
120
87
  ### 3. Install Everything
@@ -144,6 +111,40 @@ Total: 2 crafts installed
144
111
 
145
112
  ---
146
113
 
114
+ ## Table of Contents
115
+
116
+ - [What is CraftDesk?](#what-is-craftdesk)
117
+ - [Quick Start](#quick-start)
118
+ - [Core Concepts](#core-concepts)
119
+ - [Crafts](#crafts)
120
+ - [Collections](#collections)
121
+ - [Plugin System](#plugin-system)
122
+ - [Command Reference](#command-reference)
123
+ - [init](#craftdesk-init-options)
124
+ - [install](#craftdesk-install-options)
125
+ - [add](#craftdesk-add-craft-options)
126
+ - [remove](#craftdesk-remove-craft)
127
+ - [list](#craftdesk-list-options)
128
+ - [search](#craftdesk-search-query-options)
129
+ - [info](#craftdesk-info-craft)
130
+ - [outdated](#craftdesk-outdated)
131
+ - [update](#craftdesk-update-craft)
132
+ - [publish](#craftdesk-publish-options)
133
+ - [Authentication](#authentication)
134
+ - [login](#craftdesk-login-options)
135
+ - [logout](#craftdesk-logout-options)
136
+ - [whoami](#craftdesk-whoami-options)
137
+ - [Dependency Sources](#dependency-sources)
138
+ - [Monorepo Support](#monorepo-support)
139
+ - [craftdesk.json Reference](#craftdeskjson-reference)
140
+ - [craftdesk.lock](#craftdesklock)
141
+ - [CI/CD Integration](#cicd-integration)
142
+ - [Troubleshooting](#troubleshooting)
143
+ - [Development](#development)
144
+ - [Documentation](#documentation)
145
+
146
+ ---
147
+
147
148
  ## Core Concepts
148
149
 
149
150
  ### Crafts
@@ -153,6 +154,221 @@ A **craft** is any AI capability:
153
154
  - **Agent** - Autonomous task executor (e.g., code-reviewer, test-runner)
154
155
  - **Command** - Slash command (e.g., /deploy, /analyze)
155
156
  - **Hook** - Event handler (e.g., pre-commit, post-install)
157
+ - **Plugin** - Bundle of multiple crafts with dependencies and MCP server configuration
158
+ - **Collection** - Curated group of related crafts that work together (e.g., rails-enterprise-stack)
159
+
160
+ ### Format Conversion
161
+
162
+ **Convert CraftDesk crafts to other AI editor formats** for cross-platform use.
163
+
164
+ **Supported Formats:**
165
+ - **Cursor** - Modern `.mdc` format in `.cursor/rules/` directory
166
+ - **Cursor Legacy** - Plain text `.cursorrules` format
167
+ - **Continue.dev** - Prompt and rule files in `.continue/prompts/` and `.continue/rules/`
168
+
169
+ **Why convert formats?**
170
+ - **Use any AI editor** - Write once, deploy to Cursor, Continue, Windsurf, etc.
171
+ - **Team flexibility** - Developers can use their preferred editors
172
+ - **Maximum reach** - Distribute crafts to wider audience
173
+ - **No lock-in** - Not tied to single platform
174
+
175
+ **Basic Usage:**
176
+
177
+ ```bash
178
+ # Convert a craft to Cursor format
179
+ craftdesk convert ./my-craft --to cursor
180
+
181
+ # Convert to Continue.dev format
182
+ craftdesk convert ./my-craft --to continue
183
+
184
+ # Convert to legacy .cursorrules
185
+ craftdesk convert ./my-craft --to cursor-legacy
186
+
187
+ # Convert all installed crafts
188
+ craftdesk convert --all --to cursor --output .cursor/rules
189
+
190
+ # List available formats
191
+ craftdesk convert --list-formats
192
+ ```
193
+
194
+ **Example: Rails Skill → Cursor**
195
+
196
+ Your `SKILL.md`:
197
+ ```markdown
198
+ ---
199
+ name: ruby-on-rails
200
+ description: Ruby on Rails development
201
+ ---
202
+
203
+ ## Instructions
204
+ Expert knowledge of Rails framework...
205
+
206
+ ## Best Practices
207
+ - Use Strong Parameters
208
+ - Follow RESTful conventions
209
+ ```
210
+
211
+ Converted to `.cursor/rules/ruby-on-rails.mdc`:
212
+ ```markdown
213
+ ---
214
+ description: Ruby on Rails development
215
+ globs:
216
+ - "**/*.rb"
217
+ - "**/*.erb"
218
+ - "**/*.haml"
219
+ alwaysApply: true
220
+ ---
221
+
222
+ # Ruby On Rails
223
+
224
+ ## Overview
225
+ Expert knowledge of Rails framework...
226
+
227
+ ## Best Practices
228
+ - Use Strong Parameters
229
+ - Follow RESTful conventions
230
+ ```
231
+
232
+ **Advanced Options:**
233
+
234
+ ```bash
235
+ # Merge modes
236
+ craftdesk convert --to cursor --merge-mode skip # Skip existing files
237
+ craftdesk convert --to cursor --merge-mode append # Append to existing
238
+ craftdesk convert --to cursor --merge-mode overwrite # Overwrite (default)
239
+
240
+ # Custom output directory
241
+ craftdesk convert --to cursor --output /custom/path
242
+
243
+ # Convert specific craft type
244
+ craftdesk convert .claude/skills/ruby-rails --to continue
245
+ ```
246
+
247
+ **What Gets Converted:**
248
+
249
+ | Section | Cursor | Continue |
250
+ |---------|--------|----------|
251
+ | Instructions | ✓ Overview | ✓ Context |
252
+ | Code Patterns | ✓ Code Patterns | ✓ Patterns to Follow |
253
+ | Examples | ✓ Examples | ✓ Examples |
254
+ | Best Practices | ✓ Best Practices | ✓ Best Practices |
255
+ | Pitfalls | ✓ Mistakes to Avoid | ✓ Mistakes to Avoid |
256
+ | Workflows | ✓ Common Workflows | ✓ Step-by-Step Workflows |
257
+
258
+ **Language-Specific Features:**
259
+
260
+ Cursor converter automatically infers file globs based on content:
261
+ - **Ruby/Rails** → `**/*.rb`, `**/*.erb`, config files
262
+ - **TypeScript** → `**/*.ts`, `**/*.tsx`
263
+ - **Python** → `**/*.py`
264
+ - **JavaScript** → `**/*.js`, `**/*.jsx`
265
+ - **And more...** (Go, Rust, PHP, Java, etc.)
266
+
267
+ Continue converter generates:
268
+ - **Prompts** (invokable with `/`) - for manual use
269
+ - **Rules** (automatic) - applied to all matching files
270
+
271
+ **CI/CD Integration:**
272
+
273
+ ```yaml
274
+ # .github/workflows/convert-crafts.yml
275
+ name: Convert Crafts to Multiple Formats
276
+ on: [push]
277
+ jobs:
278
+ convert:
279
+ runs-on: ubuntu-latest
280
+ steps:
281
+ - uses: actions/checkout@v2
282
+ - name: Install CraftDesk
283
+ run: npm install -g craftdesk
284
+ - name: Convert to Cursor
285
+ run: craftdesk convert --all --to cursor --output dist/cursor
286
+ - name: Convert to Continue
287
+ run: craftdesk convert --all --to continue --output dist/continue
288
+ - name: Upload artifacts
289
+ uses: actions/upload-artifact@v2
290
+ with:
291
+ name: converted-crafts
292
+ path: dist/
293
+ ```
294
+
295
+ **Tips:**
296
+
297
+ 1. **Test conversions** - Always verify converted files work in target editor
298
+ 2. **Preserve originals** - Keep SKILL.md as source of truth
299
+ 3. **Update together** - Convert after each craft update
300
+ 4. **Version control** - Commit both source and converted formats
301
+
302
+ ### Collections
303
+
304
+ **Collections** are crafts that group related capabilities together. Instead of installing 6 individual crafts, install one collection that includes all of them.
305
+
306
+ **Why use collections?**
307
+ - **Faster onboarding** - One command installs complete workflows
308
+ - **Curated quality** - Experts bundle best-of-breed tools
309
+ - **Consistent stacks** - Teams share identical setups
310
+ - **Versioned together** - Dependencies tested to work together
311
+
312
+ **Example: Rails Enterprise Stack**
313
+
314
+ Create a collection in `craftdesk.json`:
315
+ ```json
316
+ {
317
+ "name": "rails-enterprise-stack",
318
+ "version": "1.0.0",
319
+ "type": "collection",
320
+ "description": "Complete Rails enterprise development setup",
321
+ "dependencies": {
322
+ "ruby-on-rails": "^7.0.0",
323
+ "rspec-testing": "^3.12.0",
324
+ "rubocop-linter": "^1.50.0",
325
+ "sidekiq-background-jobs": "^7.0.0",
326
+ "postgresql-expert": "^15.0.0",
327
+ "devise-auth": "^4.9.0"
328
+ }
329
+ }
330
+ ```
331
+
332
+ **Installing a collection:**
333
+ ```bash
334
+ craftdesk add git+https://github.com/company/rails-enterprise-stack.git
335
+ ```
336
+
337
+ **What happens:**
338
+ 1. CraftDesk reads the collection's `craftdesk.json`
339
+ 2. Recursively resolves all 6 dependencies
340
+ 3. Installs the collection + all dependencies
341
+ 4. Creates lockfile tracking everything
342
+
343
+ **Result:** 7 crafts installed (collection + 6 dependencies)
344
+
345
+ **How collections work:**
346
+
347
+ Collections leverage CraftDesk's **recursive dependency resolution**. When you install a craft with dependencies, CraftDesk:
348
+ 1. Clones the repository
349
+ 2. Reads `craftdesk.json`
350
+ 3. Adds all dependencies to the resolution queue
351
+ 4. Recursively resolves transitive dependencies
352
+ 5. Installs everything with a single lockfile
353
+
354
+ This means **any craft with dependencies acts as a collection** - the `type: "collection"` field just improves discoverability in the registry.
355
+
356
+ **Nested collections:**
357
+
358
+ Collections can depend on other collections:
359
+ ```json
360
+ {
361
+ "name": "full-stack-rails",
362
+ "type": "collection",
363
+ "dependencies": {
364
+ "rails-enterprise-stack": "^1.0.0", // Another collection!
365
+ "frontend-tooling": "^2.1.0", // Another collection!
366
+ "docker-deployment": "^1.5.0"
367
+ }
368
+ }
369
+ ```
370
+
371
+ CraftDesk handles arbitrary nesting depth with circular dependency detection.
156
372
 
157
373
  ### Manifest File: craftdesk.json
158
374
 
@@ -193,11 +409,31 @@ Records exact versions installed (like package-lock.json or Gemfile.lock):
193
409
 
194
410
  **Always commit this file to version control!**
195
411
 
412
+ ### Security: Checksum Verification
413
+
414
+ CraftDesk automatically verifies the integrity of downloaded packages:
415
+
416
+ - **Registry packages**: SHA-256 checksums are computed when you first add a craft and stored in `craftdesk.lock`
417
+ - **Subsequent installs**: The downloaded file is verified against the stored checksum before extraction
418
+ - **MITM protection**: Prevents tampering during download by detecting any modifications
419
+ - **Git packages**: Git commit hashes serve as checksums - stored in the lockfile and verified during clone
420
+
421
+ **What happens on checksum mismatch:**
422
+ ```
423
+ Error: Checksum verification failed for john/rails-api@2.1.0.
424
+ Expected: a1b2c3d4e5f6...
425
+ This may indicate a corrupted download or a security issue.
426
+ Try running 'craftdesk install --no-lockfile' to re-resolve dependencies.
427
+ ```
428
+
429
+ The lockfile contains SHA-256 hashes that ensure reproducible and secure installations across all team members.
430
+
196
431
  ### Install Directory
197
432
 
198
433
  By default, crafts install to `.claude/` in your project:
199
434
  ```
200
435
  .claude/
436
+ ├── settings.json # Plugin configuration (auto-generated)
201
437
  ├── skills/
202
438
  │ ├── ruby-on-rails/
203
439
  │ └── postgres-expert/
@@ -205,10 +441,195 @@ By default, crafts install to `.claude/` in your project:
205
441
  │ └── code-reviewer/
206
442
  ├── commands/
207
443
  │ └── deploy/
208
- └── hooks/
209
- └── pre-commit/
444
+ ├── hooks/
445
+ │ └── pre-commit/
446
+ └── plugins/ # Flat plugin installation
447
+ ├── company-rails-plugin/
448
+ │ ├── plugin.json
449
+ │ ├── PLUGIN.md
450
+ │ └── skills/...
451
+ └── my-skill-plugin/ # Wrapped skill
452
+ ```
453
+
454
+ ---
455
+
456
+ ## Plugin System
457
+
458
+ **New in v0.3.0**: CraftDesk now supports a comprehensive plugin system for bundling multiple crafts with automatic dependency management.
459
+
460
+ ### What are Plugins?
461
+
462
+ Plugins allow you to:
463
+ - **Bundle multiple crafts** (skills, agents, commands, hooks) together
464
+ - **Declare dependencies** that are automatically installed
465
+ - **Configure MCP servers** (Model Context Protocol) for external tools
466
+ - **Share configurations** and related files as a cohesive package
467
+ - **Wrap individual crafts** as plugins for better organization
468
+
469
+ ### Installing Plugins
470
+
471
+ ```bash
472
+ # Install a plugin from registry
473
+ craftdesk add company/rails-standards-plugin
474
+
475
+ # What happens automatically:
476
+ # 1. Plugin is installed to .claude/plugins/company-rails-standards-plugin/
477
+ # 2. Dependencies are resolved and auto-installed
478
+ # 3. Plugin is registered in .claude/settings.json
479
+ # 4. MCP server is configured (if provided)
480
+ # 5. Plugin tree is added to craftdesk.lock
481
+ ```
482
+
483
+ **Example Output**:
484
+ ```
485
+ Adding company/rails-standards-plugin...
486
+ Found company/rails-standards-plugin@2.1.0
487
+ Installing company/rails-standards-plugin...
488
+ Plugin detected - resolving dependencies...
489
+ Resolved 3 total dependencies
490
+ Installing plugin dependency: john/rspec-testing...
491
+ ✓ Resolved john/rspec-testing@1.5.3
492
+ Installing plugin dependency: jane/postgres-toolkit...
493
+ ✓ Resolved jane/postgres-toolkit@3.2.1
494
+ ✓ Installed company/rails-standards-plugin@2.1.0
495
+ Craft added successfully!
496
+ ```
497
+
498
+ ### Plugin Structure
499
+
500
+ A plugin contains a `plugin.json` manifest:
501
+
502
+ ```json
503
+ {
504
+ "name": "company-rails-plugin",
505
+ "version": "2.1.0",
506
+ "type": "plugin",
507
+ "description": "Rails development standards",
508
+ "author": "company",
509
+ "components": {
510
+ "skills": ["coding-standards", "rails-best-practices"],
511
+ "agents": ["standards-enforcer"],
512
+ "commands": ["check-standards"]
513
+ },
514
+ "dependencies": {
515
+ "john/rspec-testing": "^1.5.0",
516
+ "jane/postgres-toolkit": "^3.2.0"
517
+ },
518
+ "mcp": {
519
+ "type": "stdio",
520
+ "command": "/usr/bin/rails-standards-mcp",
521
+ "args": ["--config", ".claude/plugins/company-rails-plugin/config.json"]
522
+ }
523
+ }
524
+ ```
525
+
526
+ ### Automatic Dependency Resolution
527
+
528
+ When you install a plugin, **all dependencies are automatically installed**:
529
+
530
+ ```bash
531
+ $ craftdesk add company/rails-plugin
532
+
533
+ # Installs dependency tree:
534
+ # company/rails-plugin (direct)
535
+ # ├── john/rspec-testing (dependency)
536
+ # └── jane/postgres-toolkit (dependency)
537
+ # └── jane/sql-helpers (nested dependency)
538
+ ```
539
+
540
+ All dependencies are:
541
+ - ✅ Downloaded from their respective sources (registry/git)
542
+ - ✅ Installed to appropriate directories
543
+ - ✅ Verified with integrity checksums
544
+ - ✅ Marked as dependencies in lockfile
545
+ - ✅ Registered in `.claude/settings.json`
546
+
547
+ ### Wrapping Individual Crafts
548
+
549
+ Convert any skill, agent, command, or hook into a plugin:
550
+
551
+ ```bash
552
+ craftdesk add my-skill --as-plugin
553
+ ```
554
+
555
+ **What happens**:
556
+ 1. Original craft installed to `.claude/skills/my-skill/`
557
+ 2. Plugin wrapper created at `.claude/plugins/my-skill-plugin/`
558
+ 3. `plugin.json` and `PLUGIN.md` auto-generated
559
+ 4. Craft files copied to plugin structure
560
+ 5. Registered in settings as wrapped plugin
561
+
562
+ **Use cases**:
563
+ - Add MCP server to existing skill
564
+ - Bundle configuration with craft
565
+ - Prepare for publishing to marketplace
566
+ - Enable/disable craft from Claude Code UI
567
+
568
+ ### Plugin Tree Visualization
569
+
570
+ View your plugin dependency tree:
571
+
572
+ ```bash
573
+ $ craftdesk list
574
+
575
+ my-project@1.0.0
576
+
577
+ 🔌 Plugins:
578
+ company/rails-standards@2.1.0
579
+ ├── john/rspec-testing@1.5.3
580
+ └── jane/postgres-toolkit@3.2.1
581
+ my-skill-plugin@1.0.0
582
+
583
+ 📚 Skills:
584
+ standalone-skill@1.0.0
585
+
586
+ Total: 5 crafts installed
587
+ ```
588
+
589
+ ### Removing Plugins with Dependencies
590
+
591
+ CraftDesk prevents accidental removal of required dependencies:
592
+
593
+ ```bash
594
+ $ craftdesk remove john/rspec-testing
595
+
596
+ Warning: john/rspec-testing is required by:
597
+ - company/rails-standards@2.1.0
598
+
599
+ Use --force to remove anyway
210
600
  ```
211
601
 
602
+ Force removal:
603
+ ```bash
604
+ craftdesk remove john/rspec-testing --force
605
+ ```
606
+
607
+ ### Settings Integration
608
+
609
+ Plugins are automatically registered in `.claude/settings.json`:
610
+
611
+ ```json
612
+ {
613
+ "version": "1.0.0",
614
+ "plugins": {
615
+ "company-rails-plugin": {
616
+ "name": "company-rails-plugin",
617
+ "version": "2.1.0",
618
+ "enabled": true,
619
+ "installPath": "plugins/company-rails-plugin",
620
+ "dependencies": ["john-rspec-testing", "jane-postgres-toolkit"],
621
+ "mcp": {
622
+ "type": "stdio",
623
+ "command": "/usr/bin/rails-standards-mcp",
624
+ "args": ["--config", ".claude/plugins/company-rails-plugin/config.json"]
625
+ }
626
+ }
627
+ }
628
+ }
629
+ ```
630
+
631
+ **For complete details**, see [DEPENDENCY_MANAGEMENT.md](./DEPENDENCY_MANAGEMENT.md)
632
+
212
633
  ---
213
634
 
214
635
  ## Command Reference
@@ -221,7 +642,7 @@ Initialize a new craftdesk.json file.
221
642
  - `-y, --yes` - Skip prompts and use defaults
222
643
  - `-n, --name <name>` - Project name (default: directory name)
223
644
  - `-v, --version <version>` - Project version (default: "1.0.0")
224
- - `-t, --type <type>` - Project type: skill, agent, command, or hook (default: "skill")
645
+ - `-t, --type <type>` - Project type: skill, agent, command, hook, plugin, or collection (default: "skill")
225
646
  - `-d, --description <desc>` - Project description
226
647
  - `-a, --author <author>` - Author name
227
648
  - `-l, --license <license>` - License (default: "MIT")
@@ -280,7 +701,7 @@ Add a new dependency and install it immediately.
280
701
  - `-D, --save-dev` - Save as devDependency
281
702
  - `-O, --save-optional` - Save as optionalDependency
282
703
  - `-E, --save-exact` - Save exact version (no ^ or ~)
283
- - `-t, --type <type>` - Specify craft type (skill, agent, command, hook)
704
+ - `-t, --type <type>` - Specify craft type (skill, agent, command, hook, plugin, collection)
284
705
 
285
706
  **Examples:**
286
707
 
@@ -356,6 +777,253 @@ Total: 3 crafts installed
356
777
 
357
778
  ---
358
779
 
780
+ ### `craftdesk search <query> [options]`
781
+
782
+ Search for crafts in the registry.
783
+
784
+ **Options:**
785
+ - `-t, --type <type>` - Filter by type (skill, agent, command, hook, plugin, collection)
786
+
787
+ **Examples:**
788
+ ```bash
789
+ # Search for crafts
790
+ craftdesk search kafka
791
+
792
+ # Search for skills only
793
+ craftdesk search rails --type skill
794
+
795
+ # Search for plugins
796
+ craftdesk search standards --type plugin
797
+ ```
798
+
799
+ **Example output:**
800
+ ```
801
+ Search results for "kafka":
802
+
803
+ john/kafka-processing@2.1.0 (skill)
804
+ Expert knowledge for processing Kafka messages
805
+
806
+ jane/kafka-agent@1.5.3 (agent)
807
+ Autonomous agent for Kafka stream management
808
+
809
+ Found 2 crafts
810
+ ```
811
+
812
+ ---
813
+
814
+ ### `craftdesk info <craft>`
815
+
816
+ Display detailed information about a craft from the registry.
817
+
818
+ **Examples:**
819
+ ```bash
820
+ # Get info about a craft
821
+ craftdesk info john/rails-api
822
+
823
+ # Get info about a specific version
824
+ craftdesk info john/rails-api@2.1.0
825
+ ```
826
+
827
+ **Example output:**
828
+ ```
829
+ john/rails-api@2.1.0
830
+
831
+ Description: Rails API development best practices
832
+ Type: skill
833
+ Author: john
834
+ License: MIT
835
+ Downloads: 1,234
836
+
837
+ Versions:
838
+ 2.1.0 (latest)
839
+ 2.0.0
840
+ 1.5.0
841
+
842
+ Dependencies:
843
+ jane/postgres-toolkit: ^1.0.0
844
+ ```
845
+
846
+ ---
847
+
848
+ ### `craftdesk outdated`
849
+
850
+ Check for outdated dependencies that have newer versions available.
851
+
852
+ **Examples:**
853
+ ```bash
854
+ # Check all dependencies
855
+ craftdesk outdated
856
+ ```
857
+
858
+ **Example output:**
859
+ ```
860
+ Checking for outdated dependencies...
861
+
862
+ Outdated crafts:
863
+
864
+ john/rails-api
865
+ Current: 2.0.0
866
+ Latest: 2.1.0
867
+ Type: skill
868
+
869
+ jane/postgres-toolkit
870
+ Current: 1.2.0
871
+ Latest: 1.5.0
872
+ Type: skill
873
+
874
+ 2 outdated crafts found
875
+ Run 'craftdesk update' to update all, or 'craftdesk update <craft>' to update specific crafts.
876
+ ```
877
+
878
+ ---
879
+
880
+ ### `craftdesk update [craft]`
881
+
882
+ Update dependencies to their latest compatible versions.
883
+
884
+ **Examples:**
885
+ ```bash
886
+ # Update all outdated dependencies
887
+ craftdesk update
888
+
889
+ # Update a specific craft
890
+ craftdesk update john/rails-api
891
+ ```
892
+
893
+ **What it does:**
894
+ 1. Checks for newer versions in the registry
895
+ 2. Downloads and installs updates
896
+ 3. Updates craftdesk.lock with new versions
897
+ 4. Verifies checksums for security
898
+
899
+ ---
900
+
901
+ ### `craftdesk publish [options]`
902
+
903
+ Publish a craft to the registry.
904
+
905
+ **Options:**
906
+ - `--visibility <level>` - Set visibility: public, private, or organization (default: public)
907
+
908
+ **Examples:**
909
+ ```bash
910
+ # Publish the current craft
911
+ craftdesk publish
912
+
913
+ # Publish as private
914
+ craftdesk publish --visibility private
915
+
916
+ # Publish to organization only
917
+ craftdesk publish --visibility organization
918
+ ```
919
+
920
+ **Prerequisites:**
921
+ - Must be logged in (`craftdesk login`)
922
+ - Must have a valid `craftdesk.json` in current directory
923
+ - Craft files must exist (SKILL.md, AGENT.md, etc.)
924
+
925
+ **What it does:**
926
+ 1. Reads craftdesk.json for metadata
927
+ 2. Collects all craft files
928
+ 3. Creates a new version on the registry
929
+ 4. Publishes with specified visibility
930
+
931
+ ---
932
+
933
+ ## Authentication
934
+
935
+ CraftDesk supports authenticated access to private registries.
936
+
937
+ ### `craftdesk login [options]`
938
+
939
+ Authenticate with a registry using an API token.
940
+
941
+ **Options:**
942
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
943
+
944
+ **Examples:**
945
+ ```bash
946
+ # Login to default registry
947
+ craftdesk login
948
+
949
+ # Login to a specific registry
950
+ craftdesk login --registry https://private.company.com
951
+ ```
952
+
953
+ **How it works:**
954
+ 1. Prompts for your API token
955
+ 2. Verifies the token with the registry
956
+ 3. Stores credentials in `~/.craftdesk/config.json`
957
+ 4. Token is used for subsequent registry operations
958
+
959
+ **Getting an API token:**
960
+ - Log in to your CraftDesk registry web interface
961
+ - Navigate to Settings → API Tokens
962
+ - Generate a new token
963
+
964
+ ---
965
+
966
+ ### `craftdesk logout [options]`
967
+
968
+ Remove stored authentication credentials.
969
+
970
+ **Options:**
971
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
972
+
973
+ **Examples:**
974
+ ```bash
975
+ # Logout from default registry
976
+ craftdesk logout
977
+
978
+ # Logout from specific registry
979
+ craftdesk logout --registry https://private.company.com
980
+ ```
981
+
982
+ ---
983
+
984
+ ### `craftdesk whoami [options]`
985
+
986
+ Display the currently logged-in user.
987
+
988
+ **Options:**
989
+ - `-r, --registry <url>` - Registry URL (uses default from craftdesk.json if not specified)
990
+
991
+ **Examples:**
992
+ ```bash
993
+ # Check current user
994
+ craftdesk whoami
995
+
996
+ # Check user for specific registry
997
+ craftdesk whoami --registry https://private.company.com
998
+ ```
999
+
1000
+ **Example output:**
1001
+ ```
1002
+ Logged in to https://craftdesk.ai as john (john@example.com)
1003
+ Organization: acme-corp
1004
+ ```
1005
+
1006
+ ---
1007
+
1008
+ ### Environment Variable Authentication
1009
+
1010
+ For CI/CD environments, you can use environment variables instead of `craftdesk login`:
1011
+
1012
+ ```bash
1013
+ # For a registry named "company-private" in craftdesk.json
1014
+ export CRAFTDESK_AUTH_COMPANY_PRIVATE=your_api_token_here
1015
+
1016
+ # For the default registry
1017
+ export CRAFTDESK_AUTH_LOCALHOST_3000=your_api_token_here
1018
+
1019
+ # The variable name is derived from the registry URL:
1020
+ # https://example.com -> CRAFTDESK_AUTH_EXAMPLE_COM
1021
+ ```
1022
+
1023
+ Environment variables take precedence over stored credentials.
1024
+
1025
+ ---
1026
+
359
1027
  ### Global Options
360
1028
 
361
1029
  Available for all commands:
@@ -375,9 +1043,75 @@ craftdesk init --help
375
1043
 
376
1044
  ## Dependency Sources
377
1045
 
378
- CraftDesk currently supports Git dependencies. Registry support is under development.
1046
+ CraftDesk supports both registry and git dependencies.
1047
+
1048
+ ### 1. Registry Dependencies (CraftDesk Web API)
1049
+
1050
+ Install crafts from the CraftDesk registry using `author/name` format:
1051
+
1052
+ ```bash
1053
+ # Search for crafts
1054
+ craftdesk search kafka
1055
+
1056
+ # Get information about a craft
1057
+ craftdesk info john/rails-api
1058
+
1059
+ # Add from registry
1060
+ craftdesk add john/rails-api
1061
+ craftdesk add john/rails-api@^2.1.0
1062
+
1063
+ # Add with specific version
1064
+ craftdesk add jane/postgres-expert@1.2.0
1065
+ ```
1066
+
1067
+ **Registry format in craftdesk.json:**
1068
+
1069
+ ```json
1070
+ {
1071
+ "dependencies": {
1072
+ "john/rails-api": "^2.1.0",
1073
+ "jane/kafka-processing": "~1.5.2",
1074
+ "team/postgres-admin": "latest"
1075
+ },
1076
+ "registries": {
1077
+ "default": {
1078
+ "url": "http://localhost:3000"
1079
+ }
1080
+ }
1081
+ }
1082
+ ```
1083
+
1084
+ **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.
379
1085
 
380
- ### 1. GitHub URLs (Easiest)
1086
+ **Private Registry Authentication:**
1087
+
1088
+ For private registries, set authentication tokens via environment variables:
1089
+
1090
+ ```bash
1091
+ # For a registry named "company-private" in craftdesk.json
1092
+ export CRAFTDESK_AUTH_COMPANY_PRIVATE=your_token_here
1093
+
1094
+ # For default registry
1095
+ export CRAFTDESK_AUTH_DEFAULT=your_token_here
1096
+ ```
1097
+
1098
+ Example `craftdesk.json` with private registry:
1099
+
1100
+ ```json
1101
+ {
1102
+ "registries": {
1103
+ "default": {
1104
+ "url": "https://your-registry.com"
1105
+ },
1106
+ "company-private": {
1107
+ "url": "https://private.company.com",
1108
+ "scope": "@company"
1109
+ }
1110
+ }
1111
+ }
1112
+ ```
1113
+
1114
+ ### 2. GitHub URLs (Easiest for Git)
381
1115
 
382
1116
  Simply paste any GitHub URL - it auto-converts to the correct format:
383
1117
 
@@ -392,7 +1126,7 @@ craftdesk add https://github.com/user/repo/blob/main/agent.md
392
1126
  craftdesk add https://github.com/user/repo
393
1127
  ```
394
1128
 
395
- ### 2. Git Dependencies
1129
+ ### 3. Git Dependencies
396
1130
 
397
1131
  From git repositories:
398
1132
 
@@ -423,26 +1157,60 @@ From git repositories:
423
1157
  - `path` - Subdirectory within repo (for monorepos)
424
1158
  - `file` - Direct file path (for single-file crafts)
425
1159
 
426
- ### 3. Registry Dependencies (Coming Soon)
1160
+ ---
427
1161
 
428
- > **Note:** Registry support is currently under development. A self-hosted registry server will be available soon.
1162
+ ## Monorepo Support
429
1163
 
430
- Future registry format:
1164
+ 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.
431
1165
 
432
- ```json
433
- {
434
- "dependencies": {
435
- "ruby-on-rails": "^7.0.0",
436
- "@company/internal-skill": "^2.0.0"
437
- }
438
- }
1166
+ ### Quick Start: Auto-Converting GitHub URLs
1167
+
1168
+ The easiest way to install from monorepos is to **paste GitHub web URLs directly**:
1169
+
1170
+ ```bash
1171
+ # Subdirectory from monorepo - just paste the GitHub URL!
1172
+ craftdesk add https://github.com/company/monorepo/tree/main/skills/auth
1173
+
1174
+ # Single file from monorepo
1175
+ craftdesk add https://github.com/company/monorepo/blob/main/skills/auth/SKILL.md
1176
+
1177
+ # Works with any branch or tag
1178
+ craftdesk add https://github.com/company/monorepo/tree/v2.0.0/packages/deployer
439
1179
  ```
440
1180
 
441
- ---
1181
+ CraftDesk automatically converts these to the correct git syntax and extracts only the specified subdirectory or file.
442
1182
 
443
- ## Monorepo Support
1183
+ ### Git URL Syntax
1184
+
1185
+ For more control, use explicit git URL syntax with path or file specifiers:
1186
+
1187
+ ```bash
1188
+ # Subdirectory with branch
1189
+ craftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth
1190
+
1191
+ # Subdirectory with tag
1192
+ craftdesk add git+https://github.com/company/monorepo.git#v2.0.0#path:packages/deployer
1193
+
1194
+ # Subdirectory with commit hash
1195
+ craftdesk add git+https://github.com/company/monorepo.git#abc123def#path:skills/auth
1196
+
1197
+ # Single file with branch
1198
+ craftdesk add git+https://github.com/company/monorepo.git#main#file:skills/auth/SKILL.md
1199
+
1200
+ # Just path (uses default branch)
1201
+ craftdesk add git+https://github.com/company/monorepo.git#path:skills/auth
1202
+ ```
1203
+
1204
+ **Syntax breakdown:**
1205
+ - `#main` - Branch name
1206
+ - `#v2.0.0` - Git tag
1207
+ - `#abc123def` - Commit hash (full 40-char)
1208
+ - `#path:skills/auth` - Subdirectory to extract
1209
+ - `#file:skill.md` - Single file to extract
1210
+
1211
+ ### Using in craftdesk.json
444
1212
 
445
- Install multiple crafts from the same git repository using subdirectory paths:
1213
+ Multiple crafts from the same monorepo:
446
1214
 
447
1215
  ```json
448
1216
  {
@@ -457,41 +1225,90 @@ Install multiple crafts from the same git repository using subdirectory paths:
457
1225
  "tag": "v3.2.0",
458
1226
  "path": "agents/processor"
459
1227
  },
460
- "report-generator": {
1228
+ "deploy-script": {
461
1229
  "git": "https://github.com/company/ai-crafts-monorepo.git",
462
1230
  "tag": "v3.2.0",
463
- "path": "skills/reporting"
1231
+ "file": "scripts/deploy.md"
464
1232
  }
465
1233
  }
466
1234
  }
467
1235
  ```
468
1236
 
469
- **Benefits:**
470
- - Single git repository for multiple crafts
471
- - Version them together with git tags
472
- - Each craft installs independently
473
- - Efficient cloning (repo cached during resolution)
1237
+ **Each craft can:**
1238
+ - Use different subdirectories (`path`)
1239
+ - Reference single files (`file`)
1240
+ - Use the same or different tags/branches
1241
+ - Be versioned independently or together
1242
+
1243
+ ### Benefits
1244
+
1245
+ ✅ **Single repository** for multiple related crafts
1246
+ ✅ **Version together** using git tags (or independently with branches)
1247
+ ✅ **Efficient cloning** - repository is cloned once and reused
1248
+ ✅ **Clear organization** - keep related crafts together
1249
+ ✅ **Atomic updates** - update all crafts by changing the tag
1250
+ ✅ **Works with private repos** - standard git authentication
1251
+
1252
+ ### Monorepo Structure Example
474
1253
 
475
- **Monorepo structure example:**
476
1254
  ```
477
1255
  ai-crafts-monorepo/
478
1256
  ├── skills/
479
1257
  │ ├── auth/
480
1258
  │ │ ├── craftdesk.json
481
1259
  │ │ └── SKILL.md
1260
+ │ ├── database/
1261
+ │ │ ├── craftdesk.json
1262
+ │ │ └── SKILL.md
482
1263
  │ └── reporting/
483
1264
  │ ├── craftdesk.json
484
1265
  │ └── SKILL.md
485
1266
  ├── agents/
486
- │ └── processor/
1267
+ │ ├── code-reviewer/
1268
+ │ │ ├── craftdesk.json
1269
+ │ │ └── AGENT.md
1270
+ │ └── test-runner/
487
1271
  │ ├── craftdesk.json
488
1272
  │ └── AGENT.md
489
- └── commands/
490
- └── deploy/
491
- ├── craftdesk.json
492
- └── COMMAND.md
1273
+ ├── commands/
1274
+ │ └── deploy/
1275
+ │ ├── craftdesk.json
1276
+ │ └── COMMAND.md
1277
+ └── scripts/
1278
+ ├── setup.md
1279
+ └── deploy.md
1280
+ ```
1281
+
1282
+ ### Lockfile Tracking
1283
+
1284
+ CraftDesk lockfile tracks the exact subdirectory and commit:
1285
+
1286
+ ```json
1287
+ {
1288
+ "crafts": {
1289
+ "auth-handler": {
1290
+ "git": "https://github.com/company/monorepo.git",
1291
+ "tag": "v3.2.0",
1292
+ "commit": "abc123def456...",
1293
+ "path": "skills/auth",
1294
+ "type": "skill",
1295
+ "version": "3.2.0"
1296
+ }
1297
+ }
1298
+ }
493
1299
  ```
494
1300
 
1301
+ This ensures **reproducible installations** - the exact subdirectory from the exact commit is always installed.
1302
+
1303
+ ### Real-World Example
1304
+
1305
+ ```bash
1306
+ # Install from technicalpickles' monorepo
1307
+ craftdesk add https://github.com/technicalpickles/pickled-claude-plugins/tree/main/plugins/working-in-monorepos/skills/working-in-monorepos
1308
+ ```
1309
+
1310
+ This installs only the `working-in-monorepos` skill from the deeply nested monorepo structure.
1311
+
495
1312
  ---
496
1313
 
497
1314
  ## craftdesk.json Reference
@@ -549,7 +1366,7 @@ Complete specification of the craftdesk.json format:
549
1366
  |-------|------|----------|-------------|
550
1367
  | `name` | string | Yes | Craft name (lowercase, no spaces) |
551
1368
  | `version` | string | Yes | Semantic version (e.g., "1.0.0") |
552
- | `type` | string | No | Craft type: skill, agent, command, hook |
1369
+ | `type` | string | No | Craft type: skill, agent, command, hook, plugin, collection |
553
1370
  | `description` | string | No | Short description |
554
1371
  | `author` | string | No | Author name and email |
555
1372
  | `license` | string | No | License identifier (e.g., "MIT") |
@@ -761,11 +1578,46 @@ npm test
761
1578
 
762
1579
  ### Publishing
763
1580
 
1581
+ CraftDesk uses automated NPM publishing via GitHub Actions with provenance attestation.
1582
+
1583
+ **Quick release:**
1584
+ ```bash
1585
+ ./scripts/release.sh patch # 0.3.0 → 0.3.1
1586
+ ./scripts/release.sh minor # 0.3.0 → 0.4.0
1587
+ ./scripts/release.sh major # 0.3.0 → 1.0.0
1588
+ ```
1589
+
1590
+ The script will:
1591
+ 1. Bump version in package.json
1592
+ 2. Prompt you to update CHANGELOG.md
1593
+ 3. Commit and push changes
1594
+ 4. Create GitHub release
1595
+ 5. GitHub Actions automatically publishes to NPM with provenance
1596
+
1597
+ **Manual process:**
764
1598
  ```bash
765
1599
  npm version patch
766
- npm publish
1600
+ git add package.json CHANGELOG.md
1601
+ git commit -m "Bump to 0.3.1"
1602
+ git push
1603
+ gh release create v0.3.1 --title "v0.3.1" --generate-notes
767
1604
  ```
768
1605
 
1606
+ See [NPM_PUBLISHING_GUIDE.md](./NPM_PUBLISHING_GUIDE.md) for complete setup instructions.
1607
+
1608
+ ---
1609
+
1610
+ ## Documentation
1611
+
1612
+ ### Core Documentation
1613
+ - **[README.md](./README.md)** - This file, general overview and quick start
1614
+ - **[DEPENDENCY_MANAGEMENT.md](./DEPENDENCY_MANAGEMENT.md)** - Complete guide to dependency management
1615
+ - **[PLUGIN_IMPLEMENTATION_COMPLETE.md](./PLUGIN_IMPLEMENTATION_COMPLETE.md)** - Plugin system implementation details
1616
+
1617
+ ### Additional Resources
1618
+ - **[Package.json](./package.json)** - Project metadata and scripts
1619
+ - **[TypeScript Source](./src/)** - Full source code
1620
+
769
1621
  ---
770
1622
 
771
1623
  ## License
@@ -778,22 +1630,46 @@ MIT
778
1630
 
779
1631
  - **Repository**: [https://github.com/mensfeld/craftdesk](https://github.com/mensfeld/craftdesk)
780
1632
  - **Issues**: [https://github.com/mensfeld/craftdesk/issues](https://github.com/mensfeld/craftdesk/issues)
781
- - **Registry** (Coming Soon): Self-hosted registry server under development
1633
+ - **Registry**: Self-hosted registry server available at [CraftDesk Web](../web)
782
1634
 
783
1635
  ---
784
1636
 
785
1637
  ## Roadmap
786
1638
 
1639
+ ### Completed (v0.3.0)
787
1640
  - ✅ Git dependency support
788
1641
  - ✅ GitHub URL auto-conversion
789
1642
  - ✅ Direct file references
790
1643
  - ✅ Monorepo support
791
1644
  - ✅ Lockfile-based version control
792
- - 🚧 Self-hosted registry server (in development)
793
- - 🚧 Private registry authentication
794
- - 🚧 Dependency conflict resolution
795
- - 🚧 Semantic versioning for registry packages
1645
+ - ✅ Self-hosted registry server support
1646
+ - ✅ ZIP archive extraction for registry crafts
1647
+ - ✅ **Plugin system** with dependency management
1648
+ - ✅ **Auto-install plugin dependencies** (recursive)
1649
+ - ✅ **Settings integration** (.claude/settings.json)
1650
+ - ✅ **MCP server configuration** via plugins
1651
+ - ✅ **Craft wrapping** (--as-plugin flag)
1652
+ - ✅ **Plugin tree visualization**
1653
+ - ✅ **Dependency removal protection**
1654
+ - ✅ SHA-256 checksum verification (MITM protection)
1655
+ - ✅ Registry search and info commands
1656
+ - ✅ `craftdesk publish` command
1657
+ - ✅ `craftdesk outdated` command
1658
+ - ✅ `craftdesk update` command
1659
+ - ✅ **Authentication system** (login/logout/whoami)
1660
+ - ✅ **Private registry authentication** (token-based)
1661
+ - ✅ **Environment variable auth** (CI/CD support)
1662
+ - ✅ Semantic versioning for registry packages
1663
+
1664
+ ### Planned
1665
+ - 🔲 Plugin marketplace/directory
1666
+ - 🔲 `craftdesk validate <plugin>` command
1667
+ - 🔲 Multiple dependency versions support
1668
+ - 🔲 Peer dependency warnings
1669
+ - 🔲 Persistent download cache
1670
+ - 🔲 Offline installation mode
1671
+ - 🔲 Interactive dependency conflict resolution
796
1672
 
797
1673
  ---
798
1674
 
799
- Made for the AI development community
1675
+ Made for the AI development community