jean-claude 1.5.0 → 2.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.
Files changed (54) hide show
  1. package/README.md +108 -56
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +5 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +48 -44
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/profile.d.ts.map +1 -1
  13. package/dist/commands/profile.js +57 -16
  14. package/dist/commands/profile.js.map +1 -1
  15. package/dist/commands/pull.d.ts.map +1 -1
  16. package/dist/commands/pull.js +13 -45
  17. package/dist/commands/pull.js.map +1 -1
  18. package/dist/commands/push.d.ts.map +1 -1
  19. package/dist/commands/push.js +11 -68
  20. package/dist/commands/push.js.map +1 -1
  21. package/dist/commands/status.d.ts.map +1 -1
  22. package/dist/commands/status.js +11 -76
  23. package/dist/commands/status.js.map +1 -1
  24. package/dist/commands/sync.d.ts +8 -0
  25. package/dist/commands/sync.d.ts.map +1 -0
  26. package/dist/commands/sync.js +227 -0
  27. package/dist/commands/sync.js.map +1 -0
  28. package/dist/lib/git.d.ts.map +1 -1
  29. package/dist/lib/git.js +32 -2
  30. package/dist/lib/git.js.map +1 -1
  31. package/dist/lib/profiles.d.ts +5 -1
  32. package/dist/lib/profiles.d.ts.map +1 -1
  33. package/dist/lib/profiles.js +38 -13
  34. package/dist/lib/profiles.js.map +1 -1
  35. package/dist/lib/sync-setup.d.ts +6 -0
  36. package/dist/lib/sync-setup.d.ts.map +1 -0
  37. package/dist/lib/sync-setup.js +133 -0
  38. package/dist/lib/sync-setup.js.map +1 -0
  39. package/dist/lib/sync.d.ts.map +1 -1
  40. package/dist/lib/sync.js +7 -1
  41. package/dist/lib/sync.js.map +1 -1
  42. package/dist/types/index.d.ts +1 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/utils/logger.d.ts +1 -0
  45. package/dist/utils/logger.d.ts.map +1 -1
  46. package/dist/utils/logger.js +18 -2
  47. package/dist/utils/logger.js.map +1 -1
  48. package/dist/utils/logo.d.ts.map +1 -1
  49. package/dist/utils/logo.js +2 -5
  50. package/dist/utils/logo.js.map +1 -1
  51. package/dist/utils/prompts.d.ts.map +1 -1
  52. package/dist/utils/prompts.js +1 -1
  53. package/dist/utils/prompts.js.map +1 -1
  54. package/package.json +4 -4
package/README.md CHANGED
@@ -1,23 +1,14 @@
1
1
  # JEAN-CLAUDE
2
2
 
3
- **A companion for syncing Claude Code configuration across machines**
3
+ **A companion for managing Claude Code profiles and syncing configuration across machines**
4
4
 
5
5
  ## Why?
6
6
 
7
7
  You've spent hours crafting the perfect `CLAUDE.md`. Your hooks are *chef's kiss*. Your settings are dialed in just right.
8
8
 
9
- Then you sit down at another machine and... nothing. Back to square one.
9
+ Then you sit down at another machine and... nothing. Back to square one. Or you need separate configs for your work and personal Claude accounts, but maintaining them is a pain.
10
10
 
11
- **Jean-Claude fixes that.** It syncs your Claude Code configuration across all your machines using Git.
12
-
13
- ## What gets synced?
14
-
15
- - `CLAUDE.md` - Your custom instructions
16
- - `settings.json` - Your preferences
17
- - `hooks/` - Your automation scripts
18
- - `skills/` - Your custom skills
19
- - `agents/` - Your custom agents
20
- - `keybindings.json` - Your keyboard shortcuts
11
+ **Jean-Claude fixes that.** It manages multiple Claude Code profiles and optionally syncs everything across machines via Git.
21
12
 
22
13
  ## Quick Start
23
14
 
@@ -25,73 +16,133 @@ Then you sit down at another machine and... nothing. Back to square one.
25
16
  # Install globally
26
17
  npm install -g jean-claude
27
18
 
