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
- Use an official binary; stock builds register --debug correctly.
- When building from source, verify `serverCmd.Flags().Bool("debug", false, ...)` exists in internal/cmd/server.go.
- 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
- Keep flag name and type consistent (Bool for debug) across refactors.
- Add unit tests that invoke RunE with all flags registered.
- Prefer official release binaries over ad-hoc local builds for servers.
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
- failed to get current working directory: %v
- failed to get data directory: %v
- failed to get follow flag: %v
- failed to get tail flag: %v
- failed to get data directory: %v
AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29).
Data as JSON: /api/errors/6e24c8923b4d89f2.
Report an issue: GitHub.