| name | batch-refactor-with-sub-agents |
| description | Use a sub-agent (like `generalist`) to perform repetitive code transformations across multiple files in a single turn. |
When to Use Sub-Agents
- Renaming symbols or updating function signatures across many files (but not the entire repository).
- Migrating code from one pattern to another (e.g., manual error handling to a common helper).
- Replacing literals with centralized constants across the codebase.
- Performing repetitive tasks that require semantic understanding and cannot be solved with a simple string replace.
When to Use Custom Rust Scripts (Priority for Massive Refactors)
For massive, repository-wide bulk refactoring (typically 6+ files, e.g., renaming a string or trait across 100+ files), you MUST NOT use sed, awk, perl, python, bash, or fish (which are strictly prohibited). Furthermore, spawning sub-agents for a simple find-and-replace across 6+ files is inefficient.
Instead:
- Write a custom, disposable Rust script. Save this script in
tmpfs (e.g., /tmp/).
- Implement a
--dry-run CLI argument to test the script before making destructive changes.
- Use
std::fs to read files, apply string replacements (replace()), and write back (only if not a dry-run).
- Compile it natively with
rustc and execute it.
- Run
cargo check to verify.
Procedure for Sub-Agents
- Define the transformation: Identify the exact "before" and "after" patterns. Create a representative code snippet for the sub-agent to follow.
- Locate targets: Use
grep_search to find all absolute file paths and line numbers that need modification.
- Draft a precise prompt: Call the
generalist (or similar) tool with a prompt that includes:
- Goal: Clear statement of the refactoring objective.
- Scope: A bulleted list of absolute file paths to modify.
- Example: A code block showing the
old_string vs new_string transformation.
- Constraints: Instructions to preserve specific logic (e.g., "preserve original closure logic while changing the call site").
- Verification: Instructions to run
cargo check --all-targets or specific tests after finishing.
- Delegate: Execute the sub-agent call.
- Review and Cleanup: Sub-agents may introduce minor issues like
unused_import warnings. Perform a final sweep with cargo clippy and fix manually or via a second batch call.
Pitfalls and Fixes
- symptom: Sub-agent misses some files or applies incorrect logic.
- likely cause: Prompt was too vague or the transformation was too complex for a single turn.
- fix: Break the task into smaller, more homogeneous batches (e.g., "refactor all files in directory A first").
- symptom:
cargo check fails after the sub-agent finishes.
- likely cause: Sub-agent clobbered a symbol or messed up indentation/syntax.
- fix: Read the modified files and use targeted
replace calls to fix the syntax errors.
Verification
- Run
cargo check --all-targets to confirm zero compilation errors.
- Run
cargo clippy --all-targets to find and fix any unused_import or style warnings introduced by the refactor.
- Run relevant integration tests for the modified files.