Skip to content

mergeable configs + cleanup#8378

Open
jamadeo wants to merge 8 commits intomainfrom
jamadeo/mergeable-configs
Open

mergeable configs + cleanup#8378
jamadeo wants to merge 8 commits intomainfrom
jamadeo/mergeable-configs

Conversation

@jamadeo
Copy link
Copy Markdown
Member

@jamadeo jamadeo commented Apr 7, 2026

This PR introduces mergeable config files, so goose will pull configuration from multiple sources: /etc/goose/config.yaml, and ~/.config/goose/config.yaml. You can have an extension defined in the global config and enable/disable it in your user config.

Also, remove the backup/restore logic.

@jamadeo jamadeo changed the title merge config files mergeable configs + cleanup Apr 7, 2026
@jamadeo jamadeo requested review from DOsinga and alexhancock April 7, 2026 20:24
@jamadeo jamadeo closed this Apr 7, 2026
@jamadeo jamadeo reopened this Apr 7, 2026
@jamadeo
Copy link
Copy Markdown
Member Author

jamadeo commented Apr 7, 2026

@codex review

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6044d67109

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


let secrets = if env::var("GOOSE_DISABLE_KEYRING").is_ok()
|| keyring_disabled_in_config(&config_path)
|| keyring_disabled_in_config(&user_config_path)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Read keyring-disable flag from all config layers

With mergeable configs, GOOSE_DISABLE_KEYRING can now be set in /etc/goose/config.yaml, but Config::default still only checks ~/.config/goose/config.yaml before choosing SecretStorage. In environments that rely on a global config, this ignores the configured backend policy and initializes keyring mode unexpectedly, which can change secret handling behavior at runtime.

Useful? React with 👍 / 👎.

Comment on lines +169 to +171
let mut config_paths = vec![system_config_path()];
if let Some(defaults) = bundled_defaults_path() {
config_paths.push(defaults);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make bundled defaults lowest-precedence in merge order

The merge order loads /etc/goose/config.yaml first and defaults.yaml second, and load() applies last-wins merging for normal keys. When defaults.yaml is present, bundled defaults can overwrite administrator settings from the system config (including extension fields), so global config no longer acts as a reliable baseline unless users re-override it.

Useful? React with 👍 / 👎.

@DOsinga DOsinga added the needs_human label to set when a robot looks at a PR and can't handle it label Apr 8, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e73446f85

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +184 to +186
let secrets = if no_secrets_config
.get_param::<serde_json::Value>("GOOSE_DISABLE_KEYRING")
.is_ok()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Respect false when evaluating GOOSE_DISABLE_KEYRING

Config::default now picks file-based secret storage whenever get_param("GOOSE_DISABLE_KEYRING") returns any value, because the condition only checks .is_ok(). That means configs like GOOSE_DISABLE_KEYRING: false (or any non-missing value) still disable keyring and route secrets to secrets.yaml, which is a behavioral and security regression compared to boolean semantics. The check should deserialize/interpret the value as a boolean truthy flag instead of testing mere presence.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs_human label to set when a robot looks at a PR and can't handle it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants