Skip to content

fix: make TLS configurable in goosed agent via GOOSE_TLS env var#7686

Merged
wpfleger96 merged 3 commits intomainfrom
wpfleger/tls
Mar 6, 2026
Merged

fix: make TLS configurable in goosed agent via GOOSE_TLS env var#7686
wpfleger96 merged 3 commits intomainfrom
wpfleger/tls

Conversation

@wpfleger96
Copy link
Copy Markdown
Collaborator

@wpfleger96 wpfleger96 commented Mar 6, 2026

Adds a GOOSE_TLS env var (default true) to make TLS configurable in goosed agent, addressing headless and server deployments that expect plain HTTP.

PR #7126 introduced self-signed HTTPS for the desktop app's cert-pinning flow, but without a fallback for non-desktop deployments. K8s health probes, sidecar proxies, and plain HTTP clients receive a TLS handshake instead of an HTTP response. Defaulting GOOSE_TLS to true preserves the current desktop behavior — server deployments can opt out by setting GOOSE_TLS=false.

  • Adds tls: bool field (default true) to Settings in configuration.rs, read from GOOSE_TLS via the existing env prefix config
  • Branches in agent.rs: when true, uses axum_server::bind_rustls with cert fingerprint as before; when false, uses tokio::net::TcpListener + axum::serve with graceful shutdown
  • No changes to the Electron desktop app — it gets TLS by default without any configuration

Closes #7685

PR #7126 hardcoded self-signed HTTPS as the only server mode, breaking
headless deployments (K8s health probes, sidecar proxies, plain HTTP
clients) that expect HTTP. TLS is now controlled by the GOOSE_TLS env
var (default: true), so existing desktop deployments are unaffected and
server deployments can opt out with GOOSE_TLS=false.
@wpfleger96 wpfleger96 changed the title fix: make TLS opt-out in goosed agent via GOOSE_TLS env var fix: make TLS configurable in goosed agent via GOOSE_TLS env var Mar 6, 2026
@wpfleger96 wpfleger96 enabled auto-merge March 6, 2026 02:51
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: f4af365b29

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

