@@ -378,7 +378,7 @@ pub async fn run_setup_top(base: BaseArgs, args: SetupArgs) -> Result<()> {
378378 match args. command {
379379 Some ( SetupSubcommand :: Skills ( setup) ) => run_setup ( base, setup) . await ,
380380 Some ( SetupSubcommand :: Instrument ( instrument) ) => {
381- run_instrument_setup ( base, instrument) . await
381+ run_instrument_setup ( base, instrument, false ) . await
382382 }
383383 Some ( SetupSubcommand :: Mcp ( mcp) ) => run_mcp_setup ( base, mcp) ,
384384 Some ( SetupSubcommand :: Doctor ( doctor) ) => run_doctor ( base, doctor) ,
@@ -462,10 +462,6 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
462462 } else {
463463 eprintln ! ( " {}" , style( "Skipped" ) . dim( ) ) ;
464464 }
465- eprintln ! (
466- " {}" ,
467- style( "(Un)select option with Space, confirm selection with Enter." ) . dim( )
468- ) ;
469465 } else if let Some ( ref project) = project {
470466 if find_git_root ( ) . is_some ( ) {
471467 let _ = maybe_init ( & org, project) ?;
@@ -476,6 +472,7 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
476472 if !quiet {
477473 print_wizard_step ( 3 , "Agents" ) ;
478474 }
475+ let mut multiselect_hint_shown = false ;
479476 let ( wants_skills, wants_mcp) = if flag_no_mcp_skill {
480477 if !quiet {
481478 eprintln ! (
@@ -504,6 +501,13 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
504501 }
505502 ( flag_skills, flag_mcp)
506503 } else {
504+ if !quiet {
505+ eprintln ! (
506+ " {}" ,
507+ style( "(Un)select option with Space, confirm selection with Enter." ) . dim( )
508+ ) ;
509+ multiselect_hint_shown = true ;
510+ }
507511 let choices = [ "Skills" , "MCP" ] ;
508512 let defaults = [ true , true ] ;
509513 let selected = MultiSelect :: with_theme ( & ColorfulTheme :: default ( ) )
@@ -656,6 +660,7 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
656660 interactive : false ,
657661 yolo,
658662 } ,
663+ !multiselect_hint_shown,
659664 )
660665 . await ?;
661666 } else if !quiet {
@@ -955,7 +960,11 @@ fn should_prompt_setup_action(base: &BaseArgs, args: &AgentsSetupArgs) -> bool {
955960 && args. workers == crate :: sync:: default_workers ( )
956961}
957962
958- async fn run_instrument_setup ( base : BaseArgs , args : InstrumentSetupArgs ) -> Result < ( ) > {
963+ async fn run_instrument_setup (
964+ base : BaseArgs ,
965+ args : InstrumentSetupArgs ,
966+ print_hint : bool ,
967+ ) -> Result < ( ) > {
959968 let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
960969 let root = find_git_root ( ) . ok_or_else ( || {
961970 anyhow ! (
@@ -981,11 +990,18 @@ async fn run_instrument_setup(base: BaseArgs, args: InstrumentSetupArgs) -> Resu
981990 ) ;
982991 }
983992
984- let selected_workflows = resolve_instrument_workflow_selection ( & args) ?;
993+ let mut hint_pending = print_hint && !base. quiet ;
994+ let selected_workflows = resolve_instrument_workflow_selection ( & args, & mut hint_pending) ?;
985995
986996 let selected_languages: Vec < LanguageArg > = if !args. languages . is_empty ( ) {
987997 args. languages . clone ( )
988998 } else if ui:: is_interactive ( ) && !args. yes {
999+ if hint_pending {
1000+ eprintln ! (
1001+ " {}" ,
1002+ style( "(Un)select option with Space, confirm selection with Enter." ) . dim( )
1003+ ) ;
1004+ }
9891005 let detected_langs = detect_languages_from_dir ( & std:: env:: current_dir ( ) ?) ;
9901006 let Some ( langs) = prompt_instrument_language_selection ( & detected_langs) ? else {
9911007 bail ! ( "instrument setup cancelled by user" ) ;
@@ -1173,7 +1189,10 @@ async fn run_instrument_setup(base: BaseArgs, args: InstrumentSetupArgs) -> Resu
11731189 Ok ( ( ) )
11741190}
11751191
1176- fn resolve_instrument_workflow_selection ( args : & InstrumentSetupArgs ) -> Result < Vec < WorkflowArg > > {
1192+ fn resolve_instrument_workflow_selection (
1193+ args : & InstrumentSetupArgs ,
1194+ hint_pending : & mut bool ,
1195+ ) -> Result < Vec < WorkflowArg > > {
11771196 if !args. workflows . is_empty ( ) {
11781197 let mut selected = resolve_workflow_selection ( & args. workflows ) ;
11791198 if !selected. contains ( & WorkflowArg :: Instrument ) {
@@ -1185,6 +1204,13 @@ fn resolve_instrument_workflow_selection(args: &InstrumentSetupArgs) -> Result<V
11851204 }
11861205
11871206 if ui:: is_interactive ( ) && !args. yes {
1207+ if * hint_pending {
1208+ eprintln ! (
1209+ " {}" ,
1210+ style( "(Un)select option with Space, confirm selection with Enter." ) . dim( )
1211+ ) ;
1212+ * hint_pending = false ;
1213+ }
11881214 let Some ( selected) = prompt_instrument_workflow_selection ( ) ? else {
11891215 bail ! ( "instrument setup cancelled by user" ) ;
11901216 } ;
@@ -3268,8 +3294,8 @@ mod tests {
32683294 yolo : false ,
32693295 } ;
32703296
3271- let selected =
3272- resolve_instrument_workflow_selection ( & args ) . expect ( "resolve instrument workflows" ) ;
3297+ let selected = resolve_instrument_workflow_selection ( & args , & mut false )
3298+ . expect ( "resolve instrument workflows" ) ;
32733299 assert_eq ! (
32743300 selected,
32753301 vec![ WorkflowArg :: Instrument , WorkflowArg :: Evaluate ]
@@ -3291,8 +3317,8 @@ mod tests {
32913317 yolo : false ,
32923318 } ;
32933319
3294- let selected =
3295- resolve_instrument_workflow_selection ( & args ) . expect ( "resolve instrument workflows" ) ;
3320+ let selected = resolve_instrument_workflow_selection ( & args , & mut false )
3321+ . expect ( "resolve instrument workflows" ) ;
32963322 assert_eq ! ( selected, vec![ WorkflowArg :: Instrument ] ) ;
32973323 }
32983324
0 commit comments