-
Notifications
You must be signed in to change notification settings - Fork 5.2k
chore: add better docs for safe_mode; load semgrep if available #709
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Safe Mode | ||
|
||
**⚠️ Safe mode is experimental and does not provide any guarantees of safety or security.** | ||
|
||
Open Interpreter is working on providing an experimental safety toolkit to help you feel more confident running the code generated by Open Interpreter. | ||
|
||
|
||
Install Open Interpreter with the safety toolkit dependencies as part of the bundle: | ||
|
||
```shell | ||
pip install open-interpreter[safe] | ||
``` | ||
|
||
Alternatively, you can install the safety toolkit dependencies separately in your virtual environment: | ||
|
||
```shell | ||
pip install semgrep | ||
``` | ||
|
||
## Features | ||
|
||
- **No Auto Run**: Safe mode disables the ability to automatically execute code | ||
- **Code Scanning**: Scan generated code for vulnerabilities with [`semgrep`](https://semgrep.dev/) | ||
|
||
## Enabling Safe Mode | ||
|
||
You can enable safe mode by passing the `--safe` flag when invoking `interpreter` or by configuring `safe_mode` in your [config file](https://github.com/KillianLucas/open-interpreter#configuration). | ||
|
||
The safe mode setting has three options: | ||
|
||
- `off`: disables the safety toolkit (_default_) | ||
- `ask`: prompts you to confirm that you want to scan code | ||
- `auto`: automatically scans code | ||
|
||
### Example Config: | ||
|
||
```yaml | ||
model: gpt-4 | ||
temperature: 0 | ||
debug_mode: false | ||
safe_mode: ask | ||
``` | ||
|
||
## Roadmap | ||
|
||
Some upcoming features that enable even more safety: | ||
|
||
- [Execute code in containers](https://github.com/KillianLucas/open-interpreter/pull/459) | ||
|
||
## Tips & Tricks | ||
|
||
You can adjust the `system_message` in your [config file](https://github.com/KillianLucas/open-interpreter#configuration) to include instructions for the model to scan packages with [`guarddog`]() before installing them. | ||
|
||
```yaml | ||
model: gpt-4 | ||
debug_mode: false | ||
safe_mode: ask | ||
system_message: | | ||
# normal system message here | ||
BEFORE INSTALLING ANY PACKAGES WITH pip OR npm YOU MUST SCAN THEM WITH `guarddog` FIRST. Run `guarddog pypi scan $package` for pip packages and `guarddog npm scan $package` for npm packages. `guarddog` only accepts one package name at a time. | ||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ | |
from ..utils.display_markdown_message import display_markdown_message | ||
from ..utils.truncate_output import truncate_output | ||
from ..utils.scan_code import scan_code | ||
from ..utils.check_for_package import check_for_package | ||
|
||
|
||
def terminal_interface(interpreter, message): | ||
|
@@ -17,8 +18,9 @@ def terminal_interface(interpreter, message): | |
"**Open Interpreter** will require approval before running code." | ||
] | ||
|
||
if interpreter.safe_mode != "off": | ||
interpreter_intro_message.append(f"**Safe Mode**: {interpreter.safe_mode}\n\n>Note: **Safe Mode** requires `semgrep` (`pip install semgrep`)") | ||
if interpreter.safe_mode == "ask" or interpreter.safe_mode == "auto": | ||
if not check_for_package("semgrep"): | ||
interpreter_intro_message.append(f"**Safe Mode**: {interpreter.safe_mode}\n\n>Note: **Safe Mode** requires `semgrep` (`pip install semgrep`)") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Now we only need to show the |
||
else: | ||
interpreter_intro_message.append( | ||
"Use `interpreter -y` to bypass this." | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import importlib.util | ||
import sys | ||
|
||
#borrowed from: https://stackoverflow.com/a/1051266/656011 | ||
def check_for_package(package): | ||
if package in sys.modules: | ||
return True | ||
elif (spec := importlib.util.find_spec(package)) is not None: | ||
try: | ||
module = importlib.util.module_from_spec(spec) | ||
|
||
sys.modules[package] = module | ||
spec.loader.exec_module(module) | ||
|
||
return True | ||
except ImportError: | ||
return False | ||
else: | ||
return False |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can leverage the
tool.poetry.extras
configuration to allow folks to optionally installsemgrep
and other safety tools via the[safe]
extra.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
YES. I love this idea.
I think it would be great to make a slimmed down version of OI called
[core]
(wouldn't even includerich
or any terminal interface),[safe]
for semgrep, perhaps docker, etc, then eventually[all]
if we build features beyond safe mode with dependencies.