Back to skills
SkillHub ClubShip Full StackFull Stack

batch-read

Find and read multiple files in one operation (50-70% faster for exploration)

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
4
Hot score
81
Updated
March 20, 2026
Overall rating
C3.7
Composite score
3.7
Best-practice grade
B84.0

Install command

npx @skill-hub/cli install cowwoc-styler-batch-read

Repository

cowwoc/styler

Skill path: .claude/skills/batch-read

Find and read multiple files in one operation (50-70% faster for exploration)

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: cowwoc.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install batch-read into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/cowwoc/styler before adding batch-read to shared team environments
  • Use batch-read for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: batch-read
description: Find and read multiple files in one operation (50-70% faster for exploration)
allowed-tools: Bash
---

# Batch Read Skill

**Purpose**: Find files matching a pattern and read them in a single atomic operation, reducing LLM round-trips from 1+N to 2-3.

**Performance**: 50-70% faster for reading 3+ files during codebase exploration

## When to Use This Skill

### ✅ Use batch-read When:

- **Exploring codebase** to understand how a feature works
- **Finding examples** of a pattern across multiple files
- **Gathering context** for a code change
- **Reviewing implementations** of similar functionality
- **Understanding usage** of a particular API or method
- Reading **related configuration files**
- Collecting **test examples** from multiple test files

### ❌ Do NOT Use When:

- Reading **specific known files** (use Read tool directly)
- Need to read **entire large files** (>1000 lines each)
- Files are **unrelated** (no common pattern)
- Need **precise file selection** (specific paths known)
- Reading **binary files** or **generated code**
- Files require **deep analysis** (better to read individually)

## Performance Comparison

### Traditional Workflow (1+N LLM round-trips, 10s + 5s×N)

```
[LLM Round 1] Search for pattern
  → Grep: Find files containing "FormattingRule"
  → Returns: file1.java, file2.java, file3.java

[LLM Round 2] Read first file
  → Read: file1.java

[LLM Round 3] Read second file
  → Read: file2.java

[LLM Round 4] Read third file
  → Read: file3.java

[LLM Round 5] Analyze and report
  → Summarize findings from all files
```

**Total**: 10s + (5s × 3) = 25s, 5 LLM round-trips

### Optimized Workflow (2-3 LLM round-trips, 8-12s)

```
[LLM Round 1] Execute batch-read
  → Bash: batch-read.sh "FormattingRule" --max-files 3
  → [Script finds files + reads all + returns content]

[LLM Round 2] Analyze and report
  → Parse combined output
  → Summarize findings
```

**Total**: 8-12s, 2-3 LLM round-trips

**Savings**: 50-70% faster for N≥3 files

## Usage

### Basic Pattern Search

```bash
# Find and read files containing "FormattingRule"
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule"
```

### With File Type Filter

```bash
# Only search Java files
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" --type java
```

### Limit Results

```bash
# Read at most 3 files
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" --max-files 3
```

### Control Output Size

```bash
# Show only first 50 lines of each file
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" --context-lines 50
```

### Read Entire Files

```bash
# Read complete files (no truncation)
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" --context-lines 0
```

### Combined Options

```bash
# Search Java files, read 5 files, show 100 lines each
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" \
  --type java \
  --max-files 5 \
  --context-lines 100
```

## Output Format

Script returns two outputs:

### 1. JSON Metadata

```json
{
  "status": "success",
  "message": "Successfully read 3 file(s) matching pattern",
  "duration_seconds": 2,
  "pattern": "FormattingRule",
  "files_found": 3,
  "files_read": 3,
  "output_file": "/tmp/batch-read-output-12345.txt",
  "working_directory": "/workspace/main",
  "timestamp": "2025-11-08T00:45:00-05:00"
}
```

### 2. Combined File Contents

```
═══════════════════════════════════════════════════════════
FILE: src/main/java/FormattingRule.java
═══════════════════════════════════════════════════════════

     1  package io.github.cowwoc.styler;
     2
     3  public interface FormattingRule {
     4      void apply(StyleContext context);
     5  }

[... file content ...]

───────────────────────────────────────────────────────────

═══════════════════════════════════════════════════════════
FILE: src/test/java/FormattingRuleTest.java
═══════════════════════════════════════════════════════════

     1  package io.github.cowwoc.styler;
     2
     3  import org.testng.annotations.Test;
     4
     5  public class FormattingRuleTest {
     6      @Test
     7      public void testRule() {
     8          // Test implementation
     9      }
    10  }

[... file content ...]

───────────────────────────────────────────────────────────
```

## LLM Integration Pattern

### Example 1: User asks how a feature is implemented

**User**: How is the FormattingRule implemented across the codebase?

**LLM Round 1** (Execute):
```bash
/workspace/main/.claude/scripts/batch-read.sh "FormattingRule" \
  --type java \
  --max-files 5
```

