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.
Enable Cursor to consume Claude Code plugins from marketplaces by converting them to Cursor-compatible rules.
- 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.
gem install carusoVerify the installation:
caruso versionFor development or testing unreleased features:
git clone https://github.com/pcomans/caruso.git
cd caruso
gem build caruso.gemspec
gem install caruso-*.gemCaruso mirrors the Claude Code CLI structure, providing a familiar interface for marketplace and plugin management.
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/
Manage plugin marketplaces to discover and install plugins from different sources.
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
View all configured marketplaces:
caruso marketplace listRemove a marketplace from your configuration:
caruso marketplace remove claude-codeDiscover, install, and manage plugins from configured marketplaces.
See all available plugins across configured marketplaces:
caruso plugin listThis shows:
- All plugins from each marketplace
- Installation status for each plugin
- Plugin descriptions
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
Remove a plugin and update the manifest:
caruso plugin uninstall frontend-designHere'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.jsoncaruso 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 directorycaruso marketplace add URL # Add a marketplace (name from marketplace.json)
caruso marketplace list # List configured marketplaces
caruso marketplace remove NAME # Remove a marketplacecaruso plugin list # List available and installed plugins
caruso plugin install PLUGIN[@MARKETPLACE] # Install a plugin
caruso plugin uninstall PLUGIN # Uninstall a plugincaruso version # Print Caruso versionCaruso translates the interface between Claude Code and Cursor (file formats, event names, output protocols), but it cannot translate plugin internals. Hooks and scripts that depend on Claude Code-specific runtime behavior — such as reading the session transcript, checking stop_hook_active, or using CLAUDE_ENV_FILE — will not work in Cursor because those conventions don't exist there. Plugins that rely on these internals need to be adapted upstream to handle missing fields gracefully.
- 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
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 specCaruso includes comprehensive test coverage with RSpec integration 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.rbIntegration 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
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.
✓ 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.
The gem is available as open source under the terms of the MIT License.