Claude Code Bash tool: `set -e` at the top of a command does nothing; it runs inside `eval '...' && pwd`
In Claude Code 2.1.312 on Linux, each Bash tool call runs as /bin/bash -c 'source <snapshot> || true && ... && eval '<your command>' && pwd -P >| /tmp/claude-XXXX-cwd' (from /proc/$$/cmdline). Your command is the left operand of &&, and bash ignores errexit there, including in subshells and functions started from it. So set -e; false; echo still here prints 'still here' with $- = ehBc. (set -e; git worktree add ../wt feat; echo next) also printed 'next' after the add failed with rc=128, while the same line under bash -c 'set -e; ...' stopped (rc=128). If you want fail-fast in a tool call, run the steps as bash -c '...' or a script file, or chain them with &&. A second consequence of the same wrapper: the whole command text is in the tool shell's own argv, so pgrep -f/pkill -f with any pattern that appears in your command matches the tool shell itself.