Skip to content

feat(acp): add session/set_config and stabilize list, delete and close#7984

Merged
codefromthecrypt merged 1 commit intomainfrom
adrian/sacp-11-config-option
Mar 22, 2026
Merged

feat(acp): add session/set_config and stabilize list, delete and close#7984
codefromthecrypt merged 1 commit intomainfrom
adrian/sacp-11-config-option

Conversation

@codefromthecrypt
Copy link
Copy Markdown
Collaborator

@codefromthecrypt codefromthecrypt commented Mar 18, 2026

Summary

This change stabilizes ACP session related functionality that is re-used across multiple ACP agents. This does so by adding the new unified session/set_config_option and formalizing existing support like session/list, session/delete and session/close with integration tests. To unlock this, it updates to the latest sacp lib as the prior revlocked us into old schema types.

ACP stabilized session/set_config_option as a unified config method, superseding session/set_mode and session/set_model.
Instead of separate modes and models fields in session/new, agents return a single config_options array that clients use to populate their UI and send changes back.

Here are some notable clients/IDEs that support deviations of this config:

  • Zed prefers set_config_option when agents advertise config_options, falls back otherwise
  • openclaw/acpx only uses set_config_option
  • codecompanion.nvim only uses session/set_mode

This updates goose acp to accept set_config_option and fall back to set_mode/set_model to support the above, taking care not to duplicate code.

Goose is also a client when using ACP providers (e.g. claude-acp, codex-acp). The provider now handles ConfigOptionUpdate notifications to sync local state, supporting the same patterns in the other direction.

Here are some notable agents that support deviations of this config:

We couldn't add this before due to revlock in sacp 10, not without manually writing JSON.
So this bumps to sacp 11 to get SetSessionConfigOptionRequest.
It also adds if_request routing and minor call-site updates.

Note: session/set_config_option also adds thought_level, but we return invalid_params until we figure out how to normalize thinking.

Session lifecycle methods (session/list, session/close) now use typed if_request dispatch via sacp's unstable feature flags. session/delete is a standard ACP method (RFD #395) not yet in the schema crate, so it remains in custom method dispatch until DeleteSessionRequest is added.

Goose as a client now sends session/close on shutdown to ACP agents that advertise sessionCapabilities.close. This lets agents free resources:

  • claude-agent-acp cancels pending work and removes the session from memory
  • codex-acp shuts down the thread and removes it from the thread manager

The #[custom_method] macro no longer forces a _goose/ prefix on all methods. This allows us to add impl for emerging ACP methods like session/delete (before they are in the schema). Goose-only methods (_goose/tools, _goose/config/extensions, etc.) keep their prefix.

All ACP providers now use a single sentinel "current" instead of per-provider default model strings ("default", "gpt-5.4", "auto-gemini-3"). At connect time, goose resolves it to the agent's actual current_model_id from session/new. This fixes a clash where claude-acp's old default "default" could overwrite the user's real model choice, and eliminates per-provider constants that drift as agents change their model names.

Notable bugs fixed along the way:

  • Wrong error codes and sometimes panik — panicked or random error instead of ResourceNotFound etc.
  • ACP agents leaked resources on shutdown — goose never closed sessions before exiting
  • ACP Editors/Clients didn't see model changes — no notification was sent back
  • Switching modes had no effect on ACP providers — goose sent its own mode names, not the agent's
  • Switching models had no effect on ACP providers — model changes were never forwarded downstream
  • Unhelpful errors on request log failures — bare OS errors; switched to fs_err
  • wrong case format in custom ACP code — used session_id not sessionId etc

Type of Change

  • Feature
  • Refactor / Code quality
  • Tests

AI Assistance

  • This PR was created or reviewed with AI assistance

Testing

Integration tests

ACP provider updates:

$ brew uninstall codex-acp claude-agent-acp gemini-cli 2>/dev/null
$ source bin/activate-hermit
$ npm install -g @zed-industries/claude-agent-acp @zed-industries/codex-acp @google/gemini-cli

