Connecting Open Terminal to Open WebUI
Open Terminal is installed and running. This guide covers connecting it to Open WebUI.
Recommended: Admin Panel
Recommended for all deployments, including single-user. The Admin Panel keeps the API key server-side.
1. Open the Admin Panel
Click your name at the bottom of the left sidebar to open the user menu, then click Admin Panel.

2. Go to Settings → Integrations
In the Admin Panel, click Settings in the top nav, then click Integrations.

3. Find the "Open Terminal" section
Scroll down until you see the Open Terminal section.

Open Terminal has its own section under Integrations. Don't add it under "External Tools" or "Tool Servers". Using the dedicated section gives you the built-in file browser and terminal sidebar.
4. Click + and fill in the details
| Field | What to enter |
|---|---|
| URL | http://localhost:8000 (or http://open-terminal:8000 if using Docker Compose) |
| API Key | The password you chose during installation |
| Auth Type | Leave as Bearer (the default) |

5. Save
Click Save. A green "Connected" indicator confirms the connection.

6. (Optional) Restrict access to specific groups
Limit terminal access to specific user groups via the access control button.
7. Select a terminal in chat
In the chat input area, click the terminal button (cloud icon ☁). Your admin-configured terminals appear under System. Select one to activate it for the conversation.

The selected terminal name appears next to the cloud icon. The AI can now execute commands, read files, and run code through it.
8. Enable native function calling
Native function calling is the default tool-calling mode as of v0.10.0, so it is already active for new models. The only thing to check is that the model was not switched to Legacy:
- Go to Workspace → Models
- Click the edit button on the model you're using
- Make sure Function Calling is set to Native (the default), not Legacy
- Save

If the model is set to Legacy, Open WebUI falls back to prompt-based tool calling instead of the provider's structured tool-call format. That is less reliable and may not trigger terminal commands at all. Native (the default) is recommended.
Not all models are equally capable with tools. Multi-step terminal workflows are the most demanding agentic use case in Open WebUI, so this is one place where a top-tier model genuinely pays off — GPT-5.6 Sol, Claude Opus 5, or Gemini 3.5 Pro. A current mid-tier model (GPT-5.6 Terra, Claude Sonnet 5, Gemini 3.6 Flash, MiniMax M3) is the practical minimum. Older or very small models may fail to invoke tools or produce malformed tool calls. If results are poor, try a more capable model.
9. Try it out
Ask your AI something like:
"What operating system are you running on?"
The AI should use Open Terminal to run a command and tell you the answer.

For Docker deployments, you can configure terminal connections automatically using the TERMINAL_SERVER_CONNECTIONS environment variable, which is useful when you want everything set up at startup without manual steps.
Personal Settings (testing only)
Adding a terminal connection via personal Settings sends the API key to your browser and routes requests directly from it. This is fine for quick testing, but for anything beyond that, use Admin Settings instead. It's more secure and works for all users automatically.
If you need to test a connection without admin access, you can add one from Settings → Integrations → Open Terminal. The same URL and API key fields apply.
Troubleshooting
"Connection failed" or timeout
This almost always means Open WebUI can't reach Open Terminal over the network. What URL to use depends on your setup:
| Your setup | URL to use |
|---|---|
| Docker Compose (recommended) | http://open-terminal:8000 |
| Separate Docker containers | http://host.docker.internal:8000 |
| Both on same machine, no Docker | http://localhost:8000 |
| Open Terminal on another machine | http://that-machines-ip:8000 |
Run this command to see if Open WebUI can reach Open Terminal:
docker exec open-webui curl -s http://open-terminal:8000/healthIf it prints {"status": "ok"}, the connection works. If it errors, the containers can't see each other.
Terminal shows up but AI doesn't use it
Make sure:
- The toggle switch next to the connection is turned on. Turning it off takes the terminal server out of service completely: the model is not given its tools, the terminal and file browser refuse to connect, and any proxied request to it is rejected. It is a working off switch, not just a hint to the model, so use it to retire a server without deleting the connection.
- You've refreshed the page after adding the connection
- Your model supports tool calling (most modern models do)
Wrong API key
If you see "unauthorized" or "invalid key":
- Double-check the key matches what you set during installation
- If you forgot it, run
docker logs open-terminaland look for theAPI key:line