Skip to content

Introduce limits for search results.#18767

Merged
gundermanc merged 5 commits intomainfrom
gundermanc/grep-limits
Feb 11, 2026
Merged

Introduce limits for search results.#18767
gundermanc merged 5 commits intomainfrom
gundermanc/grep-limits

Conversation

@gundermanc
Copy link
Copy Markdown
Member

@gundermanc gundermanc commented Feb 10, 2026

Summary

Add limits params so that the agent can limit how many grep results it gets back.

Part of #17112

How to Validate

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

@gundermanc gundermanc requested a review from a team as a code owner February 10, 2026 21:36
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @gundermanc, 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 grep and ripgrep tools by introducing new parameters that allow for precise control over the number of search results. This change aims to improve the efficiency and usability of these tools by preventing an overwhelming volume of matches, thereby making the output more manageable and relevant for agents. The new limits can be applied per file or across the entire search operation, providing flexibility in how search results are constrained.

Highlights

  • Introduce Search Result Limits: Two new optional parameters, max_matches_per_file and total_max_matches, have been added to the grep and ripgrep tools. These allow agents to control the volume of search results returned.
  • Per-File Match Limiting: The max_matches_per_file parameter enables limiting the number of matches returned from any single file, preventing large files from dominating search results. This is supported by both the native git grep/grep commands and the JavaScript fallback.
  • Overall Match Limiting: The total_max_matches parameter sets an overall cap on the total number of matches returned across all files, with a default of 2000 if not specified. This helps manage the overall response size and performance.
  • Validation and Testing: Input validation has been added to ensure that both max_matches_per_file and total_max_matches are positive integers. Comprehensive unit tests were also introduced to verify the correct behavior of these new limits in both grep and ripgrep tools, including truncation logic.
Changelog
  • packages/core/src/tools/definitions/coreTools.ts
    • Added max_matches_per_file and total_max_matches properties to the GREP_DEFINITION schema, including descriptions, types, and minimum value constraints.
  • packages/core/src/tools/grep.test.ts
    • Introduced a new test case to verify that total_max_matches correctly truncates results in the JavaScript fallback implementation.
    • Added a new test case to ensure max_matches_per_file is respected in the JavaScript fallback, limiting matches per file.
  • packages/core/src/tools/grep.ts
    • Extended the GrepToolParams interface to include max_matches_per_file and total_max_matches.
    • Implemented logic to use this.params.total_max_matches as the totalMaxMatches value, defaulting to DEFAULT_TOTAL_MAX_MATCHES if not provided.
    • Modified the _searchInDir method to pass max_matches_per_file to the underlying search functions.
    • Updated the _searchWithGitGrep function to conditionally add the --max-count argument when max_matches_per_file is specified.
    • Updated the _searchWithGrep function to conditionally add the --max-count argument when max_matches_per_file is specified.
    • Modified the _searchWithJsFallback function to track matchesInFile and break the loop if max_matches_per_file is reached.
    • Added validation checks in the build method to ensure max_matches_per_file and total_max_matches are at least 1 if provided.
  • packages/core/src/tools/ripGrep.test.ts
    • Added a test case to confirm that ripgrep passes --max-count when max_matches_per_file is provided.
    • Introduced a test case to verify that total_max_matches correctly truncates ripgrep results.
  • packages/core/src/tools/ripGrep.ts
    • Extended the RipGrepToolParams interface to include max_matches_per_file and total_max_matches.
    • Implemented logic to use this.params.total_max_matches as the totalMaxMatches value, defaulting to DEFAULT_TOTAL_MAX_MATCHES if not provided.
    • Modified the _searchWithRipGrep method to pass max_matches_per_file.
    • Updated the _searchWithRipGrep function to conditionally add the --max-count argument to rgArgs when max_matches_per_file is specified.
    • Added max_matches_per_file and total_max_matches properties to the RIPGREP_DEFINITION schema, including descriptions, types, and minimum value constraints.
    • Added validation checks in the build method to ensure max_matches_per_file and total_max_matches are at least 1 if provided.
Activity
  • The pull request was created by gundermanc with the title 'Introduce limits for search results' and a summary indicating the addition of limit parameters for grep results.
  • The author provided a 'How to Validate' section (currently empty) and a 'Pre-Merge Checklist' (partially checked).
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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

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.

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 introduces max_matches_per_file and total_max_matches parameters to the grep and ripgrep tools to limit search results. The implementation is sound and includes corresponding tests. However, I've identified a critical inconsistency: the tool's schema documentation specifies a default of 2000 for total_max_matches, but the implementation defaults to 100. This discrepancy could lead to unexpected behavior from the agent. I've provided suggestions to align the documentation with the code's behavior.

Comment on lines +107 to +112
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 2000 if omitted.',
type: 'integer',
minimum: 1,
},
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.

high