Scoped provider tests (includes claude-code to prove sentinel check doesn't break non-ACP agentic providers):

$ cargo test --test providers -- test_claude_code_provider test_claude_acp_provider test_codex_acp_provider test_gemini_acp_provider --nocapture
running 4 tests
test test_gemini_acp_provider ... ok
=== claude-acp::model_listing ===
&models = ["default", "sonnet", "haiku"]
=== codex-acp::model_listing ===
&models = ["gpt-5.4/low", "gpt-5.4/medium", "gpt-5.4/high", "gpt-5.4/xhigh", "gpt-5.4-mini/low", ...]
=== claude-code::model_listing ===
&models = ["default", "sonnet", "haiku"]
=== claude-acp::basic_response === Hello!
=== codex-acp::basic_response === Hello!
=== claude-code::basic_response === Hello! 👋
=== claude-acp::tool_usage === test-uuid-12345-67890
=== codex-acp::tool_usage === test-uuid-12345-67890
=== claude-code::tool_usage === test-uuid-12345-67890
=== claude-acp::image_content === hello goose! this is a test image.
=== codex-acp::image_content === hello goose! this is a test image.
=== claude-code::image_content === hello goose! this is a test image.
=== claude-acp::model_switch (default -> sonnet) === Hello!
=== codex-acp::model_switch (gpt-5.4/xhigh -> gpt-5.4-mini) === Hello!
=== claude-code::model_switch (default -> sonnet) === Hello!
=== claude-acp::permission_allow ===
=== codex-acp::permission_allow ===
=== claude-code::permission_allow ===
=== claude-acp::permission_deny ===
=== codex-acp::permission_deny ===
=== claude-code::permission_deny ===
test test_claude_acp_provider ... ok
test test_codex_acp_provider ... ok
test test_claude_code_provider ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 15 filtered out

============== Providers ==============
✅ claude-acp
✅ claude-code
✅ codex-acp
⏭️ gemini-acp
=======================================

Zed

Kill goose and clear state:

$ pkill -f goose
$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions -rf ~/Library/Logs/Zed/ ~/Library/Application\ Support/Zed/threads/
$ just release-binary

Add to ~/.config/zed/settings.json:

"agent_servers": {
  "goose": {
    "type": "custom",
    "command": "/path/to/goose/target/release/goose",
    "args": ["acp", "--with-builtin", "developer"],
    "env": {
      "RUST_LOG": "debug,sacp=trace"
    },
  }
}
$ mkdir -p /tmp/test-sacp-upgrade
$ open -a /Applications/Zed.app /tmp/test-sacp-upgrade

Mode selection:

  1. Open Zed's agent panel. The mode selector (bottom bar, next to model selector) shows "auto" as the default.
  2. Click the mode selector and switch to "approve"
  3. Enter "Use the tree tool to list the current directory" and send it
  4. Zed should show a permission prompt (approve mode requires confirmation for tool calls)
  5. Verify in goose logs:
$ grep -h 'Received JSON-RPC.*set_config_option' ~/.local/state/goose/logs/cli/*/*.log                                                    
{"timestamp":"2026-03-19T10:11:09.669704Z","level":"TRACE","fields":{"message":"Received JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"session/set_config_option\",\"params\":{\"sessionId\":\"20260319_1\",\"configId\":\"mode\",\"value\":\"approve\"}}"},"target":"sacp::jsonrpc::transport_actor","span":{"name":"goose-acp","name":"connection"},"spans":[{"name":"goose-acp","name":"connection"}]}

Model selection:

  1. Click the model selector in the bottom left, switch to a different model
  2. Enter "say hello" and send it
  3. Verify in goose logs:
$ grep -h 'Received JSON-RPC.*set_config_option.*model' ~/.local/state/goose/logs/cli/*/*.log
{"timestamp":"2026-03-19T10:16:39.101618Z","level":"TRACE","fields":{"message":"Received JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"session/set_config_option\",\"params\":{\"sessionId\":\"20260319_1\",\"configId\":\"model\",\"value\":\"qwen3:4b\"}}"},"target":"sacp::jsonrpc::transport_actor","span":{"name":"goose-acp","name":"connection"},"spans":[{"name":"goose-acp","name":"connection"}]}

Model selection — set_config_option forwarding (claude-acp):

Replace the env in ~/.config/zed/settings.json with:

"env": {
  "RUST_LOG": "debug,sacp=trace",
  "GOOSE_PROVIDER": "claude-acp",
  "GOOSE_MODEL": "default"
},

Restart Zed:

$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions ~/Library/Logs/Zed/ ~/Library/Application\ Support/Zed/threads/
$ open -a /Applications/Zed.app /tmp/test-sacp-upgrade
  1. Click the model selector in the bottom left, switch to "haiku"
  2. Enter "say hello" and send it
  3. Verify in goose logs:
$ grep -h 'Model switched' ~/.local/state/goose/logs/cli/*/*.log                                                                     
{"timestamp":"2026-03-19T12:16:55.129763Z","level":"INFO","fields":{"message":"Model switched","session_id":"20260319_2","model_id":"haiku"},"target":"goose_acp::server","span":{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"},"spans":[{"name":"goose-acp","name":"connection"},{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"}]}

Model selection — set_model fallback (gemini-cli):

Replace the env in ~/.config/zed/settings.json with:

"env": {
  "RUST_LOG": "debug,sacp=trace",
  "GOOSE_PROVIDER": "gemini-acp",
  "GOOSE_MODEL": "auto-gemini-3"
},

Restart Zed:

$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions ~/Library/Logs/Zed/ ~/Library/Application\ Support/Zed/threads/
$ open -a /Applications/Zed.app /tmp/test-sacp-upgrade
  1. Click the model selector in the bottom left, switch to "gemini-2.5-flash"
  2. Enter "say hello" and send it
  3. Verify in goose logs:
$ grep -h 'Model switched' ~/.local/state/goose/logs/cli/*/*.log                                                                      
{"timestamp":"2026-03-19T12:22:07.805750Z","level":"INFO","fields":{"message":"Model switched","session_id":"20260319_1","model_id":"gemini-2.5-flash-lite"},"target":"goose_acp::server","span":{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"},"spans":[{"name":"goose-acp","name":"connection"},{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"}]}

