caruso 0.5.4
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.
- checksums.yaml +7 -0
- data/.rspec +4 -0
- data/.rubocop.yml +146 -0
- data/CHANGELOG.md +213 -0
- data/CLAUDE.md +276 -0
- data/IMPROVEMENTS.md +337 -0
- data/LICENSE.txt +21 -0
- data/README.md +326 -0
- data/Rakefile +71 -0
- data/bin/caruso +6 -0
- data/caruso.gemspec +43 -0
- data/lib/caruso/adapter.rb +110 -0
- data/lib/caruso/cli.rb +532 -0
- data/lib/caruso/config_manager.rb +190 -0
- data/lib/caruso/fetcher.rb +248 -0
- data/lib/caruso/marketplace_registry.rb +102 -0
- data/lib/caruso/version.rb +5 -0
- data/lib/caruso.rb +22 -0
- data/reference/marketplace.md +433 -0
- data/reference/plugins.md +391 -0
- data/reference/plugins_reference.md +376 -0
- metadata +176 -0
data/IMPROVEMENTS.md
ADDED
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Caruso Gem - Improvement Checklist
|
|
2
|
+
|
|
3
|
+
Based on the Ruby CLI Gem Best Practices evaluation, here are the remaining tasks to bring Caruso to production-ready standards.
|
|
4
|
+
|
|
5
|
+
## ✅ Completed
|
|
6
|
+
|
|
7
|
+
- [x] Fix dependency management - consolidate all dependencies to gemspec
|
|
8
|
+
- [x] Update RSpec to 3.13 (was inconsistent between Gemfile and gemspec)
|
|
9
|
+
- [x] Add Aruba for professional CLI testing (Note: Cucumber is a transitive dependency but won't be used)
|
|
10
|
+
- [x] Add RuboCop to gemspec development dependencies
|
|
11
|
+
- [x] Clean up Gemfile to only contain `source` and `gemspec`
|
|
12
|
+
|
|
13
|
+
> **Note on Cucumber:** Aruba requires Cucumber as a dependency, but it won't be used in this project. We only use Aruba's RSpec integration. This is normal and harmless - Cucumber won't run unless you create `.feature` files.
|
|
14
|
+
|
|
15
|
+
## 🔴 Critical Priority (Do First)
|
|
16
|
+
|
|
17
|
+
- [ ] **Add GitHub Actions CI workflow** _(Deferred for later)_
|
|
18
|
+
- Create `.github/workflows/ci.yml`
|
|
19
|
+
- Test on Ruby 3.0, 3.1, 3.2, 3.3
|
|
20
|
+
- Run tests automatically on push/PR
|
|
21
|
+
- Run RuboCop in CI
|
|
22
|
+
- See template in this document below
|
|
23
|
+
|
|
24
|
+
- [x] **Create CHANGELOG.md**
|
|
25
|
+
- Follow [Keep a Changelog](https://keepachangelog.com/) format
|
|
26
|
+
- Document all existing versions (0.1.0, 0.1.1, 0.1.2, 0.1.3)
|
|
27
|
+
- Add Unreleased section for upcoming changes
|
|
28
|
+
|
|
29
|
+
- [x] **Add LICENSE.txt file**
|
|
30
|
+
- MIT License with proper copyright attribution
|
|
31
|
+
- Now matches gemspec declaration
|
|
32
|
+
|
|
33
|
+
## 🟡 High Priority
|
|
34
|
+
|
|
35
|
+
- [x] **Migrate tests to use Aruba**
|
|
36
|
+
- Updated `spec/spec_helper.rb` to configure Aruba
|
|
37
|
+
- Replaced custom `run_caruso` helper with Aruba's `run_command`
|
|
38
|
+
- Migrated all 4 integration test files to use Aruba API
|
|
39
|
+
- All 32 tests passing with improved isolation and cleaner assertions
|
|
40
|
+
|
|
41
|
+
- [ ] **Add release automation workflow**
|
|
42
|
+
- Create `.github/workflows/release.yml`
|
|
43
|
+
- Auto-publish to RubyGems when git tag is pushed
|
|
44
|
+
- Add `RUBYGEMS_API_KEY` secret to GitHub repo
|
|
45
|
+
- See template in this document below
|
|
46
|
+
|
|
47
|
+
- [x] **Create RuboCop configuration**
|
|
48
|
+
- Added `.rubocop.yml` with sensible defaults
|
|
49
|
+
- Configured for Ruby 3.0+ with NewCops enabled
|
|
50
|
+
- Auto-corrected 57 violations (frozen string literals, string quotes, trailing whitespace, etc.)
|
|
51
|
+
- Fixed void context issue in fetcher.rb
|
|
52
|
+
- All 16 files passing with 0 offenses
|
|
53
|
+
- Tests verified passing after corrections
|
|
54
|
+
|
|
55
|
+
## 🟢 Medium Priority
|
|
56
|
+
|
|
57
|
+
- [ ] **Add multi-OS testing in CI**
|
|
58
|
+
- Test on Ubuntu, macOS, and Windows
|
|
59
|
+
- Ensures cross-platform compatibility
|
|
60
|
+
- Update CI matrix to include `os: [ubuntu-latest, macos-latest, windows-latest]`
|
|
61
|
+
|
|
62
|
+
- [ ] **Add bundler-audit for security**
|
|
63
|
+
- Add `bundler-audit` to dev dependencies
|
|
64
|
+
- Add security check step in CI
|
|
65
|
+
- Catches vulnerable dependencies early
|
|
66
|
+
|
|
67
|
+
- [ ] **Improve release documentation**
|
|
68
|
+
- Add "Releasing" section to README.md
|
|
69
|
+
- Document the release process step-by-step
|
|
70
|
+
- Integrate with new bump tasks and GitHub Actions
|
|
71
|
+
|
|
72
|
+
- [ ] **Add Dependabot configuration**
|
|
73
|
+
- Create `.github/dependabot.yml`
|
|
74
|
+
- Automatically update dependencies
|
|
75
|
+
- Keep gem secure and up-to-date
|
|
76
|
+
|
|
77
|
+
## 📝 Nice to Have
|
|
78
|
+
|
|
79
|
+
- [ ] **Add .editorconfig**
|
|
80
|
+
- Ensures consistent formatting across editors
|
|
81
|
+
- Standardizes indentation, line endings, etc.
|
|
82
|
+
|
|
83
|
+
- [ ] **Add code coverage reporting**
|
|
84
|
+
- Use SimpleCov for test coverage
|
|
85
|
+
- Add coverage badge to README
|
|
86
|
+
- Consider integrating with Codecov or Coveralls
|
|
87
|
+
|
|
88
|
+
- [ ] **Add more comprehensive tests**
|
|
89
|
+
- Edge cases for CLI argument parsing
|
|
90
|
+
- Error handling scenarios
|
|
91
|
+
- Network failure simulation
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Templates and Migration Guides
|
|
96
|
+
|
|
97
|
+
### GitHub Actions CI Template
|
|
98
|
+
|
|
99
|
+
Create `.github/workflows/ci.yml`:
|
|
100
|
+
|
|
101
|
+
```yaml
|
|
102
|
+
name: Ruby CI
|
|
103
|
+
|
|
104
|
+
on:
|
|
105
|
+
push:
|
|
106
|
+
branches: [ main ]
|
|
107
|
+
pull_request:
|
|
108
|
+
branches: [ main ]
|
|
109
|
+
|
|
110
|
+
jobs:
|
|
111
|
+
test:
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
|
|
114
|
+
strategy:
|
|
115
|
+
fail-fast: false
|
|
116
|
+
matrix:
|
|
117
|
+
ruby-version: ['3.0', '3.1', '3.2', '3.3']
|
|
118
|
+
|
|
119
|
+
steps:
|
|
120
|
+
- uses: actions/checkout@v4
|
|
121
|
+
|
|
122
|
+
- name: Set up Ruby
|
|
123
|
+
uses: ruby/setup-ruby@v1
|
|
124
|
+
with:
|
|
125
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
126
|
+
bundler-cache: true
|
|
127
|
+
|
|
128
|
+
- name: Run tests
|
|
129
|
+
run: bundle exec rake spec
|
|
130
|
+
|
|
131
|
+
- name: Run RuboCop
|
|
132
|
+
run: bundle exec rubocop
|
|
133
|
+
if: matrix.ruby-version == '3.3' # Only run once
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### GitHub Actions Release Template
|
|
137
|
+
|
|
138
|
+
Create `.github/workflows/release.yml`:
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
name: Release
|
|
142
|
+
|
|
143
|
+
on:
|
|
144
|
+
push:
|
|
145
|
+
tags:
|
|
146
|
+
- 'v*'
|
|
147
|
+
|
|
148
|
+
jobs:
|
|
149
|
+
release:
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
|
|
152
|
+
permissions:
|
|
153
|
+
contents: write
|
|
154
|
+
|
|
155
|
+
steps:
|
|
156
|
+
- uses: actions/checkout@v4
|
|
157
|
+
|
|
158
|
+
- name: Set up Ruby
|
|
159
|
+
uses: ruby/setup-ruby@v1
|
|
160
|
+
with:
|
|
161
|
+
ruby-version: '3.3'
|
|
162
|
+
bundler-cache: true
|
|
163
|
+
|
|
164
|
+
- name: Build gem
|
|
165
|
+
run: bundle exec rake build
|
|
166
|
+
|
|
167
|
+
- name: Publish to RubyGems
|
|
168
|
+
env:
|
|
169
|
+
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
170
|
+
run: |
|
|
171
|
+
mkdir -p ~/.gem
|
|
172
|
+
echo ":rubygems_api_key: ${GEM_HOST_API_KEY}" > ~/.gem/credentials
|
|
173
|
+
chmod 0600 ~/.gem/credentials
|
|
174
|
+
gem push pkg/*.gem
|
|
175
|
+
|
|
176
|
+
- name: Create GitHub Release
|
|
177
|
+
uses: softprops/action-gh-release@v1
|
|
178
|
+
with:
|
|
179
|
+
files: pkg/*.gem
|
|
180
|
+
generate_release_notes: true
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Setup:**
|
|
184
|
+
1. Go to https://rubygems.org/settings/edit
|
|
185
|
+
2. Create an API key
|
|
186
|
+
3. Add it to GitHub repo: Settings → Secrets → Actions → New secret
|
|
187
|
+
4. Name: `RUBYGEMS_API_KEY`
|
|
188
|
+
|
|
189
|
+
### CHANGELOG.md Template
|
|
190
|
+
|
|
191
|
+
```markdown
|
|
192
|
+
# Changelog
|
|
193
|
+
|
|
194
|
+
All notable changes to this project will be documented in this file.
|
|
195
|
+
|
|
196
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
197
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
198
|
+
|
|
199
|
+
## [Unreleased]
|
|
200
|
+
|
|
201
|
+
### Added
|
|
202
|
+
- Aruba for professional CLI testing
|
|
203
|
+
- RuboCop for code quality
|
|
204
|
+
|
|
205
|
+
### Changed
|
|
206
|
+
- Consolidated all dependencies to gemspec
|
|
207
|
+
- Updated RSpec to 3.13
|
|
208
|
+
|
|
209
|
+
## [0.1.3] - 2025-11-20
|
|
210
|
+
|
|
211
|
+
### Added
|
|
212
|
+
- Improved error handling for missing marketplaces and plugins
|
|
213
|
+
|
|
214
|
+
### Changed
|
|
215
|
+
- Updated caruso gem dependencies
|
|
216
|
+
|
|
217
|
+
## [0.1.2] - 2025-11-XX
|
|
218
|
+
|
|
219
|
+
### Added
|
|
220
|
+
- Rake tasks for automated semantic version bumping
|
|
221
|
+
- Script to automate version bumping
|
|
222
|
+
|
|
223
|
+
## [0.1.0] - 2025-11-XX
|
|
224
|
+
|
|
225
|
+
### Added
|
|
226
|
+
- Initial release
|
|
227
|
+
- Marketplace management (add, list, remove)
|
|
228
|
+
- Plugin installation and uninstallation
|
|
229
|
+
- Support for Cursor IDE integration
|
|
230
|
+
- Configuration management
|
|
231
|
+
- Manifest tracking for installed plugins
|
|
232
|
+
|
|
233
|
+
[Unreleased]: https://github.com/pcomans/caruso/compare/v0.1.3...HEAD
|
|
234
|
+
[0.1.3]: https://github.com/pcomans/caruso/compare/v0.1.2...v0.1.3
|
|
235
|
+
[0.1.2]: https://github.com/pcomans/caruso/compare/v0.1.0...v0.1.2
|
|
236
|
+
[0.1.0]: https://github.com/pcomans/caruso/releases/tag/v0.1.0
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Aruba Migration Guide
|
|
240
|
+
|
|
241
|
+
**Before (current custom approach):**
|
|
242
|
+
|
|
243
|
+
```ruby
|
|
244
|
+
# spec/spec_helper.rb
|
|
245
|
+
def run_caruso(*args)
|
|
246
|
+
cmd = "caruso #{args.join(' ')}"
|
|
247
|
+
output = `#{cmd} 2>&1`
|
|
248
|
+
{ output: output, exit_code: $?.exitstatus }
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# In tests:
|
|
252
|
+
result = run_caruso("marketplace add https://github.com/...")
|
|
253
|
+
expect(result[:exit_code]).to eq(0)
|
|
254
|
+
expect(result[:output]).to include("Added marketplace")
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**After (with Aruba):**
|
|
258
|
+
|
|
259
|
+
```ruby
|
|
260
|
+
# spec/spec_helper.rb
|
|
261
|
+
require 'aruba/rspec'
|
|
262
|
+
|
|
263
|
+
RSpec.configure do |config|
|
|
264
|
+
config.include Aruba::Api, type: :integration
|
|
265
|
+
|
|
266
|
+
# ... rest of config ...
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# In tests:
|
|
270
|
+
RSpec.describe "Marketplace Management", type: :integration do
|
|
271
|
+
it "adds a marketplace" do
|
|
272
|
+
run_command("caruso marketplace add https://github.com/...")
|
|
273
|
+
|
|
274
|
+
expect(last_command_started).to be_successfully_executed
|
|
275
|
+
expect(last_command_started).to have_output(/Added marketplace/)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
it "handles errors gracefully" do
|
|
279
|
+
run_command("caruso marketplace remove nonexistent")
|
|
280
|
+
|
|
281
|
+
expect(last_command_started).to have_exit_status(0)
|
|
282
|
+
# or check for specific error output
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Key Aruba Benefits:**
|
|
288
|
+
- Automatic command isolation
|
|
289
|
+
- Better stderr/stdout separation
|
|
290
|
+
- Rich matchers (`be_successfully_executed`, `have_output`)
|
|
291
|
+
- Support for interactive commands
|
|
292
|
+
- File system helpers (automatic cleanup)
|
|
293
|
+
- Environment variable manipulation
|
|
294
|
+
|
|
295
|
+
**Aruba Useful Methods:**
|
|
296
|
+
- `run_command(cmd)` - Run a command
|
|
297
|
+
- `last_command_started` - Access last command
|
|
298
|
+
- `have_output(content)` - Check output
|
|
299
|
+
- `be_successfully_executed` - Check exit code 0
|
|
300
|
+
- `have_exit_status(code)` - Check specific exit code
|
|
301
|
+
- `stop_all_commands` - Clean up background processes
|
|
302
|
+
|
|
303
|
+
### .rubocop.yml Starter
|
|
304
|
+
|
|
305
|
+
```yaml
|
|
306
|
+
AllCops:
|
|
307
|
+
TargetRubyVersion: 3.0
|
|
308
|
+
NewCops: enable
|
|
309
|
+
Exclude:
|
|
310
|
+
- 'vendor/**/*'
|
|
311
|
+
- 'pkg/**/*'
|
|
312
|
+
|
|
313
|
+
# Adjust these to your preferences
|
|
314
|
+
Layout/LineLength:
|
|
315
|
+
Max: 120
|
|
316
|
+
|
|
317
|
+
Metrics/BlockLength:
|
|
318
|
+
Exclude:
|
|
319
|
+
- 'spec/**/*'
|
|
320
|
+
- 'Rakefile'
|
|
321
|
+
|
|
322
|
+
Style/Documentation:
|
|
323
|
+
Enabled: false # Enable this if you want to enforce class documentation
|
|
324
|
+
|
|
325
|
+
Style/StringLiterals:
|
|
326
|
+
EnforcedStyle: double_quotes # or single_quotes, your choice
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Progress Tracking
|
|
332
|
+
|
|
333
|
+
Update this section as you complete tasks:
|
|
334
|
+
|
|
335
|
+
**Completed:** 9/26 tasks (35%)
|
|
336
|
+
|
|
337
|
+
**Last Updated:** 2025-11-20
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Philipp Comans
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Caruso
|
|
2
|
+
|
|
3
|
+
**Caruso** is a tool that bridges the gap between AI coding assistants. It allows you to take "steering documentation" (rules, context, capabilities) from **Claude Code Marketplaces** and make them available to **Cursor**.
|
|
4
|
+
|
|
5
|
+
## Mission
|
|
6
|
+
|
|
7
|
+
Enable Cursor to consume Claude Code plugins from marketplaces by converting them to Cursor-compatible rules.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
* **One-time Configuration**: Initialize once with `caruso init --ide=cursor` and all commands automatically use the right settings.
|
|
12
|
+
* **Universal Fetcher**: Downloads plugins from local paths, HTTP URLs, or GitHub repositories.
|
|
13
|
+
* **Smart Adapter**: Automatically converts Claude Plugin Markdown files into **Cursor Rules** (`.mdc`), injecting necessary metadata (`globs: []`, `alwaysApply: false`) to ensure they work out of the box.
|
|
14
|
+
* **Package Manager**: Install, uninstall, and list plugins selectively. Tracks project configuration in `caruso.json` and local state in `.caruso.local.json`.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
### Option 1: Install from Source (Recommended)
|
|
19
|
+
|
|
20
|
+
Clone the repository and build the gem:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git clone https://github.com/pcomans/caruso.git
|
|
24
|
+
cd caruso
|
|
25
|
+
gem build caruso.gemspec
|
|
26
|
+
gem install caruso-*.gem
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Option 2: Using `specific_install`
|
|
30
|
+
|
|
31
|
+
If you have the `specific_install` gem, you can install directly from GitHub:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
gem install specific_install
|
|
35
|
+
gem specific_install -l https://github.com/pcomans/caruso.git
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
Caruso mirrors the Claude Code CLI structure, providing a familiar interface for marketplace and plugin management.
|
|
41
|
+
|
|
42
|
+
### Getting Started
|
|
43
|
+
|
|
44
|
+
Before using Caruso, initialize it in your project directory:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Navigate to your project
|
|
48
|
+
cd /path/to/your/project
|
|
49
|
+
|
|
50
|
+
# Initialize for Cursor (currently the only supported IDE)
|
|
51
|
+
caruso init --ide=cursor
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This creates a `caruso.json` config file for project settings and `.caruso.local.json` for local state. You only need to do this once per project.
|
|
55
|
+
|
|
56
|
+
**What happens during init:**
|
|
57
|
+
- Creates `caruso.json` and `.caruso.local.json` in your project root
|
|
58
|
+
- Configures target directory (`.cursor/rules` for Cursor)
|
|
59
|
+
- All subsequent commands automatically use this configuration
|
|
60
|
+
|
|
61
|
+
**Version Control:**
|
|
62
|
+
- ✅ **Commit to VCS:** `caruso.json` - Contains project plugin configuration (shared with team)
|
|
63
|
+
- ❌ **Add to .gitignore:** `.caruso.local.json` - Contains local state (machine-specific)
|
|
64
|
+
- ❌ **Add to .gitignore:** `.cursor/rules/caruso/` - Generated plugin files (build artifacts)
|
|
65
|
+
|
|
66
|
+
Add these to your `.gitignore`:
|
|
67
|
+
```
|
|
68
|
+
# Caruso
|
|
69
|
+
.caruso.local.json
|
|
70
|
+
.cursor/rules/caruso/
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Marketplace commands
|
|
74
|
+
|
|
75
|
+
Manage plugin marketplaces to discover and install plugins from different sources.
|
|
76
|
+
|
|
77
|
+
#### Add a marketplace
|
|
78
|
+
|
|
79
|
+
Add the official Claude Code marketplace:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
caruso marketplace add https://github.com/anthropics/claude-code
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The marketplace name is automatically read from the `marketplace.json` file in the repository (in this case, `claude-code-plugins`).
|
|
86
|
+
|
|
87
|
+
Supported marketplace sources:
|
|
88
|
+
- **GitHub repositories**: `https://github.com/owner/repo`
|
|
89
|
+
- **Git repositories**: Any Git URL (e.g., `https://gitlab.com/company/plugins.git`)
|
|
90
|
+
- **Local paths**: `./path/to/marketplace` or `./path/to/marketplace.json`
|
|
91
|
+
|
|
92
|
+
#### List marketplaces
|
|
93
|
+
|
|
94
|
+
View all configured marketplaces:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
caruso marketplace list
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### Remove a marketplace
|
|
101
|
+
|
|
102
|
+
Remove a marketplace from your configuration:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
caruso marketplace remove claude-code
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
<Warning>
|
|
109
|
+
Removing a marketplace will not automatically uninstall plugins from that marketplace. Uninstall plugins first if you want to remove them.
|
|
110
|
+
</Warning>
|
|
111
|
+
|
|
112
|
+
### Plugin commands
|
|
113
|
+
|
|
114
|
+
Discover, install, and manage plugins from configured marketplaces.
|
|
115
|
+
|
|
116
|
+
#### List available plugins
|
|
117
|
+
|
|
118
|
+
See all available plugins across configured marketplaces:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
caruso plugin list
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
This shows:
|
|
125
|
+
- All plugins from each marketplace
|
|
126
|
+
- Installation status for each plugin
|
|
127
|
+
- Plugin descriptions
|
|
128
|
+
|
|
129
|
+
#### Install a plugin
|
|
130
|
+
|
|
131
|
+
Install from a specific marketplace:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
caruso plugin install frontend-design@claude-code
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Install when only one marketplace is configured (marketplace name is optional):
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
caruso plugin install frontend-design
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**What happens during installation:**
|
|
144
|
+
1. Fetches plugin files from the marketplace
|
|
145
|
+
2. Scans `commands/`, `agents/`, and `skills/` directories
|
|
146
|
+
3. Converts Claude Plugin Markdown to Cursor Rules (`.mdc` format)
|
|
147
|
+
4. Injects Cursor-specific metadata (`globs: []`, `alwaysApply: false`)
|
|
148
|
+
5. Saves converted files to `.cursor/rules/caruso/` (vendor directory)
|
|
149
|
+
6. Updates `.caruso.local.json` with installed file list
|
|
150
|
+
|
|
151
|
+
#### Uninstall a plugin
|
|
152
|
+
|
|
153
|
+
Remove a plugin and update the manifest:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
caruso plugin uninstall frontend-design
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Complete workflow example
|
|
160
|
+
|
|
161
|
+
Here's a complete workflow from initialization to plugin installation:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# 1. Initialize Caruso in your project
|
|
165
|
+
caruso init --ide=cursor
|
|
166
|
+
|
|
167
|
+
# 2. Add the official Claude Code marketplace
|
|
168
|
+
caruso marketplace add https://github.com/anthropics/claude-code
|
|
169
|
+
|
|
170
|
+
# 3. Browse available plugins
|
|
171
|
+
caruso plugin list
|
|
172
|
+
|
|
173
|
+
# 4. Install a plugin
|
|
174
|
+
caruso plugin install frontend-design@claude-code
|
|
175
|
+
|
|
176
|
+
# 5. Your Cursor rules are now updated!
|
|
177
|
+
# 5. Your Cursor rules are now updated!
|
|
178
|
+
# Files are in .cursor/rules/caruso/ and tracked in .caruso.local.json
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## CLI Reference
|
|
182
|
+
|
|
183
|
+
### Initialization
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
caruso init [PATH] --ide=IDE
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Initialize Caruso in a directory. Creates `caruso.json` and `.caruso.local.json`.
|
|
190
|
+
|
|
191
|
+
**Arguments:**
|
|
192
|
+
- `PATH` - Project directory (optional, defaults to current directory)
|
|
193
|
+
|
|
194
|
+
**Options:**
|
|
195
|
+
- `--ide` - Target IDE (required). Currently supported: `cursor`
|
|
196
|
+
|
|
197
|
+
**Examples:**
|
|
198
|
+
```bash
|
|
199
|
+
caruso init --ide=cursor # Initialize current directory
|
|
200
|
+
caruso init . --ide=cursor # Explicit current directory
|
|
201
|
+
caruso init /path/to/project --ide=cursor # Initialize specific directory
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Marketplace Management
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
caruso marketplace add URL # Add a marketplace (name from marketplace.json)
|
|
208
|
+
caruso marketplace list # List configured marketplaces
|
|
209
|
+
caruso marketplace remove NAME # Remove a marketplace
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Plugin Management
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
caruso plugin list # List available and installed plugins
|
|
216
|
+
caruso plugin install PLUGIN[@MARKETPLACE] # Install a plugin
|
|
217
|
+
caruso plugin uninstall PLUGIN # Uninstall a plugin
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Version
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
caruso version # Print Caruso version
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## How it works
|
|
227
|
+
|
|
228
|
+
1. **Init**: Creates `caruso.json` and `.caruso.local.json` (one-time setup)
|
|
229
|
+
2. **Fetch**: Resolves marketplace URI and clones Git repositories if needed
|
|
230
|
+
3. **Scan**: Finds "steering files" in `commands/`, `agents/`, and `skills/` directories
|
|
231
|
+
4. **Adapt**: Converts Claude Plugin Markdown to Cursor Rules (`.mdc`) with metadata injection
|
|
232
|
+
5. **Manage**: Tracks installations in `.caruso.local.json` and project plugins in `caruso.json`
|
|
233
|
+
|
|
234
|
+
## Development
|
|
235
|
+
|
|
236
|
+
After checking out the repo:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Install dependencies
|
|
240
|
+
bundle install
|
|
241
|
+
|
|
242
|
+
# Build and install the gem locally
|
|
243
|
+
gem build caruso.gemspec
|
|
244
|
+
gem install caruso-*.gem
|
|
245
|
+
|
|
246
|
+
# Run tests
|
|
247
|
+
bundle exec rake spec
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Testing
|
|
251
|
+
|
|
252
|
+
Caruso includes comprehensive test coverage with RSpec integration tests.
|
|
253
|
+
|
|
254
|
+
#### Run Tests
|
|
255
|
+
|
|
256
|
+
**Quick test (offline tests only):**
|
|
257
|
+
```bash
|
|
258
|
+
bundle exec rake spec
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**All tests including live marketplace integration:**
|
|
262
|
+
```bash
|
|
263
|
+
bundle exec rake spec:all
|
|
264
|
+
# or
|
|
265
|
+
RUN_LIVE_TESTS=true bundle exec rspec
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Only live tests:**
|
|
269
|
+
```bash
|
|
270
|
+
bundle exec rake spec:live
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Run specific test file:**
|
|
274
|
+
```bash
|
|
275
|
+
bundle exec rspec spec/integration/init_spec.rb
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
#### Test Structure
|
|
279
|
+
|
|
280
|
+
Integration tests are organized in `spec/integration/`:
|
|
281
|
+
|
|
282
|
+
- **init_spec.rb** - Initialization and configuration tests
|
|
283
|
+
- **marketplace_spec.rb** - Marketplace management (add, list, remove)
|
|
284
|
+
- **plugin_spec.rb** - Plugin installation and uninstallation
|
|
285
|
+
- **file_validation_spec.rb** - .mdc file structure and manifest validation
|
|
286
|
+
|
|
287
|
+
#### Live Tests
|
|
288
|
+
|
|
289
|
+
Tests marked with `:live` tag require network access and interact with the real Claude Code marketplace:
|
|
290
|
+
- Plugin installation
|
|
291
|
+
- File conversion validation
|
|
292
|
+
- Marketplace fetching
|
|
293
|
+
|
|
294
|
+
To run live tests, set `RUN_LIVE_TESTS=true` or use `rake spec:all`.
|
|
295
|
+
|
|
296
|
+
#### Test Coverage
|
|
297
|
+
|
|
298
|
+
✓ **Initialization**
|
|
299
|
+
- Config file creation and validation
|
|
300
|
+
- IDE selection
|
|
301
|
+
- Double-init prevention
|
|
302
|
+
- Error handling
|
|
303
|
+
|
|
304
|
+
✓ **Marketplace Management**
|
|
305
|
+
- Adding marketplaces (GitHub, Git, local)
|
|
306
|
+
- Listing marketplaces
|
|
307
|
+
- Removing marketplaces
|
|
308
|
+
- Manifest structure
|
|
309
|
+
|
|
310
|
+
✓ **Plugin Management**
|
|
311
|
+
- Listing available plugins
|
|
312
|
+
- Installing plugins (explicit/implicit marketplace)
|
|
313
|
+
- Uninstalling plugins
|
|
314
|
+
- Installation status tracking
|
|
315
|
+
|
|
316
|
+
✓ **File Validation**
|
|
317
|
+
- .mdc file structure (frontmatter, globs, content)
|
|
318
|
+
- File naming conventions
|
|
319
|
+
- Manifest accuracy
|
|
320
|
+
- No orphaned files
|
|
321
|
+
|
|
322
|
+
For detailed testing documentation, see [TESTING.md](TESTING.md).
|
|
323
|
+
|
|
324
|
+
## License
|
|
325
|
+
|
|
326
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|