**Script Output**:
- JSON metadata showing 3 files found
- Combined content from FormattingRule.java, FormattingRuleTest.java, etc.

**LLM Round 2** (Analyze + Report):
```
I found 3 files implementing FormattingRule:

1. **FormattingRule.java** (Interface)
   - Defines the core interface with apply() method
   - Used by all formatting implementations

2. **IndentationRule.java** (Implementation)
   - Implements FormattingRule for indentation
   - Handles tab/space conversion

3. **FormattingRuleTest.java** (Tests)
   - Unit tests for FormattingRule implementations
   - Shows usage examples

The pattern follows a strategy design where each rule
implements the interface and is applied independently.
```

### Example 2: Exploring configuration files

**User**: Show me all the Maven configuration files

**LLM Round 1** (Execute):
```bash
/workspace/main/.claude/scripts/batch-read.sh "pom.xml" --max-files 10
```

**Script Output**:
- JSON showing 3 pom.xml files found
- Contents of main/pom.xml, formatter/pom.xml, etc.

**LLM Round 2** (Report):
```
Found 3 Maven configuration files:

1. /workspace/main/pom.xml (Parent POM)
   - Defines modules: formatter, ast-core
   - Java version: 21
   - Dependencies: TestNG, AssertJ

2. /workspace/main/formatter/pom.xml
   - Module: styler-formatter
   - Additional dependencies: ...

3. /workspace/main/ast-core/pom.xml
   - Module: styler-ast-core
   - Dependencies: ...
```

## Common Use Cases

### 1. Understanding Feature Implementation

```bash
# Find all files implementing a specific feature
batch-read.sh "ValidationEngine" --type java --max-files 5
```

### 2. Reviewing Test Coverage

```bash
# Find all test files for a component
batch-read.sh "FormatterTest" --type java
```

### 3. Finding Usage Examples

```bash
# See how an API is used across the codebase
batch-read.sh "StyleContext.apply" --type java
```

### 4. Configuration Review

```bash
# Review all configuration files
batch-read.sh "application.properties" --max-files 10
```

### 5. Documentation Gathering

```bash
# Collect all README files
batch-read.sh "README" --type md --max-files 20
```

## Smart Filtering Features

### Automatic Deduplication

Script uses `grep -l` (list files only) to avoid duplicate results from multiple matches in same file.

### Line Number Preservation

When using `--context-lines`, script includes line numbers to help locate code:
```
     42  public void validate() {
     43      // Implementation
     44  }
```

### Truncation Indication

When files are truncated, script shows how much was omitted:
```
[... truncated: showing 100 of 523 lines ...]
```

### Size Warnings

Script warns if output is very large (>100KB):
```
⚠️  Warning: Output is large (125000 bytes)
   Consider using --context-lines to limit output
```

## Performance Characteristics

### Time Savings by File Count

| Files | Traditional | Optimized | Savings |
|-------|-------------|-----------|---------|
| 1 file | 15s | 10s | 33% |
| 2 files | 20s | 10s | 50% |
| 3 files | 25s | 11s | 56% |
| 5 files | 35s | 12s | 66% |
| 10 files | 60s | 15s | 75% |

### Frequency and Impact

**Expected Usage**: 5-10 times per day

**Time Savings per Use**: ~15-30 seconds (average 3-5 files)

**Daily Impact**: 75-300 seconds (1.25-5 minutes)

**Monthly Impact**: 30-150 minutes (0.5-2.5 hours)

## Limitations

### File Size Limits

- Default: 100 lines per file
- Can read entire files with `--context-lines 0`
- Large files (>1000 lines) may produce too much output

### Pattern Matching

- Uses grep regex (not fuzzy matching)
- Case-sensitive by default
- Searches file contents, not file names

### File Type Detection

- `--type` filter uses file extension only
- Example: `--type java` matches `*.java` files
- Does not inspect file contents for type detection

## When NOT to Use

### Known Specific Files

**❌ Wrong**: Use batch-read to find and read one known file
```bash
batch-read.sh "MyClass.java"
```

**✅ Correct**: Use Read tool directly
```bash
Read: /workspace/main/src/main/java/MyClass.java
```

### Unrelated Files

**❌ Wrong**: Read random files that happen to match pattern
```bash
batch-read.sh "test"  # Too generic, matches everything
```

**✅ Correct**: Use specific pattern or file type
```bash
batch-read.sh "ValidationTest" --type java
```

### Deep Analysis Needed

**❌ Wrong**: Read 10 large files for detailed analysis
**✅ Correct**: Read files one-by-one for thorough review

## Related

- **Read tool**: For reading specific known files
- **Grep tool**: For finding files without reading them
- **Glob tool**: For finding files by pattern (name-based)
- **Task tool with Explore agent**: For complex codebase exploration
batch-read | SkillHub