Open Interpreter was the Python project that let a model run code on your computer from a chat prompt. This repository is now something else: a Rust coding agent forked from OpenAI's Codex CLI, rebuilt around low-cost open models. It keeps Codex's terminal interface, sandboxing on macOS, Linux and Windows, MCP, skills, hooks and AGENTS.md support, and adds what it calls harness emulation: /harness switches between reimplementations of the prompts and tool loops that Claude Code, Kimi Code, Qwen Code, DeepSeek's TUI and others use, so each model runs in the harness it was tuned for.
The pitch is agent performance from models that cost a fraction of the frontier ones, with Kimi K3 and GLM as the headline pairings and any OpenAI-compatible provider supported. It speaks the Codex exec protocol, so the Codex SDK can drive it with a one-line change, and runs as an Agent Client Protocol agent in editors. The licence is Apache-2.0. The original Python project continues separately as a community fork, endolith/open-interpreter.
- Repository: github.com/openinterpreter/openinterpreter
- Licence: Apache-2.0 (Apache License 2.0)
- Language: Rust. Stars: 68.5K. Forks: 5,881. Last push: Sep 27, 2026.
- Scan: safe, Sep 27, 2026, commit b171530
Who it is for
Developers who want a Codex-style agent but pay per token for open models instead of a frontier plan, people comparing how different harnesses change a model's results, and Codex SDK users who want to swap the model underneath.
Getting started
1. Install on macOS or Linux (Windows: irm https://www.openinterpreter.com/install.ps1 | iex)
curl -fsSL https://www.openinterpreter.com/install | sh2. Start a session in your project, then pick a provider and model with /model
interpreter3. Switch the agent harness to suit the model
/harnessThe installer is fetched from openinterpreter.com and piped to sh. The copy in the repository, scripts/install/install.sh, downloads a release from GitHub and adds its folder to your PATH through your shell profile; read it before running the hosted version. The pip package named open-interpreter is the old Python project, not this one.
Safety scan
We cloned openinterpreter/openinterpreter at commit b171530 on Sep 27, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.
- No secrets: the eight candidates are test keys and tokens in the login, agent-identity and credential-broker tests, and the patterns of the secrets sanitizer that redacts real ones. The bare IPs are test cases for the URL fetcher's private-address check.
- The pattern hits are the same kind Codex has: the exec policy recognising powershell -EncodedCommand, sandbox tests that open raw sockets on purpose, generated schema files with long lines, and a 1-pixel GIF as a byte string. The product-info module holds the install commands, and the update command re-runs the openinterpreter.com installer.
- scripts/install/install.sh (1,127 lines) downloads the release from GitHub and edits your shell profile to add it to PATH; install-open-interpreter.sh is a wrapper that pipes the hosted installer to sh. The two scripts that use sudo are a CI build script and a helper that sets up a remote development host over SSH. Eight Cargo build scripts compile native pieces.
- Known advisories: 101, none critical. The high ones are in gix, the Git library it shares with Codex, and rmcp in the Rust lockfile, in the TypeScript SDK's npm tooling, and in a code generator used by the Python SDK's build.
- 26 workflows, none using pull_request_target, and all 50 third-party actions pinned to a commit. Security policy and Dependabot present; no contributing guide.
What the scanner counted
| Check | Result |
|---|---|
| Secrets | 8 candidates found and read; see the notes above. |
| Suspicious code | 18 pattern hits found and read; every one is listed under the raw findings. |
| Install-time code | 1 npm lifecycle script. 8 Cargo build scripts. 14 installer scripts (one fetches and runs a remote script; one edits your shell profile; one can call sudo) |
| Committed binaries | None. |
| CI workflows | 26 workflows. None use pull_request_target. 0 of 50 third-party actions pinned to a tag rather than a commit. |
| Network hosts | 40 distinct hosts referenced from source; most often github.com, chatgpt.com, example.test, api.openai.com. 5 URLs to a bare IP address, listed under the raw findings. |
| Known vulnerabilities | 101 advisories across 2,246 pinned packages: 0 critical, 44 high, 40 moderate, 5 low, 12 unrated. .devcontainer/codex-install/pnpm-lock.yaml: 7 packages, 0 advisories; codex-rs/Cargo.lock: 1,499 packages, 25 advisories; pnpm-lock.yaml: 591 packages, 61 advisories; scripts/codex_package/smoke_tests/uv.lock: 13 packages, 0 advisories; scripts/uv.lock: 2 packages, 0 advisories; sdk/python-runtime/uv.lock: 1 packages, 0 advisories; sdk/python/uv.lock: 32 packages, 9 advisories; tools/argument-comment-lint/Cargo.lock: 175 packages, 7 advisories. |
| Project hygiene | Has security policy, automated dependency updates, licence file. Missing CodeQL, contributing guide. |
| OpenSSF Scorecard | Not scored: the project is not in Scorecard's weekly index. |
The raw findings
Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.
Secret candidates (8, redacted)
| Where | Rule | Match |
|---|---|---|
| codex-rs/agent-identity/src/lib.rs:832 | private-key | -----B…--- (27 chars) |
| codex-rs/login/src/auth/agent_identity.rs:573 | private-key | -----B…--- (27 chars) |
| codex-rs/login/src/auth/auth_tests.rs:2826 | private-key | -----B…--- (27 chars) |
| codex-rs/network-proxy/src/credential_broker_tests.rs:52 | github-token | github…FGH (65 chars) |
| codex-rs/network-proxy/src/credential_broker_tests.rs:226 | github-token | ghp_ab…890 (40 chars) |
| codex-rs/network-proxy/src/credential_broker_tests.rs:257 | github-token | ghp_ab…890 (40 chars) |
| codex-rs/network-proxy/src/credential_broker_tests.rs:348 | github-token | ghp_ab…890 (40 chars) |
| codex-rs/secrets/src/sanitizer.rs:52 | aws-access-key | AKIAAB…NOP (20 chars) |
Pattern hits (18)
| Where | Rule | Match |
|---|---|---|
| .devcontainer/Dockerfile:21 | download-piped-to-shell | RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal && \ |
| codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts:111 | very-long-line | 9167 chars |
| codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts:89 | very-long-line | 7113 chars |
| codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts:99 | very-long-line | 7108 chars |
| codex-rs/core/src/exec_policy.rs:107 | powershell-encoded | &["powershell", "-EncodedCommand"], |
| codex-rs/core/src/exec_policy.rs:112 | powershell-encoded | &["powershell.exe", "-EncodedCommand"], |
| codex-rs/core/src/tools/handlers/harness_aliases.rs:5175 | long-hex-escape-run | b"GIF89a\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b", |
| codex-rs/core/tests/suite/apply_patch_cli.rs:1435 | powershell-encoded (test/example) | "powershell.exe -NoLogo -NoProfile -NonInteractive -EncodedCommand {encoded}" |
| codex-rs/linux-sandbox/tests/suite/managed_proxy.rs:620 | raw-socket-shell (test/example) | "proxy=\"${WSS_PROXY#*://}\"; host=\"${proxy%%:*}\"; port=\"${proxy##*:}\"; exec 3<>/dev/tcp/${host}/${port}; printf 'GET http://example.com/ HTTP/1.1\\r\\nHost… |
| codex-rs/linux-sandbox/tests/suite/managed_proxy.rs:652 | raw-socket-shell (test/example) | &["bash", "-c", "echo hi > /dev/tcp/192.0.2.1/80"], |
| codex-rs/linux-sandbox/tests/suite/managed_proxy.rs:926 | raw-socket-shell (test/example) | "exec 3<>/dev/tcp/${proxy%:*}/${proxy##*:}; ", |
| codex-rs/product-info/src/lib.rs:28 | download-piped-to-shell | const CODEX_INSTALL_COMMAND: &str = "curl -fsSL https://chatgpt.com/codex/install.sh | sh"; |
| codex-rs/product-info/src/lib.rs:30 | download-piped-to-shell | curl -fsSL https://www.openinterpreter.com/install | sh"; |
| codex-rs/product-info/src/lib.rs:266 | download-piped-to-shell | "curl -fsSL https://chatgpt.com/codex/install.sh | sh" |
| codex-rs/windows-sandbox-rs/src/winutil.rs:303 | powershell-encoded | "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -EncodedCommand abc==" |
| codex-rs/windows-sandbox-rs/src/winutil.rs:309 | powershell-encoded | "cmd.exe /c \"\\\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\\\" -NoProfile -EncodedCommand abc==\"" |
| scripts/install/install-open-interpreter.sh:29 | download-piped-to-shell | curl -fsSL "https://www.openinterpreter.com/install" | sh -s -- "$@" |
| scripts/install/install-open-interpreter.sh:34 | download-piped-to-shell | wget -q -O - "https://www.openinterpreter.com/install" | sh -s -- "$@" |
URLs to bare IP addresses (5)
| Where | Rule | Match |
|---|---|---|
| codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:76 | ip-literal-url | "http://100.64.0.1/", |
| codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:164 | ip-literal-url | let url = parse_url("https://8.8.8.8/"); |
| codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:170 | ip-literal-url | let url = parse_url("http://1.1.1.1/path"); |
| codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:176 | ip-literal-url | let url = parse_url("http://172.15.0.1/"); |
| codex-rs/core/tests/suite/network_approval.rs:1676 | ip-literal-url | let command = "python3 -c \"import urllib.request; opener = urllib.request.build_opener(urllib.request.ProxyHandler()); print('OK:' + opener.open('http://1.1.1.… |
npm lifecycle scripts (1)
sdk/typescript/package.jsonprepare:pnpm run build
Installer scripts (14)
- .github/actions/setup-msvc-env/setup-msvc-env.ps1, 258 lines
- .github/scripts/install-musl-build-tools.sh, 315 lines, uses sudo; talks to mirrors.edge.kernel.org
- .github/scripts/run-argument-comment-lint-bazel.sh, 58 lines
- .github/scripts/run-bazel-ci.sh, 418 lines
- .github/scripts/run-bazel-query-ci.sh, 43 lines
- .github/scripts/setup-dev-drive.ps1, 64 lines
- codex-cli/scripts/run_in_container.sh, 96 lines
- codex-rs/scripts/setup-windows.ps1, 247 lines
- scripts/install/install-open-interpreter.ps1, 78 lines; talks to www.openinterpreter.com
- scripts/install/install-open-interpreter.sh, 40 lines, fetches and runs a remote script; talks to www.openinterpreter.com
- scripts/install/install.ps1, 1,107 lines; talks to api.github.com
- scripts/install/install.sh, 1,127 lines, edits your shell profile; talks to api.github.com, github.com
- scripts/run_tui_with_exec_server.sh, 62 lines
- scripts/start-codex-exec.sh, 186 lines, uses sudo
Worst known vulnerabilities (24 of 101)
| Advisory | Severity | Package | Summary |
|---|---|---|---|
| GHSA-f26g-jm89-4g65 | high | gix@0.81.0 | gitoxide: CommandForbiddenInModulesConfiguration Bypass in gix_submodule::File::update() Enables Arbitrary Command Execu… |
| GHSA-fr8x-3vfx-f45h | high | gix@0.81.0 | gix and gitoxide: unvalidated submodule name traverses out of .git/modules and redirects state() / open() to another rep… |
| GHSA-p3hw-mv63-rf9w | high | gix@0.81.0 | gix's submodule name validation bypass + trust inheritance flaw enables path traversal and credential disclosure |
| GHSA-pg4w-g64p-qwhj | high | gix@0.81.0 | gix and gitoxide's symlinked .gitmodules are followed and parsed from outside of the repository |
| GHSA-f89h-2fjh-2r9q | high | gix-fs@0.19.2 | gix-fs: Symlink prefix-reuse allows worktree escape during checkout |
| GHSA-x494-mj8g-cj27 | high | gix-pack@0.68.0 | gix-pack has multiple DoS vectors: unchecked indexing panics and uncapped OOM allocations from crafted pack data |
| GHSA-3v94-mw7p-v465 | high | hickory-proto@0.25.2 | hickory-proto: NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses |
| GHSA-33f5-2c5q-wgwj | high | rmcp@1.8.0 | RMCP: Missing Resource Field Validation in OAuth Protected Resource Metadata Discovery |
| GHSA-9pj6-vhgr-3mwh | high | rmcp@1.8.0 | RMCP: Unauthenticated permanent session-table leak in rmcp Streamable HTTP server transport leads to remote denial-of-se… |
| GHSA-3jxr-9vmj-r5cp | high | brace-expansion@1.1.12 | brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups |
| GHSA-mh99-v99m-4gvg | high | brace-expansion@1.1.12 | brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash |
| GHSA-rgw5-rvv9-x895 | high | brace-expansion@1.1.12 | brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation |
| GHSA-3jxr-9vmj-r5cp | high | brace-expansion@5.0.5 | brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups |
| GHSA-mh99-v99m-4gvg | high | brace-expansion@5.0.5 | brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash |
| GHSA-rgw5-rvv9-x895 | high | brace-expansion@5.0.5 | brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation |
| GHSA-73wf-gq98-2v4g | high | browserslist@4.26.2 | Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.json custom stats (normalizeStats) |
| GHSA-c83g-rgw3-j3cx | high | browserslist@4.26.2 | Browserslist: Unbounded memory growth (no cache eviction) via distinct query results, leading to eventual OOM |
| GHSA-4c8g-83qw-93j6 | high | fast-uri@3.1.1 | fast-uri vulnerable to host confusion via failed IDN canonicalization |
| GHSA-7p8r-x3mc-p8w7 | high | fast-uri@3.1.1 | fast-uri vulnerable to host confusion via backslash authority introducer |
| GHSA-f65p-4m7j-42xc | high | fast-uri@3.1.1 | fast-uri vulnerable to server-side request forgery via malformed IPv6 normalization |
| GHSA-jqff-g426-hqxp | high | fast-uri@3.1.1 | fast-uri vulnerable to host confusion via percent-encoded scheme normalization |
| GHSA-v2hh-gcrm-f6hx | high | fast-uri@3.1.1 | fast-uri vulnerable to host confusion via literal backslash authority delimiter |
| GHSA-v39h-62p7-jpjc | high | fast-uri@3.1.1 | fast-uri vulnerable to host confusion via percent-encoded authority delimiters |
| GHSA-mwp4-54f8-5fhr | high | ip-address@10.1.0 | ip-address: Address4 decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trus… |
By the numbers
| Stars | 68.5K |
|---|---|
| Forks | 5,881 |
| Contributors | 616 |
| Commits | 10.8K |
| Open issues | 1 |
| Open pull requests | 4 |
| Releases | 70 |
| Latest release | rust-v0.0.45 |
| Licence | Apache-2.0 |
| Main language | Rust |
| Project age | 3 years |
| Last push | Sep 27, 2026 |
| Tracked files | 7,657 |
| Lines of code | 2.1M |
| Checkout size | 82 MB |
Lines by language: Rust 1.7M, JSON 272.3K, Python 53.1K, Markdown 28.6K, TypeScript 12K, YAML 8,179.
Questions
Is Open Interpreter free?
Yes. It is Apache-2.0 with no paid tier in the repository. You pay the model provider you connect, and the whole point of the project is that the models it targets, such as Kimi, GLM, DeepSeek and Qwen, cost far less per token than frontier models. A local OpenAI-compatible server works too.
What happened to the Python Open Interpreter?
The maintainers replaced it with this Rust agent built on a fork of OpenAI's Codex. The original Python project, the one installed with pip install open-interpreter, lives on as a community-maintained fork at endolith/open-interpreter. The two share a name and a history but not code, so tutorials written before the rewrite describe the Python version.
How is Open Interpreter different from Codex CLI?
It starts from the same Rust code, so the sandbox, approvals, MCP and exec protocol are Codex's. The differences are the models and the harnesses: Codex talks only to OpenAI, while Open Interpreter targets open models and can emulate other agents' harnesses, such as Claude Code's or Kimi Code's, to get the best from each model.
This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.