Session list:

  1. Open Zed's agent panel, send "hello", then start a new thread and send "goodbye"
  2. Click the history icon in the agent panel header to open the Recent sidebar
  3. Both sessions should appear in the list
$ grep -h 'Received JSON-RPC.*session/list' ~/.local/state/goose/logs/cli/*/*.log
{"timestamp":"2026-03-19T10:22:44.303008Z","level":"TRACE","fields":{"message":"Received JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"session/list\",\"params\":{}}"},"target":"sacp::jsonrpc::transport_actor","span":{"name":"goose-acp","name":"connection"},"spans":[{"name":"goose-acp","name":"connection"}]}
{"timestamp":"2026-03-19T10:23:31.341284Z","level":"TRACE","fields":{"message":"Received JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"id\":6,\"method\":\"session/list\",\"params\":{}}"},"target":"sacp::jsonrpc::transport_actor","span":{"name":"goose-acp","name":"connection"},"spans":[{"name":"goose-acp","name":"connection"}]}

acpx (set_config_option only client)

acpx uses session/set_config_option exclusively (no session/set_mode or session/set_model fallback).

Add to ~/.acpx/config.json:

{
  "agents": {
    "goose": { "command": "env RUST_LOG=debug,sacp=trace /path/to/goose/target/release/goose acp --with-builtin developer" }
  }
}

Kill goose and clear state:

$ pkill -f goose
$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions
$ rm -rf ~/.acpx/sessions ~/.acpx/queues
$ just release-binary
$ mkdir -p /tmp/test-acpx && cd /tmp/test-acpx

Mode selection (approve mode denies tool calls):

$ npx acpx goose sessions new
[acpx] created session cwd (20260319_1)
[acpx] agent: goose
[acpx] cwd: /private/tmp/test-acpx
20260319_1
$ npx acpx goose set mode approve
config set: mode=approve (2 options)
$ npx acpx --deny-all goose "Use the tree tool to list the current directory"
[acpx] session cwd (20260319_1) · /private/tmp/test-acpx · agent needs reconnect
[client] initialize (running)
[client] session/load (running)
[tool] Tree (running)
[client] session/request_permission (running)
[tool] Tree (failed)
  output:
    The user has declined to run this tool. DO NOT attempt to call this tool again. If there are no alternative methods to proceed, clearly explain the situation and STOP.
--snip--
[done] end_turn
$ grep -h 'Received JSON-RPC.*set_config_option' ~/.local/state/goose/logs/cli/*/*.log
{"timestamp":"2026-03-19T09:36:29.614775Z","level":"TRACE","fields":{"message":"Received JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"session/set_config_option\",\"params\":{\"sessionId\":\"20260319_1\",\"configId\":\"mode\",\"value\":\"approve\"}}"},"target":"sacp::jsonrpc::transport_actor","span":{"name":"goose-acp","name":"connection"},"spans":[{"name":"goose-acp","name":"connection"}]}

