feat(agents): display current model in selection

Amolith created

Show current model ID in header and pre-select current model name in gum
filter for all agent interactive functions.

Assisted-by: Claude Sonnet 4 via Crush

Change summary

functions/_synu_agents/aider.fish    | 16 +++++++++---
functions/_synu_agents/claude.fish   | 38 ++++++++++++++++++++---------
functions/_synu_agents/llxprt.fish   |  9 +++++-
functions/_synu_agents/opencode.fish |  9 +++++-
functions/_synu_agents/qwen.fish     |  9 +++++-
5 files changed, 59 insertions(+), 22 deletions(-)

Detailed changes

functions/_synu_agents/aider.fish 🔗

@@ -93,10 +93,18 @@ function _synu_agent_aider_interactive --description "Interactive model selectio
     # Build flags array
     set -l flags
 
+    # Get current models for display
+    set -l current_model_id (_synu_aider_default model)
+    set -l current_model_name (echo $models_json | \
+        jq -r --arg id "$current_model_id" '.data[] | select(.id == $id) | .name // "unknown"')
+    set -l current_editor_id (_synu_aider_default editor_model)
+    set -l current_editor_name (echo $models_json | \
+        jq -r --arg id "$current_editor_id" '.data[] | select(.id == $id) | .name // "unknown"')
+
     # Select main model
     set -l model_name (printf "%s\n" $model_names | \
-        gum filter --limit 1 --header "Select main model for Aider" \
-        --placeholder "Filter models...")
+        gum filter --limit 1 --header "Select main model for Aider (current: $current_model_id)" \
+        --selected "$current_model_name" --placeholder "Filter models...")
     or return 1
 
     set -l model_id (echo $models_json | \
@@ -112,8 +120,8 @@ function _synu_agent_aider_interactive --description "Interactive model selectio
     # Select editor model if requested
     if test "$use_editor_model" = "Yes (architect + editor mode)"
         set -l editor_model_name (printf "%s\n" $model_names | \
-            gum filter --limit 1 --header "Select editor model for Aider" \
-            --placeholder "Filter models...")
+            gum filter --limit 1 --header "Select editor model for Aider (current: $current_editor_id)" \
+            --selected "$current_editor_name" --placeholder "Filter models...")
         or return 1
 
         set -l editor_model_id (echo $models_json | \

functions/_synu_agents/claude.fish 🔗

@@ -106,6 +106,20 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
     set -l model_names (echo $models_json | jq -r '.data[].name')
     or return 1
 
+    # Get current models for display
+    set -l current_opus_id (_synu_claude_default opus)
+    set -l current_sonnet_id (_synu_claude_default sonnet)
+    set -l current_haiku_id (_synu_claude_default haiku)
+    set -l current_agent_id (_synu_claude_default agent)
+    set -l current_opus_name (echo $models_json | \
+        jq -r --arg id "$current_opus_id" '.data[] | select(.id == $id) | .name // "unknown"')
+    set -l current_sonnet_name (echo $models_json | \
+        jq -r --arg id "$current_sonnet_id" '.data[] | select(.id == $id) | .name // "unknown"')
+    set -l current_haiku_name (echo $models_json | \
+        jq -r --arg id "$current_haiku_id" '.data[] | select(.id == $id) | .name // "unknown"')
+    set -l current_agent_name (echo $models_json | \
+        jq -r --arg id "$current_agent_id" '.data[] | select(.id == $id) | .name // "unknown"')
+
     # Prompt for groups vs individual
     set -l mode (gum choose --limit 1 --header "How do you want to select models?" \
         "Groups" "Individual models")
@@ -124,8 +138,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
         for group in $groups
             if test "$group" = "Large (Opus, Sonnet, Sub-agent)"
                 set -l model_name (printf "%s\n" $model_names | \
-                    gum filter --limit 1 --header "Select model for Large group" \
-                    --placeholder "Filter models...")
+                    gum filter --limit 1 --header "Select model for Large group (opus: $current_opus_id, sonnet: $current_sonnet_id, agent: $current_agent_id)" \
+                    --selected "$current_opus_name" --placeholder "Filter models...")
                 or return 1
                 set -l model_id (echo $models_json | \
                     jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')
@@ -134,8 +148,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
                 end
             else if test "$group" = "Light (Haiku)"
                 set -l model_name (printf "%s\n" $model_names | \
-                    gum filter --limit 1 --header "Select model for Light group" \
-                    --placeholder "Filter models...")
+                    gum filter --limit 1 --header "Select model for Light group (haiku: $current_haiku_id)" \
+                    --selected "$current_haiku_name" --placeholder "Filter models...")
                 or return 1
                 set -l model_id (echo $models_json | \
                     jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')
@@ -155,8 +169,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
             switch $model_type
                 case "Opus"
                     set -l model_name (printf "%s\n" $model_names | \
-                        gum filter --limit 1 --header "Select Opus model" \
-                        --placeholder "Filter models...")
+                        gum filter --limit 1 --header "Select Opus model (current: $current_opus_id)" \
+                        --selected "$current_opus_name" --placeholder "Filter models...")
                     or return 1
                     set -l model_id (echo $models_json | \
                         jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')
@@ -165,8 +179,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
                     end
                 case "Sonnet"
                     set -l model_name (printf "%s\n" $model_names | \
-                        gum filter --limit 1 --header "Select Sonnet model" \
-                        --placeholder "Filter models...")
+                        gum filter --limit 1 --header "Select Sonnet model (current: $current_sonnet_id)" \
+                        --selected "$current_sonnet_name" --placeholder "Filter models...")
                     or return 1
                     set -l model_id (echo $models_json | \
                         jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')
@@ -175,8 +189,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
                     end
                 case "Haiku"
                     set -l model_name (printf "%s\n" $model_names | \
-                        gum filter --limit 1 --header "Select Haiku model" \
-                        --placeholder "Filter models...")
+                        gum filter --limit 1 --header "Select Haiku model (current: $current_haiku_id)" \
+                        --selected "$current_haiku_name" --placeholder "Filter models...")
                     or return 1
                     set -l model_id (echo $models_json | \
                         jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')
@@ -185,8 +199,8 @@ function _synu_agent_claude_interactive --description "Interactive model selecti
                     end
                 case "Sub-agent"
                     set -l model_name (printf "%s\n" $model_names | \
-                        gum filter --limit 1 --header "Select Sub-agent model" \
-                        --placeholder "Filter models...")
+                        gum filter --limit 1 --header "Select Sub-agent model (current: $current_agent_id)" \
+                        --selected "$current_agent_name" --placeholder "Filter models...")
                     or return 1
                     set -l model_id (echo $models_json | \
                         jq -r --arg name "$model_name" '.data[] | select(.name == $name) | .id')

