How it works¶
The pieces¶
you ──► Open Interpreter ──HTTP──► Ollama ──► model (e.g. gpt-oss:20b)
│ runs the commands the model asks for
▼
your folder (-C)
satyrn: downloads and verifies both tools, rates and downloads models,
writes their settings, starts and stops Ollama, runs checks and benchmarks
- Open Interpreter
The coding agent and its terminal interface. It sends your request to the model together with a list of tools, runs the tool calls the model makes (shell commands) and sends the results back, until the model gives a final answer.
- Ollama
Runs the model on your CPU or GPU and offers it on
127.0.0.1:11434through an OpenAI-compatible API.--osstells Open Interpreter to use it.satyrnPure Python with no dependencies outside the standard library, so it works the same on Linux, macOS and Windows.
satyrn.py installlinks thesatyrncommand to the cloned folder; everything it downloads or creates goes into that folder’s.runtime/.
Two coding agents¶
pi and Open Interpreter do
the same job: they send your request and their tools to the model, run the tool calls it makes
and send back the results until the model answers. satyrn installs both and gives each the
same model, its own context and its own settings folder; satyrn code starts the one you chose.
Each agent gets a context file written for its tools:
config/context/pi.mdFor pi: its tools
read,write,editandbash. satyrn installs it as pi’s system prompt (SYSTEM.mdin.runtime/pi-home).config/context/open-interpreter.mdFor Open Interpreter: its tools
exec_commandandwrite_stdin, and writing files with the shell (see below).
Both tell the model that it is Satyrn, a coding agent on the user’s computer, and to put each
sentence of its answers on its own line, which keeps answers readable in a terminal. pi gets its
model list from config/models.toml as well (context window and reasoning settings), and its
telemetry, update checks and session sharing are switched off.
What the model is told¶
Open Interpreter 0.0.60 only has settings for OpenAI’s hosted models. A local model would get a
fallback (warning: Model metadata for gpt-oss:20b not found): a 17 KB generic system prompt
that tells it to edit files with an apply_patch tool that is never registered, plus 18 KB of
tools it cannot use (sub-agents, goals, web search) and a list of skills that need OpenAI’s
services. That is about 6,700 prompt tokens, about five minutes of reading on a laptop CPU
before the model even starts. The model then spends many turns on the missing tool. A logging
proxy between the interpreter and Ollama showed all of this.
This project gives every model context written for it:
config/context/open-interpreter.mdThe system prompt. It names the two tools that exist (
exec_commandto run a shell command,write_stdinto answer a running command), shows how to create and change files with them (a heredoc, a short Python replacement, PowerShell), and says how to work: look first, make the change, run it to check, then finish with a short summary. It also covers runs nobody watches: no questions, no repeated failing calls.config/models.tomlOne entry per model: reasoning efforts and how much command output to keep.
satyrn.pyturns it into the interpreter’s model catalog (.runtime/interpreter-home/models.json), together with the system prompt and the context window of the server.config/interpreter.tomlPoints the interpreter at that catalog and switches off what a local model cannot use: web search, sub-agents, goals, image viewing, questions to the user and the skills list.
With this, the tools sent with every request shrink from 18 KB to 3 KB and the extra
instructions from 3.5–7 KB to a 0.6 KB note about the sandbox. gpt-oss:20b went from about
33 minutes to about 2 minutes for the square-root task.
apply_patch stays switched off. The interpreter offers it only as a “freeform” tool, and
Ollama returns calls to such tools as ordinary JSON function calls, which the interpreter
rejects (tool apply_patch invoked with incompatible payload). The models write files with the
shell instead.
Changes to config/models.toml and the files in config/context/ apply the next time you start
a coding agent. Changes to config/interpreter.toml need satyrn setup again.
Runs that cannot finish¶
A model that cannot solve a task might keep trying forever. check and bench therefore stop
a run after one hour (--timeout) and count it as failed. They stop everything the run started,
including programs the model launched in their own terminal sessions: first politely, then by
force after ten seconds. They then unload the model, because Ollama would otherwise finish the
batch of prompt tokens it is working on, which takes minutes for a slow model.
When you talk to the interpreter yourself, you are the time limit: Ctrl+C stops it.
Where everything lives¶
satyrn-getting-started/
satyrn.py entry point; `satyrn.py install` adds the `satyrn` command
pins.toml versions, download checksums, model digests, port, context window
config/ instructions and settings for the interpreter
src/satyrn_local/ the Python code behind satyrn.py
.runtime/ everything downloaded or generated (delete it to start over)
downloads/ verified archives
ollama/ interpreter/ the unpacked tools
models/ model files
home/ Ollama's home folder (its key pair), instead of ~/.ollama
interpreter-home/ interpreter settings, model catalog, conversations, logs
settings.toml your choices, for example the model from `satyrn use`
bin/ activate* launchers for `interpreter` and `ollama`
ollama.pid ollama.log the server started with `start`
checks/ bench/ files and results of `check` and `bench`