Model selection:

$ npx acpx goose sessions new
[acpx] created session cwd (20260319_1)
[acpx] agent: goose
[acpx] cwd: /private/tmp/test-acpx
20260319_1
$ npx acpx goose set model qwen3:4b
config set: model=qwen3:4b (2 options)
$ npx acpx --approve-all goose "say hello"
[acpx] session cwd (20260319_1) · /private/tmp/test-acpx · agent needs reconnect
[client] initialize (running)
[client] session/load (running)
Hello!
[done] end_turn
$ grep -h 'Model switched' ~/.local/state/goose/logs/cli/*/*.log
{"timestamp":"2026-03-19T09:57:22.022422Z","level":"INFO","fields":{"message":"Model switched","session_id":"20260319_1","model_id":"qwen3:4b"},"target":"goose_acp::server","span":{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"},"spans":[{"name":"goose-acp","name":"connection"},{"counterpart":"Client","method":"session/set_config_option","name":"dispatch_dispatch"}]}

Goose CLI

Setup providers:

$ source bin/activate-hermit
$ npm install -g @zed-industries/claude-agent-acp @zed-industries/codex-acp @google/gemini-cli
$ just release-binary

Each test should be run with this cleanup first:

$ pkill -f goose
$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions

session/close on shutdown (claude-acp):

  1. Run goose with claude-acp (which advertises sessionCapabilities.close)
  2. After goose exits, verify session/close was sent
$ GOOSE_PROVIDER=claude-acp GOOSE_MODEL=default RUST_LOG=debug,sacp=trace target/release/goose run -t "say hello"
Hello!
$ grep -h 'Sending JSON-RPC.*session/close' ~/.local/state/goose/logs/cli/*/*.log
{"timestamp":"2026-03-19T09:59:00.145987Z","level":"TRACE","fields":{"message":"Sending JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"method\":\"session/close\",\"params\":{\"sessionId\":\"a187ebd8-6694-4c2e-a9f4-0753874479af\"},\"id\":\"4d9e82fb-ba2d-48b0-b74a-9e4605f7df62\"}"},"target":"sacp::jsonrpc::transport_actor"}
{"timestamp":"2026-03-19T09:59:00.148215Z","level":"TRACE","fields":{"message":"Sending JSON-RPC message","message":"{\"jsonrpc\":\"2.0\",\"method\":\"session/close\",\"params\":{\"sessionId\":\"c75516e2-2f0c-4392-b50a-23bd9f891eda\"},\"id\":\"94484cfa-7e49-4cd2-8f0b-7ce236bac9dc\"}"},"target":"sacp::jsonrpc::transport_actor"}

