
Open Computer Use
io.github.Yambr由 GitHub 帳號 Yambr 發布v0.8.12.6更新於 Oct 24, 2026
Give any LLM its own computer — Docker sandboxes with bash, browser, docs, and sub-agents
概覽
自架式 MCP 伺服器,讓 LLM 擁有隔離的 Docker 沙箱,可執行 bash 與程式碼、使用即時瀏覽器、產生文件並執行子代理。
- 可以做什麼
- 在每個工作階段的隔離 Ubuntu 容器中執行 shell 指令與程式碼(bash、Python、Node.js、Java),逾時與資源限制可調整。透過 Playwright 與 CDP 即時串流操作瀏覽器,讓使用者看到模型所見。藉由內建技能產生 Word、Excel、PowerPoint 與 PDF 文件。在互動式終端啟動自動運作的 Claude Code 子代理,並自動設定 MCP 伺服器。以標準 MCP over Streamable HTTP 提供給 Open WebUI、Claude Desktop、n8n、LiteLLM 或自訂用戶端。
- 適用情境
- 當你希望模型真正操作一台電腦——安裝套件、執行服務、瀏覽網頁、產出辦公文件——而且這些操作發生在可丟棄的容器中,同時你願意自行架設整套 Docker 環境時使用。適合實驗與多使用者測試環境,不適合正式上線。
- 執行需求
- 本機 Docker 主機並授予 Docker socket 存取權、Docker Compose,以及複製倉庫與 .env 檔案。需要 LLM API 金鑰(OPENAI_API_KEY,可選 OPENAI_API_BASE_URL),另可選 MCP_API_KEY、VISION_API_KEY、ANTHROPIC_AUTH_TOKEN 與 POSTGRES_PASSWORD。首次建置映像約需 15 分鐘;伺服器監聽 8081 埠,內附的 Open WebUI 監聽 3000 埠。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Open Computer Use,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Open Computer Use
[Build] [CodeQL] [Release] [License] [Stars] [Issues]
MCP server that gives any LLM its own computer — managed Docker workspaces with live browser, terminal, code execution, document skills, and autonomous sub-agents. Self-hosted, open-source, pluggable into any model.
ARCHIVED. This repository is no longer developed or maintained. It receives no fixes, no security updates and no dependency updates, and issues and pull requests are closed. Do not run it in production.
Open Computer Use was a proof of concept for giving an LLM a real computer. Its successor is Wide Moat: Open WebUI with Open Terminal, a browser, and a Kubernetes sandbox isolated with gVisor, with ingress sidecars and egress through a MITM proxy. The isolation and credential-handling problems listed under Known limitations are addressed in that architecture, not in this codebase. Try it at ai.lab.widemoat.ai.
The code stays available under FSL-1.1-Apache-2.0: use it, fork it, self-host it. Each release converts to Apache-2.0 two years after publication.
What is this?
An MCP server that gives any LLM a fully-equipped Ubuntu sandbox with isolated Docker containers. Think of it as your AI's computer — it can do everything a developer can do:
- Execute code — bash, Python, Node.js, Java in isolated containers
- Create documents — Word, Excel, PowerPoint, PDF with professional styling via skills
- Browse the web — Playwright + live CDP browser streaming (you see what AI sees in real-time)
- Run Claude Code — autonomous sub-agent with interactive terminal, MCP servers auto-configured
- Use 13+ skills — battle-tested workflows for document creation, web testing, design, and more
Built for production multi-user deployments. Tested with 1,000+ MAU. Each chat session runs in its own isolated Docker container — the AI can install packages, create files, run servers, and nothing leaks between users. Works seamlessly across MCP clients: start with Open WebUI today, switch to Claude Desktop or n8n tomorrow — same backend, no migration.
Key differentiators
Works with any MCP-compatible client: Open WebUI, Claude Desktop, LiteLLM, n8n, or your own integration. See docs/COMPARISON.md for a detailed comparison with alternatives.
Live browser streaming
File preview with skills
Frontend design — landing page rendered live in the browser tab
[Roasthaus landing page generated by the frontend-design skill, rendered live next to the chat]
Presentations — custom design system, not the default white template
[BrewLoop investor pitch deck slide with stat cards and a bar chart in a coffee-inspired palette]
Build your own skills — package recurring work into reusable functions
[invoice-builder skill demonstrating itself: usage code on the left, generated PDF on the right]
Data → chart with analysis
[SaaS user-growth chart with annotated inflection point and written analysis]
Claude Code — interactive terminal in the cloud
Sub-agent dashboard — monitor and control
See docs/FEATURES.md for architecture details and docs/SCREENSHOTS.md for all screenshots.
Pro tip: Create skills with Claude Code in the terminal, then use them with any model in the chat. Skills are model-agnostic — write once, use everywhere.
Multi-CLI sub-agent runtime (v0.9.2.1+): The sub-agent dispatch supports Claude Code (default), OpenAI Codex, and OpenCode (with OpenRouter / qwen / DeepSeek / 75+ providers). Flip
SUBAGENT_CLI=claude|codex|opencodein.env— see docs/multi-cli.md for the worked OpenCode + qwen3-coder + OpenRouter recipe.
Architecture
docs/future-architecture/ holds design notes for a Kubernetes architecture that was not built in this repository. Docker Compose is the only path this code supports.
Ways to try it
OAuth only — no email/password, no SMS. On ai.lab.widemoat.ai models are bundled as a free convenience. The hosted MCP endpoint is offline; see docs/CLOUD.md.
Quick Start
Open http://localhost:3000 — Open WebUI with Computer Use ready to go.
Note: Two separate docker-compose files:
docker-compose.yml(Computer Use Server) anddocker-compose.webui.yml(Open WebUI). They communicate vialocalhost:8081. This mirrors real deployments where the server and UI run on different hosts.
Model Settings (important!)
After adding a model in Open WebUI, go to Model Settings and set:
Without Function Calling: Native, the model won't invoke Computer Use tools.
What's Inside the Sandbox
Skills
13 built-in public skills + 14 examples:
14 example skills: web-artifacts-builder, copy-editing, social-content, canvas-design, algorithmic-art, theme-factory, mcp-builder, and more.
See docs/SKILLS.md for details.
MCP Integration
The server speaks standard MCP over Streamable HTTP. Point any MCP client at your own deployment.
- Self-hosted:
http://localhost:8081/mcp. Quick sanity check: Full self-host integration guide (LiteLLM, Claude Desktop, custom clients): docs/MCP.md. The per-chat system prompt rides six redundant MCP-native channels (tool descriptions,/home/assistant/README.mdin the sandbox,InitializeResult.instructions,resources/listfor uploaded files, plus an HTTP/system-promptendpoint for legacy integrations) — full map in docs/system-prompt.md.
Configuration
All settings via .env:
Custom Skills & Token Management (optional)
By default, all 13 built-in skills are available to everyone. For per-user skill access and custom skills, deploy the Settings Wrapper — see settings-wrapper/README.md.
Personal Access Tokens (PATs): The settings wrapper can also store encrypted per-user PATs for external services (GitLab, Confluence, Jira, etc.). The server fetches them by user email and injects into the sandbox — so each user's AI has access to their repos/docs without sharing credentials. The server-side code for token injection is implemented (docker_manager.py), but the Open WebUI tool does not pass the required headers, and that will not be added.
MCP Client Integrations
The Computer Use Server speaks standard MCP over Streamable HTTP — any MCP-compatible client can connect. Open WebUI is the primary tested frontend, but not the only option.
Open WebUI Integration
Open WebUI is an extensible, self-hosted AI interface. We use it as the primary frontend because it supports tool calling, function filters, and artifacts — everything needed for Computer Use.
Compatibility: This build is strictly built and verified against Open WebUI 0.11.0. The first 3 segments of our build version (v0.11.0.X) always match the Open WebUI base version it targets. If you run a different Open WebUI version, pick the Open Computer Use build whose first 3 version segments match yours — e.g., for Open WebUI 0.8.12 use a v0.8.12.Y build.
Why not a fork? Computer Use itself is not a fork: it bolts on through the official plugin API — tools and functions — so stock Open WebUI works with just the tool and filter installed. (A separate fork does exist for changes that cannot be expressed as plugins, but nothing in this repository depends on it.)
Running Claude Code through a corporate gateway (LiteLLM, Azure, Bedrock)? See docs/claude-code-gateway.md for the three-path operator recipe.
The openwebui/ directory contains:
- tools/ — MCP client tool (thin proxy to Computer Use Server). Required — this is the bridge between Open WebUI and the sandbox.
- functions/ — System prompt injector + file link rewriter + archive button. Required — without it the model doesn't know about skills and file URLs.
- patches/ — Build-time fixes for artifacts, error handling, file preview. Optional but recommended — improves UX significantly.
- init.sh — Auto-installs tool + filter on first startup. Optional — you can install manually via Workspace UI instead.
- init.sh — Installs the tool and filter on first start and sets their valves.
How auto-init works
On first docker compose up, the init script automatically:
- Creates an admin user (
[email protected]/admin) - Installs the Computer Use tool via
POST /api/v1/tools/create - Installs the Computer Use filter via
POST /api/v1/functions/create - Configures tool and filter valves (
ORCHESTRATOR_URL=http://computer-use-server:8081— internal URL for server↔server, seeded into both Valves) - Marks the tool public-read (access grants for both
group:*anduser:*wildcards) — so non-admin users see the tool in their workspace - Marks the filter both active and global (two separate toggles:
/toggleand/toggle/global) — active-but-not-global is silently inert and a common manual-setup mistake - Merges
{function_calling: "native", stream_response: true}intoDEFAULT_MODEL_PARAMSviaPOST /api/v1/configs/models— every model gets the right defaults without per-model Advanced Params clicks
A marker file (.computer-use-initialized) prevents re-running on subsequent starts.
Note: Open WebUI doesn't support pre-installed tools from the filesystem — they must be loaded via the REST API. The init script automates this so you don't have to do it manually.
Manual setup (if not using docker-compose)
If you run Open WebUI separately, you need to manually:
- Go to Workspace > Tools → Create new tool → paste contents of
openwebui/tools/computer_use_tools.py - Set Tool ID to
ai_computer_use(required for filter to work) - Configure Valves:
ORCHESTRATOR_URL= internal URL of your Computer Use Server (http://computer-use-server:8081for Docker compose) - Open the tool's ⋯ → Share menu and set access to Public (grants read to both
group:*anduser:*wildcards) — otherwise only your admin account sees the tool and non-admin users get an empty tool list with no error - Go to Workspace > Functions → Create new function → paste
openwebui/functions/computer_link_filter.py - Enable the filter: toggle Active and toggle Global in the Functions list — these are two separate switches, and active-but-not-global means the filter loads but is never applied to chats
- In your model settings, set Function Calling =
Nativeand Stream Chat Response =On. Or set them globally once in Admin → Settings → Models → Advanced Params (function_calling: native,stream_response: true) — that becomesDEFAULT_MODEL_PARAMSfor every model.
The docker-compose stack handles all of this automatically.
Required setup when embedding Open WebUI into your own stack
If you run Open WebUI outside the stock docker-compose.webui.yml — your own compose, Kubernetes, Portainer, or a downstream repo — there are four traps that will silently break Computer Use. All four hit us in production. Check in this order.
Step 1 — A stock upstream image is all this repo needs
Install the tool and the filter and Computer Use works against
ghcr.io/open-webui/open-webui as published. Nothing here has to be rebuilt.
This used to be the opposite: the repository carried eight patch scripts and a Dockerfile that applied them to an already-built image, and pulling upstream silently skipped all of them. Those patches are gone. Three of the problems they addressed have since been fixed upstream; the rest live as source commits in a fork, which is a separate concern from running this integration.
Preview URL detection needs no build-time host configuration either — the iframe origin
is read from the URL the model wrote, which comes from the server's PUBLIC_BASE_URL.
Step 3 — Two URL settings, two roles (public vs internal)
v4.0.0: the old "three FILE_SERVER_URL places that must match" footgun is gone. There are now only two places and two distinct roles — public (browser-reachable) vs internal (Docker-local). The COMPUTER_USE_SERVER_URL build-arg was removed in v0.9.2.0 — fix_preview_url_detection is now host-agnostic (see Step 2).
⚠️ Do NOT point ORCHESTRATOR_URL at your public domain. It technically works, but every MCP request then goes browser→CDN→Traefik→container. Any hiccup in that chain kills the stream mid-tool-call and the user sees MCP call failed: Session terminated. Stay inside the Docker network.
The filter no longer has a public-URL Valve at all — it reads the public URL from the server's X-Public-Base-URL response header and caches it alongside the prompt. One public knob, one internal knob.
See also docs/openwebui-filter.md.
Step 4 — Four env vars on the open-webui container
Copy-paste into your downstream compose environment: block:
Note: the last three are no-ops if the image is upstream ghcr.io — they need
fix_large_tool_resultsfrom Step 1.
Step 5 — Filter must be global, tool must be public-read
Open WebUI has two separate switches for each function (is_active and is_global) and two required grants for each tool (group:* + user:*). The stock init.sh does this for you; manual / custom deployments commonly miss one side and then spend hours wondering why "everything is installed but nothing works."
Verify against the database (Postgres used by the stock stack; see docker-compose.webui.yml:53):
For SQLite-backed Open WebUI deployments, swap psql for sqlite3 /app/backend/data/webui.db with the same SQL.
Step 6 — Verify everything at once
After rebuilding the image, do a hard reload in the browser (Cmd+Shift+R / Ctrl+Shift+R). Otherwise it keeps the old cached JS chunks and you'll think the fix didn't work.
Symptom → which step is wrong
Security Notes
Production tested with 1000+ users on Open WebUI in a self-hosted environment. It is no longer maintained; the unfixed items are listed below.
Current model
- Docker socket: The server needs Docker socket access to manage sandbox containers. This grants significant host access — run in a trusted environment only.
- MCP_API_KEY: Set a strong random key in production. Without it, anyone with network access to port 8081 can execute arbitrary commands in containers.
- Sandbox isolation: Each chat session runs in a separate container with resource limits (2GB RAM, 1 CPU). On Docker Compose, containers use the standard runtime (runc) and share the host kernel. The Kubernetes Helm chart defaults to rootless Podman — user namespaces plus AppArmor, and no privileged container — and can opt into Kata Containers for a hypervisor-grade boundary. On Compose, gVisor was never wired in. Containers have network access by default.
- POSTGRES_PASSWORD: Change the default password in
.envfor production.
Known limitations
- Unauthenticated file/preview endpoints:
/files/{chat_id}/,/api/outputs/{chat_id},/browser/{chat_id}/,/terminal/{chat_id}/— accessible to anyone who knows the chat ID. Chat IDs are UUIDs (hard to guess but not a real security boundary). - No per-user auth on server: The MCP server trusts whoever sends a valid
MCP_API_KEY. User identity (X-User-Email) is passed by the client but not verified server-side. - Credentials in HTTP headers: API keys (GitLab, Anthropic, MCP tokens) are passed as HTTP headers from client to server. Safe within Docker network, but use HTTPS if exposing externally.
- Default admin credentials:
[email protected]/admin— change immediately in multi-user setups.
Unfixed security items
These will not be addressed in this repository:
- Per-session signed tokens for file/preview/terminal endpoints (replace chat ID as auth)
- Server-side user verification via Open WebUI JWT validation
- HTTPS support with automatic TLS certificates
- Audit logging for all tool calls and file access
- Network policies for sandbox containers (restrict egress by default)
- Secret management — move credentials from headers to encrypted server-side storage
- gVisor (runsc) runtime — optional container sandboxing for stronger isolation (like Claude.ai)
Development
Contributing
The repository is archived and accepts no contributions. See CONTRIBUTING.md.
Community
- Successor: widemoat.ai, demo at ai.lab.widemoat.ai
- Contact: [email protected]
License
This project uses a multi-license model:
- Core (
computer-use-server/,openwebui/,settings-wrapper/, Docker configs): Functional Source License, Version 1.1, Apache 2.0 Future License (FSL-1.1-Apache-2.0). Free to use, modify, fork, redistribute, and self-host internally. Each release automatically converts to Apache 2.0 two years after publication. Offering a hosted or embedded service that competes with our paid version(s) requires a commercial agreement. - Our skills (
skills/public/describe-image,skills/public/sub-agent): MIT - Third-party skills: see individual LICENSE.txt files or original sources.
Attribution required: include "Open Computer Use" and a link to this repository.
See NOTICE for details. For third-party dependency licenses (PyMuPDF AGPL, Anthropic Skill License, Apache 2.0 bundles, etc.), see THIRD-PARTY-LICENSES.md.
來源:README.md,提交 1ddf832
工具
0版本歷史
1- v0.8.12.6最新Sep 16, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。