When GOOSE_TLS=false the tunnel was still hardcoding "https" in
start_tunnel_internal, so proxied requests would hit the plain HTTP
listener with a TLS handshake. Adds a scheme field to TunnelManager
(derived from the tls setting at construction) and uses it in place of
the hardcoded value.
@wpfleger96 wpfleger96 added this pull request to the merge queue Mar 6, 2026
Merged via the queue into main with commit 6b6018c Mar 6, 2026
21 of 22 checks passed
@wpfleger96 wpfleger96 deleted the wpfleger/tls branch March 6, 2026 05:02
michaelneale added a commit that referenced this pull request Mar 6, 2026
* origin/main: (40 commits)
  fix: make TLS configurable in goosed agent via GOOSE_TLS env var (#7686)
  Update to rmcp 1.1.0 (#7619)
  Fix max turns configuration (#7612)
  feat: add base path field to custom provider configuration (#7614)
  fix: compare extension configs before skipping add_extension (#7650)
  chore(release): release version 1.27.0 (minor) (#7611)
  feat: better private channel detection, bot version debugging (#7680)
  chore(deps): bump svgo from 3.3.2 to 3.3.3 in /documentation (#7667)
  fix: only add viewable channels to bot context (#7678)
  chore: added a recipe to help identify high risk change prs for testing (#7651)
  fix: make sure platform binary exists (#7676)
  fix(shell): replace global static output buffer with per-instance TempDir (#7632)
  opt: remove timestamped config file backup (#7618)
  chore(deps): bump @hono/node-server from 1.19.9 to 1.19.10 in /ui/desktop (#7662)
  chore(deps): bump hono from 4.12.3 to 4.12.5 in /evals/open-model-gym/mcp-harness (#7661)
  chore(deps): bump hono from 4.12.2 to 4.12.5 in /ui/desktop (#7660)
  fix: resolve parameters in initial message with autosubmit (#7659)
  fix: this should not be blocked (#7656)
  Relax the assertion for the model list ACP test (#7653)
  fix: add analyzer extension in recipe to maintain backwards compatibility  (#7652)
  ...
Abhijay007 pushed a commit to Abhijay007/goose that referenced this pull request Mar 6, 2026
wpfleger96 added a commit that referenced this pull request Mar 6, 2026
* origin/main:
  fix: restore smart-approve mode (#7690)
  fix: make TLS configurable in goosed agent via GOOSE_TLS env var (#7686)
wpfleger96 added a commit that referenced this pull request Mar 6, 2026
* origin/main: (59 commits)
  fix: restore smart-approve mode (#7690)
  fix: make TLS configurable in goosed agent via GOOSE_TLS env var (#7686)
  Update to rmcp 1.1.0 (#7619)
  Fix max turns configuration (#7612)
  feat: add base path field to custom provider configuration (#7614)
  fix: compare extension configs before skipping add_extension (#7650)
  chore(release): release version 1.27.0 (minor) (#7611)
  feat: better private channel detection, bot version debugging (#7680)
  chore(deps): bump svgo from 3.3.2 to 3.3.3 in /documentation (#7667)
  fix: only add viewable channels to bot context (#7678)
  chore: added a recipe to help identify high risk change prs for testing (#7651)
  fix: make sure platform binary exists (#7676)
  fix(shell): replace global static output buffer with per-instance TempDir (#7632)
  opt: remove timestamped config file backup (#7618)
  chore(deps): bump @hono/node-server from 1.19.9 to 1.19.10 in /ui/desktop (#7662)
  chore(deps): bump hono from 4.12.3 to 4.12.5 in /evals/open-model-gym/mcp-harness (#7661)
  chore(deps): bump hono from 4.12.2 to 4.12.5 in /ui/desktop (#7660)
  fix: resolve parameters in initial message with autosubmit (#7659)
  fix: this should not be blocked (#7656)
  Relax the assertion for the model list ACP test (#7653)
  ...
wpfleger96 added a commit that referenced this pull request Mar 6, 2026
…e-issue

* origin/main:
  feat: combine TUI UX from alexhancock/tui-goodness with publishing config from jackamadeo/package-tui (#7683)
  chore: cleanup old sandbox (#7700)
  Correct windows artifact (#7699)
  gh fall back (#7695)
  fix: restore smart-approve mode (#7690)
  fix: make TLS configurable in goosed agent via GOOSE_TLS env var (#7686)
  Update to rmcp 1.1.0 (#7619)
jh-block added a commit that referenced this pull request Mar 9, 2026
…deps

* origin/main: (34 commits)
  fix: reduce server log verbosity — skip session in instrument, defaul… (#7729)
  fix: provider test infrastructure (#7738)
  fix: sanitize streamable HTTP extension names derived from URLs (#7740)
  refactor: derive GooseMode string conversions with strum (#7706)
  docs: Add Spraay Batch Payments MCP Extension Tutorial (#7525)
  fix: flake.nix (#7224)
  delete goose web (#7696)
  Add @angiejones as CODEOWNER for documentation (#7711)
  Add MLflow integration guide (#7563)
  docs: LM Studio availability (#7698)
  feat: add Avian as an LLM provider (#7561)
  Adds `linux-mcp-server` to the goose registry (#6979)
  fix: add #[serde(default)] to description field on 4 ExtensionConfig variants (#7708)
  feat: combine TUI UX from alexhancock/tui-goodness with publishing config from jackamadeo/package-tui (#7683)
  chore: cleanup old sandbox (#7700)
  Correct windows artifact (#7699)
  gh fall back (#7695)
  fix: restore smart-approve mode (#7690)
  fix: make TLS configurable in goosed agent via GOOSE_TLS env var (#7686)
  Update to rmcp 1.1.0 (#7619)
  ...

# Conflicts:
#	Cargo.lock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Self-signed HTTPS in goosed breaks headless/server deployments (K8s health probes, reverse proxies)

2 participants