28
- # Verify install
29
- jean-claude --help
30
-
31
- # Initialize Jean-Claude and link to your config repo
32
- jean-claude init git@github.com:YOURUSER/jean-claude-config.git
33
-
34
- # Make edits in ~/.claude, then push them
35
- jean-claude push
19
+ # Initialize Jean-Claude
20
+ jean-claude init
36
21
 
37
- # Pull the canonical config and apply it locally
38
- jean-claude pull
22
+ # Create a profile for your work account
23
+ jean-claude profile create work
39
24
 
40
- # Check whether this machine is in sync
41
- jean-claude status
25
+ # Launch Claude Code with your work profile
26
+ claude-work
42
27
  ```
43
28
 
44
29
  ## Profiles
45
30
 
46
- Got multiple Claude accounts? A Teams account for work and a Max account for personal projects? Jean-Claude can manage separate profiles for each, with shared configuration kept in sync via symlinks.
31
+ Profiles let you run multiple Claude Code configurations side by side one for your Teams account at work, another for your personal Max subscription, and so on.
47
32
 
48
33
  ```bash
49
- # Create a profile
34
+ # Create a profile (interactive — prompts for sharing preferences)
50
35
  jean-claude profile create work
51
36
 
52
- # This will:
53
- # 1. Create ~/.claude-work/ with symlinks to your shared config
54
- # 2. Add a shell alias: claude-work
55
- # 3. Give you a separate CLAUDE.md for work-specific instructions
37
+ # Create non-interactively
38
+ jean-claude profile create work --yes --shell .zshrc
56
39
 
57
40
  # List your profiles
58
41
  jean-claude profile list
59
42
 
60
- # Launch Claude Code with your work profile
43
+ # Launch Claude Code with a profile
61
44
  claude-work
62
45
 
63
- # Delete a profile when you're done
64
- jean-claude profile delete work
65
-
66
46
  # Re-create symlinks if something breaks
67
47
  jean-claude profile refresh work
