# The Octave sandbox — needed by `matlab_run` **Nothing to set up** beyond building the image, which `docker compose up -d --build` does. This page explains what it is, because the tool is named for MATLAB and does not contain any. ## What it is `matlab_run` executes code in **GNU Octave**, in a container with `network_mode: "none"` — no interfaces, no DNS, no route anywhere. Jobs reach it through a file drop on a shared tmpfs, not over a socket, so there is nothing listening to reach. The tool reports three distinct verdicts, and the distinction is the point: - it ran, and here is the output; - it is **not valid MATLAB** (the linter caught a construct Octave accepts and MATLAB does not, such as `endfor` or `!=`); - it failed for a reason that is not the code's fault. The second one exists because the assistant is often asked about MATLAB by people who do not have it. Silently accepting Octave-only syntax would teach them something untrue. ## Limits Set in `configs/owuitools.env`: | Setting | Default | What it bounds | |---|---|---| | `OWUITOOLS_OCTAVE_TIMEOUT` | 25 s | one run | | `OWUITOOLS_OCTAVE_MAX_TIMEOUT` | 60 s | the most a caller may ask for | ## Checking it ```sh ./tests/try-tool.sh matlab_run '{"code": "x = linspace(0,1,5);\ndisp(sum(x))"}' ``` Expect `MATLAB run OK`. Then try `for i=1:2\n printf(\"%d\",i);\nendfor` and expect `NOT VALID MATLAB`. ## Plots A figure comes back as a `data:image/png` URI. Open WebUI hands those to the *model* as a vision input and never shows them to you — so the `inline_tool_images` filter exists to put the picture in the chat as well. See [../filters.md](../filters.md).