Goose UI

We need to use Goose UI for mid-session ACP provider verifications.

ACP provider updates:

$ brew uninstall codex-acp claude-agent-acp gemini-cli 2>/dev/null
$ source bin/activate-hermit
$ npm install -g @zed-industries/claude-agent-acp @zed-industries/codex-acp @google/gemini-cli

Each test should be run with this cleanup first:

$ pkill -f goose
$ rm -rf ~/.local/state/goose/logs ~/.local/share/goose/sessions /tmp/test-acp-mode
$ mkdir /tmp/test-acp-mode

set_config_option — mode (claude-acp):

  1. Launch: GOOSE_PROVIDER=claude-acp GOOSE_MODEL=default RUST_LOG=debug,sacp=trace just run-ui
  2. Send "say hello"
  3. Switch mode to "manual" via bottom bar mode selector
  4. Send "Write the text 'hello' to /tmp/test-acp-mode/test.txt": permission dialog should appear
  5. Verify goose forwarded set_config_option to claude-acp:
$ grep -h 'Sending JSON-RPC.*set_config_option' ~/.local/state/goose/logs/server/*/*.log
2026-03-19T11:00:04.138724Z TRACE sacp::jsonrpc::transport_actor: /Users/codefromthecrypt/oss/goose-2/.hermit/rust/git/checkouts/symposium-acp-77a83c5ecec52f5e/1b30972/src/sacp/src/jsonrpc/transport_actor.rs: Sending JSON-RPC message {"jsonrpc":"2.0","method":"session/set_config_option","params":{"sessionId":"a04a8781-199f-4168-a07b-67b95cf96a6a","configId":"mode","value":"default"},"id":"43bacf6b-606e-46c7-8412-eed0030d092b"}  

set_mode fallback — mode (gemini-cli):

  1. Launch: GOOSE_PROVIDER=gemini-acp GOOSE_MODEL=gemini-2.5-flash RUST_LOG=debug,sacp=trace just run-ui
  2. Send "say hello"
  3. Switch mode to "manual" via bottom bar mode selector
  4. Send "Write the text 'hello' to /tmp/test-acp-mode/test.txt": permission dialog should appear
  5. Verify goose sent session/set_mode (not set_config_option):
$ grep -h 'Sending JSON-RPC.*session/set_mode' ~/.local/state/goose/logs/server/*/*.log                                                   
2026-03-19T11:30:51.315497Z TRACE sacp::jsonrpc::transport_actor: /Users/codefromthecrypt/oss/goose-2/.hermit/rust/git/checkouts/symposium-acp-77a83c5ecec52f5e/1b30972/src/sacp/src/jsonrpc/transport_actor.rs: Sending JSON-RPC message {"jsonrpc":"2.0","method":"session/set_mode","params":{"sessionId":"92005e78-dc1a-4842-b1d6-2a5d00bfd40d","modeId":"default"},"id":"5ed9e3d6-0d9b-47b5-b86b-a90713b6e75a"}

Related Issues

Uses ACP #411

@codefromthecrypt codefromthecrypt changed the title feat(acp): add support for session/set_config and update to sacp 11 feat(acp): add session/set_config and stabilize list, delete and close Mar 18, 2026
@codefromthecrypt codefromthecrypt marked this pull request as ready for review March 18, 2026 08:57
chatgpt-codex-connector[bot]

This comment was marked as outdated.

@codefromthecrypt codefromthecrypt force-pushed the adrian/sacp-11-config-option branch from 8908db2 to a769e96 Compare March 18, 2026 09:32
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: a769e96489

