charmbracelet/crush · error

failed to get debug flag: %v

Error message

failed to get debug flag: %v

What it means

After reading --data-dir, the server command reads the --debug boolean via cmd.Flags().GetBool. An error here means the flag lookup itself failed — the flag was never registered or was registered with a non-bool type — again a command-wiring defect rather than a runtime condition.

Source

Thrown at internal/cmd/server.go:37

var serverHost string

func init() {
	serverCmd.Flags().StringVarP(&serverHost, "host", "H", server.DefaultHost(), "Server host (TCP or Unix socket)")
	rootCmd.AddCommand(serverCmd)
}

var serverCmd = &cobra.Command{
	Use:   "server",
	Short: "Start the Crush server",
	RunE: func(cmd *cobra.Command, _ []string) error {
		dataDir, err := cmd.Flags().GetString("data-dir")
		if err != nil {
			return fmt.Errorf("failed to get data directory: %v", err)
		}
		debug, err := cmd.Flags().GetBool("debug")
		if err != nil {
			return fmt.Errorf("failed to get debug flag: %v", err)
		}

		cfg, err := config.Load(config.GlobalWorkspaceDir(), dataDir, debug)
		if err != nil {
			return fmt.Errorf("failed to load configuration: %v", err)
		}

		hostURL, err := server.ParseHostURL(serverHost)
		if err != nil {
			return fmt.Errorf("invalid server host: %v", err)
		}

		logFile := filepath.Join(config.GlobalCacheDir(), "server-"+safeHostName(hostURL), "crush.log")

		if term.IsTerminal(os.Stderr.Fd()) {
			crushlog.Setup(logFile, debug, os.Stderr)
		} else {
			crushlog.Setup(logFile, debug)

View on GitHub (pinned to 7944b8e522)

Solutions

  1. Use an official binary; stock builds register --debug correctly.
  2. When building from source, verify `serverCmd.Flags().Bool("debug", false, ...)` exists in internal/cmd/server.go.
  3. If calling RunE from code, register the flag with the bool type before invocation.

Example fix

// before
serverCmd.Flags().String("debug", "", "debug mode")   // wrong type
// after
serverCmd.Flags().Bool("debug", false, "enable debug")
Defensive patterns

Strategy: validation

Validate before calling

if serverCmd.Flags().Lookup("debug") == nil {
    return fmt.Errorf("debug flag not registered on this build")
}

Type guard

func hasBoolFlag(cmd *cobra.Command, name string) bool {
    f := cmd.Flags().Lookup(name)
    return f != nil && f.Value.Type() == "bool"
}

Try / catch

if err := serverCmd.RunE(serverCmd, args); err != nil {
    if strings.HasPrefix(err.Error(), "failed to get debug flag") {
        return fmt.Errorf("--debug flag misconfigured; rebuild from an official source")
    }
    return err
}

Prevention

When it happens

Trigger: Executing serverCmd.RunE where `debug` was not added via flags.Bool("debug", ...) in init(), or was registered as a different type (e.g. a string flag) so GetBool returns a type error.

Common situations: Refactors that rename or retype the --debug flag; forks with custom flag sets; tests invoking RunE on a bare cobra.Command without flag registration.

Related errors


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/6e24c8923b4d89f2. Report an issue: GitHub.