{"_id":"@71zone/ccm","_rev":"5-287c8b423b7b85a4de7d14bc3deab029","name":"@71zone/ccm","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@71zone/ccm","version":"0.1.0","keywords":["claude","claude-code","cli","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm@0.1.0","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"bin":{"ccm":"dist/cli.js"},"dist":{"shasum":"a2d9b43bf6fe57ca10caf4e2e7ffaaf9bbb96004","tarball":"https://registry.npmjs.org/@71zone/ccm/-/ccm-0.1.0.tgz","fileCount":3,"integrity":"sha512-LaM9CUlS9vWPluETpt3lhv/OrTxRx87pyxmHu6YGwpm42o1E3HW5Ar36R1SOxFz5INi1q/YsGXx3zV7WlVzH4g==","signatures":[{"sig":"MEQCIF+I9xPkKs4FoKlY/JSLin+Y0YJ3077BOfn6T5XFFiF1AiBaZEugsGvtuY5X2+nyD3I0PHMe5FOvJ+1X7Tqkg1Q3wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74095},"type":"module","_from":"file:71zone-ccm-0.1.0.tgz","engines":{"node":">=24.0.0"},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/420433c644eebdcd597ab9eed8016e8b/71zone-ccm-0.1.0.tgz","_integrity":"sha512-LaM9CUlS9vWPluETpt3lhv/OrTxRx87pyxmHu6YGwpm42o1E3HW5Ar36R1SOxFz5INi1q/YsGXx3zV7WlVzH4g==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"CLI tool to manage Claude Code configurations from Git repositories","directories":{},"_nodeVersion":"24.12.0","dependencies":{"citty":"^0.2.0","@clack/prompts":"^0.11.0","@71zone/ccm-core":"0.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm_0.1.0_1769010756232_0.05459440129374782","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@71zone/ccm","version":"0.1.1","keywords":["claude","claude-code","cli","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm@0.1.1","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"bin":{"ccm":"dist/cli.js"},"dist":{"shasum":"2881611a6389feb64275ba191b5e24e5ea7e235d","tarball":"https://registry.npmjs.org/@71zone/ccm/-/ccm-0.1.1.tgz","fileCount":4,"integrity":"sha512-SE1lQnCRHkJB8+wRuVFbBeS3StMCfm0kQd1Lv/myketbpWZnEuTIIHj4eInMWjjnFFgOZCv9pSPwdbs2KejEJg==","signatures":[{"sig":"MEUCIAXORxrDj5RjC++qF90v8o7eodJbOqWummEiYY6FxBJgAiEA16M9KiK2cwzAgHOMcxIIbc+P5wy0gbCO9n/uuYG2vnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79093},"type":"module","_from":"file:71zone-ccm-0.1.1.tgz","engines":{"node":">=24.0.0"},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/8ad07ac87ff52a4aa9c943a9dba0ea2f/71zone-ccm-0.1.1.tgz","_integrity":"sha512-SE1lQnCRHkJB8+wRuVFbBeS3StMCfm0kQd1Lv/myketbpWZnEuTIIHj4eInMWjjnFFgOZCv9pSPwdbs2KejEJg==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"CLI tool to manage Claude Code configurations from Git repositories","directories":{},"_nodeVersion":"24.12.0","dependencies":{"citty":"^0.2.0","@clack/prompts":"^0.11.0","@71zone/ccm-core":"0.1.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm_0.1.1_1769010901468_0.9274398705866758","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@71zone/ccm","version":"0.1.2","keywords":["claude","claude-code","cli","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm@0.1.2","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"bin":{"ccm":"dist/cli.js"},"dist":{"shasum":"696c5fb29dbd1bffe75b2b634072d3fb2ccc67f9","tarball":"https://registry.npmjs.org/@71zone/ccm/-/ccm-0.1.2.tgz","fileCount":4,"integrity":"sha512-3ih08Uyj+EpUXUhTlu0oDs6kjmMv6lNAeh3mQ4KKNRlj5hpUujhLBRaPAam4vPcm7U+3WfvG+yKtxnnag92hrg==","signatures":[{"sig":"MEUCIQDFz0yjA2GuGFr164/s9bT/mSF9AZT+3xOtZNbXTvYOkQIgPoFQD8vCl3JGQNkGRKaE9Htbjfi6Pv63HYM151GV/Rg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79016},"type":"module","_from":"file:71zone-ccm-0.1.2.tgz","engines":{"node":">=24.0.0"},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/03c45fcf24abdc68db43c9ed77145e17/71zone-ccm-0.1.2.tgz","_integrity":"sha512-3ih08Uyj+EpUXUhTlu0oDs6kjmMv6lNAeh3mQ4KKNRlj5hpUujhLBRaPAam4vPcm7U+3WfvG+yKtxnnag92hrg==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"CLI tool to manage Claude Code configurations from Git repositories","directories":{},"_nodeVersion":"24.12.0","dependencies":{"citty":"^0.2.0","@clack/prompts":"^0.11.0","@71zone/ccm-core":"0.1.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm_0.1.2_1769011094811_0.17048579016550147","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@71zone/ccm","version":"0.1.3","keywords":["claude","claude-code","cli","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm@0.1.3","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"bin":{"ccm":"dist/cli.js"},"dist":{"shasum":"e038f4f5cbc2287de70655b762c11d7c55b680a1","tarball":"https://registry.npmjs.org/@71zone/ccm/-/ccm-0.1.3.tgz","fileCount":4,"integrity":"sha512-z/13E5NVDIQ7rtHFz9j+jGqRPey/3sDkHpfV2efBJLzx2LUd/cfwO/lhrqada5vyCVT/3Fzd9pE8JiZNLHzEwg==","signatures":[{"sig":"MEYCIQC6y/g4AZdxEMm9THghQ1pnqV+LJWWFs5uhCJz6xO2E2QIhAKNqVgFE1XIin6A+SG3feon+D6wUa7DOmeXNUlOEe/gu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79620},"type":"module","_from":"file:71zone-ccm-0.1.3.tgz","engines":{"node":">=24.0.0"},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/417a6d00457401bf163f8b59329e3689/71zone-ccm-0.1.3.tgz","_integrity":"sha512-z/13E5NVDIQ7rtHFz9j+jGqRPey/3sDkHpfV2efBJLzx2LUd/cfwO/lhrqada5vyCVT/3Fzd9pE8JiZNLHzEwg==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"CLI tool to manage Claude Code configurations from Git repositories","directories":{},"_nodeVersion":"24.12.0","dependencies":{"citty":"^0.2.0","@clack/prompts":"^0.11.0","@71zone/ccm-core":"0.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm_0.1.3_1769011432176_0.22204660868483317","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@71zone/ccm","version":"0.1.6","description":"CLI tool to manage Claude Code configurations from Git repositories","type":"module","bin":{"ccm":"dist/cli.js"},"keywords":["claude","claude-code","cli","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/71zone/ccm.git","directory":"packages/cli"},"engines":{"node":">=24.0.0"},"dependencies":{"@clack/prompts":"^0.11.0","citty":"^0.2.0","@71zone/ccm-core":"0.1.6"},"scripts":{"build":"tsup && cp ../../README.md .","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo"},"_id":"@71zone/ccm@0.1.6","bugs":{"url":"https://github.com/71zone/ccm/issues"},"homepage":"https://github.com/71zone/ccm#readme","_integrity":"sha512-VG8sxW3cI5bmkosz0p2f0CAbSGbAsaG5PFk6EkILwQC/bL3luelNKp1pack/7np9VlgkH06enO1alZ0DsPgotw==","_resolved":"/tmp/aa37810cdfc151ffeb31151ed1647442/71zone-ccm-0.1.6.tgz","_from":"file:71zone-ccm-0.1.6.tgz","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-VG8sxW3cI5bmkosz0p2f0CAbSGbAsaG5PFk6EkILwQC/bL3luelNKp1pack/7np9VlgkH06enO1alZ0DsPgotw==","shasum":"545518c76a4b431540ccadb2480d1054301a56ea","tarball":"https://registry.npmjs.org/@71zone/ccm/-/ccm-0.1.6.tgz","fileCount":4,"unpackedSize":116176,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICMRAWrEE7bzlL633Xgy7WNWxqm+ICpTFXabD+wL/uKZAiEAqUc8tmKje26iLRbi9Np2tkPIpcozzco8u3IGBkDKKHM="}]},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"directories":{},"maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ccm_0.1.6_1769569527576_0.3782351040942593"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-21T15:52:36.146Z","modified":"2026-01-28T03:05:27.813Z","0.1.0":"2026-01-21T15:52:36.351Z","0.1.1":"2026-01-21T15:55:01.670Z","0.1.2":"2026-01-21T15:58:14.956Z","0.1.3":"2026-01-21T16:03:52.324Z","0.1.6":"2026-01-28T03:05:27.712Z"},"bugs":{"url":"https://github.com/71zone/ccm/issues"},"author":{"name":"71zone"},"license":"MIT","homepage":"https://github.com/71zone/ccm#readme","keywords":["claude","claude-code","cli","mcp","agents","skills"],"repository":{"type":"git","url":"git+https://github.com/71zone/ccm.git","directory":"packages/cli"},"description":"CLI tool to manage Claude Code configurations from Git repositories","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"readme":"# CCM - Claude Code Extension Manager\n\nA CLI tool to manage Claude Code configurations (agents, skills, commands, MCP) from multiple Git repositories.\n\n## Installation\n\n```bash\nnpm install -g @71zone/ccm\n```\n\n## Quick Start\n\n```bash\n# Add a repository\nccm add https://github.com/anthropics/claude-skills\n\n# Interactive picker - select what you want\nccm use anth\n\n# Check what's linked\nccm status\n```\n\n## Commands\n\n### `ccm add <github-url>`\n\nClone a repository and register it as a source.\n\n```bash\n$ ccm add https://github.com/acme/claude-toolkit\n\n✓ Cloned to ~/.local/share/ccm/repos/acme\n✓ Detected: 3a 5s 2c 1m\n✓ Registered as \"acme\"\n```\n\n### `ccm list` (alias: `ccm ls`)\n\nShow all registered repositories.\n\n```bash\n$ ccm list\n\n  acme  github.com/acme/claude-toolkit  3a  5s  2c  1m\n  myco  github.com/myco/dotclaude        1a  0s  4c  0m\n```\n\n### `ccm remove <alias>` (alias: `ccm rm`)\n\nRemove a repository and unlink all its assets.\n\n```bash\n$ ccm remove acme\n\nUnlinked 4 assets. Removed repository.\n```\n\n### `ccm update [alias]`\n\nPull latest changes from registered repositories.\n\n```bash\n# Updates only repos with active selections\n$ ccm update\n\n# Updates all registered repos\n$ ccm update -a\n\n# Updates specific repo\n$ ccm update acme\n```\n\n### `ccm show <alias>`\n\nDisplay available assets in a repository.\n\n```bash\n$ ccm show acme\n\nacme (acme/claude-toolkit)\n├── agents/\n│   ├── coder.md\n│   └── reviewer.md\n├── skills/\n│   ├── coding/SKILL.md\n│   └── debugging/SKILL.md\n├── commands/\n│   └── deploy.md\n└── mcp/\n    └── github.json\n```\n\n### `ccm use [alias]`\n\nInteractive asset picker with grouped selection (select all by category). Without alias, prompts for repository selection first.\n\n```bash\n$ ccm use acme\n\n◆ Select assets to link (space to toggle, enter to confirm)\n│ ◻ agents (select all)\n│   ◻ coder.md\n│   ◻ reviewer.md\n│ ◻ skills (select all)\n│   ◻ coding\n│   ◻ debugging\n│ ◻ commands (select all)\n│   ◻ deploy.md\n\n✓ Linked acme-coder.md\n✓ Linked acme-coding\n```\n\nFor MCP configs, servers are selected individually:\n\n```bash\n◆ Select servers from mcp.json\n│ ◻ servers (select all)\n│   ◻ github\n│   ◻ filesystem\n│   ◻ postgres\n\n✓ Staged MCP server: github\n✓ Staged MCP server: filesystem\n\nRun `ccm mcp sync` to apply staged MCP servers\n```\n\n### `ccm unuse [alias:path]`\n\nInteractive unlink picker. Without arguments, shows grouped selection of all linked assets.\n\n```bash\n# Interactive mode (default)\n$ ccm unuse\n\n◆ Select assets to unlink:\n│ ◻ acme\n│   ◻ agent/coder\n│   ◻ skill/coding\n│ ◻ myco\n│   ◻ command/deploy\n\n# Unlink specific asset\n$ ccm unuse acme:agents/coder.md\n\n# Unlink everything\n$ ccm unuse --all\n```\n\n### `ccm status`\n\nShow currently linked assets.\n\n```bash\n$ ccm status\n\nagents/\n  acme-coder.md     ✓\n  myco-writer.md     ✗ broken\nskills/\n  acme-coding       ✓\nmcp/ (staged)\n  acme: github, filesystem\n  myco: postgres\n\nRun `ccm doctor cure` to fix broken links\nRun `ccm mcp sync` to apply staged MCP configs\n```\n\n### `ccm doctor`\n\nCheck for issues.\n\n```bash\n$ ccm doctor\n\n✗ Broken symlink: ~/.claude/agents/myco-writer.md\n✗ Missing source: myco/agents/writer.md (deleted upstream?)\n✓ 3 healthy link(s)\n\nRun `ccm doctor cure` to auto-fix\n```\n\n### `ccm doctor cure`\n\nAuto-fix issues (remove broken symlinks, clean orphaned selections).\n\n```bash\n$ ccm doctor cure\n\n✓ Fixed 2 broken link(s)\n```\n\n### `ccm mcp show`\n\nPreview merged MCP configuration.\n\n```bash\n$ ccm mcp show\n\n# Merged from: acme:github.json, myco:filesystem.json\n\n{\n  \"mcpServers\": {\n    \"github\": { ... },\n    \"filesystem\": { ... }\n  }\n}\n```\n\n### `ccm mcp sync`\n\nBuild and apply merged MCP config to `~/.claude/mcp.json`.\n\n```bash\n$ ccm mcp sync\n\nPreview:\n  + github (from acme)\n  + filesystem (from myco)\n\nApply to ~/.claude/mcp.json? [y/N] y\n✓ Applied\n```\n\n## File Structure\n\n```\n~/.config/ccm/config.json     # Registry & selection state\n~/.local/share/ccm/repos/     # Cloned repositories\n~/.claude/                    # Output (symlinks)\n  ├── agents/                 # Agent symlinks\n  ├── skills/                 # Skill symlinks\n  ├── commands/               # Command symlinks\n  └── mcp.json               # Merged MCP config\n```\n\n## Asset Detection\n\nAssets are detected by path patterns:\n\n| Pattern | Type |\n|---------|------|\n| `*/agents/*.md` | Agent |\n| `*/skills/*/SKILL.md` | Skill |\n| `*/commands/*.md` | Command |\n| `*mcp*.json` with `mcpServers` key | MCP config |\n\nFallback: parse YAML frontmatter (`tools`/`model` fields = Agent).\n\n## Alias Generation\n\n- Username ≤ 4 chars → use as-is\n- Else → first 4 chars\n- Collision → append number (acme, acme2)\n\n## How It Works\n\n- **Symlinks** for live updates (edits in source repos propagate automatically)\n- **`git fetch && git reset --hard origin/<branch>`** for updates\n- **Flat output structure** with namespace prefix (e.g., `acme-coder.md`)\n- **Per-server MCP staging** - Individual MCP servers are staged (not whole files), then merged on `ccm mcp sync`\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm build\n\n# Run tests\npnpm test\n\n# Development mode (watch)\npnpm dev\n```\n\n## Packages\n\n| Package | Description |\n|---------|-------------|\n| `@71zone/ccm` | CLI tool |\n| `@71zone/ccm-core` | Core library (repo management, asset detection, linking) |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}