package cli import ( "encoding/json" "fmt" "io" "net/url" "github.com/spf13/cobra" ) func newStartCmd() *cobra.Command { var serverURL string var agent string cmd := &cobra.Command{ Use: "start ", Short: "Queue a task for execution via the running server", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { return startTask(serverURL, args[0], agent) }, } cmd.Flags().StringVar(&serverURL, "server", "http://localhost:8484", "claudomator server URL") cmd.Flags().StringVar(&agent, "agent", "", "agent to use (claude, gemini, or auto)") return cmd } func startTask(serverURL, id, agent string) error { u := fmt.Sprintf("%s/api/tasks/%s/run", serverURL, url.PathEscape(id)) if agent != "" { u += "?agent=" + url.QueryEscape(agent) } resp, err := httpClient.Post(u, "application/json", nil) //nolint:noctx if err != nil { return fmt.Errorf("POST %s: %w", u, err) } defer resp.Body.Close() raw, _ := io.ReadAll(resp.Body) var body map[string]string if err := json.Unmarshal(raw, &body); err != nil { return fmt.Errorf("server returned invalid JSON (status %d): %s", resp.StatusCode, string(raw)) } if resp.StatusCode >= 300 { return fmt.Errorf("server returned %d: %s", resp.StatusCode, body["error"]) } fmt.Printf("Queued task %s\n", id) return nil }