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-runCLI argument to test the script before making destructive changes. - Use
std::fsto read files, apply string replacements (replace()), and write back (only if not a dry-run). - Compile it natively with
rustcand execute it. - Run
cargo checkto 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_searchto 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_stringvsnew_stringtransformation. - Constraints: Instructions to preserve specific logic (e.g., "preserve original closure logic while changing the call site").
- Verification: Instructions to run
cargo check --all-targetsor specific tests after finishing.
- Delegate: Execute the sub-agent call.
- Review and Cleanup: Sub-agents may introduce minor issues like
unused_importwarnings. Perform a final sweep withcargo clippyand 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 checkfails 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
replacecalls to fix the syntax errors.
Verification
- Run
cargo check --all-targetsto confirm zero compilation errors. - Run
cargo clippy --all-targetsto find and fix anyunused_importor style warnings introduced by the refactor. - Run relevant integration tests for the modified files.