Skip to content

refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing across four tiers#25716

Merged
SandyTao520 merged 1 commit intomainfrom
st/feat/memory
Apr 22, 2026
Merged

refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing across four tiers#25716
SandyTao520 merged 1 commit intomainfrom
st/feat/memory

Conversation

@SandyTao520
Copy link
Copy Markdown
Contributor

@SandyTao520 SandyTao520 commented Apr 20, 2026

Summary

Replaces the MemoryManagerAgent subagent (used when experimental.memoryManager is on) with prompt-driven memory editing across four explicit tiers — the main agent persists memories itself by editing markdown files directly via edit / write_file. The subagent was slow, spent many turns on simple operations, and offered no visibility into what was being saved.

The new memory taxonomy when the flag is on:

Tier File What goes here Cue phrases
Project Instructions ./GEMINI.md (committed) Team-shared architecture, conventions, repo-wide workflows "our project uses X", "the team always Y", "for this repo, always Z"
Subdirectory Instructions ./<subdir>/GEMINI.md (committed) Scoped instructions for one part of the project (subdir-specific)
Private Project Memory ~/.gemini/tmp/<hash>/memory/MEMORY.md (index) + sibling *.md notes Personal-to-the-user, project-specific notes (private to this workspace, never committed) "on my machine", "my local setup", "do not commit this"
Global Personal Memory ~/.gemini/GEMINI.md Cross-project personal preferences that follow the user into every workspace "I always prefer X", "across all my projects", "my personal coding style is Y"

Each fact lives in exactly one tier — explicit mutual-exclusion is enforced by the prompt and verified by evals.

Details

Why prompt-driven instead of a subagent? The subagent path opaquely fanned out save operations, was slow on simple "remember this" prompts, and forced extra round-trips. The model already has all loaded GEMINI.md and MEMORY.md content in context, so direct editing is both faster and more transparent.

Why a separate MEMORY.md file for the private tier? Personal-to-user, project-specific notes were previously polluting the committed ./GEMINI.md. Moving them to ~/.gemini/tmp/<hash>/memory/MEMORY.md (under Storage.getProjectMemoryDir(), already covered by Config.isPathAllowed) keeps private notes private and the repo file clean. MEMORY.md is a brief index; substantial notes live in sibling *.md files in the same folder so the index stays scannable.

Why a Global Personal tier (and how is it secured)? Without a global tier, any "I always prefer X across all my projects" preference would either be stuffed into a committed ./GEMINI.md (wrong — leaks personal preferences into team-shared files) or duplicated across every workspace (high-friction). The new tier maps these to ~/.gemini/GEMINI.md. Security is enforced by a surgical allowlist in Config.isPathAllowed: an exact-path comparison against Storage.getGlobalGeminiDir() + getCurrentGeminiMdFilename(), so settings.json, keybindings.json, oauth_creds.json, and the rest of ~/.gemini/ remain unreachable. The workspace context itself is NOT broadened to include ~/.gemini/.

Prompt engineering — the key invariants enforced in snippets.ts:

  1. Per-tier routing with concrete cue phrases per tier (above).
  2. Mutual-exclusion across all four tiers: each fact lives in exactly one file. Never mirror or cross-reference.
  3. Scoped MEMORY.md: it is the index for sibling *.md notes in that same folder only, never a pointer to a GEMINI.md topic (project or global).

These three rules eliminated a duplicate-write failure mode I observed in earlier eval runs (model writing the same fact to both ./GEMINI.md and MEMORY.md).

Compatibility: memoryDiscovery.getUserProjectMemoryPaths prefers MEMORY.md but falls back to a legacy GEMINI.md in the same private folder, so projects with existing private memory keep working without a manual migration.

snippets.legacy.ts (the frozen historical snapshot per packages/core/GEMINI.md) receives the structural three-tier rewrite only — no Global Personal tier, no new prompt-engineering verbiage.

Settings & docs: experimental.memoryManager description rewritten to reflect the 4-tier model and the surgical ~/.gemini/GEMINI.md allowlist; schemas/settings.schema.json regenerated; docs/cli/settings.md and docs/reference/configuration.md updated in lockstep.

Related Issues

Related to #22098

How to Validate

# 1. Affected unit tests (prompt wording, isPathAllowed allowlist, project-scope memory append)
npm test -w @google/gemini-cli-core -- src/prompts/snippets-memory-manager.test.ts
npm test -w @google/gemini-cli-core -- src/config/config.test.ts
npm test -w @google/gemini-cli-core -- src/tools/memoryTool.test.ts

Expected: all pass. The snippet test locks in the 4-tier prompt structure (per-tier routing, mutual-exclusion, scoped MEMORY.md, conditional Global Personal bullet). The config test asserts both the positive case (isPathAllowed(~/.gemini/GEMINI.md) === true) and the least-privilege case (settings.json, keybindings.json, oauth_creds.json under ~/.gemini/ remain disallowed).

# 2. Settings schema/docs in-sync checks
npx vitest run scripts/tests/generate-settings-schema.test.ts scripts/tests/generate-settings-doc.test.ts

Expected: all pass.

# 3. Full save_memory eval suite (requires a build + bundle first if not already done)
npm run build && npm run bundle
RUN_EVALS=1 npx vitest run --config evals/vitest.config.ts evals/save_memory.eval.ts

