Skip to content

fix(core): ensure subagent tool updates apply configuration overrides immediately#23161

Merged
abhipatel12 merged 4 commits intomainfrom
abhi/subagent-bug-bash
Mar 23, 2026
Merged

fix(core): ensure subagent tool updates apply configuration overrides immediately#23161
abhipatel12 merged 4 commits intomainfrom
abhi/subagent-bug-bash

Conversation

@abhipatel12
Copy link
Copy Markdown
Contributor

@abhipatel12 abhipatel12 commented Mar 19, 2026

Summary

Fixes two related issues with subagent configuration during a running session:

  1. Subagents were not unregistered when disabled via agents.overrides (like in settings.json or via /agents).
  2. Configuration changes (such as selecting a different model or changing temperature) were not applied to already-enabled subagents without a restart.

When a session reloads settings, the Config.registerSubAgentTools method was correctly skipping the addition of disabled subagents, but failed to explicitly remove them from the ToolRegistry. Furthermore, it was using base, unmerged definitions to construct SubagentTool instances, ignoring any user-specified overrides.

Details

  • Updated registerSubAgentTools in packages/core/src/config/config.ts to use getAllDiscoveredAgentNames() to explicitly unregister any subagents that are now disabled.
  • Updated registerSubAgentTools to use getRegisteredAgents() (which returns merged definitions) when constructing SubagentTool instances, ensuring all configuration overrides are applied immediately.
  • Added unit tests to packages/core/src/config/config.test.ts to simulate a "live reload" scenario and guarantee this behavior.

Related Issues

N/A

How to Validate

  1. Enable a subagent (e.g. codebase_investigator) in settings.json.
  2. Disable it while the session is running (either by editing settings.json or via /agents).
  3. Verify that the agent tool is no longer available in the session.
  4. Re-enable the subagent and change its model in the /agents config.
  5. Verify that the subagent now uses the newly configured model without needing a restart.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@abhipatel12 abhipatel12 requested a review from a team as a code owner March 19, 2026 21:17
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a critical bug where disabling subagents during an active session did not lead to their corresponding tools being unregistered. The changes ensure that when agent configurations are reloaded, any subagents that have been disabled are properly removed from the system's tool registry, preventing stale or unauthorized tools from remaining active. This improves the dynamic configuration management of agents and maintains system integrity.

Highlights

  • Subagent Unregistration Fix: Resolved an issue where subagents were not being unregistered as tools when disabled via agents.overrides during a running session, ensuring that disabled tools are properly removed from the ToolRegistry.
  • Configuration Reload Handling: The registerSubAgentTools method in config.ts was updated to explicitly unregister subagent tools that are flagged as enabled: false when settings are reloaded.
  • New Unit Test: A new unit test was added to config.test.ts to simulate a 'live reload' scenario, verifying that subagents are correctly unregistered when disabled after being previously enabled.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 19, 2026

Size Change: +531 B (0%)

Total Size: 26.1 MB

Filename Size Change
./bundle/chunk-6M33Q7RQ.js 0 B -3.64 MB (removed) 🏆
./bundle/chunk-QK6ZO3UI.js 0 B -14.5 MB (removed) 🏆
./bundle/core-RJJUMZJV.js 0 B -42.4 kB (removed) 🏆
./bundle/devtoolsService-373UXJTJ.js 0 B -27.7 kB (removed) 🏆
./bundle/interactiveCli-FDWMOD27.js 0 B -1.62 MB (removed) 🏆
./bundle/oauth2-provider-ERN76UIN.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-FW5CKURD.js 3.64 MB +3.64 MB (new file) 🆕
./bundle/chunk-OWTOUFBI.js 14.5 MB +14.5 MB (new file) 🆕
./bundle/core-RZVBFK2V.js 42.4 kB +42.4 kB (new file) 🆕
./bundle/devtoolsService-7XTPSDYN.js 27.7 kB +27.7 kB (new file) 🆕
./bundle/interactiveCli-TL67U6FB.js 1.62 MB +1.62 MB (new file) 🆕
./bundle/oauth2-provider-ZOTBZIL3.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
./bundle/chunk-34MYV7JD.js 2.45 kB
./bundle/chunk-5AUYMPVF.js 858 B
./bundle/chunk-5WHECDMU.js 1.95 MB
./bundle/chunk-664ZODQF.js 124 kB
./bundle/chunk-DAHVX5MI.js 206 kB
./bundle/chunk-IUUIT4SU.js 56.5 kB
./bundle/chunk-RJTRUG2J.js 39.8 kB
./bundle/devtools-36NN55EP.js 696 kB
./bundle/dist-T73EYRDX.js 356 B
./bundle/gemini.js 519 kB
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB
./bundle/memoryDiscovery-DL6LDUAP.js 922 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 221 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 227 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 11.5 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B
./bundle/sandbox-macos-permissive-open.sb 890 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB
./bundle/sandbox-macos-strict-open.sb 4.82 kB
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB
./bundle/src-QVCVGIUX.js 47 kB
./bundle/tree-sitter-7U6MW5PS.js 274 kB
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB

compressed-size-action

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request effectively addresses the issue of subagents not being unregistered when disabled during a session. The addition of an explicit unregistration step in registerSubAgentTools ensures that the ToolRegistry accurately reflects the enabled state of agents. The new unit test provides good coverage for this scenario, simulating a live reload and verifying the correct unregistration behavior. The documentation updates are minor clarifications.

@gemini-cli gemini-cli bot added the status/need-issue Pull requests that need to have an associated issue. label Mar 19, 2026
@abhipatel12 abhipatel12 changed the title fix(core): unregister subagents as tools when disabled fix(core): ensure subagent tool updates apply configuration overrides immediately Mar 20, 2026
@abhipatel12
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request effectively addresses the issues of subagent unregistration and immediate application of configuration overrides. However, it introduces a potential Denial of Service (DoS) vulnerability where the new logic for unregistering disabled agents can incorrectly remove built-in tools if agent names collide, leading to a loss of core functionality. Additionally, the new unit test in packages/core/src/config/config.test.ts deviates from repository testing conventions by manipulating environment variables and private class properties, which should be addressed for improved reliability and maintainability.

@abhipatel12
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request correctly addresses two issues related to subagent configuration reloading. The changes ensure that subagents are properly unregistered when disabled and that any configuration updates for enabled subagents are applied immediately without requiring a session restart. This is achieved by adding an explicit unregistration step and re-running the registration logic with the latest merged configurations during a settings reload. A new unit test has been added to validate the unregistration behavior, which is a good addition. The implementation is sound and effectively resolves the described problems.

Copy link
Copy Markdown
Collaborator

@NTaylorMullen NTaylorMullen left a comment

Choose a reason for hiding this comment

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

Approving to unblock, would suggest applying the comments though

@abhipatel12 abhipatel12 force-pushed the abhi/subagent-bug-bash branch from 9b54a6c to ee11965 Compare March 22, 2026 22:43
@abhipatel12 abhipatel12 added this pull request to the merge queue Mar 23, 2026
Merged via the queue into main with commit c7d44e3 Mar 23, 2026
27 checks passed
@abhipatel12 abhipatel12 deleted the abhi/subagent-bug-bash branch March 23, 2026 00:34
shihongzhi added a commit to shihongzhi/gemini-cli that referenced this pull request Mar 24, 2026
ProthamD pushed a commit to ProthamD/gemini-cli that referenced this pull request Mar 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status/need-issue Pull requests that need to have an associated issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants