Parent: #717 ## Problem `grep -r` and `rg` searches can return hundreds of matches. The agent needs representative results, not all of them. ## Acceptance Criteria - [ ] Match `grep`, `rg`, `ripgrep` - [ ] If output > 100 lines: keep first 30 + last 10, show total match count - [ ] Config: `[tools.filters.grep]` with `enabled`, `max_results` (default 100) - [ ] Tests - [ ] Expected savings: 60-90%