Skip to content

Commit fb4ac05

Browse files
authored
feat: CLI flag to skip loading profile extensions (#6780)
1 parent e2a18c9 commit fb4ac05

3 files changed

Lines changed: 16 additions & 0 deletions

File tree

crates/goose-cli/src/cli.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,12 @@ pub struct ExtensionOptions {
174174
value_delimiter = ','
175175
)]
176176
pub builtins: Vec<String>,
177+
178+
#[arg(
179+
long = "no-profile",
180+
help = "Don't load your default extensions, only use CLI-specified extensions"
181+
)]
182+
pub no_profile: bool,
177183
}
178184

179185
/// Input source and recipe options for the run command
@@ -1156,6 +1162,7 @@ async fn handle_interactive_session(
11561162
extensions: extension_opts.extensions,
11571163
streamable_http_extensions: extension_opts.streamable_http_extensions,
11581164
builtins: extension_opts.builtins,
1165+
no_profile: extension_opts.no_profile,
11591166
recipe: None,
11601167
additional_system_prompt: None,
11611168
provider: None,
@@ -1360,6 +1367,7 @@ async fn handle_run_command(
13601367
extensions: extension_opts.extensions,
13611368
streamable_http_extensions: extension_opts.streamable_http_extensions,
13621369
builtins: extension_opts.builtins,
1370+
no_profile: extension_opts.no_profile,
13631371
recipe: recipe.clone(),
13641372
additional_system_prompt: input_config.additional_system_prompt,
13651373
provider: model_opts.provider,
@@ -1486,6 +1494,7 @@ async fn handle_default_session() -> Result<()> {
14861494
extensions: Vec::new(),
14871495
streamable_http_extensions: Vec::new(),
14881496
builtins: Vec::new(),
1497+
no_profile: false,
14891498
recipe: None,
14901499
additional_system_prompt: None,
14911500
provider: None,

crates/goose-cli/src/commands/bench.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub async fn agent_generator(
5151
extensions: requirements.external,
5252
streamable_http_extensions,
5353
builtins: requirements.builtin,
54+
no_profile: true,
5455
recipe: None,
5556
additional_system_prompt: None,
5657
provider: None,

crates/goose-cli/src/session/builder.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ pub struct SessionBuilderConfig {
9292
pub streamable_http_extensions: Vec<StreamableHttpOptions>,
9393
/// List of builtin extension commands to add
9494
pub builtins: Vec<String>,
95+
pub no_profile: bool,
9596
/// Recipe for the session
9697
pub recipe: Option<Recipe>,
9798
/// Any additional system prompt to append to the default
@@ -130,6 +131,7 @@ impl Default for SessionBuilderConfig {
130131
extensions: Vec::new(),
131132
streamable_http_extensions: Vec::new(),
132133
builtins: Vec::new(),
134+
no_profile: false,
133135
recipe: None,
134136
additional_system_prompt: None,
135137
provider: None,
@@ -529,6 +531,8 @@ pub async fn build_session(session_config: SessionBuilderConfig) -> CliSession {
529531
.and_then(|s| EnabledExtensionsState::from_extension_data(&s.extension_data))
530532
.map(|state| state.extensions)
531533
.unwrap_or_else(get_enabled_extensions)
534+
} else if session_config.no_profile {
535+
Vec::new()
532536
} else {
533537
resolve_extensions_for_new_session(recipe.and_then(|r| r.extensions.as_deref()), None)
534538
};
@@ -636,6 +640,7 @@ mod tests {
636640
timeout: goose::config::DEFAULT_EXTENSION_TIMEOUT,
637641
}],
638642
builtins: vec!["developer".to_string()],
643+
no_profile: false,
639644
recipe: None,
640645
additional_system_prompt: Some("Test prompt".to_string()),
641646
provider: None,
@@ -671,6 +676,7 @@ mod tests {
671676
assert!(config.extensions.is_empty());
672677
assert!(config.streamable_http_extensions.is_empty());
673678
assert!(config.builtins.is_empty());
679+
assert!(!config.no_profile);
674680
assert!(config.recipe.is_none());
675681
assert!(config.additional_system_prompt.is_none());
676682
assert!(!config.debug);

0 commit comments

Comments
 (0)