There's an inconsistency between the documented default for total_max_matches and the implementation. The description states it defaults to 2000, but the code in grep.ts uses DEFAULT_TOTAL_MAX_MATCHES, which is set to 100. This could mislead the agent into expecting more results than it will receive by default.

To fix this, the description should be updated to reflect the actual default value of 100.

Suggested change
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 2000 if omitted.',
type: 'integer',
minimum: 1,
},
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 100 if omitted.',
type: 'integer',
minimum: 1,
},

Comment on lines +585 to +590
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 2000 if omitted.',
type: 'integer',
minimum: 1,
},
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.

high

There's an inconsistency between the documented default for total_max_matches and the implementation. The description states it defaults to 2000, but the code uses DEFAULT_TOTAL_MAX_MATCHES, which is set to 100. This could mislead the agent into expecting more results than it will receive by default.

To ensure the documentation is accurate, the description should be updated to reflect the actual default value of 100.

Suggested change
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 2000 if omitted.',
type: 'integer',
minimum: 1,
},
total_max_matches: {
description:
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 100 if omitted.',
type: 'integer',
minimum: 1,
},

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 10, 2026

Size Change: +2.62 kB (+0.01%)

Total Size: 24.3 MB

Filename Size Change
./bundle/gemini.js 24.3 MB +2.62 kB (+0.01%)
ℹ️ View Unchanged
Filename Size
./bundle/sandbox-macos-permissive-closed.sb 1.03 kB
./bundle/sandbox-macos-permissive-open.sb 890 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB
./bundle/sandbox-macos-restrictive-closed.sb 3.29 kB
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB

compressed-size-action

