logging: make -verbose -termui=false log to stdout

Commit d72563ac30bab6471121f561f3bb41991a3c91d1 made it so we never send
logs to stdout/stderr, but I prefer them on stderr when possible. So, if
termui isn't enabled, let's send them to stderr. --termui used to not be
propogated; now it is.
diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index 08f8cd8..32f9508 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -92,7 +92,7 @@
 	ctx := skribe.ContextWithAttr(context.Background(), slog.String("session_id", flagArgs.sessionID))
 
 	// Configure logging
-	slogHandler, logFile, err := setupLogging(flagArgs.oneShot, flagArgs.verbose, flagArgs.unsafe)
+	slogHandler, logFile, err := setupLogging(flagArgs.termUI, flagArgs.verbose, flagArgs.unsafe)
 	if err != nil {
 		return err
 	}
@@ -292,6 +292,7 @@
 		Verbose:           flags.verbose,
 		DockerArgs:        flags.dockerArgs,
 		ExperimentFlag:    flags.experimentFlag.String(),
+		TermUI:            flags.termUI,
 	}
 
 	if err := dockerimg.LaunchContainer(ctx, config); err != nil {
@@ -541,23 +542,26 @@
 
 // setupLogging configures the logging system based on command-line flags.
 // Returns the slog handler and optionally a log file (which should be closed by the caller).
-func setupLogging(oneShot, verbose, unsafe bool) (slog.Handler, *os.File, error) {
+func setupLogging(termui, verbose, unsafe bool) (slog.Handler, *os.File, error) {
 	var slogHandler slog.Handler
 	var logFile *os.File
 	var err error
 
-	if !oneShot && !verbose {
-		// Log to a file
-		logFile, err = os.CreateTemp("", "sketch-cli-log-*")
-		if err != nil {
-			return nil, nil, fmt.Errorf("cannot create log file: %v", err)
-		}
-		if unsafe {
-			fmt.Printf("structured logs: %v\n", logFile.Name())
-		}
+	if verbose && !termui {
+		// Log to stderr
+		slogHandler = slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug})
+		return slogHandler, nil, nil
 	}
 
-	// Always send slogs to the logFile.
+	// Log to a file
+	logFile, err = os.CreateTemp("", "sketch-cli-log-*")
+	if err != nil {
+		return nil, nil, fmt.Errorf("cannot create log file: %v", err)
+	}
+	if unsafe {
+		fmt.Printf("structured logs: %v\n", logFile.Name())
+	}
+
 	slogHandler = slog.NewJSONHandler(logFile, &slog.HandlerOptions{Level: slog.LevelDebug})
 	slogHandler = skribe.AttrsWrap(slogHandler)
 
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 41026a4..d824dd0 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -101,6 +101,9 @@
 
 	// ExperimentFlag contains the experimental features to enable
 	ExperimentFlag string
+
+	// TermUI enables terminal UI
+	TermUI bool
 }
 
 // LaunchContainer creates a docker container for a project, installs sketch and opens a connection to it.
@@ -490,6 +493,7 @@
 		"-outside-os="+config.OutsideOS,
 		"-outside-working-dir="+config.OutsideWorkingDir,
 		"-open=false",
+		"-termui="+fmt.Sprintf("%t", config.TermUI),
 		"-x="+config.ExperimentFlag,
 	)
 	if config.Model != "" {