@@ -2232,16 +2232,18 @@ Examples:
22322232 color , _ := cmd .Flags ().GetString ("color" )
22332233 aliases , _ := cmd .Flags ().GetString ("aliases" )
22342234 claudeConfigDir , _ := cmd .Flags ().GetString ("claude-config-dir" )
2235+ noGit , _ := cmd .Flags ().GetBool ("no-git" )
22352236 outputJSON , _ := cmd .Flags ().GetBool ("json" )
22362237
2237- createProjectCLI (args [0 ], path , instructions , color , aliases , claudeConfigDir , outputJSON )
2238+ createProjectCLI (args [0 ], path , instructions , color , aliases , claudeConfigDir , noGit , outputJSON )
22382239 },
22392240 }
22402241 projectsCreateCmd .Flags ().StringP ("path" , "p" , "" , "Project directory path (required)" )
22412242 projectsCreateCmd .Flags ().StringP ("instructions" , "i" , "" , "Project-specific AI instructions" )
22422243 projectsCreateCmd .Flags ().StringP ("color" , "c" , "" , "Hex color for display (e.g., #61AFEF)" )
22432244 projectsCreateCmd .Flags ().StringP ("aliases" , "a" , "" , "Comma-separated aliases for lookup" )
22442245 projectsCreateCmd .Flags ().String ("claude-config-dir" , "" , "Override CLAUDE_CONFIG_DIR for this project" )
2246+ projectsCreateCmd .Flags ().Bool ("no-git" , false , "Disable git worktrees (for non-git projects)" )
22452247 projectsCreateCmd .Flags ().Bool ("json" , false , "Output in JSON format" )
22462248 projectsCreateCmd .MarkFlagRequired ("path" )
22472249 projectsCmd .AddCommand (projectsCreateCmd )
@@ -2268,8 +2270,25 @@ Examples:
22682270 claudeConfigDir , _ := cmd .Flags ().GetString ("claude-config-dir" )
22692271 projectContext , _ := cmd .Flags ().GetString ("context" )
22702272 outputJSON , _ := cmd .Flags ().GetBool ("json" )
2273+ noGit , _ := cmd .Flags ().GetBool ("no-git" )
2274+ git , _ := cmd .Flags ().GetBool ("git" )
22712275
2272- updateProjectCLI (args [0 ], name , path , instructions , color , aliases , claudeConfigDir , projectContext , outputJSON )
2276+ if noGit && git {
2277+ fmt .Fprintln (os .Stderr , errorStyle .Render ("Error: --no-git and --git are mutually exclusive" ))
2278+ os .Exit (1 )
2279+ }
2280+
2281+ // Determine git mode: nil means not specified
2282+ var useWorktrees * bool
2283+ if noGit {
2284+ v := false
2285+ useWorktrees = & v
2286+ } else if git {
2287+ v := true
2288+ useWorktrees = & v
2289+ }
2290+
2291+ updateProjectCLI (args [0 ], name , path , instructions , color , aliases , claudeConfigDir , projectContext , useWorktrees , outputJSON )
22732292 },
22742293 }
22752294 projectsUpdateCmd .Flags ().StringP ("name" , "n" , "" , "New project name" )
@@ -2279,6 +2298,8 @@ Examples:
22792298 projectsUpdateCmd .Flags ().StringP ("aliases" , "a" , "" , "Comma-separated aliases for lookup" )
22802299 projectsUpdateCmd .Flags ().String ("claude-config-dir" , "" , "Override CLAUDE_CONFIG_DIR for this project" )
22812300 projectsUpdateCmd .Flags ().String ("context" , "" , "Cached project context summary" )
2301+ projectsUpdateCmd .Flags ().Bool ("no-git" , false , "Disable git worktrees (for non-git projects)" )
2302+ projectsUpdateCmd .Flags ().Bool ("git" , false , "Enable git worktrees (default)" )
22822303 projectsUpdateCmd .Flags ().Bool ("json" , false , "Output in JSON format" )
22832304 projectsCmd .AddCommand (projectsUpdateCmd )
22842305
@@ -4817,13 +4838,14 @@ func showProjectCLI(name string, outputJSON bool) {
48174838
48184839 if outputJSON {
48194840 output := map [string ]interface {}{
4820- "id" : project .ID ,
4821- "name" : project .Name ,
4822- "path" : project .Path ,
4823- "color" : project .Color ,
4824- "aliases" : project .Aliases ,
4825- "task_count" : taskCount ,
4826- "created_at" : project .CreatedAt .Time .Format (time .RFC3339 ),
4841+ "id" : project .ID ,
4842+ "name" : project .Name ,
4843+ "path" : project .Path ,
4844+ "color" : project .Color ,
4845+ "aliases" : project .Aliases ,
4846+ "use_worktrees" : project .UseWorktrees ,
4847+ "task_count" : taskCount ,
4848+ "created_at" : project .CreatedAt .Time .Format (time .RFC3339 ),
48274849 }
48284850 if project .Instructions != "" {
48294851 output ["instructions" ] = project .Instructions
@@ -4864,6 +4886,9 @@ func showProjectCLI(name string, outputJSON bool) {
48644886 if project .ClaudeConfigDir != "" {
48654887 fmt .Printf ("%s %s\n " , dimStyle .Render ("Claude Config:" ), project .ClaudeConfigDir )
48664888 }
4889+ if ! project .UseWorktrees {
4890+ fmt .Printf ("%s %s\n " , dimStyle .Render ("Git Worktrees:" ), "disabled (non-git project)" )
4891+ }
48674892
48684893 if project .Instructions != "" {
48694894 fmt .Println ()
@@ -4892,7 +4917,7 @@ func showProjectCLI(name string, outputJSON bool) {
48924917}
48934918
48944919// createProjectCLI creates a new project.
4895- func createProjectCLI (name , path , instructions , color , aliases , claudeConfigDir string , outputJSON bool ) {
4920+ func createProjectCLI (name , path , instructions , color , aliases , claudeConfigDir string , noGit bool , outputJSON bool ) {
48964921 // Validate name
48974922 if strings .TrimSpace (name ) == "" {
48984923 fmt .Fprintln (os .Stderr , errorStyle .Render ("Error: project name cannot be empty" ))
@@ -4943,6 +4968,7 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49434968 Color : color ,
49444969 Aliases : aliases ,
49454970 ClaudeConfigDir : claudeConfigDir ,
4971+ UseWorktrees : ! noGit ,
49464972 }
49474973
49484974 if err := database .CreateProject (project ); err != nil {
@@ -4952,10 +4978,11 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49524978
49534979 if outputJSON {
49544980 output := map [string ]interface {}{
4955- "id" : project .ID ,
4956- "name" : project .Name ,
4957- "path" : project .Path ,
4958- "created_at" : project .CreatedAt .Time .Format (time .RFC3339 ),
4981+ "id" : project .ID ,
4982+ "name" : project .Name ,
4983+ "path" : project .Path ,
4984+ "use_worktrees" : project .UseWorktrees ,
4985+ "created_at" : project .CreatedAt .Time .Format (time .RFC3339 ),
49594986 }
49604987 if project .Color != "" {
49614988 output ["color" ] = project .Color
@@ -4966,12 +4993,16 @@ func createProjectCLI(name, path, instructions, color, aliases, claudeConfigDir
49664993 jsonBytes , _ := json .Marshal (output )
49674994 fmt .Println (string (jsonBytes ))
49684995 } else {
4969- fmt .Println (successStyle .Render (fmt .Sprintf ("Created project '%s' at %s" , name , absPath )))
4996+ suffix := ""
4997+ if ! project .UseWorktrees {
4998+ suffix = " (non-git, worktrees disabled)"
4999+ }
5000+ fmt .Println (successStyle .Render (fmt .Sprintf ("Created project '%s' at %s%s" , name , absPath , suffix )))
49705001 }
49715002}
49725003
49735004// updateProjectCLI updates an existing project.
4974- func updateProjectCLI (currentName , newName , path , instructions , color , aliases , claudeConfigDir , projectContext string , outputJSON bool ) {
5005+ func updateProjectCLI (currentName , newName , path , instructions , color , aliases , claudeConfigDir , projectContext string , useWorktrees * bool , outputJSON bool ) {
49755006 dbPath := db .DefaultPath ()
49765007 database , err := db .Open (dbPath )
49775008 if err != nil {
@@ -5044,6 +5075,15 @@ func updateProjectCLI(currentName, newName, path, instructions, color, aliases,
50445075 changes = append (changes , "claude_config_dir" )
50455076 }
50465077
5078+ if useWorktrees != nil {
5079+ project .UseWorktrees = * useWorktrees
5080+ if * useWorktrees {
5081+ changes = append (changes , "git worktrees enabled" )
5082+ } else {
5083+ changes = append (changes , "git worktrees disabled" )
5084+ }
5085+ }
5086+
50475087 if len (changes ) == 0 && projectContext == "" {
50485088 fmt .Fprintln (os .Stderr , errorStyle .Render ("Error: no changes specified" ))
50495089 os .Exit (1 )
0 commit comments