GitHub - open-webui/open-terminal: A computer you can curl ⚡
Service

GitHub - open-webui/open-terminal: A computer you can curl ⚡

open-webui
2026.03.09
·GitHub·by 이호민
#Agent#AI#API#Docker#Terminal

핵심 포인트

  • 1Open Terminal은 AI 에이전트와 자동화 도구가 명령 실행, 파일 관리 및 코드 실행 환경을 REST API를 통해 제공하는 경량의 자체 호스팅 터미널입니다.
  • 2이 도구는 Docker를 통한 샌드박스 환경 또는 pip 설치를 통한 bare metal 환경으로 배포 가능하며, 패키지 추가 및 Docker 소켓 마운트 등 다양한 커스터마이징 옵션을 제공합니다.
  • 3Open WebUI와 통합되어 AI 인터페이스에서 터미널 기능을 제공하며, 단일 컨테이너 내 다중 사용자 격리 모드를 지원하지만, 높은 보안이 요구되는 환경에서는 컨테이너별 격리를 권장합니다.

Open Terminal은 AI 에이전트 및 자동화 도구에 명령 실행, 파일 관리, 코드 실행을 위한 전용 환경을 제공하는 경량의 self-hosted terminal입니다. 이는 간단한 REST API를 통해 접근 가능하며, AI 어시스턴트가 작성한 코드를 실행할 수 있는 원격 shell 환경을 제공합니다.

배포 방법:

  1. Docker (sandboxed): 가장 권장되는 방법으로, 격리된 container 내에서 실행됩니다. Python, Node.js, git, build tools, data science libraries, ffmpeg 등 다양한 tool이 사전 설치되어 있습니다. 이는 host 시스템에 영향을 주지 않고 AI 에이전트에게 안전한 playground를 제공합니다. --name open-terminal, -p 8000:8000, -v open-terminal:/home/user, -e OPEN_TERMINAL_API_KEY=your-secret-key, ghcr.io/open-webui/open-terminal과 같은 docker run 명령어를 통해 실행됩니다.
  2. Bare metal: pip을 통해 설치하여 Python이 실행되는 모든 환경에서 직접 실행할 수 있습니다. 이 경우 명령은 사용자의 machine에서 직접 실행되며 실제 파일 및 도구에 접근합니다. 이는 로컬 개발, 개인 자동화 또는 AI 어시스턴트에게 프로젝트에 대한 전체 접근 권한을 부여하는 데 적합하지만, 사용자의 권한으로 실행되므로 sandboxed 실행이 필요한 경우 Docker 사용을 권장합니다. pip install open-terminalopen-terminal run --host 0.0.0.0 --port 8000 --api-key your-secret-key 명령으로 실행합니다.

Docker 환경 사용자 정의:
환경 변수를 통해 추가 package를 설치할 수 있습니다.

  • OPEN_TERMINAL_PACKAGES: startup 시 설치할 apt package 목록 (공백으로 구분).
  • OPEN_TERMINAL_PIP_PACKAGES: startup 시 설치할 pip package 목록 (공백으로 구분).
단, 이는 container 시작 시마다 package를 설치하므로 startup 시간이 길어질 수 있습니다. Docker CLI, Compose, Buildx가 포함되어 있어 에이전트가 image를 build하거나 container를 실행할 수 있도록 docker.sock을 mount할 수도 있습니다 (-v /var/run/docker.sock:/var/run/docker.sock). 이는 host의 Docker daemon에 대한 전체 접근 권한을 부여하므로 신뢰할 수 있는 환경에서만 사용해야 합니다. 보다 강력한 사용자 정의를 위해서는 Dockerfile을 직접 수정하여 custom image를 build할 수 있습니다.

설정:
Open Terminal은 TOML config file, environment variables, CLI flags를 통해 설정할 수 있으며, 설정 우선순위는 CLI flags > Environment variables > User config ($XDG_CONFIG_HOME/open-terminal/config.toml 또는 ~/.config/open-terminal/config.toml) > System config (/etc/open-terminal/config.toml) > Built-in defaults 순입니다. 주요 설정 항목으로는 host, port, api_key, cors_allowed_origins, log_dir, binary_mime_prefixes, execute_timeout 등이 있습니다. api_key와 같은 민감한 정보는 ps 또는 htop에서 노출되지 않도록 사용자 config에 저장하는 것이 좋습니다.

Open WebUI와의 통합:
Open Terminal은 Open WebUI와 통합되어 AI 어시스턴트가 Open WebUI interface에서 직접 명령을 실행하고 파일을 관리할 수 있도록 합니다. Integrations 설정에서 Open Terminal로 추가해야 하며, Tool server가 아닌 Open Terminal 연결로 추가 시 내장된 파일 navigation sidebar를 통해 디렉토리 탐색, 파일 업로드/다운로드/편집이 가능해집니다.
두 가지 연결 방식이 있습니다.

  1. Direct Connection: 사용자가 자신의 user settings에서 Open Terminal 인스턴스를 연결합니다. 요청이 browser에서 직접 발생하므로 terminal이 사용자의 로컬 machine 또는 접근 가능한 네트워크에 있을 때 유용합니다.
  2. System-Level Connection (Multi-User): 관리자가 admin panel에서 모든 사용자를 위해 Open Terminal 연결을 구성합니다. 요청은 Open WebUI backend를 통해 proxied되므로 terminal은 server에서만 접근 가능하면 됩니다. 여러 terminal을 설정할 수 있으며, 사용자 또는 그룹 수준에서 접근을 제어할 수 있습니다.

Multi-User Isolation:
단일 container 내에서 per-user isolation을 지원합니다. OPENTERMINALMULTIUSER=trueOPEN_TERMINAL_MULTI_USER=true 환경 변수를 설정하면 각 X-User-Id header가 전용 Linux user에 매핑되며, 각 user는 고유한 home directory를 가집니다. 파일, 명령, terminal, port 가시성이 표준 Unix permissions을 통해 격리됩니다. 하지만 multi-user mode는 공유 container 내에서 Unix permissions을 통한 process-level isolation을 제공하며, 사용자들이 동일한 kernel, network stack, 설치된 package를 공유합니다. 따라서 대규모 또는 신뢰할 수 없는 배포에는 적합하지 않으며, 더 강력한 보안 경계를 위해서는 per-container isolation이 필요합니다. container 당 user isolation이 필요한 경우 "Terminals"와 같은 솔루션을 고려할 수 있습니다.

API Docs:
인스턴스가 실행되면 http://localhost:8000/docs에서 전체 interactive API documentation을 확인할 수 있습니다.

라이선스:
MIT License를 따릅니다.