A desktop app for managing Claude Code configurations across all your projects.

If you use Claude Code across multiple projects, you'll quickly run into these pain points:
.claude/ directory. There's no single place to see what you have or what's being used where.CCM gives you a central dashboard for everything Claude Code — across all your projects, with a shared library, registry support, and cross-project resource management.
See everything at a glance. One dashboard shows all your projects, resources, plugins, and MCP servers. Search across everything instantly.
Write once, use everywhere. Store resources in a central library (~/.claude-manager/library/), then install them into any project via symlink or copy. Update the library version, and all symlinked projects get the change automatically.
Share with your team. Git-based registries let teams publish, version, and distribute Claude configurations — skills, agents, rules, and complete plugin packs.
Automate with APIs. A local HTTP API lets you integrate CCM with Raycast, Alfred, shell scripts, or any tool that speaks HTTP.
~/.claude/projects.json to find all Claude-configured projectsManage six types of Claude Code resources:
| Type | Description |
|---|---|
| Skills | Reusable instruction blocks and domain knowledge |
| Agents | AI agent definitions and personas |
| Rules | Behavioral guidelines for Claude |
| Hooks | Event hooks (JSON configuration) |
| Commands | Custom slash commands |
| MCP Servers | Model Context Protocol server configurations |
Each resource can exist in multiple scopes:
~/.claude/) — Active for all projectsproject/.claude/) — Specific to one project~/.claude-manager/library/) — Central reusable storage~/.claude-manager/library/ as your single source of truth~/.claude/ for universal access~/.claude/plugins/.mcp.json (global and per-project)claude CLI on every launch~/.claude/ and ~/.claude-manager/CCM provides a local HTTP API that any tool can call — Raycast, Alfred, shell scripts, CI pipelines, or custom dashboards.
| Endpoint | Description |
|---|---|
GET /api/health |
Health check (no auth required) |
GET /api/projects?q=keyword |
Search/list projects |
GET /api/projects/:id |
Project detail |
POST /api/projects/:id/launch |
Launch Claude Code in project |
Bundled Raycast Extension (raycast-extension/):
The HTTP API can be called directly from Alfred Workflows using curl:
# Search projects
curl -s -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:23890/api/projects?q=myproject"
# Launch Claude Code in a project
curl -s -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:23890/api/projects/PROJECT_ID/launch"
Create a Script Filter in Alfred with the search endpoint, parse the JSON response to build Alfred result items, then use a Run Script action to call the launch endpoint.
# List all projects
curl -s -H "Authorization: Bearer $CCM_TOKEN" \
http://127.0.0.1:23890/api/projects | jq '.data[].name'
# Launch a project by name
ID=$(curl -s -H "Authorization: Bearer $CCM_TOKEN" \
"http://127.0.0.1:23890/api/projects?q=myapp" | jq -r '.data[0].id')
curl -s -X POST -H "Authorization: Bearer $CCM_TOKEN" \
"http://127.0.0.1:23890/api/projects/$ID/launch"
Meta+K) with customizable shortcut| Layer | Technology |
|---|---|
| Framework | Tauri 2.x |
| Frontend | React 19 + TypeScript |
| Backend | Rust |
| UI | shadcn/ui + Tailwind CSS v4 |
| State | Zustand v5 |
| Database | SQLite (via rusqlite) |
| HTTP API | axum |
| Routing | react-router-dom v7 |
# Install dependencies
npm install
# Start development mode (Vite + Tauri)
npm run tauri dev
# Run frontend tests
npm test
# Run backend tests
cd src-tauri && cargo test
# Build for current architecture
npm run tauri build
On an Apple Silicon Mac (M1/M2/M3/M4), npm run tauri build produces an arm64 binary by default.
To cross-compile for Intel from an Apple Silicon Mac:
rustup target add x86_64-apple-darwin
npm run tauri build -- --target x86_64-apple-darwin
On an Intel Mac, npm run tauri build produces an x86_64 binary by default.
To cross-compile for Apple Silicon from an Intel Mac:
rustup target add aarch64-apple-darwin
npm run tauri build -- --target aarch64-apple-darwin
To build a universal binary (runs natively on both Intel and Apple Silicon):
rustup target add x86_64-apple-darwin aarch64-apple-darwin
npm run tauri build -- --target universal-apple-darwin
Build output is located in src-tauri/target/release/bundle/ — includes .app, .dmg, and .pkg formats.
| Platform | Status | Notes |
|---|---|---|
| macOS (arm64) | Fully supported | Primary development platform |
| macOS (x86_64) | Fully supported | Cross-compile from arm64 or build natively |
| Linux | Partial | Builds and runs. Symlink features work. Terminal launch uses macOS-specific osascript — needs platform-specific implementation for Linux terminals (e.g. gnome-terminal, kitty). System tray depends on desktop environment support. |
| Windows | Not supported | Symlink management uses #[cfg(unix)] guards — Windows symlinks require elevated privileges and use different APIs. Terminal launch is macOS-only (osascript). Contributions welcome. |
cd raycast-extension
npm install
npm run dev # Loads extension into Raycast
All data is stored locally:
| Path | Content |
|---|---|
~/.claude-manager/ccm.db |
SQLite database (projects, resources, settings) |
~/.claude-manager/library/ |
Central resource library |
~/.claude-manager/registries/ |
Local clones of git registries |
~/.claude/ |
Global Claude Code configuration (managed by CCM) |
MIT