ℹ️ 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".

@codefromthecrypt codefromthecrypt marked this pull request as draft March 18, 2026 13:01
@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

draft as while the bot comment was a red herring, in investigating it I found a different bug nearby where we aren't implementing model change, just it appears we are. I am going to fix that and re-open for review when done

@codefromthecrypt codefromthecrypt force-pushed the adrian/sacp-11-config-option branch 5 times, most recently from 3b4f484 to 34e59df Compare March 19, 2026 12:23
@codefromthecrypt codefromthecrypt marked this pull request as ready for review March 19, 2026 12:23
@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

This was quite possibly the most tedious manual Q/A I've ever done in goose. hope it helps!

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: 34e59df074

ℹ️ 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".

@codefromthecrypt codefromthecrypt force-pushed the adrian/sacp-11-config-option branch from 34e59df to 1cd9c46 Compare March 20, 2026 02:00
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: 1cd9c4616d

ℹ️ 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".

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: b5c93809a9

ℹ️ 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".

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

I have spent 3 dauys on this and do not and won't spend unlimited time feeding copilot where if ever more than 50% accurate still wastes similar time and many rabbit holes. the last I did is the last revision

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: ecf5badfe1

ℹ️ 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".

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: 7a77cb4f17

ℹ️ 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".

@michaelneale
Copy link
Copy Markdown
Collaborator

codex is getting a bit much I think... over confident and not always helpful

@DOsinga DOsinga added the needs_human label to set when a robot looks at a PR and can't handle it label Mar 20, 2026
@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

as usual, the last several comments of codex are either garbage or highly speculative. The only one not completely invalid is assuming agents (which it sometimes it conflates with clients), randomly change the model and we might not know about it, and wants even more complicated code to address, that too.

I'll look into it, but yes... this bot has been a cure worse than the disease.

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

codefromthecrypt commented Mar 21, 2026

yes at the moment there is no open source agent that sends unsolicited model changes, even though mode sometimes is (escape planning mode) but that's also different than our permission mode (e.g. smart approve)

this is ready for a human review (I've had enough of codex and don't want to lose more time with it again on this PR)

@codefromthecrypt codefromthecrypt force-pushed the adrian/sacp-11-config-option branch from 7a77cb4 to b397d44 Compare March 22, 2026 02:17
@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

squashed into one commit for easier rebasing