48
+
49
+ # Delete a profile
50
+ jean-claude profile delete work
68
51
  ```
69
52
 
70
53
  ### How profiles work
71
54
 
72
- Your main `~/.claude/` stays the source of truth. Profile directories are lightweight — they symlink back to your shared files:
55
+ Your main `~/.claude/` stays the source of truth. Profile directories (`~/.claude-<name>/`) are lightweight — they symlink back to your shared files:
56
+
57
+ | Always shared (symlinked) | Optionally shared | Profile-specific |
58
+ |---------------------------|---------------------------|------------------------|
59
+ | `settings.json` | `CLAUDE.md` | Authentication/session |
60
+ | `hooks/` | `statusline.sh` | |
61
+ | `agents/` | | |
62
+ | `skills/` | | |
63
+ | `plugins/` | | |
64
+ | `keybindings.json` | | |
65
+
66
+ During profile creation, you're prompted whether to share `CLAUDE.md` and `statusline.sh` or keep them independent per profile. You can also use flags:
67
+
68
+ ```bash
69
+ # Share both
70
+ jean-claude profile create work --share-claude-md --share-statusline
71
+
72
+ # Keep both independent
73
+ jean-claude profile create work --no-share-claude-md --no-share-statusline
74
+ ```
75
+
76
+ Change a setting or add a hook in your main config, and all profiles see it immediately.
77
+
78
+ Profiles work independently of syncing — you can use them without setting up Git.
79
+
80
+ ## Syncing
81
+
82
+ Syncing is optional and uses Git to keep your configuration in sync across machines.
83
+
84
+ ### What gets synced?
85
+
86
+ - `CLAUDE.md` — Your custom instructions
87
+ - `settings.json` — Your preferences
88
+ - `hooks/` — Your automation scripts
89
+ - `skills/` — Your custom skills
90
+ - `agents/` — Your custom agents
91
+ - `plugins/` — Your plugins
92
+ - `keybindings.json` — Your keyboard shortcuts
93
+ - `statusline.sh` — Your statusline configuration
94
+ - Profile definitions — So profiles carry over to other machines
73
95
 
74
- | Shared (symlinked) | Profile-specific |
75
- |---------------------|------------------------|
76
- | `settings.json` | `CLAUDE.md` |
77
- | `hooks/` | Authentication/session |
78
- | `agents/` | |
79
- | `keybindings.json` | |
96
+ ### Commands
80
97
 
81
- Change a setting or add a hook in your main config, and all profiles see it immediately. Each profile gets its own `CLAUDE.md` for account-specific instructions.
98
+ ```bash
99
+ # Set up syncing (during init or later)
100
+ jean-claude sync setup
101
+
102
+ # Push your config to Git
103
+ jean-claude sync push
104
+
105
+ # Pull config on another machine
106
+ jean-claude sync pull
107
+
108
+ # Check sync status
109
+ jean-claude sync status
110
+ ```
82
111
 
83
- Profile definitions are stored in the Jean-Claude repo, so they sync across machines with `push` and `pull`.
112
+ ### Typical workflow
84
113
 
85
- ## That's it!
114
+ ```bash
115
+ # Machine 1: Initialize and push
116
+ jean-claude init
117
+ jean-claude profile create work --yes --shell .zshrc
118
+ jean-claude sync push
119
+
120
+ # Machine 2: Initialize, pull, and go
121
+ jean-claude init --sync --url git@github.com:you/claude-config.git
122
+ jean-claude sync pull
123
+ claude-work # Profile alias is ready
124
+ ```
86
125
 
87
- Simple commands. No complexity. Just sync.
126
+ ## Command Reference
127
+
128
+ | Command | Description |
129
+ |---------|-------------|
130
+ | `jean-claude init` | Initialize Jean-Claude on this machine |
131
+ | `jean-claude init --sync --url <repo>` | Initialize with Git syncing |
132
+ | `jean-claude init --no-sync` | Initialize without syncing |
133
+ | `jean-claude profile create <name>` | Create a new profile |
134
+ | `jean-claude profile list` | List all profiles |
135
+ | `jean-claude profile delete <name>` | Delete a profile |
136
+ | `jean-claude profile refresh <name>` | Refresh profile symlinks |
137
+ | `jean-claude sync setup` | Set up Git-based syncing |
138
+ | `jean-claude sync push` | Push config to Git |
139
+ | `jean-claude sync pull` | Pull config from Git |
140
+ | `jean-claude sync status` | Check sync status |
88
141
 
89
142
  ## Development
90
143
 
91
144
  ### Running Tests
92
145
 
93
- Jean-claude has both unit tests and integration tests:
94
-
95
146
  ```bash
96
147
  # Run all tests (unit + integration)
97
148
  npm test
@@ -112,23 +163,24 @@ npm run test:integration
112
163
  #### Unit Tests
113
164
 
114
165
  Fast, isolated tests for core logic:
166
+ - Profile creation, symlinks, and duplicate prevention
115
167
  - File sync and metadata operations
116
168
  - Error handling and types
117
169
  - Utility functions
118
170
 
119
171
  #### Integration Tests
120
172
 
121
- End-to-end tests that simulate real usage with a local git repository and multiple machines:
122
- - **init command**: New repos, existing repos, already initialized, invalid remotes
123
- - **push command**: Initial files, no changes, modifications, new hooks
124
- - **pull command**: Basic sync, overwriting local changes, not initialized
125
- - **status command**: Clean state, uncommitted changes, not initialized
126
- - **Sync scenarios**: Bidirectional sync between machines
127
- - **Edge cases**: Empty directories, special characters, large files, multiple hooks, concurrent modifications, nested directories
128
- - **Metadata**: Persistence, timestamp updates
173
+ End-to-end tests that simulate real usage with local git repositories and multiple machines:
174
+ - **init**: New repos, existing repos, partial recovery, flag combinations
175
+ - **profiles**: Create, list, delete, refresh, duplicate prevention, shared/independent CLAUDE.md and statusline.sh
176
+ - **sync setup**: Linking to a Git remote, reconfiguration
177
+ - **sync push/pull**: Initial files, modifications, hooks, agents, keybindings, statusline
178
+ - **sync status**: Clean state, uncommitted changes, diverged state
179
+ - **Multi-machine sync**: Bidirectional sync, three-machine convergence
180
+ - **Edge cases**: Empty directories, special characters, large files, concurrent modifications, deprecated command stubs
129
181
 
