Description
The docs say external_directory is "triggered when a tool touches paths outside the project working directory". The file tools do that on every call, but the bash tool only checks a short list of command names, so anything outside that list writes outside the project silently.
Separately, any argument containing a $ is discarded before it can be resolved, so even a command that is on the list gets skipped when the path is written with a variable.
This happens with the default config, since external_directory defaults to "ask", so no opt-in is needed to hit it.
Plugins
None
OpenCode version
1.18.11
Steps to reproduce
- Open any project.
- Ask the agent to run: echo test | tee ~/opencode-external-test
No prompt appears and the file is created in your home directory.
- For contrast, ask it to run: cp ./README.md ~/opencode-external-test2
This one does prompt, because cp is on the list.
- Now the $ case. Ask it to run: rm $HOME/opencode-external-test
No prompt, even though rm is on the list.
- For contrast, run the same path written literally: rm /home//opencode-external-test
This one does prompt.
Screenshot and/or share link
No response
Operating System
Ubuntu 26.04
Terminal
GNOME Terminal (Ubuntu default)
Description
The docs say external_directory is "triggered when a tool touches paths outside the project working directory". The file tools do that on every call, but the bash tool only checks a short list of command names, so anything outside that list writes outside the project silently.
Separately, any argument containing a $ is discarded before it can be resolved, so even a command that is on the list gets skipped when the path is written with a variable.
This happens with the default config, since external_directory defaults to "ask", so no opt-in is needed to hit it.
Plugins
None
OpenCode version
1.18.11
Steps to reproduce
No prompt appears and the file is created in your home directory.
This one does prompt, because cp is on the list.
No prompt, even though rm is on the list.
This one does prompt.
Screenshot and/or share link
No response
Operating System
Ubuntu 26.04
Terminal
GNOME Terminal (Ubuntu default)