@@ -2,10 +2,12 @@ package config
 
 import (
 	"fmt"
+	"os"
 	"slices"
 	"strings"
 
 	"github.com/charmbracelet/crush/internal/fur/provider"
+	"github.com/tidwall/sjson"
 )
 
 const (
@@ -274,6 +276,14 @@ func (c *Config) SmallModel() *provider.Model {
 	return c.GetModel(model.Provider, model.Model)
 }
 
+func (c *Config) SetCompactMode(enabled bool) error {
+	if c.Options == nil {
+		c.Options = &Options{}
+	}
+	c.Options.TUI.CompactMode = enabled
+	return c.SetConfigField("options.tui.compact_mode", enabled)
+}
+
 func (c *Config) Resolve(key string) (string, error) {
 	if c.resolver == nil {
 		return "", fmt.Errorf("no variable resolver configured")
@@ -287,3 +297,25 @@ func UpdatePreferredModel(modelType SelectedModelType, model SelectedModel) erro
 	cfg.Models[modelType] = model
 	return nil
 }
+
+func (c *Config) SetConfigField(key string, value any) error {
+	configPath := globalConfigData()
+	// read the data
+	data, err := os.ReadFile(configPath)
+	if err != nil {
+		if os.IsNotExist(err) {
+			data = []byte("{}")
+		} else {
+			return fmt.Errorf("failed to read config file: %w", err)
+		}
+	}
+
+	newValue, err := sjson.Set(string(data), key, value)
+	if err != nil {
+		return fmt.Errorf("failed to set config field %s: %w", key, err)
+	}
+	if err := os.WriteFile(configPath, []byte(newValue), 0o644); err != nil {
+		return fmt.Errorf("failed to write config file: %w", err)
+	}
+	return nil
+}
  
  
  
    
    @@ -156,12 +156,15 @@ func (p *chatPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		return p, p.setSession(msg)
 	case commands.ToggleCompactModeMsg:
 		p.forceCompact = !p.forceCompact
+		var cmd tea.Cmd
 		if p.forceCompact {
 			p.setCompactMode(true)
+			cmd = p.updateCompactConfig(true)
 		} else if p.width >= CompactModeBreakpoint {
 			p.setCompactMode(false)
+			cmd = p.updateCompactConfig(false)
 		}
-		return p, p.SetSize(p.width, p.height)
+		return p, tea.Batch(p.SetSize(p.width, p.height), cmd)
 	case pubsub.Event[session.Session]:
 		// this needs to go to header/sidebar
 		u, cmd := p.header.Update(msg)
@@ -337,6 +340,19 @@ func (p *chatPage) View() tea.View {
 	return view
 }
 
+func (p *chatPage) updateCompactConfig(compact bool) tea.Cmd {
+	return func() tea.Msg {
+		err := config.Get().SetCompactMode(compact)
+		if err != nil {
+			return util.InfoMsg{
+				Type: util.InfoTypeError,
+				Msg:  "Failed to update compact mode configuration: " + err.Error(),
+			}
+		}
+		return nil
+	}
+}
+
 func (p *chatPage) setCompactMode(compact bool) {
 	if p.compact == compact {
 		return