claude-profile-manager 1.0.0

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Claude Profile Marketplace Contributors
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.
package/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # 🚀 Claude Profile Manager
2
+
3
+ A marketplace for saving, sharing, and loading Claude CLI configuration profiles.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/claude-profile-manager)](https://www.npmjs.com/package/claude-profile-manager)
6
+ [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
7
+
8
+ ## What is this?
9
+
10
+ Claude Profile Manager (`cpm`) lets you:
11
+
12
+ - **📸 Save** your entire `.claude` folder as a shareable profile
13
+ - **🔄 Load** profiles to instantly switch between configurations
14
+ - **🛒 Browse** a marketplace of community-created profiles
15
+ - **📤 Share** your profiles with others
16
+
17
+ Think of it like dotfiles for Claude CLI, with a built-in plugin marketplace.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install -g claude-profile-manager
23
+ ```
24
+
25
+ Requires Node.js 18+ (already installed if you're using Claude CLI).
26
+
27
+ ## Quick Start
28
+
29
+ ```bash
30
+ # Save your current Claude config as a profile
31
+ cpm save my-setup
32
+
33
+ # List profiles in the marketplace
34
+ cpm list
35
+
36
+ # Install a profile from the marketplace
37
+ cpm install marketplace/senior-developer
38
+
39
+ # Load your saved profile
40
+ cpm load my-setup
41
+ ```
42
+
43
+ ## Commands
44
+
45
+ ### Local Profile Management
46
+
47
+ ```bash
48
+ # Save current .claude folder as a profile
49
+ cpm save <n> [--description "desc"] [--tags "tag1,tag2"]
50
+
51
+ # Load a saved profile (replaces current .claude)
52
+ cpm load <n> [--backup] [--force]
53
+
54
+ # List your locally saved profiles
55
+ cpm local
56
+
57
+ # View profile details
58
+ cpm info <n>
59
+
60
+ # Delete a local profile
61
+ cpm delete <n> [--force]
62
+ ```
63
+
64
+ ### Marketplace
65
+
66
+ ```bash
67
+ # Browse all marketplace profiles
68
+ cpm list [--category <cat>] [--refresh]
69
+
70
+ # Search the marketplace
71
+ cpm search <query>
72
+
73
+ # Install a profile from marketplace
74
+ cpm install author/profile-name [--backup] [--force]
75
+
76
+ # View marketplace profile details
77
+ cpm info author/profile-name
78
+ ```
79
+
80
+ ### Publishing
81
+
82
+ ```bash
83
+ # Publish your profile to the marketplace
84
+ cpm publish <n>
85
+
86
+ # Use a custom marketplace repository
87
+ cpm repo owner/repo-name
88
+ ```
89
+
90
+ ### Configuration
91
+
92
+ ```bash
93
+ # Show current configuration
94
+ cpm config
95
+ ```
96
+
97
+ ## What's in a Profile?
98
+
99
+ A profile is a complete snapshot of your `.claude` folder, including:
100
+
101
+ - `settings.json` - Your Claude CLI settings
102
+ - `CLAUDE.md` - Custom instructions
103
+ - `commands/` - Custom slash commands
104
+ - `mcp.json` & `mcp_servers/` - MCP server configurations
105
+ - `projects/` - Project-specific settings
106
+ - And more...
107
+
108
+ **Security Note:** By default, sensitive files (credentials, API keys, etc.) are excluded from snapshots. Use `--include-secrets` only if you're sure.
109
+
110
+ ## Example Workflows
111
+
112
+ ### Switch Between Work Personas
113
+
114
+ ```bash
115
+ # Save your code review setup
116
+ cpm save work-reviewer --tags "work,code-review"
117
+
118
+ # Save your documentation setup
119
+ cpm save docs-writer --tags "work,documentation"
120
+
121
+ # Switch between them
122
+ cpm load work-reviewer
123
+ # ... do code reviews ...
124
+ cpm load docs-writer
125
+ # ... write documentation ...
126
+ ```
127
+
128
+ ### Share Team Configuration
129
+
130
+ ```bash
131
+ # Lead saves team config
132
+ cpm save team-standards --description "Our team's Claude configuration"
133
+ cpm publish team-standards
134
+
135
+ # Team members install it
136
+ cpm install yourname/team-standards
137
+ ```
138
+
139
+ ### Try Community Profiles
140
+
141
+ ```bash
142
+ # Browse what's available
143
+ cpm list
144
+
145
+ # Search for Python-focused profiles
146
+ cpm search python
147
+
148
+ # Try one out (with backup)
149
+ cpm install marketplace/python-expert --backup
150
+
151
+ # Don't like it? Restore your backup
152
+ cpm load .claude-backup-*
153
+ ```
154
+
155
+ ## Profile Storage
156
+
157
+ Profiles are stored in `~/.claude-profiles/`:
158
+
159
+ ```
160
+ ~/.claude-profiles/
161
+ ├── config.json # CPM settings
162
+ ├── my-setup/
163
+ │ ├── profile.json # Profile metadata
164
+ │ └── snapshot.zip # Compressed .claude folder
165
+ ├── work-reviewer/
166
+ │ ├── profile.json
167
+ │ └── snapshot.zip
168
+ └── .cache/
169
+ └── marketplace-index.json
170
+ ```
171
+
172
+ ## Contributing Profiles
173
+
174
+ Want to share your profile with the community?
175
+
176
+ 1. Save your profile: `cpm save my-awesome-profile`
177
+ 2. Publish it: `cpm publish my-awesome-profile`
178
+ 3. Follow the instructions to submit a PR
179
+
180
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
181
+
182
+ ## Creating a Custom Marketplace
183
+
184
+ You can host your own marketplace (e.g., for your company):
185
+
186
+ 1. Fork this repository
187
+ 2. Add profiles to the `profiles/` directory
188
+ 3. Update `index.json`
189
+ 4. Have users point to your repo:
190
+
191
+ ```bash
192
+ cpm repo your-org/your-marketplace
193
+ ```
194
+
195
+ ## Repository Structure
196
+
197
+ ```
198
+ claude-profile-marketplace/
199
+ ├── src/ # NPM package source
200
+ │ ├── cli.js # CLI entry point
201
+ │ ├── commands/ # Command implementations
202
+ │ └── utils/ # Utilities
203
+ ├── profiles/ # Marketplace profiles
204
+ │ └── author/
205
+ │ └── profile-name/
206
+ │ ├── profile.json
207
+ │ └── snapshot.zip
208
+ ├── index.json # Marketplace index
209
+ ├── package.json
210
+ └── README.md
211
+ ```
212
+
213
+ ## FAQ
214
+
215
+ **Q: Is it safe to share profiles?**
216
+
217
+ A: By default, sensitive files are excluded. However, always review your profile before publishing. Don't share profiles that contain API keys or credentials.
218
+
219
+ **Q: Can I use this with GitHub Copilot CLI too?**
220
+
221
+ A: Currently focused on Claude CLI, but the architecture supports extending to other tools.
222
+
223
+ **Q: What if I mess up my config?**
224
+
225
+ A: Use `--backup` when loading profiles to save your current config first. You can restore it with `cpm load .claude-backup-*`.
226
+
227
+ ## License
228
+
229
+ MIT License - see [LICENSE](./LICENSE) for details.
230
+
231
+ ---
232
+
233
+ **Made with ❤️ for the Claude CLI community**
package/index.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "lastUpdated": "2025-02-15T00:00:00Z",
4
+ "profiles": [
5
+ {
6
+ "name": "senior-developer",
7
+ "author": "marketplace",
8
+ "version": "1.0.0",
9
+ "description": "Senior software engineer persona with focus on code review, architecture, and mentoring",
10
+ "tags": ["code-review", "architecture", "mentoring"],
11
+ "downloads": 0,
12
+ "stars": 0,
13
+ "createdAt": "2025-02-15T00:00:00Z"
14
+ },
15
+ {
16
+ "name": "security-auditor",
17
+ "author": "marketplace",
18
+ "version": "1.0.0",
19
+ "description": "Security-focused reviewer checking for OWASP vulnerabilities and best practices",
20
+ "tags": ["security", "owasp", "code-review"],
21
+ "downloads": 0,
22
+ "stars": 0,
23
+ "createdAt": "2025-02-15T00:00:00Z"
24
+ },
25
+ {
26
+ "name": "python-expert",
27
+ "author": "marketplace",
28
+ "version": "1.0.0",
29
+ "description": "Python development expert with focus on idiomatic code, typing, and async patterns",
30
+ "tags": ["python", "typing", "async"],
31
+ "downloads": 0,
32
+ "stars": 0,
33
+ "createdAt": "2025-02-15T00:00:00Z"
34
+ },
35
+ {
36
+ "name": "test-writer",
37
+ "author": "marketplace",
38
+ "version": "1.0.0",
39
+ "description": "Specialized in generating comprehensive test suites with high coverage",
40
+ "tags": ["testing", "tdd", "quality"],
41
+ "downloads": 0,
42
+ "stars": 0,
43
+ "createdAt": "2025-02-15T00:00:00Z"
44
+ },
45
+ {
46
+ "name": "docs-generator",
47
+ "author": "marketplace",
48
+ "version": "1.0.0",
49
+ "description": "Technical documentation writer for APIs, READMEs, and code comments",
50
+ "tags": ["documentation", "api-docs", "readme"],
51
+ "downloads": 0,
52
+ "stars": 0,
53
+ "createdAt": "2025-02-15T00:00:00Z"
54
+ }
55
+ ]
56
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "claude-profile-manager",
3
+ "version": "1.0.0",
4
+ "description": "Save, share, and load Claude CLI profiles - a marketplace for Claude configurations",
5
+ "main": "src/index.js",
6
+ "bin": {
7
+ "cpm": "src/cli.js",
8
+ "claude-profiles": "src/cli.js"
9
+ },
10
+ "scripts": {
11
+ "test": "node src/cli.js --help"
12
+ },
13
+ "keywords": [
14
+ "claude",
15
+ "anthropic",
16
+ "cli",
17
+ "profiles",
18
+ "configuration",
19
+ "dotfiles",
20
+ "copilot"
21
+ ],
22
+ "author": "",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/YOUR_USERNAME/claude-profile-marketplace.git"
27
+ },
28
+ "engines": {
29
+ "node": ">=18.0.0"
30
+ },
31
+ "dependencies": {
32
+ "archiver": "^6.0.1",
33
+ "chalk": "^5.3.0",
34
+ "commander": "^12.0.0",
35
+ "extract-zip": "^2.0.1",
36
+ "inquirer": "^9.2.12",
37
+ "node-fetch": "^3.3.2",
38
+ "ora": "^8.0.1"
39
+ }
40
+ }
package/src/cli.js ADDED
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from 'commander';
4
+ import chalk from 'chalk';
5
+ import {
6
+ saveProfile,
7
+ loadProfile,
8
+ listLocalProfiles,
9
+ deleteLocalProfile,
10
+ showProfileInfo
11
+ } from './commands/local.js';
12
+ import {
13
+ listMarketplace,
14
+ searchMarketplace,
15
+ installFromMarketplace,
16
+ showMarketplaceInfo
17
+ } from './commands/marketplace.js';
18
+ import {
19
+ publishProfile,
20
+ setRepository
21
+ } from './commands/publish.js';
22
+ import { getConfig } from './utils/config.js';
23
+
24
+ const VERSION = '1.0.0';
25
+
26
+ const program = new Command();
27
+
28
+ // Banner
29
+ const banner = `
30
+ ${chalk.cyan(' ____ ____ __ __')}
31
+ ${chalk.cyan(' / ___| _ \\| \\/ |')}
32
+ ${chalk.cyan(' | | | |_) | |\\/| |')}
33
+ ${chalk.cyan(' | |___| __/| | | |')}
34
+ ${chalk.cyan(' \\____|_| |_| |_|')}
35
+
36
+ ${chalk.magenta('Claude Profile Manager v' + VERSION)}
37
+ `;
38
+
39
+ program
40
+ .name('cpm')
41
+ .description('Save, share, and load Claude CLI profiles')
42
+ .version(VERSION)
43
+ .addHelpText('before', banner);
44
+
45
+ // ============================================================================
46
+ // Local Profile Commands
47
+ // ============================================================================
48
+
49
+ program
50
+ .command('save <name>')
51
+ .description('Save current .claude folder as a profile snapshot')
52
+ .option('-d, --description <desc>', 'Profile description')
53
+ .option('-t, --tags <tags>', 'Comma-separated tags')
54
+ .option('--include-secrets', 'Include sensitive files (use with caution)')
55
+ .action(async (name, options) => {
56
+ await saveProfile(name, options);
57
+ });
58
+
59
+ program
60
+ .command('load <name>')
61
+ .description('Load a profile (local or from marketplace)')
62
+ .option('-f, --force', 'Overwrite existing .claude folder without prompting')
63
+ .option('--backup', 'Backup current .claude folder before loading')
64
+ .option('--marketplace', 'Load from marketplace instead of local')
65
+ .action(async (name, options) => {
66
+ if (options.marketplace || name.includes('/')) {
67
+ await installFromMarketplace(name, options);
68
+ } else {
69
+ await loadProfile(name, options);
70
+ }
71
+ });
72
+
73
+ program
74
+ .command('local')
75
+ .description('List locally saved profiles')
76
+ .action(async () => {
77
+ await listLocalProfiles();
78
+ });
79
+
80
+ program
81
+ .command('delete <name>')
82
+ .description('Delete a locally saved profile')
83
+ .option('-f, --force', 'Delete without confirmation')
84
+ .action(async (name, options) => {
85
+ await deleteLocalProfile(name, options);
86
+ });
87
+
88
+ program
89
+ .command('info <name>')
90
+ .description('Show detailed info about a profile')
91
+ .option('--marketplace', 'Show marketplace profile info')
92
+ .action(async (name, options) => {
93
+ if (options.marketplace || name.includes('/')) {
94
+ await showMarketplaceInfo(name);
95
+ } else {
96
+ await showProfileInfo(name);
97
+ }
98
+ });
99
+
100
+ // ============================================================================
101
+ // Marketplace Commands
102
+ // ============================================================================
103
+
104
+ program
105
+ .command('list')
106
+ .alias('browse')
107
+ .description('Browse profiles in the marketplace')
108
+ .option('-c, --category <category>', 'Filter by category')
109
+ .option('--refresh', 'Force refresh the marketplace index')
110
+ .action(async (options) => {
111
+ await listMarketplace(options);
112
+ });
113
+
114
+ program
115
+ .command('search <query>')
116
+ .description('Search the marketplace')
117
+ .action(async (query) => {
118
+ await searchMarketplace(query);
119
+ });
120
+
121
+ program
122
+ .command('install <profile>')
123
+ .description('Install a profile from the marketplace (format: author/name)')
124
+ .option('-f, --force', 'Overwrite existing .claude folder')
125
+ .option('--backup', 'Backup current config before installing')
126
+ .action(async (profile, options) => {
127
+ await installFromMarketplace(profile, options);
128
+ });
129
+
130
+ // ============================================================================
131
+ // Publishing Commands
132
+ // ============================================================================
133
+
134
+ program
135
+ .command('publish <name>')
136
+ .description('Publish a local profile to the marketplace')
137
+ .option('--public', 'Make the profile publicly visible')
138
+ .action(async (name, options) => {
139
+ await publishProfile(name, options);
140
+ });
141
+
142
+ program
143
+ .command('repo <repository>')
144
+ .description('Set custom marketplace repository (format: owner/repo)')
145
+ .action(async (repository) => {
146
+ await setRepository(repository);
147
+ });
148
+
149
+ // ============================================================================
150
+ // Utility Commands
151
+ // ============================================================================
152
+
153
+ program
154
+ .command('config')
155
+ .description('Show current configuration')
156
+ .action(async () => {
157
+ const config = await getConfig();
158
+ console.log(banner);
159
+ console.log(chalk.bold('Configuration:\n'));
160
+ console.log(` ${chalk.cyan('Profiles Directory:')} ${config.profilesDir}`);
161
+ console.log(` ${chalk.cyan('Claude Directory:')} ${config.claudeDir}`);
162
+ console.log(` ${chalk.cyan('Marketplace Repo:')} ${config.marketplaceRepo}`);
163
+ console.log(` ${chalk.cyan('Cache Directory:')} ${config.cacheDir}`);
164
+ });
165
+
166
+ program.parse();