Caruso
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.
Mission
Enable Cursor to consume Claude Code plugins from marketplaces by converting them to Cursor-compatible rules.
Features
-
One-time Configuration: Initialize once with
caruso init --ide=cursorand all commands automatically use the right settings. - Universal Fetcher: Downloads plugins from local paths, HTTP URLs, or GitHub repositories.
-
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. -
Package Manager: Install, uninstall, and list plugins selectively. Tracks project configuration in
caruso.jsonand local state in.caruso.local.json.
Installation
Install from RubyGems
gem install carusoVerify the installation:
caruso versionInstall from Source (Development)
For development or testing unreleased features:
git clone https://github.com/pcomans/caruso.git
cd caruso
gem build caruso.gemspec
gem install caruso-*.gemUsage
Caruso mirrors the Claude Code CLI structure, providing a familiar interface for marketplace and plugin management.
Getting Started
Before using Caruso, initialize it in your project directory:
# Navigate to your project
cd /path/to/your/project
# Initialize for Cursor (currently the only supported IDE)
caruso init --ide=cursorThis 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.
What happens during init:
- Creates
caruso.jsonand.caruso.local.jsonin your project root - Configures target directory (
.cursor/rulesfor Cursor) - All subsequent commands automatically use this configuration
Version Control:
- ✅ Commit to VCS:
caruso.json- Contains project plugin configuration (shared with team) - ❌ Add to .gitignore:
.caruso.local.json- Contains local state (machine-specific) - ❌ Add to .gitignore:
.cursor/rules/caruso/- Generated plugin files (build artifacts)
Add these to your .gitignore:
# Caruso
.caruso.local.json
.cursor/rules/caruso/
Marketplace commands
Manage plugin marketplaces to discover and install plugins from different sources.
Add a marketplace
Add the official Claude Code marketplace:
caruso marketplace add https://github.com/anthropics/claude-codeThe marketplace name is automatically read from the marketplace.json file in the repository (in this case, claude-code-plugins).
Supported marketplace sources:
-
GitHub repositories:
https://github.com/owner/repo -
Git repositories: Any Git URL (e.g.,
https://gitlab.com/company/plugins.git) -
Local paths:
./path/to/marketplaceor./path/to/marketplace.json
List marketplaces
View all configured marketplaces:
caruso marketplace listRemove a marketplace
Remove a marketplace from your configuration:
caruso marketplace remove claude-codePlugin commands
Discover, install, and manage plugins from configured marketplaces.
List available plugins
See all available plugins across configured marketplaces:
caruso plugin listThis shows:
- All plugins from each marketplace
- Installation status for each plugin
- Plugin descriptions
Install a plugin
Install from a specific marketplace:
caruso plugin install frontend-design@claude-codeInstall when only one marketplace is configured (marketplace name is optional):
caruso plugin install frontend-designWhat happens during installation:
- Fetches plugin files from the marketplace
- Scans
commands/,agents/, andskills/directories - Converts Claude Plugin Markdown to Cursor Rules (
.mdcformat) - Injects Cursor-specific metadata (
globs: [],alwaysApply: false) - Saves converted files to
.cursor/rules/caruso/(vendor directory) - Updates
.caruso.local.jsonwith installed file list
Uninstall a plugin
Remove a plugin and update the manifest:
caruso plugin uninstall frontend-designComplete workflow example
Here's a complete workflow from initialization to plugin installation:
# 1. Initialize Caruso in your project
caruso init --ide=cursor
# 2. Add the official Claude Code marketplace
caruso marketplace add https://github.com/anthropics/claude-code
# 3. Browse available plugins
caruso plugin list
# 4. Install a plugin
caruso plugin install frontend-design@claude-code
# 5. Your Cursor rules are now updated!
# 5. Your Cursor rules are now updated!
# Files are in .cursor/rules/caruso/ and tracked in .caruso.local.jsonCLI Reference
Initialization
caruso init [PATH] --ide=IDEInitialize Caruso in a directory. Creates caruso.json and .caruso.local.json.
Arguments:
-
PATH- Project directory (optional, defaults to current directory)
Options:
-
--ide- Target IDE (required). Currently supported:cursor
Examples:
caruso init --ide=cursor # Initialize current directory
caruso init . --ide=cursor # Explicit current directory
caruso init /path/to/project --ide=cursor # Initialize specific directoryMarketplace Management
caruso marketplace add URL # Add a marketplace (name from marketplace.json)
caruso marketplace list # List configured marketplaces
caruso marketplace remove NAME # Remove a marketplacePlugin Management
caruso plugin list # List available and installed plugins
caruso plugin install PLUGIN[@MARKETPLACE] # Install a plugin
caruso plugin uninstall PLUGIN # Uninstall a pluginVersion
caruso version # Print Caruso versionHow it works
-
Init: Creates
caruso.jsonand.caruso.local.json(one-time setup) - Fetch: Resolves marketplace URI and clones Git repositories if needed
-
Scan: Finds "steering files" in
commands/,agents/, andskills/directories -
Adapt: Converts Claude Plugin Markdown to Cursor Rules (
.mdc) with metadata injection -
Manage: Tracks installations in
.caruso.local.jsonand project plugins incaruso.json
Development
After checking out the repo:
# Install dependencies
bundle install
# Build and install the gem locally
gem build caruso.gemspec
gem install caruso-*.gem
# Run tests
bundle exec rake specTesting
Caruso includes comprehensive test coverage with RSpec integration tests.
Run Tests
Quick test (offline tests only):
bundle exec rake specAll tests including live marketplace integration:
bundle exec rake spec:all
# or
RUN_LIVE_TESTS=true bundle exec rspecOnly live tests:
bundle exec rake spec:liveRun specific test file:
bundle exec rspec spec/integration/init_spec.rbTest Structure
Integration tests are organized in spec/integration/:
- init_spec.rb - Initialization and configuration tests
- marketplace_spec.rb - Marketplace management (add, list, remove)
- plugin_spec.rb - Plugin installation and uninstallation
- file_validation_spec.rb - .mdc file structure and manifest validation
Live Tests
Tests marked with :live tag require network access and interact with the real Claude Code marketplace:
- Plugin installation
- File conversion validation
- Marketplace fetching
To run live tests, set RUN_LIVE_TESTS=true or use rake spec:all.
Test Coverage
✓ Initialization
- Config file creation and validation
- IDE selection
- Double-init prevention
- Error handling
✓ Marketplace Management
- Adding marketplaces (GitHub, Git, local)
- Listing marketplaces
- Removing marketplaces
- Manifest structure
✓ Plugin Management
- Listing available plugins
- Installing plugins (explicit/implicit marketplace)
- Uninstalling plugins
- Installation status tracking
✓ File Validation
- .mdc file structure (frontmatter, globs, content)
- File naming conventions
- Manifest accuracy
- No orphaned files
For detailed testing documentation, see TESTING.md.
License
The gem is available as open source under the terms of the MIT License.