docs.na.id.au

What Open Terminal is

05 — Open Terminal & Tooling

Giving the model a shell: Open Terminal as a hosted, API-driven terminal that agents can drive, plus how it fits the wider tooling layer.

What Open Terminal is

Open Terminal is a containerised terminal service that exposes a real shell over a REST API rather than a browser-only web terminal. That API surface is the point: it lets a model — not just a human — open sessions, send commands, and read output, which turns “the LLM can talk” into “the LLM can do.”

It’s part of the Open WebUI family and plugs in next to the chat UI, so the same authentication and multi-user model carries over.

How it’s deployed here

open-terminal:
    image: ghcr.io/open-webui/open-terminal
    container_name: open-terminal
    ports:
      - "8080:8080"
    volumes:
      - /var/local/docker-files/open-terminal:/home
    environment:
      - OPEN_TERMINAL_API_KEY=<REDACTED>
      - OPEN_TERMINAL_MULTI_USER=true
    networks:
      - ai-network
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: unless-stopped

Key choices, and why:

Why the model needs a shell

A chat model with no tools can only describe what to do. A terminal tool closes that gap: the model can inspect the filesystem, run scripts, check command output, and iterate. This is the same “application tier calls a tool, gets a result, feeds it back into context” loop from 01 — Architecture — Open Terminal is just the most general tool you can give it.

The design consequence: the terminal is a sub-agent-style capability. Just as you’d delegate a coding sub-task to a smaller model, you can have the main agent plan and the terminal (driven by a model) execute. Keeping the executing model small and the planning model big mirrors the sub-agent split.

Security: this is the sharp edge

Giving a model shell access is the highest-risk part of a local AI stack. Guardrails that matter in practice:

How it relates to the other tools

A typical agentic flow: user asks the Open WebUI chat → the (primary) model decides it needs to run something → the pipeline invokes Open Terminal’s API → a command runs in a session → output is returned → the model reasons over it and either answers or runs the next command.


Source Disclaimer