130
182
  See [tests/README.md](tests/README.md) for more details.
131
183
 
132
184
  ---
133
185
 
134
- *Named after the famous Belgian martial artist and philosopher, because your config deserves to do the splits across multiple machines.*
186
+ *Named after the famous Belgian martial artist and philosopher, because your config deserves to do the splits between profiles and machines.*
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,aAAa,IAAI,OAAO,CAmBvC;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCvD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,aAAa,IAAI,OAAO,CAsBvC;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCvD"}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
3
  import { createRequire } from 'module';
4
- import { initCommand, pullCommand, pushCommand, statusCommand, profileCommand, } from './commands/index.js';
4
+ import { initCommand, pullCommand, pushCommand, statusCommand, profileCommand, syncCommand, } from './commands/index.js';
5
5
  import { JeanClaudeError } from './types/index.js';
6
6
  import { printLogo } from './utils/logo.js';
7
7
  const require = createRequire(import.meta.url);
@@ -10,17 +10,19 @@ export function createProgram() {
10
10
  const program = new Command();
11
11
  program
12
12
  .name('jean-claude')
13
- .description('Sync Claude Code configuration across machines using Git')
13
+ .description('Manage and sync Claude Code configuration across machines')
14
14
  .version(VERSION)
15
15
  .addHelpText('before', () => {
16
16
  printLogo();
17
17
  return '';
18
18
  });
19
19
  program.addCommand(initCommand);
20
+ program.addCommand(syncCommand);
21
+ program.addCommand(profileCommand);
22
+ // Deprecated — kept as hidden commands with redirect messages
20
23
  program.addCommand(pullCommand);
21
24
  program.addCommand(pushCommand);
22
25
  program.addCommand(statusCommand);
23
- program.addCommand(profileCommand);
24
26
  return program;
25
27
  }
26
28
  export async function run(argv) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export { pullCommand } from './pull.js';
3
3
  export { pushCommand } from './push.js';
4
4
  export { statusCommand } from './status.js';
5
5
  export { profileCommand } from './profile.js';
6
+ export { syncCommand } from './sync.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -3,4 +3,5 @@ export { pullCommand } from './pull.js';
3
3
  export { pushCommand } from './push.js';
4
4
  export { statusCommand } from './status.js';
5
5
  export { profileCommand } from './profile.js';
6
+ export { syncCommand } from './sync.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,SAuEpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,SAiEpB,CAAC"}
@@ -1,67 +1,71 @@
1
1
  import { Command } from 'commander';
2
2
  import fs from 'fs-extra';
3
+ import path from 'path';
3
4
  import { logger, formatPath } from '../utils/logger.js';
4
- import { input } from '../utils/prompts.js';
5
+ import { confirm } from '../utils/prompts.js';
5
6
  import { getConfigPaths, ensureDir } from '../lib/paths.js';
6
- import { isGitRepo, initRepo, addRemote, testRemoteConnection, cloneRepo } from '../lib/git.js';
7
7
  import { createMetaJson, writeMetaJson, } from '../lib/sync.js';
8
- import { JeanClaudeError, ErrorCode } from '../types/index.js';
8
+ import { setupGitSync } from '../lib/sync-setup.js';
9
9
  import { printLogo } from '../utils/logo.js';
10
10
  export const initCommand = new Command('init')
11
11
  .description('Initialize Jean-Claude on this machine')
