I keep ending up in situations where I want to fix a bug or nudge an AI agent along and the only device in my hand is a phone. SSH-from-phone works but it's miserable — tiny keyboard, no real terminal multiplexing, and you still need a box to SSH into. What I actually wanted was a full dev environment with an AI coding agent already wired up, reachable from any browser, that keeps my files between sessions.
That's what pushed me to package OpenCode — an open-source AI coding agent with a web UI — into a one-click deploy.
What's actually in the box
It's a container that bundles OpenCode's web UI with a real toolchain, not just a bare shell:
- Python 3.13, Node.js 24 + npm, Bun, Go, Rust + Cargo,
uv - runs as a non-root user with passwordless sudo — you can
apt installthings mid-session without the container being wide open - a persistent volume mounted at the workspace directory, so state survives redeploys
- password-protected web UI on port 4096
You open a tab, log in, and you've got a terminal + AI agent that can read/write/run code in a real dev environment — from a phone, an iPad, whatever's in front of you.
Getting files in and out
The part that trips people up with any browser-based dev box: how do you move files between it and your laptop? Two options that don't require setting up your own file server:
# rclone — good for syncing whole project directories
rclone copy ./local-project remote:workspace/projects/
# magic-wormhole — good for one-off files, no config needed
wormhole send myfile.zip
# -> code like: 7-crossword-pandora
wormhole receive 7-crossword-pandora
Both work fine from inside the container's terminal since it's a full Linux userland, not a locked-down sandbox.
Deploying it
I maintain a Railway template for this — full disclosure, I get a kickback if you deploy through it: OpenCode WebUI Workspace on Railway. Set a password, deploy, and you've got a URL in about two minutes.
If you'd rather not go through the referral, the image is public: ghcr.io/bon5co/opencode-webui-workspace:latest, runs on any Docker host. Point a reverse proxy at port 4096, mount a volume at the workspace path, set OPENCODE_SERVER_USERNAME/OPENCODE_SERVER_PASSWORD, done.
Where it falls short
Being honest about the rough edges:
- It's one container per workspace — there's no built-in multi-tenant isolation if you want to hand this to a team, you'd deploy one per person.
- No GPU, so it's for orchestrating an AI agent against a hosted model API, not for running local inference.
- Base plan RAM is enough for editing and running most language toolchains, but a heavy Rust or Go build from cold cache will feel slow on the smallest instance size — bump the plan if you're doing serious compiling.
For "I need to fix this one thing and all I have is my phone," it's been solid.
Top comments (0)