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
+}