functions/_synu_agents/llxprt.fish 🔗

@@ -65,10 +65,15 @@ function _synu_agent_llxprt_interactive --description "Interactive model selecti
     set -l model_names (echo $models_json | jq -r '.data[].name')
     or return 1
 
+    # Get current model for display
+    set -l current_id (_synu_llxprt_default)
+    set -l current_name (echo $models_json | \
+        jq -r --arg id "$current_id" '.data[] | select(.id == $id) | .name // "unknown"')
+
     # Select model
     set -l model_name (printf "%s\n" $model_names | \
-        gum filter --limit 1 --header "Select model for llxprt" \
-        --placeholder "Filter models...")
+        gum filter --limit 1 --header "Select model for llxprt (current: $current_id)" \
+        --selected "$current_name" --placeholder "Filter models...")
     or return 1
 
     set -l model_id (echo $models_json | \

functions/_synu_agents/opencode.fish 🔗

@@ -61,10 +61,15 @@ function _synu_agent_opencode_interactive --description "Interactive model selec
     set -l model_names (echo $models_json | jq -r '.data[].name')
     or return 1
 
+    # Get current model for display
+    set -l current_id (_synu_opencode_default)
+    set -l current_name (echo $models_json | \
+        jq -r --arg id "$current_id" '.data[] | select(.id == $id) | .name // "unknown"')
+
     # Select model
     set -l model_name (printf "%s\n" $model_names | \
-        gum filter --limit 1 --header "Select model for OpenCode" \
-        --placeholder "Filter models...")
+        gum filter --limit 1 --header "Select model for OpenCode (current: $current_id)" \
+        --selected "$current_name" --placeholder "Filter models...")
     or return 1
 
     set -l model_id (echo $models_json | \

functions/_synu_agents/qwen.fish 🔗

@@ -66,10 +66,15 @@ function _synu_agent_qwen_interactive --description "Interactive model selection
     set -l model_names (echo $models_json | jq -r '.data[].name')
     or return 1
 
+    # Get current model for display
+    set -l current_id (_synu_qwen_default)
+    set -l current_name (echo $models_json | \
+        jq -r --arg id "$current_id" '.data[] | select(.id == $id) | .name // "unknown"')
+
     # Select model
     set -l model_name (printf "%s\n" $model_names | \
-        gum filter --limit 1 --header "Select model for Qwen Code" \
-        --placeholder "Filter models...")
+        gum filter --limit 1 --header "Select model for Qwen Code (current: $current_id)" \
+        --selected "$current_name" --placeholder "Filter models...")
     or return 1
 
     set -l model_id (echo $models_json | \