diff --git a/server/cmd/commands/config_check.go b/server/cmd/commands/config_check.go
index 5256c03..67aac9b 100644
--- a/server/cmd/commands/config_check.go
+++ b/server/cmd/commands/config_check.go
@@ -35,7 +35,7 @@
 
 	// Check Git provider configuration
 	fmt.Printf("\nGit Provider: %s\n", cfg.GetPrimaryGitProvider())
-	
+
 	// Check GitHub configuration
 	if cfg.HasGitHubConfig() {
 		fmt.Printf("✅ GitHub configured (ends with: ...%s)\n", cfg.GitHub.Token[len(cfg.GitHub.Token)-4:])
@@ -43,15 +43,15 @@
 	} else if cfg.GitHub.Token != "" || cfg.GitHub.Owner != "" || cfg.GitHub.Repo != "" {
 		fmt.Println("⚠️  GitHub partially configured (incomplete)")
 	}
-	
-	// Check Gerrit configuration  
+
+	// Check Gerrit configuration
 	if cfg.HasGerritConfig() {
 		fmt.Printf("✅ Gerrit configured (user: %s)\n", cfg.Gerrit.Username)
 		fmt.Printf("   Base URL: %s, Project: %s\n", cfg.Gerrit.BaseURL, cfg.Gerrit.Project)
 	} else if cfg.Gerrit.Username != "" || cfg.Gerrit.BaseURL != "" || cfg.Gerrit.Project != "" {
 		fmt.Println("⚠️  Gerrit partially configured (incomplete)")
 	}
-	
+
 	if !cfg.HasGitHubConfig() && !cfg.HasGerritConfig() {
 		fmt.Println("❌ No Git provider configured (need GitHub or Gerrit)")
 	}
diff --git a/server/cmd/commands/webhook.go b/server/cmd/commands/webhook.go
index e62d1ce..da75284 100644
--- a/server/cmd/commands/webhook.go
+++ b/server/cmd/commands/webhook.go
@@ -52,14 +52,14 @@
 	webhookConfigureCmd.Flags().StringVar(&webhookURL, "webhook-url", "", "Webhook URL (if not provided, will prompt)")
 	webhookConfigureCmd.Flags().BoolVar(&dryRun, "dry-run", false, "Show what would be done without executing")
 	webhookConfigureCmd.Flags().BoolVar(&force, "force", false, "Force re-registration even if webhook exists")
-	
+
 	webhookCmd.AddCommand(webhookConfigureCmd)
 	rootCmd.AddCommand(webhookCmd)
 }
 
 func runWebhookConfigure(cmd *cobra.Command, args []string) error {
 	ctx := context.Background()
-	
+
 	// Validate GitHub configuration
 	if !cfg.HasGitHubConfig() {
 		return fmt.Errorf("GitHub configuration is required. Please configure github.token, github.owner, and github.repo in config.yaml")
@@ -125,13 +125,13 @@
 		if !force {
 			return fmt.Errorf("webhook already exists with URL %s (ID: %d). Use --force to update it", webhookURL, existingWebhook.ID)
 		}
-		
+
 		fmt.Printf("Updating existing webhook (ID: %d)...\n", existingWebhook.ID)
 		updatedWebhook, err := gitInterface.UpdateWebhook(ctx, existingWebhook.ID, webhookURL, secret)
 		if err != nil {
 			return fmt.Errorf("failed to update webhook: %w", err)
 		}
-		
+
 		fmt.Printf("Successfully updated webhook!\n")
 		fmt.Printf("- Webhook ID: %d\n", updatedWebhook.ID)
 		fmt.Printf("- URL: %s\n", updatedWebhook.Config.URL)
@@ -143,7 +143,7 @@
 		if err != nil {
 			return fmt.Errorf("failed to create webhook: %w", err)
 		}
-		
+
 		fmt.Printf("Successfully created webhook!\n")
 		fmt.Printf("- Webhook ID: %d\n", newWebhook.ID)
 		fmt.Printf("- URL: %s\n", newWebhook.Config.URL)
@@ -164,26 +164,26 @@
 	fmt.Printf("\nWebhook Secret: %s\n", secret)
 	fmt.Printf("Please save this secret for your webhook endpoint configuration.\n")
 	fmt.Printf("\nYour Staff system will now automatically detect merged PRs and complete tasks.\n")
-	
+
 	return nil
 }
 
 func promptWebhookURL() (string, error) {
 	reader := bufio.NewReader(os.Stdin)
-	
+
 	// Show server listen address if configured
 	if cfg.Server.ListenAddress != "" {
 		fmt.Printf("Detected server listen address: %s\n", cfg.Server.ListenAddress)
 		fmt.Printf("Suggested webhook URL: http://%s/webhooks/github\n", cfg.Server.ListenAddress)
 		fmt.Printf("(Note: Use https:// and a public domain for production)\n")
 	}
-	
+
 	fmt.Printf("Enter webhook URL (e.g., https://your-domain.com/webhooks/github): ")
 	url, err := reader.ReadString('\n')
 	if err != nil {
 		return "", err
 	}
-	
+
 	return strings.TrimSpace(url), nil
 }
 
@@ -192,15 +192,15 @@
 	if err != nil {
 		return fmt.Errorf("invalid URL format: %w", err)
 	}
-	
+
 	if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" {
 		return fmt.Errorf("URL must use http or https scheme")
 	}
-	
+
 	if parsedURL.Host == "" {
 		return fmt.Errorf("URL must include a host")
 	}
-	
+
 	return nil
 }
 
@@ -210,7 +210,7 @@
 	if _, err := rand.Read(bytes); err != nil {
 		return "", fmt.Errorf("failed to generate random bytes: %w", err)
 	}
-	
+
 	// Encode as hex string
 	return hex.EncodeToString(bytes), nil
 }
@@ -221,13 +221,13 @@
 	if err != nil {
 		return fmt.Errorf("failed to read config file: %w", err)
 	}
-	
+
 	// Parse YAML
 	var configMap map[string]interface{}
 	if err := yaml.Unmarshal(configData, &configMap); err != nil {
 		return fmt.Errorf("failed to parse config YAML: %w", err)
 	}
-	
+
 	// Update webhook secret
 	github, ok := configMap["github"].(map[string]interface{})
 	if !ok {
@@ -235,17 +235,17 @@
 		configMap["github"] = github
 	}
 	github["webhook_secret"] = secret
-	
+
 	// Marshal back to YAML
 	updatedData, err := yaml.Marshal(configMap)
 	if err != nil {
 		return fmt.Errorf("failed to marshal config YAML: %w", err)
 	}
-	
+
 	// Write back to file
 	if err := os.WriteFile("config.yaml", updatedData, 0644); err != nil {
 		return fmt.Errorf("failed to write config file: %w", err)
 	}
-	
+
 	return nil
-}
\ No newline at end of file
+}
