Openvide
Mobile app for managing Codex, Claude Code, and soon Gemini on remote servers through a chat-style interface with terminal, diff viewer and file browser
Install / Use
/learn @open-vide/OpenvideQuality Score
Category
Development & EngineeringSupported Platforms
README
Overview
This repository is the canonical OpenVide backend and mobile app:
apps/app: the React Native appapps/daemon: the globally installedopenvide-daemon
The daemon is the source of truth for:
- interactive Claude and Codex sessions
- workspace session history
- the optional HTTPS/WebSocket bridge
- Even AI compatible
/v1/chat/completionsrouting - team orchestration
- cron-based schedules
If you are using the open-vide-g2 webview/glasses client, this repository is still the backend you should run in production.
What OpenVide Does
- Connects to remote hosts over SSH from the RN app
- Persists AI CLI sessions on the host
- Streams output live and preserves session history
- Exposes an optional HTTPS bridge for browser/webview clients
- Provides an OpenAI-compatible bridge endpoint for Even AI custom agents
- Supports team chat, planning, task orchestration, and automated review
- Supports daemon-owned scheduled jobs that can target a prompt session or a team
Repo Layout
openvide/
apps/
app/ Expo / React Native app
daemon/ openvide-daemon (canonical shared backend)
bridge/ legacy bridge package artifacts; bridge now lives in daemon
docs/
Architecture
RN app path
RN app
-> SSH command execution
-> openvide-daemon CLI
-> local daemon IPC socket
-> daemon-managed Claude/Codex process
Browser / webview / glasses path
Browser or webview
-> HTTPS + WebSocket bridge
-> openvide-daemon
-> daemon-managed Claude/Codex process
Even AI path
Even AI custom agent
-> /v1/chat/completions
-> openvide-daemon bridge routing
-> existing or new daemon session
-> Claude/Codex response wrapped in OpenAI-compatible format
Security Model
SSH mode
When you use the RN app over SSH, the daemon does not need an exposed network port. The app executes openvide-daemon commands over SSH and the daemon communicates locally over its Unix socket.
Bridge mode
The bridge is optional. When enabled:
- pairing/bootstrap tokens are JWT Bearer tokens signed with a daemon-local HMAC secret
- browser/webview clients can exchange that pairing token for a rotating bridge session:
- short-lived access token
- long-lived refresh token
- refresh token rotates on every renewal
- legacy static bridge tokens still work for compatibility
- bridge tokens can be revoked by JTI
- WebSocket auth uses the same access token in the query string because browsers cannot set custom WS headers
TLS
Bridge TLS is enabled by default.
- the daemon generates a self-signed ECDSA certificate on first run
- the generated certificate now includes SANs for:
localhost127.0.0.1- current hostname
- current non-internal IPv4 addresses
Important:
- the certificate is still self-signed
- for browsers/webviews on LAN, the client must trust that certificate or you should front the bridge with a reverse proxy that provides a publicly trusted certificate
openvide-daemon bridge enable --no-tlsis only appropriate for local development or a private tunnel; do not expose plain HTTP directly on an untrusted network- if you generated bridge certs before this version, rotate
~/.openvide-daemon/bridge/cert.pemandkey.pemonce so the new SAN coverage is applied
Secrets at rest
On the host:
- daemon state is written under
~/.openvide-daemon/ - the daemon state file is saved with restrictive permissions
- the bridge private key is saved with restrictive permissions
- cached Claude auth fallback is stored with restrictive permissions
This repository does not commit host secrets. User-specific app config, EAS config, Firebase config, and daemon runtime state are gitignored.
Quick Start
git clone https://github.com/open-vide/openvide.git
cd openvide
yarn install
Build and install the daemon
yarn daemon:build
cd apps/daemon
npm install -g .
openvide-daemon health
openvide-daemon health auto-starts the daemon if needed.
For systemd, launchd, or another service manager, use the foreground mode instead:
openvide-daemon run
Build the RN app
See the Expo / variant setup below, then:
cd apps/app
yarn prebuild:clean
yarn ios
or use EAS:
cd apps/app
yarn build:preview
yarn build:prod
yarn update:preview
yarn update:prod
RN App Setup
1. Variant configs
cd apps/app
cp variants/production/config.example.json variants/production/config.json
cp variants/development/config.example.json variants/development/config.json
Edit each config.json with your bundle IDs and display settings.
2. Environment file
cp apps/app/.env.example apps/app/.env
3. EAS project link
cd apps/app
eas init
apps/app/app.json is intentionally gitignored because it contains your personal Expo project wiring.
4. Optional push notifications
Android push requires Firebase config. iOS push requires a paid Apple Developer account and ENABLE_PUSH_NOTIFICATIONS=1.
Bridge Setup
Enable the bridge on the machine running the daemon:
openvide-daemon bridge enable --port 7842
openvide-daemon bridge status
openvide-daemon bridge token --expire 24h
Useful bridge commands:
openvide-daemon bridge enable [--port 7842] [--no-tls]
openvide-daemon bridge disable
openvide-daemon bridge status
openvide-daemon bridge token [--expire 24h]
openvide-daemon bridge revoke --jti <token-jti>
openvide-daemon bridge qr [--expire 24h] [--host <host>]
openvide-daemon bridge config \
--bind-host 127.0.0.1 \
--default-cwd /Users/fabiogalimberti/Desktop/git \
--even-ai-tool codex \
--even-ai-mode last
openvide-daemon bridge token now acts as a pairing/bootstrap token for webview/glasses clients. The browser client exchanges it for rotating access + refresh bridge credentials automatically.
Self-Host Bootstrap
If you want to run OpenVide on your own VPS or server, the easiest path is now:
- check the host
- run the guided setup
- copy the final token into the clients
1. Check the VPS
openvide-daemon deploy doctor \
--proxy caddy \
--domain openvide.example.com
This reports:
- whether
systemdis available - whether
caddy/nginxis installed - whether the domain resolves
- where the deployment bundle will be written
2. Apply the setup
openvide-daemon deploy setup \
--proxy caddy \
--domain openvide.example.com \
--email you@example.com \
--output ./openvide-deploy \
--daemon-user ubuntu \
--default-cwd /srv/openvide \
--even-ai-tool codex \
--even-ai-mode last \
--issue-token
The setup command:
- generates the deployment bundle
- installs the
systemdunit - enables and starts the daemon service
- installs or updates the proxy config
- configures the daemon bridge with secure defaults
- optionally issues a client token
3. If you only want the files without touching the machine
Use scaffold mode:
openvide-daemon deploy scaffold \
--proxy caddy \
--domain openvide.example.com \
--email you@example.com \
--output ./openvide-deploy \
--default-cwd /srv/openvide \
--even-ai-tool codex \
--even-ai-mode last
The scaffold includes:
- a
systemdunit foropenvide-daemon run - a bridge bootstrap script
- a Caddy or nginx reverse-proxy config
- a host-specific
README.mdwith install steps
Recommended production topology:
browser / webview / Even AI
-> trusted HTTPS domain
-> reverse proxy (Caddy/nginx)
-> openvide-daemon bridge bound to 127.0.0.1
For proxy-backed deployments, the generated bootstrap configures:
openvide-daemon bridge enable --port 7842 --no-tls
openvide-daemon bridge config --bind-host 127.0.0.1
That keeps:
- public TLS at the proxy layer
- the raw daemon bridge on loopback only
- JWT bridge auth still enabled
Recommended “for dummies” recipe
If you have:
- one Linux VPS
- one domain pointed to that VPS
- ports
80and443reachable
then this is the shortest useful path:
npm install -g @openvide/daemon
openvide-daemon deploy doctor --proxy caddy --domain openvide.example.com
openvide-daemon deploy setup --proxy caddy --domain openvide.example.com --email you@example.com --daemon-user ubuntu --issue-token
Then use:
https://openvide.example.comas the host inopen-vide-g2- the returned token as the bridge token / Even AI API key
Even AI Custom Agent Integration
The bridge exposes OpenAI-compatible endpoints:
POST /v1/chat/completionsPOST /v1/chat/completions/claudePOST /v1/chat/completions/codexPOST /v1/chat/completions/gemini
Recommended Even AI config
Use:
- endpoint:
https://YOUR_HOST:7842/v1/chat/completions - API key / bearer token: output of
openvide-daemon bridge token
Bridge routing is controlled by daemon config:
evenAiTool: default tool when using the base/v1/chat/completionsevenAiMode=new: always create a fresh daemon sessionevenAiMode=last: reuse the last bridge-created session for that tool when possibleevenAiMode=pinned: always route to a specific session ID
Notes:
- the request body
modelfield is not the routing source of truth here - path suffix or bridge config decides the tool
- scheduled sessions and team-owned sessions are intentionally filtered out of the
Related Skills
node-connect
354.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
AGENTS
354.3kExtensions Boundary This directory contains bundled plugins. Treat it as the same boundary that third-party plugins see. Public Contracts - Docs: - `docs/plugins/building-plugins.md` - `do
frontend-design
112.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
async-pr-review
100.9kTrigger this skill when the user wants to start an asynchronous PR review, run background checks on a PR, or check the status of a previously started async PR review.