12
- .action(async () => {
12
+ .option('--sync', 'Set up Git-based syncing without prompting')
13
+ .option('--no-sync', 'Skip Git sync setup without prompting')
14
+ .option('--url <repo-url>', 'Repository URL for sync setup (implies --sync)')
15
+ .action(async (options) => {
13
16
  const { jeanClaudeDir, claudeConfigDir } = getConfigPaths();
14
17
  printLogo();
15
18
  logger.heading('Setup');
16
19
  // Check if already initialized
17
- if (fs.existsSync(jeanClaudeDir)) {
18
- const isRepo = await isGitRepo(jeanClaudeDir);
19
- if (isRepo) {
20
- logger.success(`Already initialized at ${formatPath(jeanClaudeDir)}`);
21
- logger.dim('Run "jean-claude status" to see current state.');
22
- return;
20
+ const metaPath = path.join(jeanClaudeDir, 'meta.json');
21
+ if (fs.existsSync(metaPath)) {
22
+ logger.success(`Already initialized at ${formatPath(jeanClaudeDir)}`);
23
+ logger.dim('Run "jean-claude sync status" to see current state.');
24
+ return;
25
+ }
26
+ // Create the jean-claude directory and meta.json
27
+ ensureDir(jeanClaudeDir);
28
+ const meta = createMetaJson(claudeConfigDir);
29
+ await writeMetaJson(jeanClaudeDir, meta);
30
+ // Check for existing git repo (partial init recovery)
31
+ const gitDir = path.join(jeanClaudeDir, '.git');
32
+ if (fs.existsSync(gitDir)) {
33
+ logger.info('Found existing Git repository — reusing it.');
34
+ }
35
+ let wantSync;
36
+ if (options.url) {
37
+ if (options.sync === false) {
38
+ logger.warn('--url implies --sync; ignoring --no-sync.');
23
39
  }
24
- throw new JeanClaudeError(`${formatPath(jeanClaudeDir)} exists but is not a Git repository`, ErrorCode.NOT_GIT_REPO, 'Remove the directory and run init again.');
40
+ wantSync = true;
25
41
  }
26
- // Explain what's needed
27
- console.log('');
28
- logger.dim('Paste the URL of your existing config repo, or create a new');
29
- logger.dim('empty repo (e.g. "my-claude-config") on GitHub/GitLab.');
30
- console.log('');
31
- // Get repository URL
32
- const repoUrl = await input('Repository URL:');
33
- // Test connection to remote
34
- logger.step(1, 3, 'Testing connection to repository...');
35
- const canConnect = await testRemoteConnection(repoUrl);
36
- if (!canConnect) {
37
- throw new JeanClaudeError('Cannot connect to repository', ErrorCode.NETWORK_ERROR, 'Check that the URL is correct and you have access.');
42
+ else if (options.sync !== undefined) {
43
+ wantSync = options.sync;
38
44
  }
39
- logger.success('Connection successful');
40
- // Try to clone (will work if repo has content) or init fresh (if empty)
41
- logger.step(2, 3, 'Setting up local repository...');
42
- try {
43
- await cloneRepo(repoUrl, jeanClaudeDir);
44
- logger.success('Cloned existing config from repository');
45
+ else {
46
+ console.log('');
47
+ wantSync = await confirm('Would you like to set up syncing with a Git remote?');
45
48
  }
46
- catch {
47
- // Repo is empty, init locally and add remote
48
- ensureDir(jeanClaudeDir);
49
- await initRepo(jeanClaudeDir);
50
- await addRemote(jeanClaudeDir, repoUrl);
51
- logger.success('Initialized new repository');
49
+ if (wantSync) {
50
+ await setupGitSync(jeanClaudeDir, options.url);
52
51
  }
53
- // Create meta.json
54
- const meta = createMetaJson(claudeConfigDir);
55
- await writeMetaJson(jeanClaudeDir, meta);
56
52
  // Done
57
- logger.step(3, 3, 'Done!');
58
53
  console.log('');
59
- logger.success('Jean-Claude initialized!');
54
+ logger.success('Jean-Claude is installed!');
60
55
  console.log('');
61
56
  logger.dim('Next steps:');
62
- logger.list([
63
- 'Run "jean-claude push" to push your config to Git',
64
- 'Run "jean-claude pull" on other machines to sync',
65
- ]);
57
+ if (wantSync) {
58
+ logger.list([
59
+ 'Run "jean-claude profile create <name>" to create a profile',
60
+ 'Run "jean-claude sync push" to push your config to Git',
61
+ 'Run "jean-claude sync pull" on other machines to sync',
62
+ ]);
63
+ }
64
+ else {
65
+ logger.list([
66
+ 'Run "jean-claude profile create <name>" to create a profile',
67
+ 'Run "jean-claude sync setup" to configure syncing later',
68
+ ]);
69
+ }
66
70
  });
67
71
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4PpC,eAAO,MAAM,cAAc,SAKS,CAAC"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8SpC,eAAO,MAAM,cAAc,SAKS,CAAC"}
@@ -11,11 +11,15 @@ const profileCreateCommand = new Command('create')
11
11
  .argument('[name]', 'Profile name (e.g., "work", "personal")')
12
12
  .option('-y, --yes', 'Skip confirmation prompts')
13
13
  .option('--shell <file>', 'Shell config file to add alias to (e.g., .zshrc, .bashrc)')
14
+ .option('--share-statusline', 'Share statusline.sh with this profile (symlink)')
15
+ .option('--no-share-statusline', 'Do not share statusline.sh with this profile')
16
+ .option('--share-claude-md', 'Share CLAUDE.md with this profile (symlink)')
17
+ .option('--no-share-claude-md', 'Do not share CLAUDE.md with this profile')
14
18
  .action(async (nameArg, options) => {
15
19
  // Verify jean-claude is initialized
16
20
  const jcDir = getJeanClaudeDir();
17
21
  if (!(await fs.pathExists(jcDir))) {
18
- throw new JeanClaudeError('Jean-Claude is not initialized', ErrorCode.NOT_INITIALIZED, 'Run `jean-claude init <repo-url>` first.');
22
+ throw new JeanClaudeError('Jean-Claude is not initialized', ErrorCode.NOT_INITIALIZED, 'Run `jean-claude init` first.');
19
23
  }
20
24
  // Get profile name
21
25
  const name = nameArg || (await input('Profile name (e.g., work, personal):'));
@@ -23,16 +27,42 @@ const profileCreateCommand = new Command('create')
23
27
  throw new JeanClaudeError('Invalid profile name', ErrorCode.INVALID_CONFIG, 'Use lowercase letters, numbers, and hyphens. Must start with a letter.');
24
28
  }
25
29
  const configDir = getProfileConfigDir(name);
30
+ // Fail early if profile already exists (before prompting for options)
31
+ const existingConfig = await loadProfiles();
32
+ if (existingConfig.profiles[name]) {
33
+ throw new JeanClaudeError(`Profile "${name}" already exists`, ErrorCode.ALREADY_EXISTS, `Use 'jean-claude profile list' to see existing profiles.`);
34
+ }
35
+ if (await fs.pathExists(configDir)) {
36
+ throw new JeanClaudeError(`Profile directory ${configDir} already exists on disk`, ErrorCode.ALREADY_EXISTS, `Remove it manually or choose a different profile name.`);
37
+ }
26
38
  logger.heading(`Creating profile: ${name}`);
27
39
  console.log();
28
- logger.info(`Config directory: ${chalk.cyan(formatPath(configDir))}`);
29
- logger.info(`Shell alias: ${chalk.cyan(`claude-${name}`)}`);
40
+ logger.table([
41
+ ['Config directory', chalk.cyan(formatPath(configDir))],
42
+ ['Shell alias', chalk.cyan(`claude-${name}`)],
43
+ ]);
30
44
  console.log();
31
- logger.info('The following items will be symlinked from your main config:');
45
+ logger.dim('The following items will be symlinked from your main config:');
32
46
  logger.list(SHARED_ITEMS.map((i) => i.name));
33
47
  console.log();
34
- logger.info('Profile-specific files (like CLAUDE.md) will be independent.');
35
- console.log();
48
+ // Determine optional sharing preferences
49
+ const createOptions = {};
50
+ if (options.shareStatusline !== undefined) {
51
+ createOptions.shareStatusline = options.shareStatusline;
52
+ }
53
+ else if (!options.yes) {
54
+ createOptions.shareStatusline = await confirm('Share your statusline configuration with this profile?');
55
+ }
56
+ if (options.shareClaudeMd !== undefined) {
57
+ createOptions.shareClaudeMd = options.shareClaudeMd;
58
+ }
59
+ else if (!options.yes) {
60
+ createOptions.shareClaudeMd = await confirm('Share your CLAUDE.md with this profile?');
61
+ }
62
+ if (!createOptions.shareClaudeMd) {
63
+ logger.dim('Profile-specific files (like CLAUDE.md) will be independent.');
64
+ console.log();
65
+ }
36
66
  if (!options.yes) {
37
67
  const proceed = await confirm('Create this profile?');
38
68
  if (!proceed) {
@@ -42,7 +72,7 @@ const profileCreateCommand = new Command('create')
42
72
  }
43
73
  // Create profile
44
74
  logger.step(1, 3, 'Creating profile directory and symlinks...');
45
- const profile = await createProfile(name);
75
+ const profile = await createProfile(name, createOptions);
46
76
  logger.success('Profile directory created');
47
77
  // Install shell alias
48
78
  logger.step(2, 3, 'Installing shell alias...');
@@ -61,9 +91,20 @@ const profileCreateCommand = new Command('create')
61
91
  console.log();
62
92
  logger.heading('Next steps');
63
93
  console.log();
64
- logger.info(`Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`);
65
- logger.info(`Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`);
66
- logger.info(`Edit ${chalk.cyan(formatPath(configDir) + '/CLAUDE.md')} to add profile-specific instructions.`);
94
+ if (createOptions.shareClaudeMd) {
95
+ logger.list([
96
+ `Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`,
97
+ `Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`,
98
+ `CLAUDE.md is shared (symlinked) from your main config.`,
99
+ ]);
100
+ }
101
+ else {
102
+ logger.list([
103
+ `Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`,
104
+ `Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`,
105
+ `Edit ${chalk.cyan(formatPath(configDir) + '/CLAUDE.md')} to add profile-specific instructions.`,
106
+ ]);
107
+ }
67
108
  });
68
109
  const profileListCommand = new Command('list')
69
110
  .description('List all Claude Code profiles')
@@ -71,7 +112,7 @@ const profileListCommand = new Command('list')
71
112
  const config = await loadProfiles();
72
113
  const names = Object.keys(config.profiles);
73
114
  if (names.length === 0) {
74
- logger.info('No profiles configured.');
115
+ logger.dim('No profiles configured.');
75
116
  logger.dim('Create one with: jean-claude profile create <name>');
76
117
  return;
77
118
  }
@@ -124,7 +165,7 @@ const profileDeleteCommand = new Command('delete')
124
165
  const config = await loadProfiles();
125
166
  const names = Object.keys(config.profiles);
126
167
  if (names.length === 0) {
127
- logger.info('No profiles to delete.');
168
+ logger.dim('No profiles to delete.');
128
169
  return;
129
170
  }
130
171
  const name = nameArg ||
@@ -137,10 +178,10 @@ const profileDeleteCommand = new Command('delete')
137
178
  console.log();
138
179
  logger.warn(`This will remove ${chalk.cyan(formatPath(profile.configDir))} and its contents.`);
139
180
  logger.warn('Profile-specific files (like CLAUDE.md) will be lost.');
140
- logger.info('Shared files in your main ~/.claude/ are not affected (they are the originals).');
181
+ logger.dim('Shared files in your main ~/.claude/ are not affected (they are the originals).');
141
182
  console.log();
142
183
  if (!options.yes) {
143
- const proceed = await confirm('Delete this profile?');
184
+ const proceed = await confirm('Delete this profile?', false);
144
185
  if (!proceed) {
145
186
  logger.dim('Cancelled.');
146
187
  return;
@@ -169,12 +210,12 @@ const profileRefreshCommand = new Command('refresh')
169
210
  const config = await loadProfiles();
170
211
  const names = Object.keys(config.profiles);
171
212
  if (names.length === 0) {
172
- logger.info('No profiles configured.');
213
+ logger.dim('No profiles configured.');
173
214
  return;
174
215
  }
175
216
  const name = nameArg ||
176
217
  (await select('Which profile to refresh?', names.map((n) => ({ name: n, value: n }))));
177
- logger.info(`Refreshing symlinks for profile "${name}"...`);
218
+ logger.dim(`Refreshing symlinks for profile "${name}"...`);
178
219
  const created = await refreshSymlinks(name);
179
220
  logger.success(`Symlinks refreshed: ${created.join(', ')}`);
180
221
  });
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}