7 min read

Open Interpreter: A Coding Agent for Low-Cost Models (GitHub, Scanned)

A Rust fork of OpenAI's Codex tuned for cheap open models like Kimi, GLM, DeepSeek and Qwen.

Open Interpreter logo
✅
Scan: safe. Nothing malicious, and it inherits Codex's careful engineering. Know that the install and the built-in update both pipe a script from openinterpreter.com to your shell, and that this is a young fork of a very large code base. Scanned Sep 27, 2026; the full report is below.

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.

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 | sh

2. Start a session in your project, then pick a provider and model with /model

interpreter

3. Switch the agent harness to suit the model

/harness

The 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

CheckResult
Secrets8 candidates found and read; see the notes above.
Suspicious code18 pattern hits found and read; every one is listed under the raw findings.
Install-time code1 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 binariesNone.
CI workflows26 workflows. None use pull_request_target. 0 of 50 third-party actions pinned to a tag rather than a commit.
Network hosts40 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 vulnerabilities101 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 hygieneHas security policy, automated dependency updates, licence file. Missing CodeQL, contributing guide.
OpenSSF ScorecardNot 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)
WhereRuleMatch
codex-rs/agent-identity/src/lib.rs:832private-key-----B…--- (27 chars)
codex-rs/login/src/auth/agent_identity.rs:573private-key-----B…--- (27 chars)
codex-rs/login/src/auth/auth_tests.rs:2826private-key-----B…--- (27 chars)
codex-rs/network-proxy/src/credential_broker_tests.rs:52github-tokengithub…FGH (65 chars)
codex-rs/network-proxy/src/credential_broker_tests.rs:226github-tokenghp_ab…890 (40 chars)
codex-rs/network-proxy/src/credential_broker_tests.rs:257github-tokenghp_ab…890 (40 chars)
codex-rs/network-proxy/src/credential_broker_tests.rs:348github-tokenghp_ab…890 (40 chars)
codex-rs/secrets/src/sanitizer.rs:52aws-access-keyAKIAAB…NOP (20 chars)
Pattern hits (18)
WhereRuleMatch
.devcontainer/Dockerfile:21download-piped-to-shellRUN curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal && \
codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts:111very-long-line9167 chars
codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts:89very-long-line7113 chars
codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts:99very-long-line7108 chars
codex-rs/core/src/exec_policy.rs:107powershell-encoded&["powershell", "-EncodedCommand"],
codex-rs/core/src/exec_policy.rs:112powershell-encoded&["powershell.exe", "-EncodedCommand"],
codex-rs/core/src/tools/handlers/harness_aliases.rs:5175long-hex-escape-runb"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:1435powershell-encoded (test/example)"powershell.exe -NoLogo -NoProfile -NonInteractive -EncodedCommand {encoded}"
codex-rs/linux-sandbox/tests/suite/managed_proxy.rs:620raw-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:652raw-socket-shell (test/example)&["bash", "-c", "echo hi > /dev/tcp/192.0.2.1/80"],
codex-rs/linux-sandbox/tests/suite/managed_proxy.rs:926raw-socket-shell (test/example)"exec 3<>/dev/tcp/${proxy%:*}/${proxy##*:}; ",
codex-rs/product-info/src/lib.rs:28download-piped-to-shellconst CODEX_INSTALL_COMMAND: &str = "curl -fsSL https://chatgpt.com/codex/install.sh | sh";
codex-rs/product-info/src/lib.rs:30download-piped-to-shellcurl -fsSL https://www.openinterpreter.com/install | sh";
codex-rs/product-info/src/lib.rs:266download-piped-to-shell"curl -fsSL https://chatgpt.com/codex/install.sh | sh"
codex-rs/windows-sandbox-rs/src/winutil.rs:303powershell-encoded"\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -EncodedCommand abc=="
codex-rs/windows-sandbox-rs/src/winutil.rs:309powershell-encoded"cmd.exe /c \"\\\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\\\" -NoProfile -EncodedCommand abc==\""
scripts/install/install-open-interpreter.sh:29download-piped-to-shellcurl -fsSL "https://www.openinterpreter.com/install" | sh -s -- "$@"
scripts/install/install-open-interpreter.sh:34download-piped-to-shellwget -q -O - "https://www.openinterpreter.com/install" | sh -s -- "$@"
URLs to bare IP addresses (5)
WhereRuleMatch
codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:76ip-literal-url"http://100.64.0.1/",
codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:164ip-literal-urllet url = parse_url("https://8.8.8.8/");
codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:170ip-literal-urllet url = parse_url("http://1.1.1.1/path");
codex-rs/core/src/tools/handlers/kimi_code_fetch_url_tests.rs:176ip-literal-urllet url = parse_url("http://172.15.0.1/");
codex-rs/core/tests/suite/network_approval.rs:1676ip-literal-urllet 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.json prepare: pnpm run build
Installer scripts (14)
Worst known vulnerabilities (24 of 101)
AdvisorySeverityPackageSummary
GHSA-f26g-jm89-4g65highgix@0.81.0gitoxide: CommandForbiddenInModulesConfiguration Bypass in gix_submodule::File::update() Enables Arbitrary Command Execu…
GHSA-fr8x-3vfx-f45hhighgix@0.81.0gix and gitoxide: unvalidated submodule name traverses out of .git/modules and redirects state() / open() to another rep…
GHSA-p3hw-mv63-rf9whighgix@0.81.0gix's submodule name validation bypass + trust inheritance flaw enables path traversal and credential disclosure
GHSA-pg4w-g64p-qwhjhighgix@0.81.0gix and gitoxide's symlinked .gitmodules are followed and parsed from outside of the repository
GHSA-f89h-2fjh-2r9qhighgix-fs@0.19.2gix-fs: Symlink prefix-reuse allows worktree escape during checkout
GHSA-x494-mj8g-cj27highgix-pack@0.68.0gix-pack has multiple DoS vectors: unchecked indexing panics and uncapped OOM allocations from crafted pack data
GHSA-3v94-mw7p-v465highhickory-proto@0.25.2hickory-proto: NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses
GHSA-33f5-2c5q-wgwjhighrmcp@1.8.0RMCP: Missing Resource Field Validation in OAuth Protected Resource Metadata Discovery
GHSA-9pj6-vhgr-3mwhhighrmcp@1.8.0RMCP: Unauthenticated permanent session-table leak in rmcp Streamable HTTP server transport leads to remote denial-of-se…
GHSA-3jxr-9vmj-r5cphighbrace-expansion@1.1.12brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-mh99-v99m-4gvghighbrace-expansion@1.1.12brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-rgw5-rvv9-x895highbrace-expansion@1.1.12brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation
GHSA-3jxr-9vmj-r5cphighbrace-expansion@5.0.5brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-mh99-v99m-4gvghighbrace-expansion@5.0.5brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-rgw5-rvv9-x895highbrace-expansion@5.0.5brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation
GHSA-73wf-gq98-2v4ghighbrowserslist@4.26.2Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.json custom stats (normalizeStats)
GHSA-c83g-rgw3-j3cxhighbrowserslist@4.26.2Browserslist: Unbounded memory growth (no cache eviction) via distinct query results, leading to eventual OOM
GHSA-4c8g-83qw-93j6highfast-uri@3.1.1fast-uri vulnerable to host confusion via failed IDN canonicalization
GHSA-7p8r-x3mc-p8w7highfast-uri@3.1.1fast-uri vulnerable to host confusion via backslash authority introducer
GHSA-f65p-4m7j-42xchighfast-uri@3.1.1fast-uri vulnerable to server-side request forgery via malformed IPv6 normalization
GHSA-jqff-g426-hqxphighfast-uri@3.1.1fast-uri vulnerable to host confusion via percent-encoded scheme normalization
GHSA-v2hh-gcrm-f6hxhighfast-uri@3.1.1fast-uri vulnerable to host confusion via literal backslash authority delimiter
GHSA-v39h-62p7-jpjchighfast-uri@3.1.1fast-uri vulnerable to host confusion via percent-encoded authority delimiters
GHSA-mwp4-54f8-5fhrhighip-address@10.1.0ip-address: Address4 decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trus…

By the numbers

Stars68.5K
Forks5,881
Contributors616
Commits10.8K
Open issues1
Open pull requests4
Releases70
Latest releaserust-v0.0.45
LicenceApache-2.0
Main languageRust
Project age3 years
Last pushSep 27, 2026
Tracked files7,657
Lines of code2.1M
Checkout size82 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.