Skip to content

confusing interplay between dot-ignore and fs_grep_files options.suppress #1044

Description

@rxgrant

From .jp/mcp/tools/fs/grep_files.toml

# Disclosure blocks like `.git/` belong on every tool that returns contents, so
# keep those in step. `**/target/` is a flood block and lives only on the tools
# that enumerate in bulk; `fs_read_file` omits it deliberately, so an exact build
# log stays retrievable (issue #626).
options.suppress = [".git/", "**/target/"]

Ignoring the technobabble offense here, one of my project's .ignore files unignores some things under target/:

[...]

# un-ignore desired trees
!**/target/doc/
!**/target/doc/**
!**/target/log/
!**/target/log/**
!/target/payload-review/
!/target/payload-review/**
!/target/CLAUDE*

I think the fs_grep_files design is suggesting that since the tool can find target/doc/ by the LLM directly naming that path, nothing is irretrievably ignored. It's just suppressed from nonspecific searches. So even though I have a complex .ignore, the upstream options.suppress is still right for me.

I agree that all these concerns are different:

  • read concerns;
  • write concerns;
  • context concerns; and
  • staging concerns.

And it's even different programs reading the current separate files. Yet it still feels like wizard-or-well-visualized configuration needs to focus on this more for devs to be able to understand their project's settings.

I kind of feel like this issue is a journal entry of realizing the design, and I should delete it. Ugh, I will leave it up for a day to collect comments.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions