Skip to content

feat(core): inject memory and JIT context into subagents#23032

Merged
abhipatel12 merged 2 commits into
mainfrom
abhi/subagent-context
Mar 19, 2026
Merged

feat(core): inject memory and JIT context into subagents#23032
abhipatel12 merged 2 commits into
mainfrom
abhi/subagent-context

Conversation

@abhipatel12
Copy link
Copy Markdown
Contributor

Summary

Injects environment memory (GEMINI.md and AGENT.md context) and JIT context support into subagent execution loops to align with main agent context injection architecture.

Details

  • Modified LocalAgentExecutor.buildSystemPrompt to append getSystemInstructionMemory() into the global SI.
  • Modified LocalAgentExecutor.run to inject Tier 2 memory (Project/Extension) into the initial turn's message array part using formatted tags <loaded_context>.
  • Added 3 explicit coverage tests inside local-executor.test.ts to verify prompt strings with memory flags loaded and JIT flag variations.

Related Issues

N/A

How to Validate

  • Run automated tests:
    npm run test -w @google/gemini-cli-core -- src/agents/local-executor.test.ts

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

@abhipatel12 abhipatel12 requested a review from a team as a code owner March 19, 2026 00:58
@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 enhances the LocalAgentExecutor by integrating robust memory and Just-In-Time (JIT) context injection capabilities into subagent execution. This ensures that subagents receive comprehensive contextual information, including global system instructions and environment-specific memory, aligning their behavior with the main agent's context management architecture and improving overall agent intelligence and consistency.

Highlights

  • System Instruction Memory Injection: The LocalAgentExecutor.buildSystemPrompt method was modified to append system instruction memory, retrieved via getSystemInstructionMemory(), to the global system instruction.
  • Environment and JIT Context Injection: The LocalAgentExecutor.run method was updated to inject Tier 2 memory (Project/Extension) into the initial message array, utilizing <loaded_context> tags, and to support Just-In-Time (JIT) context based on configuration.
  • Test Coverage: Three new coverage tests were added to local-executor.test.ts to verify the correct injection of prompt strings with loaded memory flags and variations for the JIT flag.
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: +506 B (0%)

Total Size: 26.2 MB

Filename Size Change
./bundle/chunk-6QY6GZJR.js 0 B -3.63 MB (removed) 🏆
./bundle/chunk-GX74GNOL.js 0 B -13.5 MB (removed) 🏆
./bundle/core-4WBDNXYN.js 0 B -41.4 kB (removed) 🏆
./bundle/devtoolsService-GNZ2654O.js 0 B -27.7 kB (removed) 🏆
./bundle/interactiveCli-VYYNTUMD.js 0 B -1.61 MB (removed) 🏆
./bundle/oauth2-provider-7RU7IQI2.js 0 B -9.19 kB (removed) 🏆
./bundle/chunk-Y34YTKEA.js 13.5 MB +13.5 MB (new file) 🆕
./bundle/chunk-YKDHRHZC.js 3.63 MB +3.63 MB (new file) 🆕
./bundle/core-VPCV7DZK.js 41.4 kB +41.4 kB (new file) 🆕
./bundle/devtoolsService-OMNTRACI.js 27.7 kB +27.7 kB (new file) 🆕
./bundle/interactiveCli-RVDNCZZ7.js 1.61 MB +1.61 MB (new file) 🆕
./bundle/oauth2-provider-ZJ3WUPUQ.js 9.19 kB +9.19 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
./bundle/chunk-34MYV7JD.js 2.45 kB
./bundle/chunk-37ZTTFQF.js 966 kB
./bundle/chunk-5AUYMPVF.js 858 B
./bundle/chunk-664ZODQF.js 124 kB
./bundle/chunk-DAHVX5MI.js 206 kB
./bundle/chunk-G4TMH6EN.js 1.95 MB
./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 697 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-KKSSU3SI.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
./bundle/undici-4X2YZID5.js 360 B

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 aims to align subagent memory injection with the main agent's architecture. However, it introduces a critical prompt injection vulnerability: memory content from workspace files is injected into the prompt wrapped in XML-like tags without proper sanitization, allowing potential tag escaping. Additionally, there's an inconsistency in how environment memory is handled when JIT context is disabled, diverging from the main agent's architecture.

Comment thread packages/core/src/agents/local-executor.ts Outdated
Comment thread packages/core/src/agents/local-executor.ts
@abhipatel12
Copy link
Copy Markdown
Contributor Author

/gemini review I want to maintain the exact way the main agent injects this context for now. Further tag cleaning should be a separate task

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 aligns sub-agent context injection with the main agent's architecture by injecting environment and JIT context. However, it introduces several prompt injection vectors where untrusted data from project files, extensions, and background processes is injected into LLM prompts without sanitization. This allows an attacker to use tag escaping to break out of the context and execute arbitrary instructions, which is particularly dangerous given the agent's access to system tools like the shell. Additionally, there's a potential issue with context duplication when JIT is disabled, which seems to be a pre-existing pattern that this PR propagates.

Comment thread packages/core/src/agents/local-executor.ts
Comment thread packages/core/src/agents/local-executor.ts
@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 added this pull request to the merge queue Mar 19, 2026
Merged via the queue into main with commit 32a123f Mar 19, 2026
27 checks passed
@abhipatel12 abhipatel12 deleted the abhi/subagent-context branch March 19, 2026 17:28
ProthamD pushed a commit to ProthamD/gemini-cli that referenced this pull request Mar 29, 2026
warrenzhu25 pushed a commit to warrenzhu25/gemini-cli that referenced this pull request Apr 9, 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