You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
external_directory does not fire for many bash commands that write outside the project #40159
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.
Both issues describe gaps in external_directory enforcement for the bash/shell tool, though #40159 focuses on the command-name allowlist and $VARIABLE argument discarding, while #32628 focuses on shell redirect targets. They may be worth addressing together.
Activity
github-actions commentedon Aug 2, 2026
This issue might be a duplicate of existing issues. Please check:
external_directorypermission — covers a related bypass vector in the bash tool's path scanning logicBoth issues describe gaps in
external_directoryenforcement for the bash/shell tool, though #40159 focuses on the command-name allowlist and$VARIABLEargument discarding, while #32628 focuses on shell redirect targets. They may be worth addressing together.github-actions commentedon Oct 2, 2026
To stay organized issues are automatically closed after 60 days of no activity. If the issue is still relevant please open a new one.