Cloud Workspace for OpenCode
Create a cloud computer and connect the OpenCode desktop app to it for remote AI coding.
Tell the user: "I'll set up a cloud workspace for you — takes about 5 minutes."
Use simple language: say "cloud computer" not "GCE instance", "your files" not "persistent home disk".
Step 0: Detect OS and load the right reference
Run uname -s. If it returns Darwin → macOS. If it fails or returns nothing → Windows.
After detecting the OS, read the appropriate reference file:
- macOS/Linux: Read
references/mac.mdfrom this skill directory - Windows: Read
references/win.mdfrom this skill directory
The reference file contains ALL the exact commands for every step. Follow it precisely.
Critical rules (all platforms)
Never pass
--metadata=ongcloud compute instances createwith a template — it REPLACES all template metadata (including the startup script). Create without--metadata, then usegcloud compute instances add-metadataafter.Collect email/project AFTER auth (Step 6, not before). Detect from
gcloud config get-value account. Don't ask during the auth flow.Tunnel test expects HTTP 401 (not 200). The server requires auth — a 401 means the tunnel works.
Track state in
devserver.txtin the current working directory. Update after every significant step. If it already exists, read it to recover saved values.The agent runs INSIDE OpenCode desktop. To connect the app to the cloud server, write a detached reconfig script that quits the app, writes config, and relaunches. See Step 12 in the reference file.
3 failures = stop and tell user. Don't keep retrying the same failing command.
Step overview
| Step | What | Key action |
|---|---|---|
| 1 | Detect OS | uname -s → load mac.md or win.md |
| 2 | Python 3.11+ | macOS only — use uv if needed |
| 3 | gcloud CLI | Check/install, find full path |
| 4 | OpenCode | Check desktop app / CLI path |
| 5 | Sign in | gcloud auth login --project=path26-489205 |
| 6 | User info | Email from gcloud, ask project name |
| 7 | Create workspace | Disk + instance + add-metadata |
| 8 | Wait for ready | Poll daemon health on port 8080 |
| 9 | Install opencode server | Install, tmux serve with password |
| 10 | Clone starter repo | Private repo with GH_TOKEN |
| 11 | Port slug | Register for web access |
| 12 | Tunnel + desktop config | Detached reconfig script |
| 13 | Convenience scripts | start/stop/status + tunnel service |
devserver.txt format
Write/update this after Step 7 and after every subsequent step:
My Cloud Workspace
==================
Last updated: 2026-03-19 10:30 AM
Name: opencode-abc12345
Project: my-app
Owner: user@example.com
Password: XDJUzZACEHue3OqbnSFNYwl5K8R7ktMT
Local Machine
-------------
Tunnel: Running (SSH on port 4096)
OpenCode URL: http://localhost:4096
Auto-reconnect: Installed (starts on login)
Remote Machine
--------------
Instance: Running
OpenCode server: Running (tmux session: oc)
Starter repo: ~/fv-rome2rio-starter (cloned)
Home directory: /home/user
GH_TOKEN: Available (baked into template)
Web Access
----------
Port slug: my-app
Dev server URL: https://my-app.path26.rome2rio.com (port 3000)
Cloud Details
-------------
GCP Project: path26-489205
Zone: europe-west1-b
External IP: None (private instance)
Troubleshooting
- Startup log:
gcloud compute ssh INSTANCE --command="sudo journalctl -u google-startup-scripts --no-pager | tail -30" - OpenCode server:
gcloud compute ssh INSTANCE --command="tmux capture-pane -t oc -p" - SSH directly:
gcloud compute ssh INSTANCE - "External IP not found; defaulting to IAP tunneling": Normal — instances may not have public IPs
- tmux "no server running": No session exists yet — start one
- IAP/NumPy warnings: Add
--quietto suppress
Reference sections (in mac.md / win.md)
The OS-specific reference files also contain:
- GH_TOKEN template baking instructions
- Port proxy domain info (
path26.rome2rio.com) - Tunnel service removal
- Workspace deletion
- Error recovery rules