Expected: 15/15 pass. The four memoryManager-mode evals to watch:

  • "Agent saves preference from earlier in conversation history" — verifies a noisy chat history's "I always prefer Vitest in all my projects" preference is correctly routed to the global tier.
  • "Agent routes team-shared project conventions to ./GEMINI.md" — verifies team conventions land in the repo file and are NOT mirrored into the private memory folder.
  • "Agent routes personal-to-user project notes to user-project memory" — verifies personal/local notes land in a sibling *.md with MEMORY.md updated as the index.
  • "Agent routes cross-project personal preferences to ~/.gemini/GEMINI.md" — verifies cross-project preferences land in the global file and are NOT mirrored into committed project files or the private memory folder.
# 4. (Optional) Reliability loop on the four memoryManager-mode evals
for TEST in \
  "Agent saves preference from earlier in conversation history" \
  "Agent routes team-shared project conventions to ./GEMINI.md" \
  "Agent routes personal-to-user project notes to user-project memory" \
  "Agent routes cross-project personal preferences to ~/.gemini/GEMINI.md"; do
  for i in $(seq 1 10); do
    RUN_EVALS=1 npx vitest run --config evals/vitest.config.ts evals/save_memory.eval.ts -t "$TEST"
  done
done

Expected on this branch: 10/10 each (40/40 total).

Edge cases to spot-check manually:

  • Enable experimental.memoryManager, in a fresh workspace ask the agent to "remember our team uses tabs for this repo" — should write to ./GEMINI.md, no touch to ~/.gemini/tmp/.../memory/ or ~/.gemini/GEMINI.md.
  • Same setup, ask "remember my local Postgres runs on port 6543, do not commit this" — should land under ~/.gemini/tmp/<hash>/memory/ (sibling note + MEMORY.md index), no touch to the committed or global files.
  • Same setup, ask "I always prefer Prettier with single quotes across all my projects" — should land in ~/.gemini/GEMINI.md, no touch to committed or private files.
  • An ambiguous statement ("we use eslint") — the model should ask which tier rather than picking silently.

Security spot-check: with the flag on, ask the agent to write to ~/.gemini/settings.json. The isPathAllowed allowlist is surgical — only ~/.gemini/GEMINI.md is reachable; settings.json and other files stay disallowed.

Pre-Merge Checklist

  • Updated relevant documentation and README (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

@SandyTao520 SandyTao520 requested review from a team as code owners April 20, 2026 22:21
@gemini-cli
Copy link
Copy Markdown
Contributor

gemini-cli Bot commented Apr 20, 2026

Hi @SandyTao520, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.

We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines.

Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed.

Thank you for your understanding and for being a part of our community!

@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 refactors the memory management system to improve performance and transparency. By moving away from a subagent to a prompt-driven editing model, the agent can now directly persist memories using standard file operations. This change also establishes a more robust and organized memory taxonomy, ensuring that team-shared project conventions are clearly separated from private, machine-specific notes, while maintaining backward compatibility for existing private memory files.

Highlights

  • Replacement of MemoryManagerAgent: Replaced the dedicated MemoryManagerAgent subagent with a prompt-driven approach where the main agent directly edits markdown files for memory persistence.
  • New Memory Taxonomy: Introduced a clear, non-overlapping memory structure: Project Instructions in ./GEMINI.md, Subdirectory Instructions in ./<subdir>/GEMINI.md, and Private Project Memory in ~/.gemini/tmp/<hash>/memory/MEMORY.md.
  • Improved Prompt Engineering: Enforced strict per-tier routing, mutual-exclusion of facts across tiers, and scoped indexing for private memory to prevent duplicate writes and ensure data privacy.
  • Documentation and Schema Updates: Updated settings documentation, CLI references, and the settings schema to reflect the new memory management behavior.
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 Apr 20, 2026

Size Change: +1.83 kB (+0.01%)

Total Size: 33.7 MB

Filename Size Change
./bundle/chunk-5NFI2M4A.js 0 B -1.97 MB (removed) 🏆
./bundle/chunk-FJFDKEWX.js 0 B -676 kB (removed) 🏆
./bundle/chunk-GBMYQBGV.js 0 B -14.5 MB (removed) 🏆
./bundle/chunk-GPQOP76H.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-NMIOGB2Q.js 0 B -2.72 MB (removed) 🏆
./bundle/chunk-RYBRWZF6.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-ZE77FSHA.js 0 B -3.43 kB (removed) 🏆
./bundle/core-N4Z7O774.js 0 B -46.7 kB (removed) 🏆
./bundle/devtoolsService-PLH3XFFQ.js 0 B -28.4 kB (removed) 🏆
./bundle/gemini-F36NCUBK.js 0 B -577 kB (removed) 🏆
./bundle/interactiveCli-7P5YI24T.js 0 B -1.3 MB (removed) 🏆
./bundle/liteRtServerManager-OA57BF4V.js 0 B -2.08 kB (removed) 🏆
./bundle/oauth2-provider-35QUPNKJ.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-2RHFUIH4.js 1.97 MB +1.97 MB (new file) 🆕
./bundle/chunk-3D5DIKDB.js 14.5 MB +14.5 MB (new file) 🆕
./bundle/chunk-JGE5EHK7.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-KT5RKQAD.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-PDNTMLW2.js 676 kB +676 kB (new file) 🆕
./bundle/chunk-PVBH677U.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-YUXVHDXX.js 2.72 MB +2.72 MB (new file) 🆕
./bundle/core-A6LKZZCJ.js 46.8 kB +46.8 kB (new file) 🆕
./bundle/devtoolsService-ZGMCMDTF.js 28.4 kB +28.4 kB (new file) 🆕
./bundle/gemini-GV5YKYAJ.js 576 kB +576 kB (new file) 🆕
./bundle/interactiveCli-ORBBY5EV.js 1.3 MB +1.3 MB (new file) 🆕
./bundle/liteRtServerManager-P4EHB7RV.js 2.08 kB +2.08 kB (new file) 🆕
./bundle/oauth2-provider-A2COCAGN.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-PLEB42GT.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 4.97 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-FLZAHR6G.js 0 B -980 B (removed) 🏆
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-SLZSMC7D.js 0 B -622 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-NQ5IGEM4.js 932 B +932 B (new file) 🆕
./bundle/memoryDiscovery-HWEYBJE7.js 980 B +980 B (new file) 🆕
./bundle/start-DBVOSFXZ.js 622 B +622 B (new file) 🆕

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 refactors the experimental memoryManager feature, transitioning from a subagent-based approach to a prompt-driven system where the main agent directly manages context via markdown files like GEMINI.md and MEMORY.md. The changes span documentation, configuration schemas, and core prompt logic to support this direct editing flow. Security feedback highlighted critical prompt injection vulnerabilities in both the prompt construction and the fact sanitization logic, where the lack of XML tag escaping could allow malicious content to hijack the agent's behavior.

Comment thread packages/core/src/prompts/snippets.ts
Comment thread packages/core/src/tools/memoryTool.ts
@gemini-cli gemini-cli Bot added the area/unknown Triage automation assigns this label to issues that it is unable to classify label Apr 20, 2026
@SandyTao520 SandyTao520 changed the title refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing across four tiers Apr 20, 2026
@gemini-cli gemini-cli Bot added area/agent Issues related to Core Agent, Tools, Memory, Sub-Agents, Hooks, Agent Quality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item. labels Apr 20, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 20, 2026

64 tests passed successfully on gemini-3-flash-preview.

🧠 Model Steering Guidance

This PR modifies files that affect the model's behavior (prompts, tools, or instructions).

  • 🚀 Maintainer Reminder: Please ensure that these changes do not regress results on benchmark evals before merging.

This is an automated guidance message triggered by steering logic signatures.

Copy link
Copy Markdown
Contributor

@Abhijit-2592 Abhijit-2592 left a comment

Choose a reason for hiding this comment

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

Approved. The refactor to a prompt-driven, 4-tier memory model is a significant improvement over the subagent approach. It offers better transparency, lower latency, and clearer separation of concerns.

Key strengths:

  • Surgical allowlisting of ~/.gemini/GEMINI.md in Config.isPathAllowed maintains least-privilege security.
  • sanitizeFact provides critical defense-in-depth against prompt injection.
  • The routing rules and cue phrases in the prompt are well-engineered for reliability.

Code quality and test coverage are excellent.

…y editing across four tiers

The MemoryManagerAgent was a save_memory subagent that was slow, spent many turns on simple operations, and offered little visibility into how memories were being updated. Reshape experimental.memoryManager to remove the subagent and let the main agent persist memories itself by editing markdown files directly across four explicit tiers — each fact lives in exactly one tier:

- **Project Instructions** (`./GEMINI.md`): team-shared architecture/conventions/workflows, committed to the repo.
- **Subdirectory Instructions** (e.g. `./src/GEMINI.md`): scoped to one part of the project, committed.
- **Private Project Memory** (`~/.gemini/tmp/<hash>/memory/MEMORY.md` + sibling `*.md` notes): personal-to-the-user, project-specific notes that never get committed.
- **Global Personal Memory** (`~/.gemini/GEMINI.md`): cross-project personal preferences that follow the user into every workspace.

Core changes:

- Delete MemoryManagerAgent and its registration. The agent and its test file are removed entirely. The built-in MemoryTool remains suppressed by the flag (unchanged), so save_memory is still gone when the flag is on — the agent now handles memory persistence directly via edit/write_file.

- Rewrite the operational system prompt branch (snippets.ts and snippets.legacy.ts) to teach the main agent the four-tier model. snippets.ts adds explicit per-tier routing rules with concrete cue phrases, a one-tier-per-fact mutual-exclusion rule that explicitly covers all four tiers, and a tightly scoped MEMORY.md role (index for sibling *.md notes only, never a pointer to any GEMINI.md). snippets.legacy.ts (a frozen historical snapshot per packages/core/GEMINI.md) gets the structural three-tier rewrite only — no new prompt-engineering verbiage, no Global Personal tier.

- Surface both the Private Project Memory file (~/.gemini/tmp/<hash>/memory/MEMORY.md) and the Global Personal Memory file (~/.gemini/GEMINI.md) to the prompt only when memoryManagerEnabled is true. The Private bullet only renders when userProjectMemoryPath is provided; the Global bullet + cross-project routing rule only renders when globalMemoryPath is provided. Legacy callers that don't pass either path get a sensible 2-tier prompt.

- Extend Config.isPathAllowed with a surgical allowlist for ~/.gemini/GEMINI.md so the agent can edit the global personal memory file via edit/write_file. Critically, this is **least-privilege**: an exact-path comparison against `Storage.getGlobalGeminiDir() + getCurrentGeminiMdFilename()`, so settings.json, keybindings.json, oauth_creds.json, and the rest of ~/.gemini/ remain unreachable. The workspace context itself is still NOT broadened to include ~/.gemini/.

- Introduce PROJECT_MEMORY_INDEX_FILENAME = 'MEMORY.md' and rename getProjectMemoryFilePath -> getProjectMemoryIndexFilePath. Split memoryTool's append logic into computeGlobalMemoryContent (preserves the legacy '## Gemini Added Memories' header behavior) and computeProjectMemoryContent (plain bullet append, no header) routed by the scope parameter. Extract sanitizeFact for reuse.

- memoryDiscovery.getUserProjectMemoryPaths prefers MEMORY.md, falling back to a legacy GEMINI.md in the same folder so projects that have not been migrated still load their existing private memory.

- Update settingsSchema.ts (rename label to 'Memory Manager', rewrite description to reflect the 4-tier model and the surgical ~/.gemini/GEMINI.md allowlist) and regenerate schemas/settings.schema.json plus the auto-generated settings docs (docs/cli/settings.md, docs/reference/configuration.md).

Tests and evals:

- snippets-memory-manager.test.ts: assert the new memoryManager-mode prompt structure, including the conditional Private Project Memory bullet, the conditional Global Personal Memory bullet + cross-project routing rule, the per-tier routing block, the four-tier mutual-exclusion rule, and the scoped MEMORY.md role.

- config.test.ts: keep the existing negative test that workspace context does NOT broaden to ~/.gemini/, and add two new tests around the surgical isPathAllowed allowlist — a positive case (~/.gemini/GEMINI.md is allowed) and a least-privilege case (settings.json, keybindings.json, oauth_creds.json under ~/.gemini/ remain disallowed).

- memoryTool.test.ts: cover the new project-scope content path (no header, plain bullet append).

- save_memory.eval.ts:
  * Update the proactive long-session eval so it now asserts the "I always prefer Vitest ... in all my projects" preference is routed to the global personal memory file (its correct destination under the 4-tier model), and is NOT mirrored into a committed project GEMINI.md or the private project memory folder.
  * Add an eval verifying that team-shared project conventions ("our project uses X", "the team always Y") route to the project-root ./GEMINI.md and are NOT mirrored into the private memory folder (the mutual-exclusion guarantee).
  * Add an eval verifying that personal-to-user project notes ("on my machine", "do not commit this") route to the private project memory folder, with substantial detail captured in a sibling *.md note and MEMORY.md updated as the index.
  * Add an eval verifying that cross-project personal preferences ("across all my projects", "I always prefer X", "in every workspace") route to the global ~/.gemini/GEMINI.md and are NOT mirrored into a committed project GEMINI.md or the private memory folder.

Validation: lint, typecheck, the affected unit tests in @google/gemini-cli-core (snippets-memory-manager.test.ts, memoryTool.test.ts, config.test.ts, promptProvider.test.ts — 267/267 pass), the schema/docs in-sync check tests, and the full save_memory.eval.ts suite (15/15 pass) all pass. 10x reliability loops on all four memoryManager-mode evals are 10/10 against the final prompt (40/40 total).

Security hardening (PR review feedback):

- sanitizeFact (memoryTool.ts) now also collapses `<` and `>` to spaces. Without this, a malicious fact (or a malicious repo's MEMORY.md content surfaced through save_memory) could carry an XML closing tag like `</user_project_memory>` past the existing newline/markdown sanitization, get persisted to disk, and on every future session that loads the memory file the renderUserMemory injection would let the payload break out of the surrounding context block. Symmetric with the existing newline collapse, minimal content loss for typical durable preferences. memoryTool.test.ts adds an explicit XML-tag-breakout test case asserting the payload is neutralised end-to-end (write_file content + success message).

CI fix:

- path-validation.test.ts: the existing test "should allow access to ~/.gemini if it is added to the workspace" used `~/.gemini/GEMINI.md` as its example file to demonstrate the workspace-addition semantic, but that file is now reachable unconditionally via the new surgical isPathAllowed allowlist. Switch the example to `~/.gemini/settings.json` (NOT on the allowlist), preserving the original "denied -> add to workspace -> allowed" flow the test was written to verify, and double-asserting the least-privilege guarantee that the allowlist does not leak access to other files under ~/.gemini/. Rename the test to reflect the more general intent.

Rename:

- The flag was previously named `experimental.memoryManager` because it originally toggled the MemoryManagerAgent subagent. Now that the subagent is gone and the flag controls the prompt-driven 4-tier memory model + the surgical ~/.gemini/GEMINI.md isPathAllowed allowlist, the old name is misleading. Rename to `experimental.memoryV2` (the V2 bump is one-time and signals "the new memory system" without coupling to a specific implementation detail). Hard rename — no deprecation alias since this is `experimental.*` (no stability guarantee). Touches: settings key (`experimental.memoryV2`), CLI label (`Memory v2`), Config field (`experimentalMemoryV2`), Config method (`isMemoryV2Enabled`), prompt option (`memoryV2Enabled`), describe blocks, and the test file rename `snippets-memory-manager.test.ts` -> `snippets-memory-v2.test.ts`. Settings schema + auto-generated docs regenerated.

Default change:

- experimental.jitContext now defaults to true. JIT context loading has been opt-in for long enough to validate it; flip it on by default and update the description to note the flag is retained for opt-out. Three coordinated edits to make the new default consistent across all entry points: (1) settingsSchema.ts default flipped to true (drives docs + UI defaults), (2) cli/config.ts settings read site applies `?? true` to the local `experimentalJitContext` variable, then reuses that single variable when populating ConfigParameters (eliminating a second lookup that would otherwise need its own duplicate fallback), (3) core/config.ts constructor default flipped from `?? false` to `?? true` so non-cli consumers (programmatic users, embeddings, tests that don't pass the flag explicitly) inherit the same default. Existing tests that exercise the non-JIT branch already pass `experimentalJitContext: false` explicitly so they remain unaffected. Auto-generated docs/reference/configuration.md regenerated.
@github-actions
Copy link
Copy Markdown

🛑 Action Required: Evaluation Approval

Steering changes have been detected in this PR. To prevent regressions, a maintainer must approve the evaluation run before this PR can be merged.

Maintainers:

  1. Go to the Workflow Run Summary.
  2. Click the yellow 'Review deployments' button.
  3. Select the 'eval-gate' environment and click 'Approve'.

Once approved, the evaluation results will be posted here automatically.

Merged via the queue into main with commit 6edfba4 Apr 22, 2026
27 of 29 checks passed
@SandyTao520 SandyTao520 deleted the st/feat/memory branch April 22, 2026 01:31
Comment thread evals/save_memory.eval.ts
// notes). The chat history mixes this durable preference with
// transient debugging chatter, so the eval also verifies the agent
// picks out the persistent fact among the noise.
await rig.waitForToolCall('write_file').catch(() => {});
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is waiting for only write_file accurate? we could trigger replace no? we can unnecessarily timeout this way.

So something like the below might be better:

await Promise.race([
   2   rig.waitForToolCall('write_file'),
   3   rig.waitForToolCall('replace')
   4 ]).catch(() => {});

- **Skill Guidance:** Once a skill is activated via ${formatToolName(ACTIVATE_SKILL_TOOL_NAME)}, its instructions and resources are returned wrapped in \`<activated_skill>\` tags. You MUST treat the content within \`<instructions>\` as expert procedural guidance, prioritizing these specialized rules and workflows over your general defaults for the duration of the task. You may utilize any listed \`<available_resources>\` as needed. Follow this expert guidance strictly while continuing to uphold your core safety and security standards.`;
}

function mandateConflictResolution(hasHierarchicalMemory: boolean): string {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

should this have been updated to resolve conflicts between a user's private MEMORY.md and a team-shared GEMINI.md?

ik-gemini-bot added a commit to spigell/gemini-cli that referenced this pull request May 3, 2026
* refactor(plan): simplify policy priorities and consolidate read-only rules (google-gemini#24849)

* feat(test-utils): add memory usage integration test harness (google-gemini#24876)

* feat(memory): add /memory inbox command for reviewing extracted skills (google-gemini#24544)

* chore(release): bump version to 0.39.0-nightly.20260408.e77b22e63 (google-gemini#24939)

* fix(core): ensure robust sandbox cleanup in all process execution paths (google-gemini#24763)

Co-authored-by: Spencer <spencertang@google.com>

* chore: update ink version to 6.6.8 (google-gemini#24934)

* Changelog for v0.38.0-preview.0 (google-gemini#24938)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>

* chore: ignore conductor directory (google-gemini#22128)

Co-authored-by: Coco Sheng <cocosheng@google.com>

* Changelog for v0.37.0 (google-gemini#24940)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>

* feat(plan): require user confirmation for activate_skill in Plan Mode (google-gemini#24946)

* feat(test-utils): add CPU performance integration test harness (google-gemini#24951)

* fix(core): resolve windows symlink bypass and stabilize sandbox integration tests (google-gemini#24834)

* test(sdk): add unit tests for GeminiCliSession (google-gemini#21897)

* fix(cli): restore file path display in edit and write tool confirmations (google-gemini#24974)

* fix(cli-ui): enable Ctrl+Backspace for word deletion in Windows Terminal (google-gemini#21447)

* fix(core): dynamic session ID injection to resolve resume bugs (google-gemini#24972)

* Update ink version to 6.6.9 (google-gemini#24980)

* feat(core): refine shell tool description display logic (google-gemini#24903)

* Generalize evals infra to support more types of evals, organization and queuing of named suites (google-gemini#24941)

* fix(cli): optimize startup with lightweight parent process (google-gemini#24667)

* refactor(sandbox): use centralized sandbox paths in macOS Seatbelt implementation (google-gemini#24984)

* feat(cli): refine tool output formatting for compact mode (google-gemini#24677)

* fix(sdk): skip broken sendStream tests to unblock nightly (google-gemini#25000)

* refactor(core): use centralized path resolution for Linux sandbox (google-gemini#24985)

* Support ctrl+shift+g (google-gemini#25035)

* feat(core): refactor subagent tool to unified invoke_subagent tool (google-gemini#24489)

* fix(core): add explicit git identity env vars to prevent sandbox checkpointing error (google-gemini#19775)

Co-authored-by: David Pierce <davidapierce@google.com>

* fix: respect hideContextPercentage when FooterConfigDialog is closed without changes (google-gemini#24773)

Co-authored-by: Coco Sheng <cocosheng@google.com>

* fix(cli): suppress unhandled AbortError logs during request cancellation (google-gemini#22621)

* Automated documentation audit (google-gemini#24567)

* feat(cli): implement useAgentStream hook (google-gemini#24292)

Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>

* refactor(core): remove legacy subagent wrapping tools (google-gemini#25053)

* refactor(plan) Clean default plan toml (google-gemini#25037)

* fix(core): honor retryDelay in RetryInfo for 503 errors (google-gemini#25057)

* fix(core): remediate subagent memory leaks using AbortSignal in MessageBus (google-gemini#25048)

* feat(cli): wire up useAgentStream in AppContainer (google-gemini#24297)

Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>

* feat(core): migrate chat recording to JSONL streaming (google-gemini#23749)

* fix(core): clear 5-minute timeouts in oauth flow to prevent memory leaks (google-gemini#24968)

* fix(sandbox): centralize async git worktree resolution and enforce read-only security (google-gemini#25040)

* feat(test): add high-volume shell test and refine perf harness (google-gemini#24983)

* fix(core): silently handle EPERM when listing dir structure (google-gemini#25066)

* Changelog for v0.37.1 (google-gemini#25055)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>

* fix: decode Uint8Array and multi-byte UTF-8 in API error messages (google-gemini#23341)

Co-authored-by: Coco Sheng <cocosheng@google.com>

* Automated documentation audit results (google-gemini#22755)

* debugging(ui): add optional debugRainbow setting (google-gemini#25088)

* fix: resolve lifecycle memory leaks by cleaning up listeners and root closures (google-gemini#25049)

* docs(cli): updates f12 description to be more precise (google-gemini#15816)

* fix(cli): mark /settings as unsafe to run concurrently (google-gemini#25061)

* fix(core): remove buffer slice to prevent OOM on large output streams (google-gemini#25094)

* feat(core): persist subagent agentId in tool call records (google-gemini#25092)

* chore(core): increase codebase investigator turn limits to 50 (google-gemini#25125)

* refactor(core): consolidate execute() arguments into ExecuteOptions (google-gemini#25101)

* feat(core): add Strategic Re-evaluation guidance to system prompt (google-gemini#25062)

* fix(core): preserve shell execution config fields on update (google-gemini#25113)

* docs: add vi shortcuts and clarify MCP sandbox setup (google-gemini#21679)

Co-authored-by: Jenna Inouye <jinouye@google.com>

* fix(cli): pass session id to interactive shell executions (google-gemini#25114)

* fix(cli): resolve text sanitization data loss due to C1 control characters (google-gemini#22624)

* feat(core): add large memory regression test (google-gemini#25059)

* fix(core): resolve PTY exhaustion and orphan MCP subprocess leaks (google-gemini#25079)

* chore: switch from keytar to @github/keytar (google-gemini#25143)

* chore(deps): update vulnerable dependencies via npm audit fix (google-gemini#25140)

* perf(sandbox): optimize Windows sandbox initialization via native ACL application (google-gemini#25077)

* fix: improve audio MIME normalization and validation in file reads (google-gemini#21636)

Co-authored-by: Coco Sheng <cocosheng@google.com>

* docs: Update docs-audit to include changes in PR body (google-gemini#25153)

* docs: correct documentation for enforced authentication type (google-gemini#25142)

* fix(cli): exclude update_topic from confirmation queue count (google-gemini#24945)

* Memory fix for trace's streamWrapper. (google-gemini#25089)

* fix(core): fix quota footer for non-auto models and improve display (google-gemini#25121)

* docs(contributing): clarify self-assignment policy for issues (google-gemini#23087)

* feat(core): add skill patching support with /memory inbox integration (google-gemini#25148)

* Stop suppressing thoughts and text in model response (google-gemini#25073)

* fix(release): prefix git hash in nightly versions to prevent semver normalization (google-gemini#25304)

* feat(cli): extract QuotaContext and resolve infinite render loop (google-gemini#24959)

* refactor(core): extract and centralize sandbox path utilities (google-gemini#25305)

Co-authored-by: David Pierce <davidapierce@google.com>

* feat(ui): added enhancements to scroll momentum (google-gemini#24447)

* fix(core): replace custom binary detection with isbinaryfile to correctly handle UTF-8 (U+FFFD) (google-gemini#25297)

* feat(agent): implement tool-controlled display protocol (Steps 2-3) (google-gemini#25134)

* Stop showing scrollbar unless we are in terminalBuffer mode (google-gemini#25320)

* fix(core): expose GEMINI_PLANS_DIR to hook environment (google-gemini#25296)

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: support auth block in MCP servers config in agents (google-gemini#24770)

* feat(core): implement silent fallback for Plan Mode model routing (google-gemini#25317)

* fix: correct redirect count increment in fetchJson (google-gemini#24896)

Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>

* fix(core): prevent secondary crash in ModelRouterService finally block (google-gemini#25333)

* feat(core): introduce decoupled ContextManager and Sidecar architecture (google-gemini#24752)

* docs(core): update generalist agent documentation (google-gemini#25325)

* chore(mcp): check MCP error code over brittle string match (google-gemini#25381)

* test(core): improve sandbox integration test coverage and fix OS-specific failures (google-gemini#25307)

Co-authored-by: David Pierce <davidapierce@google.com>

* feat(plan): update plan mode prompt to allow showing plan content (google-gemini#25058)

* fix(core): use debug level for keychain fallback logging (google-gemini#25398)

* feat(test): add a performance test in asian language (google-gemini#25392)

* feat(cli): enable mouse clicking for cursor positioning in AskUser multi-line answers (google-gemini#24630)

* fix(core): detect kmscon terminal as supporting true color (google-gemini#25282)

Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* ci: add agent session drift check workflow (google-gemini#25389)

* use macos-latest-large runner where applicable. (google-gemini#25413)

* Changelog for v0.37.2 (google-gemini#25336)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>

* chore(release): bump version to 0.40.0-nightly.20260414.g5b1f7375a (google-gemini#25420)

* Fix(core): retry additional OpenSSL 3.x SSL errors during streaming (google-gemini#16075) (google-gemini#25187)

* fix(core): prevent YOLO mode from being downgraded (google-gemini#25341)

* feat: bundle ripgrep binaries into SEA for offline support (google-gemini#25342)

* Changelog for v0.39.0-preview.0 (google-gemini#25417)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>

* feat(test): add large conversation scenario for performance test (google-gemini#25331)

* improve(core): require recurrence evidence before extracting skills (google-gemini#25147)

* test(evals): add subagent delegation evaluation tests (google-gemini#24619)

* feat: add github colorblind themes (google-gemini#15504)

Co-authored-by: Coco Sheng <cocosheng@google.com>

* fix(core): honor GOOGLE_GEMINI_BASE_URL and GOOGLE_VERTEX_BASE_URL (google-gemini#25357)

* fix(cli): clean up slash command IDE listeners (google-gemini#24397)

Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>

* Changelog for v0.38.0 (google-gemini#25470)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>

* fix(evals): update eval tests for invoke_agent telemetry and project-scoped memory (google-gemini#25502)

* Changelog for v0.38.1 (google-gemini#25476)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>

* feat(core): integrate skill-creator into skill extraction agent (google-gemini#25421)

* feat(cli): provide default post-submit prompt for skill command (google-gemini#25327)

* feat(core): add tools to list and read MCP resources (google-gemini#25395)

* fix(evals): add typecheck coverage for evals, integration-tests, and memory-tests (google-gemini#25480)

* Use OSC 777 for terminal notifications (google-gemini#25300)

* fix(extensions): fix bundling for examples (google-gemini#25542)

* fix(cli): reset plan session state on /clear (google-gemini#25515)

* feat(core): add .mdx support to get-internal-docs tool (google-gemini#25090)

* docs(policy): mention that workspace policies are broken (google-gemini#24367)

Co-authored-by: Nicolas Ouellet-Payeur <nicolaso@chromium.org>

* fix(core): allow explicit write permissions to override governance file protections in sandboxes (google-gemini#25338)

* feat(sandbox): resolve custom seatbelt profiles from $HOME/.gemini first (google-gemini#25427)

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

* Reduce blank lines. (google-gemini#25563)

* fix(ui): revert preview theme on dialog unmount (google-gemini#22542)

Co-authored-by: Jack Wotherspoon <jackwoth@google.com>

* fix(core): fix ShellExecutionConfig spread and add ProjectRegistry save backoff (google-gemini#25382)

* feat(core): Disable topic updates for subagents (google-gemini#25567)

* feat(core): enable topic update narration by default and promote to general (google-gemini#25586)

Co-authored-by: JAYADITYA <96861162+JayadityaGit@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>

* docs: migrate installation and authentication to mdx with tabbed layouts (google-gemini#25155)

* feat(config): split memoryManager flag into autoMemory (google-gemini#25601)

* fix(core): allow Cloud Shell users to use PRO_MODEL_NO_ACCESS experiment (google-gemini#25702)

* fix(cli): round slow render latency to avoid opentelemetry float warning (google-gemini#25709)

* docs(tracker): introduce experimental task tracker feature (google-gemini#24556)

* docs(cli): fix inconsistent system.md casing in system prompt docs (google-gemini#25414)

Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>

* feat(cli): add streamlined `gemini gemma` local model setup (google-gemini#25498)

Co-authored-by: Abhijit Balaji <abhijitbalaji@google.com>
Co-authored-by: Samee Zahid <sameez@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Changelog for v0.38.2 (google-gemini#25593)

Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>

* Fix: Disallow overriding IDE stdio via workspace .env (RCE) (google-gemini#25022)

Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>

* feat(test): refactor the memory usage test to use metrics from CLI process instead of test runner (google-gemini#25708)

* feat(vertex): add settings for Vertex AI request routing (google-gemini#25513)

* Fix/allow for session persistence (google-gemini#25176)

* fix(core): resolve nested plan directory duplication and relative path policies (google-gemini#25138)

* feat: detect new files in @ recommendations with watcher based updates (google-gemini#25256)

* Allow dots on GEMINI_API_KEY (google-gemini#25497)

* feat(telemetry): add flag for enabling traces specifically (google-gemini#25343)

* fix(cli): use newline in shell command wrapping to avoid breaking heredocs (google-gemini#25537)

* fix(cli): ensure theme dialog labels are rendered for all themes (google-gemini#24599)

Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>

* fix(core): disable detached mode in Bun to prevent immediate SIGHUP of child processes (google-gemini#22620)

* feat: add /new as alias for /clear and refine command description (google-gemini#17865)

* fix(cli): start auto memory in ACP sessions (google-gemini#25626)

* fix(core): remove duplicate initialize call on agents refreshed (google-gemini#25670)

* test(e2e): default integration tests to Flash Preview (google-gemini#25753)

* refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing across four tiers (google-gemini#25716)

* fix(cli): fix "/clear (new)" command (google-gemini#25801)

* fix(core): use dynamic CLI version for IDE client instead of hardcoded '1.0.0' (google-gemini#24414)

Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>

* fix(core): handle line endings in ignore file parsing (google-gemini#23895)

Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>

* Fix/command injection shell (google-gemini#24170)

Co-authored-by: David Pierce <davidapierce@google.com>

* fix(ui): removed background color for input (google-gemini#25339)

* fix(devtools): reduce memory usage and defer connection (google-gemini#24496)

* fix(core): support jsonl session logs in memory and summary services (google-gemini#25816)

* fix(release): exclude ripgrep binaries from npm tarballs (google-gemini#25841)

* chore(release): v0.40.0-preview.2

* feat(cli): secure .env loading and enforce workspace trust in headless mode (google-gemini#25814)

Co-authored-by: galz10 <galzahavi@google.com>
Co-authored-by: davidapierce <davidapierce@google.com>

* feat(core): enhance shell command validation and add core tools allowlist (google-gemini#25720)

Co-authored-by: David Pierce <davidapierce@google.com>
Co-authored-by: Keith Schaab <keithsc@google.com>
Co-authored-by: Keith Schaab <keith.schaab@gmail.com>
Co-authored-by: Emily Hedlund <ehedlund@google.com>

* update FatalUntrustedWorkspaceError message to include doc link (google-gemini#25874)

* chore(release): v0.40.0-preview.3

* fix(patch): cherry-pick 048bf6e to release/v0.40.0-preview.3-pr-25941 to patch version v0.40.0-preview.3 and create version 0.40.0-preview.4 (google-gemini#25942)

Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>

* chore(release): v0.40.0-preview.4

* fix(patch): cherry-pick 54b7586 to release/v0.40.0-preview.4-pr-26066 [CONFLICTS] (google-gemini#26124)

Co-authored-by: David Pierce <davidapierce@google.com>

* chore(release): v0.40.0-preview.5

* chore(release): v0.40.0

* Remove temporary commit message file from tracking

This cleans the repository after the upstream merge and ignores the helper file so future local commits do not pollute branch diffs.

* Add optional image build trigger to fork resync skill

Document the final workflow trigger step for cases where a new container image is required, including the exact workflow name and inputs, and warn against passing the branch name as the version.

* Clarify fork bump behavior in resync skill

Document that the fork should be bumped from upstream without applying fork patches back onto the upstream release branch, keeping fork-specific changes isolated to the fork resync workflow.

---------

Co-authored-by: ruomeng <ruomeng@google.com>
Co-authored-by: Sri Pasumarthi <111310667+sripasg@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Emily Hedlund <ehedlund@google.com>
Co-authored-by: Spencer <spencertang@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
Co-authored-by: JAYADITYA <96861162+JayadityaGit@users.noreply.github.com>
Co-authored-by: Coco Sheng <cocosheng@google.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: Adamya Singh <adamyasingh54@gmail.com>
Co-authored-by: Jarrod Whelan <150866123+jwhelangoog@users.noreply.github.com>
Co-authored-by: dogukanozen <dogukannozen@hotmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: Christian Gunderman <gundermanc@google.com>
Co-authored-by: Sehoon Shon <sshon@google.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: MD. MOHIBUR RAHMAN <35300157+mrpmohiburrahman@users.noreply.github.com>
Co-authored-by: David Pierce <davidapierce@google.com>
Co-authored-by: chernistry <73943355+chernistry@users.noreply.github.com>
Co-authored-by: euxaristia <25621994+euxaristia@users.noreply.github.com>
Co-authored-by: Michael Bleigh <mbleigh@mbleigh.com>
Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
Co-authored-by: Yuna Seol <yunaseol@gmail.com>
Co-authored-by: June <kimjune01@gmail.com>
Co-authored-by: Aishanee Shah <aishaneeshah@google.com>
Co-authored-by: Jason Matthew Suhari <jasonmatthewsuhari@gmail.com>
Co-authored-by: Christopher Thomas <cobekgn@gmail.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
Co-authored-by: M Junaid Shaukat <154750865+junaiddshaukat@users.noreply.github.com>
Co-authored-by: Abhijit Balaji <abhijitbalaji@google.com>
Co-authored-by: Mark Griffith <anthraxmilkshake@hotmail.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: Jesse Rosenstock <jesse.rosenstock@gmail.com>
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
Co-authored-by: Anjaligarhwal <anjaligarhwal1610@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Tanmay Vartak <9002434+TanmayVartak@users.noreply.github.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
Co-authored-by: Kevin Zhao <kevin8093@126.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Clay <claygeo6@gmail.com>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: Rob Clevenger <rcleveng@users.noreply.github.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: anj-s <32556631+anj-s@users.noreply.github.com>
Co-authored-by: Z1xus <40185941+Z1xus@users.noreply.github.com>
Co-authored-by: jackyliuxx <jackyliuxx@gmail.com>
Co-authored-by: Nicolas Ouellet-Payeur <nicolaso@google.com>
Co-authored-by: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Mahima Shanware <mahima.shanware@gmail.com>
Co-authored-by: Timo <36011879+Bodlux@users.noreply.github.com>
Co-authored-by: Samee Zahid <sameescouser24@gmail.com>
Co-authored-by: Samee Zahid <sameez@google.com>
Co-authored-by: Mundur <150439604+M0nd0R@users.noreply.github.com>
Co-authored-by: Gordon Hui <125633533+gordonhwc@users.noreply.github.com>
Co-authored-by: Muhammad Ahsan Farooq <ahsanfarooq210@gmail.com>
Co-authored-by: PRAS Samin <103464543+prassamin@users.noreply.github.com>
Co-authored-by: Danyel Cabello <danyel.nerv@gmail.com>
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
Co-authored-by: mini2s <143020328+mini2s@users.noreply.github.com>
Co-authored-by: Kishan Patel <132991737+thekishandev@users.noreply.github.com>
Co-authored-by: xoma-zver <maxidiplomat@gmail.com>
Co-authored-by: Horizon_Architect_07 <famousrajbhatt@gmail.com>
Co-authored-by: galz10 <galzahavi@google.com>
Co-authored-by: Keith Schaab <keithsc@google.com>
Co-authored-by: Keith Schaab <keith.schaab@gmail.com>
Co-authored-by: codex-bot <spigelly+gh-bot@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/agent Issues related to Core Agent, Tools, Memory, Sub-Agents, Hooks, Agent Quality area/unknown Triage automation assigns this label to issues that it is unable to classify 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants