Skip to content

fix(cli): record skill activation tool calls in chat history#23203

Merged
NTaylorMullen merged 4 commits intomainfrom
ntm/b.493593969
Mar 22, 2026
Merged

fix(cli): record skill activation tool calls in chat history#23203
NTaylorMullen merged 4 commits intomainfrom
ntm/b.493593969

Conversation

@NTaylorMullen
Copy link
Collaborator

Summary

Ensure that skill activation tool calls triggered by slash commands are recorded in the GeminiChat history. This allows the model to recognize activated skills and their instructions in subsequent turns.

Details

  • When a tool is client-initiated (e.g., via a slash command), it bypasses the model's normal execution loop.
  • Previously, these tools were marked as submitted in the UI but were not added to the GeminiChat history.
  • This PR manually adds both the synthetic model turn (the function call) and the user turn (the function response) to the history for activate_skill calls.
  • Other client-initiated tools like save_memory are excluded to avoid redundancy, as they already update the system context.
  • Fixed pre-existing build errors related to a typo in fileSystemService.ts and unused variables in tests.

Related Issues

Fixes https://b.corp.google.com/issues/493593969

How to Validate

  1. Run npm install and npm run build.
  2. Run tests: npx vitest packages/cli/src/ui/hooks/useGeminiStream.test.tsx.
  3. Manually verify:
    • Start the CLI.
    • Run a skill slash command (e.g., /docs-writer).
    • Ask the model "Which skill is currently active?".
    • The model should correctly identify the active skill.

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

- Ensure that /<skill-name> slash commands (which use activate_skill) are recorded in the GeminiChat history.
- Manually add both the synthetic model turn (the function call) and the user turn (the function response) to the history.
- This allows the model to recognize activated skills and their instructions in subsequent turns.
- Narrows the record to only ACTIVATE_SKILL_TOOL_NAME to avoid redundant history entries for other client-initiated tools like save_memory.
- Includes a regression test in useGeminiStream.test.tsx.
- Fixes pre-existing build issues (typo in fileSystemService.ts and unused variables in tests).

Fixes https://b.corp.google.com/issues/493593969
@NTaylorMullen NTaylorMullen requested a review from a team as a code owner March 20, 2026 04:30
@gemini-code-assist
Copy link
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 enhances the Gemini CLI's chat history management by ensuring that client-initiated skill activations are properly recorded. Previously, these actions were not visible to the model, leading to a lack of context. The changes introduce a mechanism to manually add both the skill activation call and its response to the chat history, allowing the model to accurately track and respond to active skills. This improves the model's contextual understanding and overall user experience.

Highlights

  • Chat History Recording for Skill Activations: Implemented logic to record client-initiated activate_skill tool calls and their responses in the GeminiChat history, ensuring the model has full context.
  • Selective History Recording: Ensured that other client-initiated tools, such as save_memory, are explicitly excluded from being added to the chat history to avoid redundancy.
  • Test Coverage: Added comprehensive unit tests to validate the correct recording and exclusion of client-initiated tool calls in the chat history.
  • Build Fix: Fixed a pre-existing build error related to a typo in fileSystemService.ts.
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.

@NTaylorMullen NTaylorMullen enabled auto-merge March 20, 2026 04:31
// Only manually record skill activations in the chat history.
// Other client-initiated tools (like save_memory) update the system
// prompt/context and don't strictly need to be in the history.
if (tool.request.name !== ACTIVATE_SKILL_TOOL_NAME) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Scoped this specific to activate skill for now to not have any adverse consequences

Copy link
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 the issue of client-initiated skill activations not being recorded in the chat history. By manually adding the synthetic model and user turns for activate_skill calls, the model will now have the necessary context for subsequent interactions. The addition of targeted tests to verify this behavior for both activate_skill and other tools like save_memory is a good practice.

I have one suggestion regarding unhandled promises which could improve the robustness of the implementation.

@github-actions
Copy link

github-actions bot commented Mar 20, 2026

Size Change: +638 B (0%)

Total Size: 26.1 MB

Filename Size Change
./bundle/chunk-3P6FG7PO.js 0 B -3.64 MB (removed) 🏆
./bundle/chunk-WZYBHPVE.js 0 B -14.5 MB (removed) 🏆
./bundle/core-4ODAXUVL.js 0 B -42.4 kB (removed) 🏆
./bundle/devtoolsService-Q3PF6WC5.js 0 B -27.7 kB (removed) 🏆
./bundle/interactiveCli-4OMEG5UA.js 0 B -1.61 MB (removed) 🏆
./bundle/oauth2-provider-5P3VINFM.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-7JEI5JW4.js 3.64 MB +3.64 MB (new file) 🆕
./bundle/chunk-KBONKF4C.js 14.5 MB +14.5 MB (new file) 🆕
./bundle/core-ICLU7LMQ.js 42.4 kB +42.4 kB (new file) 🆕
./bundle/devtoolsService-UZN52T2U.js 27.7 kB +27.7 kB (new file) 🆕
./bundle/interactiveCli-F3RQPIBH.js 1.62 MB +1.62 MB (new file) 🆕
./bundle/oauth2-provider-RU5J3T2Y.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

@gemini-cli gemini-cli bot added the status/need-issue Pull requests that need to have an associated issue. label Mar 20, 2026
@NTaylorMullen NTaylorMullen added this pull request to the merge queue Mar 20, 2026
@scidomino scidomino removed this pull request from the merge queue due to a manual request Mar 20, 2026
- Addresses scidomino's review comment to avoid 'any' in the test file.
- Preserves fix for unhandled promises in useGeminiStream.ts from previous commit.

Fixes https://b.corp.google.com/issues/493593969
- Fixes 'TrackedToolCall[] is not assignable to CompletedToolCall[]' by typing stopExecutionToolCalls as TrackedCompletedToolCall[].
- Fixes 'Cannot invoke an object which is possibly null' by adding null checks before calling capturedOnComplete.

Fixes https://b.corp.google.com/issues/493593969
@NTaylorMullen NTaylorMullen enabled auto-merge March 22, 2026 18:54
@NTaylorMullen NTaylorMullen added this pull request to the merge queue Mar 22, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Mar 22, 2026
@NTaylorMullen NTaylorMullen added this pull request to the merge queue Mar 22, 2026
Merged via the queue into main with commit 6055c47 Mar 22, 2026
27 checks passed
@NTaylorMullen NTaylorMullen deleted the ntm/b.493593969 branch March 22, 2026 20:50
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