#[tokio::test]
async fn test_gemini_acp_provider() -> Result<()> {
ProviderTestConfig::with_agentic_provider("gemini-acp", GEMINI_ACP_DEFAULT_MODEL, "gemini")
// Don't run tests with ACP_CURRENT_MODEL, as gemini sets "auto-gemini-3" even when the user
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

cc @michaelneale gemini is not the best at this, neither product nor code IMHO

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

this might be an argument to not be fancy with gemini as it sets impossible defaults. very frustrating

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

fyi errors around this come from google's api I've confirmed there is no hard-coding on their acp code. Basically, google is returning from the cloud choices that cannot be used, and there are multiple issues open about this in the gemini repo.

Once they fix this, the "auto-gemini-3" problem of it showing up but being unusable in ways the cloud would already know.. it will just disappear as a problem.

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: b397d44053

ℹ️ 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".

"Gemini CLI (ACP)",
"ACP provider for Google's Gemini CLI. Install: npm install -g @google/gemini-cli",
GEMINI_ACP_DEFAULT_MODEL,
ACP_CURRENT_MODEL,
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 Keep Gemini ACP off the unsupported current default

Fresh evidence in crates/goose/tests/providers.rs:892-895 shows Gemini resolves ACP_CURRENT_MODEL to auto-gemini-3 and fails with Requested entity was not found for accounts without Preview Release Channel access. Publishing ACP_CURRENT_MODEL as the default here means a brand-new gemini-acp configuration can break before the user has selected any model.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

👎we have two bad choices here,

  • 2.5 is too flakey to use and if we start advertising that, it won't work.
  • 3 returns an error if the user hasn't enable the preview channel

If we hard-code 2.5 we will make sure there are bugs and also we need to track drift when gemini's model changes. If we don't, people who use the preview channel can work.

I think the solution is to tell people to enable the preview channel in docs.

@codefromthecrypt codefromthecrypt force-pushed the adrian/sacp-11-config-option branch from b397d44 to 64eaeb5 Compare March 22, 2026 15:26
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: 64eaeb5ca9

ℹ️ 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".

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

codefromthecrypt commented Mar 22, 2026

ok once again done feeding codex, and I am out of time (another 8hrs done)

chatgpt-codex-connector[bot]

This comment was marked as outdated.

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

majority of recent feedback from codex has been about session/delete which is not used anywhere except goose. Hopefully, there is enough coverage for it now, to stop fussing.

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: 7500908e73

ℹ️ 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".

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: a5b19345dd

ℹ️ 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".

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

@copilot please remember session/delete is reserved, but not yet specified. there is literally no one but us using it. Please stop inventing lifecycle requirements for it.

Copy link
Copy Markdown

Copilot AI commented Mar 22, 2026

@codefromthecrypt I've opened a new pull request, #8063, to work on those changes. Once the pull request is ready, I'll request review from you.

@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

@michaelneale I've resquashed this again. I will try my best to ignore anything further copilot dreams up

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: fc3a2cf2f0

ℹ️ 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".

($conn:ty) => {
#[test_case::test_case("not_a_mode", None, sacp::Error::invalid_params().data("Invalid mode: not_a_mode") ; "invalid mode")]
#[test_case::test_case("auto", Some("nonexistent-session-id"), sacp::Error::invalid_params().data("Session not found: nonexistent-session-id") ; "session not found")]
#[test_case::test_case("auto", Some("nonexistent-session-id"), sacp::Error::resource_not_found(Some("nonexistent-session-id".to_string())).data("Session not found: nonexistent-session-id") ; "session not found")]
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

fyi I checked and resource_not_found is the correct error to return, panik is the worst ;)

Copy link
Copy Markdown
Collaborator

@michaelneale michaelneale left a comment

Choose a reason for hiding this comment

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

not really sure how to truly hand vet this but seems to make sense, don't want to be a blocker, good luck

@codefromthecrypt codefromthecrypt added this pull request to the merge queue Mar 22, 2026
Merged via the queue into main with commit 1426c8b Mar 22, 2026
23 of 24 checks passed
@codefromthecrypt codefromthecrypt deleted the adrian/sacp-11-config-option branch March 22, 2026 22:43
michaelneale added a commit that referenced this pull request Mar 22, 2026
* main:
  feat(acp): add session/set_config and stabilize list, delete and close (#7984)
  docs: Correct `gosoe` typo to `goose` (#8062)
  fix: use default provider and model when provider in session no longer exists (#8035)
@codefromthecrypt
Copy link
Copy Markdown
Collaborator Author

thanks @michaelneale if anyone truly does want to re-vet this they could run through the Testing section in the PR I wrote, though I don't recommend it as it is extremely tedious.

wpfleger96 added a commit that referenced this pull request Mar 23, 2026
* origin/main: (62 commits)
  Tweak the release process: no more merge to main (#7994)
  fix: gemini models via databricks (#8042)
  feat(apps): Pass toolInfo to MCP Apps via hostContext (#7506)
  fix: remove configured marker when deleting oauth provider configuration (#7887)
  docs: add vmware-aiops MCP extension documentation (#8055)
  Show setup instructions for ACP providers in settings modal (#8065)
  deps: replace sigstore-verification with sigstore-verify to kill vulns (#8064)
  feat(acp): add session/set_config and stabilize list, delete and close (#7984)
  docs: Correct `gosoe` typo to `goose` (#8062)
  fix: use default provider and model when provider in session no longer exists (#8035)
  feat: add GOOSE_SHELL env var to configure preferred shell (#7909)
  fix(desktop): fullscreen header bar + always-visible close controls (#8033)
  docs: add Claude Code approve mode permission routing documentation (#7949)
  chatgpt_codex: Support reasoning and gpt-5.4 (#7941)
  refactor(anthropic): fix N+1 thinking message storage issue (#7958)
  fix: handle mid-stream error events in OpenAI SSE streaming (#8031)
  Fix apps extension: coerce string arguments from inner LLM responses (#8030)
  feat: ability to expand sidebar to see chats names  (#7816)
  Fix config for GOOSE_MAX_BACKGROUND_TASKS (#7940)
  set MACOSX_DEPLOYMENT_TARGET=12.0 (#7947)
  ...
wpfleger96 added a commit that referenced this pull request Mar 23, 2026
…pstream

* wpfleger/socket-support: (62 commits)
  Tweak the release process: no more merge to main (#7994)
  fix: gemini models via databricks (#8042)
  feat(apps): Pass toolInfo to MCP Apps via hostContext (#7506)
  fix: remove configured marker when deleting oauth provider configuration (#7887)
  docs: add vmware-aiops MCP extension documentation (#8055)
  Show setup instructions for ACP providers in settings modal (#8065)
  deps: replace sigstore-verification with sigstore-verify to kill vulns (#8064)
  feat(acp): add session/set_config and stabilize list, delete and close (#7984)
  docs: Correct `gosoe` typo to `goose` (#8062)
  fix: use default provider and model when provider in session no longer exists (#8035)
  feat: add GOOSE_SHELL env var to configure preferred shell (#7909)
  fix(desktop): fullscreen header bar + always-visible close controls (#8033)
  docs: add Claude Code approve mode permission routing documentation (#7949)
  chatgpt_codex: Support reasoning and gpt-5.4 (#7941)
  refactor(anthropic): fix N+1 thinking message storage issue (#7958)
  fix: handle mid-stream error events in OpenAI SSE streaming (#8031)
  Fix apps extension: coerce string arguments from inner LLM responses (#8030)
  feat: ability to expand sidebar to see chats names  (#7816)
  Fix config for GOOSE_MAX_BACKGROUND_TASKS (#7940)
  set MACOSX_DEPLOYMENT_TARGET=12.0 (#7947)
  ...
lifeizhou-ap added a commit that referenced this pull request Mar 24, 2026
* main: (37 commits)
  fix: handle reasoning content blocks in OpenAI-compat streaming parser (#8078)
  chore(acp): build native packages on latest mac (#8075)
  Display delegate sub agents logs in UI (#7519)
  Update tar version to avoid CVE-2026-33056 (#8073)
  refactor: consolidate duplicated dependencies into workspace (#8041)
  tui: set up for publishing via github actions (#8020)
  feat: feature-gate local inference dependencies (#7976)
  feat: ability to manage sub recipes in desktop ui (#6360)
  Tweak the release process: no more merge to main (#7994)
  fix: gemini models via databricks (#8042)
  feat(apps): Pass toolInfo to MCP Apps via hostContext (#7506)
  fix: remove configured marker when deleting oauth provider configuration (#7887)
  docs: add vmware-aiops MCP extension documentation (#8055)
  Show setup instructions for ACP providers in settings modal (#8065)
  deps: replace sigstore-verification with sigstore-verify to kill vulns (#8064)
  feat(acp): add session/set_config and stabilize list, delete and close (#7984)
  docs: Correct `gosoe` typo to `goose` (#8062)
  fix: use default provider and model when provider in session no longer exists (#8035)
  feat: add GOOSE_SHELL env var to configure preferred shell (#7909)
  fix(desktop): fullscreen header bar + always-visible close controls (#8033)
  ...
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.

4 participants