@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 Feb 10, 2026
@gundermanc gundermanc added this pull request to the merge queue Feb 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Feb 11, 2026
@gundermanc gundermanc added this pull request to the merge queue Feb 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Feb 11, 2026
@gundermanc gundermanc enabled auto-merge February 11, 2026 03:39
@gundermanc gundermanc added this pull request to the merge queue Feb 11, 2026
Merged via the queue into main with commit 0d034b8 Feb 11, 2026
27 checks passed
@gundermanc gundermanc deleted the gundermanc/grep-limits branch February 11, 2026 03:59
krsjenmt added a commit to krsjenmt/gemini-cli that referenced this pull request Feb 11, 2026
* Fix newline insertion bug in replace tool (google-gemini#18595)

* fix(evals): update save_memory evals and simplify tool description (google-gemini#18610)

* chore(evals): update validation_fidelity_pre_existing_errors to USUALLY_PASSES (google-gemini#18617)

* fix: shorten tool call IDs and fix duplicate tool name in truncated output filenames (google-gemini#18600)

* feat(cli): implement atomic writes and safety checks for trusted folders (google-gemini#18406)

* Remove relative docs links (google-gemini#18650)

* docs: add legacy snippets convention to GEMINI.md (google-gemini#18597)

* fix(chore): Support linting for cjs (google-gemini#18639)

Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>

* feat: move shell efficiency guidelines to tool description (google-gemini#18614)

* Added "" as default value, since getText() used to expect a string only and thus crashed when undefined...  Fixes google-gemini#18076   (google-gemini#18099)

* Allow @-includes outside of workspaces (with permission) (google-gemini#18470)

* chore: make `ask_user` header description more clear (google-gemini#18657)

* bug(core): Fix minor bug in migration logic. (google-gemini#18661)

* Harded code assist converter. (google-gemini#18656)

* refactor(core): model-dependent tool definitions (google-gemini#18563)

* feat: enable plan mode experiment in settings (google-gemini#18636)

* refactor: push isValidPath() into parsePastedPaths() (google-gemini#18664)

* fix(cli): correct 'esc to cancel' position and restore duration display (google-gemini#18534)

* feat(cli): add DevTools integration with gemini-cli-devtools (google-gemini#18648)

* chore: remove unused exports and redundant hook files (google-gemini#18681)

* Fix number of lines being reported in rewind confirmation dialog (google-gemini#18675)

* feat(cli): disable folder trust in headless mode (google-gemini#18407)

* Disallow unsafe type assertions (google-gemini#18688)

* Change event type for release (google-gemini#18693)

* feat: handle multiple dynamic context filenames in system prompt (google-gemini#18598)

* Properly parse at-commands with narrow non-breaking spaces (google-gemini#18677)

* refactor(core): centralize core tool definitions and support model-specific schemas (google-gemini#18662)

* feat(core): Render memory hierarchically in context. (google-gemini#18350)

* feat: Ctrl+O to expand paste placeholder (google-gemini#18103)

* fix(cli): Improve header spacing (google-gemini#18531)

* Feature/quota visibility 16795 (google-gemini#18203)

* docs: remove TOC marker from Plan Mode header (google-gemini#18678)

* Inline thinking bubbles with summary/full modes (google-gemini#18033)

Co-authored-by: Jacob Richman <jacob314@gmail.com>

* fix(ui): remove redundant newlines in Gemini messages (google-gemini#18538)

* test(cli): fix AppContainer act() warnings and improve waitFor resilience (google-gemini#18676)

* refactor(core): refine Security & System Integrity section in system prompt (google-gemini#18601)

* Fix layout rounding. (google-gemini#18667)

* docs(skills): enhance pr-creator safety and interactivity (google-gemini#18616)

* test(core): remove hardcoded model from TestRig (google-gemini#18710)

* feat(core): optimize sub-agents system prompt intro (google-gemini#18608)

* feat(cli): update approval mode labels and shortcuts per latest UX spec (google-gemini#18698)

* fix(plan): update persistent approval mode setting (google-gemini#18638)

Co-authored-by: Sandy Tao <sandytao520@icloud.com>

* fix: move toasts location to left side (google-gemini#18705)

* feat(routing): restrict numerical routing to Gemini 3 family (google-gemini#18478)

* fix(ide): fix ide nudge setting (google-gemini#18733)

* fix(core): standardize tool formatting in system prompts (google-gemini#18615)

* chore: consolidate to green in ask user dialog (google-gemini#18734)

* feat: add `extensionsExplore` setting to enable extensions explore UI. (google-gemini#18686)

* feat(cli): defer devtools startup and integrate with F12 (google-gemini#18695)

* ui: update & subdue footer colors and animate progress indicator (google-gemini#18570)

* test: add model-specific snapshots for coreTools (google-gemini#18707)

Co-authored-by: matt korwel <matt.korwel@gmail.com>

* ci: shard windows tests and fix event listener leaks (google-gemini#18670)

* fix: allow `ask_user` tool in yolo mode (google-gemini#18541)

* feat: redact disabled tools from system prompt (google-gemini#13597) (google-gemini#18613)

* Update Gemini.md to use the curent year on creating new files (google-gemini#18460)

* Code review cleanup for thinking display (google-gemini#18720)

* fix(cli): hide scrollbars when in alternate buffer copy mode (google-gemini#18354)

Co-authored-by: Jacob Richman <jacob314@gmail.com>

* Fix issues with rip grep (google-gemini#18756)

* fix(cli): fix history navigation regression after prompt autocomplete (google-gemini#18752)

* chore: cleanup unused and add unlisted dependencies in packages/cli (google-gemini#18749)

* Fix issue where Gemini CLI creates tests in a new file (google-gemini#18409)

* feat(telemetry): Ensure experiment IDs are included in OpenTelemetry logs (google-gemini#18747)

* feat(ux): added text wrapping capabilities to markdown tables (google-gemini#18240)

Co-authored-by: jacob314 <jacob314@gmail.com>

* Revert "fix(mcp): ensure MCP transport is closed to prevent memory leaks" (google-gemini#18771)

* chore(release): bump version to 0.30.0-nightly.20260210.a2174751d (google-gemini#18772)

* chore: cleanup unused and add unlisted dependencies in packages/core (google-gemini#18762)

* chore(core): update activate_skill prompt verbiage to be more direct (google-gemini#18605)

* Add autoconfigure memory usage setting to the dialog (google-gemini#18510)

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

* fix(core): prevent race condition in policy persistence (google-gemini#18506)

Co-authored-by: Allen Hutchison <adh@google.com>

* fix(evals): prevent false positive in hierarchical memory test (google-gemini#18777)

* test(evals): mark all `save_memory` evals as `USUALLY_PASSES` due to unreliability (google-gemini#18786)

* feat(cli): add setting to hide shortcuts hint UI (google-gemini#18562)

* feat(core): formalize 5-phase sequential planning workflow (google-gemini#18759)

* Introduce limits for search results. (google-gemini#18767)

---------

Co-authored-by: Andrew Garrett <andrewgarrett@google.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Aswin Ashok <aswwwin@google.com>
Co-authored-by: Abhijith V Ashok <abhi2349jith@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Aishanee Shah <aishaneeshah@gmail.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: Spencer <spencertang@google.com>
Co-authored-by: Dmitry Lyalin <dmitry.lyalin@lyalin.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
Co-authored-by: Sri Pasumarthi <111310667+sripasg@users.noreply.github.com>
Co-authored-by: Keith Guerin <keithguerin@gmail.com>
Co-authored-by: Sehoon Shon <sshon@google.com>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: Kevin Ramdass <ramdass.kevin@gmail.com>
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Brad Dux <959674+braddux@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
Co-authored-by: Abhijit Balaji <abhijitbalaji@google.com>
kuishou68 pushed a commit to iOfficeAI/aioncli that referenced this pull request Feb 27, 2026
liamhelmer pushed a commit to badal-io/gemini-cli that referenced this pull request Mar 12, 2026
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 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants