Wrong tool for the job, or right tool with wrong arguments. The mistake is mechanical — the agent had a better option available and didn't pick it.
Common shapes:
Bashwithcatto read a file whenReadwould do.BashwithfindwhenGlobwould do.Bashwithgrep/rgwhenGrepwould do.EditwhenWriteis needed (file doesn't exist yet) or vice versa.WebFetchfrom a top-tier orchestrator instead of via a low-tier subagent.
See ../conduct/tool-use.md § Right tool, first try.
The reflex map:
| Reaching for | Use instead |
|---|---|
find / ls -R |
Glob |
grep / rg |
Grep |
cat / head / tail |
Read |
sed / awk for edits |
Edit |
echo > file |
Write |
Bash is for shell-only work — git, npm, test runners, build tools. Reaching for Bash to do what a dedicated tool does better is a smell; fix the reflex.
-
Agent runs
Bashwithgrep -r "myFunction" .to find usages. TheGreptool would do the same in one call with cleaner output and no shell-escape concerns. Counter: UseGrepwhen searching content. -
Agent runs
Bashwithfind . -name "*.test.ts". Counter: UseGlobwith**/*.test.ts. -
Agent runs
Bashwithcat src/foo.ts | head -50. Counter: UseReadwithlimit: 50. -
Agent calls
WebFetchdirectly from the orchestrator on a 50-page paper, blowing context budget. Counter: Spawn a low-tier fetcher subagent; consume the structured return.
- F02 fabrication — fabrication invents tools / flags that don't exist; mis-invocation uses real tools wrong.
- F06 premature action — premature action is right tool, wrong moment; mis-invocation is wrong tool entirely.
| Frequency | Action |
|---|---|
| Single occurrence | Use the right tool; note in failure log |
| 3+ in one workflow | The reflex needs explicit reinforcement — restate the tool-mapping table at the top of the prompt |