@@ -18,11 +18,13 @@ import (
1818 "github.com/charmbracelet/crush/internal/config"
1919 "github.com/charmbracelet/crush/internal/db"
2020 "github.com/charmbracelet/crush/internal/event"
21+ termutil "github.com/charmbracelet/crush/internal/term"
2122 "github.com/charmbracelet/crush/internal/tui"
2223 "github.com/charmbracelet/crush/internal/version"
2324 "github.com/charmbracelet/fang"
2425 "github.com/charmbracelet/lipgloss/v2"
2526 uv "github.com/charmbracelet/ultraviolet"
27+ "github.com/charmbracelet/x/ansi"
2628 "github.com/charmbracelet/x/exp/charmtone"
2729 "github.com/charmbracelet/x/term"
2830 "github.com/spf13/cobra"
@@ -32,7 +34,6 @@ func init() {
3234 rootCmd.PersistentFlags().StringP("cwd", "c", "", "Current working directory")
3335 rootCmd.PersistentFlags().StringP("data-dir", "D", "", "Custom crush data directory")
3436 rootCmd.PersistentFlags().BoolP("debug", "d", false, "Debug")
35−
3637 rootCmd.Flags().BoolP("help", "h", false, "Help")
3738 rootCmd.Flags().BoolP("yolo", "y", false, "Automatically accept all permissions (dangerous mode)")
3839
@@ -74,7 +75,7 @@ crush run "Explain the use of context in Go"
7475crush -y
7576 `,
7677 RunE: func(cmd *cobra.Command, args []string) error {
77− app, err := setupApp(cmd)
78+ app, err := setupAppWithProgressBar(cmd)
7879 if err != nil {
7980 return err
8081 }
@@ -92,7 +93,6 @@ crush -y
9293 tea.WithEnvironment(env),
9394 tea.WithContext(cmd.Context()),
9495 tea.WithFilter(tui.MouseEventFilter)) // Filter mouse events based on focus state
95−
9696 go app.Subscribe(program)
9797
9898 if _, err := program.Run(); err != nil {
@@ -150,6 +150,15 @@ func Execute() {
150150 }
151151}
152152
153+func setupAppWithProgressBar(cmd *cobra.Command) (*app.App, error) {
154+ if termutil.SupportsProgressBar() {
155+ _, _ = fmt.Fprintf(os.Stderr, ansi.SetIndeterminateProgressBar)
156+ defer func() { _, _ = fmt.Fprintf(os.Stderr, ansi.ResetProgressBar) }()
157+ }
158+
159+ return setupApp(cmd)
160+}
161+
153162// setupApp handles the common setup logic for both interactive and non-interactive modes.
154163// It returns the app instance, config, cleanup function, and any error.
155164func setupApp(cmd *cobra.Command) (*app.App, error) {