gastownhall/beads · error

--contributor requires interactive prompts and cannot be use

Error message

--contributor requires interactive prompts and cannot be used with --non-interactive

What it means

The contributor/team wizard is an interactive prompt flow; combining --contributor with --non-interactive fails fast because the wizard cannot run without a TTY-driven prompt session.

Source

Thrown at cmd/bd/init.go:580

		}

		// Resolve non-interactive mode: flag > env var > terminal detection.
		// This must be computed before any interactive prompts.
		nonInteractive := isNonInteractiveInit(nonInteractiveFlag)

		// Validate --role flag value
		if roleFlag != "" {
			switch roleFlag {
			case "maintainer", "contributor":
				// valid
			default:
				return fmt.Errorf("invalid --role %q: must be \"maintainer\" or \"contributor\"", roleFlag)
			}
		}

		// Fail-fast: contributor/team wizards require interaction
		if nonInteractive && contributor {
			return fmt.Errorf("--contributor requires interactive prompts and cannot be used with --non-interactive")
		}
		if nonInteractive && team {
			return fmt.Errorf("--team requires interactive prompts and cannot be used with --non-interactive")
		}

		// Dolt is the only supported backend.
		backend := configfile.BackendDolt

		// Also treat BEADS_DOLT_SERVER_MODE=1 env var as --server.
		if os.Getenv("BEADS_DOLT_SERVER_MODE") == "1" {
			initServerMode = true
		}

		// Shared server mode still uses a Dolt sql-server, so it must select
		// the server-backed store path during init. Without this, init can
		// persist shared-server intent in YAML while still creating an embedded
		// store and recording dolt_mode=embedded in metadata.json (GH#2946).
		if sharedServer || strings.EqualFold(os.Getenv("BEADS_DOLT_SHARED_SERVER"), "true") || os.Getenv("BEADS_DOLT_SHARED_SERVER") == "1" {

View on GitHub (pinned to 71377f2769)

Solutions

  1. Run `bd init --contributor` in an interactive terminal without --non-interactive
  2. For automation, use non-wizard init flags instead of the contributor wizard
  3. If your terminal detection is wrong (piped TTY), remove any BEADS_* non-interactive env vars

Example fix

// before
bd init --contributor --non-interactive
// after
bd init --contributor   # run interactively
Defensive patterns

Strategy: validation

Validate before calling

if contributor && nonInteractive {
    return fmt.Errorf("--contributor requires an interactive terminal; drop --non-interactive")
}

Try / catch

if err := bdInit("--contributor", "--non-interactive"); err != nil {
    if strings.Contains(err.Error(), "requires interactive prompts") {
        // rerun interactively or switch to non-wizard flags
    }
}

Prevention

When it happens

Trigger: `bd init --contributor --non-interactive` (or --non-interactive supplied via env var / terminal detection per isNonInteractiveInit) together with --contributor.

Common situations: CI/CD or scripted setups trying to automate the contributor onboarding wizard; running bd init from a non-TTY environment (CI runner, nohup) while also passing --contributor.

Related errors


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/24a57ca6354d1825. Report an issue: GitHub.