A minimal terminal interaction API
Project description
⚡ Open Terminal
A lightweight API for running shell commands remotely — with real-time streaming and secure access.
Getting Started
Docker (recommended)
docker run -d --name open-terminal --restart unless-stopped -p 8000:8000 -e OPEN_TERMINAL_API_KEY=your-secret-key ghcr.io/open-webui/open-terminal
If no API key is provided, one is auto-generated and printed on startup (docker logs open-terminal).
Build from Source
docker build -t open-terminal .
docker run -p 8000:8000 open-terminal
Bare Metal (if you like to live dangerously)
pip install open-terminal
open-terminal run --host 0.0.0.0 --port 8000 --api-key your-secret-key
| Option | Default | Env Var | Description |
|---|---|---|---|
--host |
0.0.0.0 |
— | Bind address |
--port |
8000 |
— | Bind port |
--api-key |
auto-generated | OPEN_TERMINAL_API_KEY |
Bearer API key |
Usage
Run a Command
curl -X POST http://localhost:8000/execute \
-H "Authorization: Bearer <api-key>" \
-H "Content-Type: application/json" \
-d '{"command": "echo hello"}'
Stream Output
curl -X POST "http://localhost:8000/execute?stream=true" \
-H "Authorization: Bearer <api-key>" \
-H "Content-Type: application/json" \
-d '{"command": "for i in 1 2 3; do echo $i; sleep 1; done"}'
Output streams as JSONL:
{"type": "stdout", "data": "1\n"}
{"type": "stdout", "data": "2\n"}
{"type": "stdout", "data": "3\n"}
{"type": "exit", "data": 0}
Upload a File
From URL:
curl -X POST "http://localhost:8000/files/upload?url=https://example.com/data.csv&dir=/tmp" \
-H "Authorization: Bearer <api-key>"
Direct upload:
curl -X POST "http://localhost:8000/files/upload?dir=/tmp" \
-H "Authorization: Bearer <api-key>" \
-F "file=@local_file.csv"
Via temporary link (no auth needed to upload):
# 1. Generate an upload link
curl -X POST "http://localhost:8000/files/upload/link?dir=/tmp" \
-H "Authorization: Bearer <api-key>"
# → {"url": "http://localhost:8000/files/upload/a1b2c3d4..."}
# 2. Upload to the link (no auth required)
curl -X POST "http://localhost:8000/files/upload/a1b2c3d4..." \
-F "file=@local_file.csv"
Filename is automatically derived from the uploaded file or URL.
Download a File
curl "http://localhost:8000/files/download/link?path=/tmp/output.csv" \
-H "Authorization: Bearer <api-key>"
Returns a temporary download link (valid for 5 minutes, no auth needed):
{"url": "http://localhost:8000/files/download/a1b2c3d4..."}
API Docs
Interactive API documentation is available at http://localhost:8000/docs.
License
MIT — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file open_terminal-0.1.10.tar.gz.
File metadata
- Download URL: open_terminal-0.1.10.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e97a22719308247d725e7c2345a949e1903be747d8e7908ab129c21b9f1a5c42
|
|
| MD5 |
d7880fe9fc546240b702925475dafb6e
|
|
| BLAKE2b-256 |
6bdab606b2ccdfc750dfabaf7609cabdc8f2f1b2f7957e05c94135d515131690
|
File details
Details for the file open_terminal-0.1.10-py3-none-any.whl.
File metadata
- Download URL: open_terminal-0.1.10-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cba9462c9c63a736879cfa271c04cc99b53a608811e0dd4ebe491cab4dd44113
|
|
| MD5 |
6698e9ad708e2da28649d2be49c861bf
|
|
| BLAKE2b-256 |
91c21ff844bd97214adb86f339b84c727dedf9c79b95edbbbee4ddeb7840a83e
|