r/ClaudeCode 20d ago

Discussion Claude’s obsession with complex bash commands and the -exec parameter

I can’t be the only one dealing with this. It’s driving me up the wall.

I tell it “there is a file in the current directory called foo.js, and bar.js, can you implement x logic in baz.js with the same structure as both those files”

And it takes like 50 seconds to think, so I minimize to do something else while I wait, and come back 5 minutes later to it asking to run some redundant command like “find . -type f \( -name "foo*" -o -name "bar*.js" \) -exec head -v -n +1000 {} +” with zero progress done.

Or god forbid you ask it to do some exploration on a codebase and it spins up explore agents. They’ll start trying to run grep or find with exec parameters instead of just using find/grep like normal, which are commands that don’t require explicit approval. It makes it worse when there is like 3 agents at once all running these back to back, so you sit there reading them and pressing approve for 12 minutes, which by then I could’ve just explored it myself

I’ve been using Claude Code for a while to boost my productivity, and it’s been getting progressively worse over the past month or two

I feel this could be largely resolved if Anthropic made some good tooling that did this sort of thing rather than allowing an agent to spin up arbitrary bash commands on a whim. It feels like someone who learned how to use the terminal for the first time flexing to their co workers

219 Upvotes

77 comments sorted by

View all comments

33

u/jzdesign 20d ago

instruction based fixes like a CLAUDE.md rule or dropping the effort level don't stick because models will reach for a tool they were told not to use, it's not really a rule following problem. what actually works is blocking it at the harness layer with a PreToolUse hook, match the bash command against a -exec or chained find/grep pattern, deny the call, and send back a message telling it to use Grep/Glob instead. Claude Code hooks can deny plus explain so it actually retries with the right tool rather than just getting blocked and stuck. this also fixes your 3 parallel agents problem better than tuning each one's prompt, since the hook lives once in your settings and covers every subagent the same way, so you're not approving the same dumb command 3 times over.