2025-12-21 22:59:06 +02:00
# <picture><source media="(prefers-color-scheme: dark)" srcset="docs/references/badges/openchamber-logo-dark.svg"><img src="docs/references/badges/openchamber-logo-light.svg" width="32" height="32" align="absmiddle" /></picture> OpenChamber
2025-12-07 19:32:53 +02:00
2025-12-21 17:48:15 +02:00
[](https://github.com/btriapitsyn/openchamber/stargazers)
[](https://github.com/btriapitsyn/openchamber/releases/latest)
2025-12-21 17:38:26 +02:00
[](https://opencode.ai)
2026-01-15 00:24:33 +02:00
[](https://discord.gg/ZYRSdnwwKA)
[](https://ko-fi.com/G2G41SAWNS)
2025-12-17 14:10:23 +02:00
2026-05-27 01:16:43 +03:00
2026-03-05 11:15:49 +02:00
## **OpenCode, everywhere.** Desktop. Browser. Phone.
2025-12-07 19:32:53 +02:00
2026-03-05 11:15:49 +02:00
### A rich interface for [OpenCode](https://opencode.ai). Review diffs, manage agents, run dev servers, and keep the big picture while your AI codes.
2025-12-07 19:32:53 +02:00
2025-12-08 12:09:17 +02:00

<details>
<summary>More screenshots</summary>


2025-12-14 02:29:46 +02:00

2025-12-21 02:34:07 +02:00

2025-12-21 17:00:40 +02:00
2025-12-08 12:09:17 +02:00
<p>
<img src="docs/references/pwa_chat_example.png" width="45%" alt="PWA Chat">
2026-03-05 03:07:26 +02:00
<img src="docs/references/pwa_diff_example.png" width="45%" alt="PWA Diff">
2025-12-08 12:09:17 +02:00
</p>
</details>
2026-03-12 19:40:22 +02:00
## Why use OpenChamber?
- **Cross-device continuity**: Start in TUI, continue on tablet/phone, return to terminal - same session
- **Remote access**: Use OpenCode from anywhere via browser
- **Familiarity**: A visual alternative for developers who prefer GUI workflows
## Features
### Core (all app versions)
- Branchable chat timeline with `/undo` , `/redo` , and one-click forks from earlier turns
- Smart tool UIs for diffs, file operations, permissions, and long-running task progress
- Voice mode with speech input and read-aloud responses for hands-free workflows
- Multi-agent runs from one prompt with isolated worktrees for safe side-by-side comparisons
- Git workflows in-app: identities, commits, PR creation, checks, and merge actions
- GitHub-native workflows: start sessions from issues and pull requests with context already attached
- Plan/Build mode with a dedicated plan view for drafting and iterating implementation steps
- Inline comment drafts on diffs, files, and plans that can be sent back to the agent
- Context visibility tools (token/cost breakdowns, raw message inspection, and activity summaries)
- Integrated terminal with per-directory sessions and stable performance on heavy output
- Built-in skills catalog and local skill management for reusable automation workflows
### Web / PWA
- Provider-aware tunnel access model with Cloudflare `quick` , `managed-remote` , and `managed-local` modes
- One-scan onboarding with tunnel QR + password URL helpers
- Mobile-first experience: optimized chat controls, keyboard-safe layouts, and attachment-friendly UI
- Background notifications plus reliable cross-tab session activity tracking
- Built-in self-update + restart flow that keeps your server settings intact
2026-06-05 23:58:43 +03:00
### Desktop (macOS + Windows)
2026-03-12 19:40:22 +02:00
2026-06-05 23:58:43 +03:00
- Floating Mini Chat: keep a small always-on-top assistant beside your editor, browser, or terminal
- Multiple native windows for separate projects or sessions
- Native notifications for task alerts while OpenChamber is hidden
- One-click open in VS Code, Cursor, Terminal, Finder, Explorer, and more
- Desktop host switcher for local and remote OpenChamber instances
- Convenient tunnel management without manual setup
- Deep-link connections for joining remote OpenChamber from a link
- SSH remote access with host import, connection management, and port forwarding
2026-03-12 19:40:22 +02:00
### VS Code Extension
- Editor-native workflow: open files directly from tool output and keep sessions beside your code
- Agent Manager for parallel multi-model runs from a single prompt
- Right-click actions to add context, explain selections, and improve code in-place
- In-extension settings, responsive layout, and theme mapping that matches your editor
- Hardened runtime lifecycle and health checks for faster startup and fewer stuck reconnect states
### Custom Themes
2026-02-01 18:29:34 +02:00
2026-03-05 11:20:39 +02:00
- **Use it from anywhere** - Cloudflare tunnel with QR code onboarding. Scan, connect, code from your couch.
- **Branchable chat timeline** - Undo, redo, fork from any turn. Explore different approaches without losing your place.
- **GitHub-native workflows** - Start sessions from issues and PRs with context already attached. Review checks, merge - all in-app.
- **Project Actions** - Run dev servers, configure SSH port forwarding, open remote URLs locally. Your project commands, one click away.
- **Connect to remote machines** - Desktop app connects to remote OpenChamber instances over SSH, with dedicated lifecycle and UX flows.
2026-02-01 18:29:34 +02:00
2026-03-05 03:07:26 +02:00
## Quick Start
2026-02-01 18:29:34 +02:00
2026-03-05 03:07:26 +02:00
> **Prerequisite:** [OpenCode CLI](https://opencode.ai) installed.
2025-12-07 19:32:53 +02:00
2026-06-05 23:58:43 +03:00
### **Desktop (macOS + Windows)**
2026-03-05 11:20:39 +02:00
Download from [Releases ](https://github.com/btriapitsyn/openchamber/releases ).
2025-12-13 16:34:17 +02:00
2026-03-05 11:20:39 +02:00
### **VS Code**
Install from [Marketplace ](https://marketplace.visualstudio.com/items?itemName=fedaykindev.openchamber ) or search "OpenChamber" in Extensions.
2025-12-13 16:34:17 +02:00
2026-03-05 11:20:39 +02:00
### **CLI (Web + PWA)**
_requires Node.js 20+_
2025-12-07 19:32:53 +02:00
```bash
2025-12-19 19:57:18 +02:00
curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash
2026-03-15 00:12:11 +02:00
openchamber --ui-password be-creative-here
2025-12-19 19:57:18 +02:00
```
2026-03-05 03:07:26 +02:00
<details>
<summary>Advanced CLI options</summary>
2025-12-19 19:57:18 +02:00
```bash
2025-12-07 19:32:53 +02:00
openchamber --port 8080 # Custom port
2026-06-02 00:43:05 +03:00
openchamber --lan --port 3000 # Listen on LAN (0.0.0.0)
2025-12-07 19:32:53 +02:00
openchamber --ui-password secret # Password-protect UI
2026-05-26 01:36:11 +03:00
openchamber startup enable # Start at login as a native service
OPENCHAMBER_UI_PASSWORD = secret openchamber startup enable # Save service password env
openchamber startup status # Show startup service status
openchamber startup disable # Remove startup service
2026-03-12 19:40:22 +02:00
openchamber tunnel help # Tunnel lifecycle commands
openchamber tunnel providers # Show provider capabilities
openchamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token <token>
openchamber tunnel start --profile prod-main
openchamber tunnel start --provider cloudflare --mode quick --qr
openchamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml
openchamber tunnel status --all # Show tunnel state across instances
openchamber tunnel stop --port 3000 # Stop tunnel only (server stays running)
2026-06-02 00:43:05 +03:00
openchamber connect-url --port 3000 # Add this server to OpenChamber Desktop
openchamber connect-url --server http://host:3000 --qr
openchamber connect-url --port 3000 --qr
2026-03-12 19:40:22 +02:00
openchamber logs # Follow latest instance logs
OPENCODE_PORT = 4096 OPENCODE_SKIP_START = true openchamber # Connect to external OpenCode server
OPENCODE_HOST = https://myhost:4096 OPENCODE_SKIP_START = true openchamber # Connect via custom host/HTTPS
2025-12-07 19:32:53 +02:00
openchamber stop # Stop server
2026-03-05 03:07:26 +02:00
openchamber update # Update to latest
2025-12-07 19:32:53 +02:00
```
2026-05-26 01:36:11 +03:00
`startup enable` snapshots your current environment into the native service so startup behaves like you launched `openchamber` from the same shell. This preserves provider tokens, PATH, SSH agent settings, and other CLI auth/config env vars. Use `--no-env-snapshot` if you want a minimal service env.
2026-03-05 03:07:26 +02:00
Connect to an existing OpenCode server:
```bash
OPENCODE_PORT = 4096 OPENCODE_SKIP_START = true openchamber
OPENCODE_HOST = https://myhost:4096 OPENCODE_SKIP_START = true openchamber
```
2025-12-07 19:32:53 +02:00
2026-03-23 22:48:04 +09:00
Bind managed OpenCode server to all interfaces (use only on trusted networks):
```bash
OPENCHAMBER_OPENCODE_HOSTNAME = 0.0.0.0 openchamber --port 3000
```
2026-06-02 00:43:05 +03:00
Expose OpenChamber itself on your LAN:
```bash
openchamber --lan --port 3000 --ui-password secret
```
Add this server to OpenChamber Desktop or another OpenChamber app:
```bash
openchamber connect-url --port 3000 --qr
```
If no OpenChamber server is running on that port, `connect-url` starts one before generating the link.
Headless/API-only setup for a remote machine:
```bash
openchamber connect-url --port 3000 --api-only --lan --server http://your-host-or-ip:3000 --qr --ui-password secret
```
This runs OpenChamber as an API-only server without the desktop app or browser UI assets on that machine, then creates a link for Desktop to import. `--lan` makes the server reachable from other machines. `--server` is the address Desktop should use.
When OpenChamber was started with `--lan` or `--host 0.0.0.0` , `connect-url` automatically uses a detected LAN IP instead of `127.0.0.1` . Use `--server http://host:3000` to override the advertised address, and include `--lan` when `connect-url` needs to start the server for LAN access.
Paste the printed `openchamber://connect?...` link in Desktop under Settings -> Remote Instances -> Direct Instances -> Import Link. The link contains the server URL and a client token. It does not enable browser UI password protection; use `--ui-password` when exposing a server beyond localhost.
2026-03-05 03:07:26 +02:00
</details>
2025-12-07 19:32:53 +02:00
2026-03-23 18:36:28 -04:00
<details>
<summary>systemd service (VPN / LAN access)</summary>
Run OpenChamber and OpenCode as separate persistent services — useful when you want to access your
dev machine over a VPN (e.g. Tailscale) or LAN without a Cloudflare tunnel.
**How it works:**
- OpenCode runs as its own service, binding only to `localhost` .
2026-06-02 00:43:05 +03:00
- OpenChamber connects to it via `OPENCODE_HOST` and `--lan` makes it reachable on your VPN IP.
2026-03-23 18:36:28 -04:00
- `--foreground` keeps the CLI process alive so systemd can track and restart it.
** `~/.config/systemd/user/opencode.service` **
```ini
[Unit]
Description = OpenCode Server
[Service]
Type = simple
ExecStart = opencode serve --port 4095
Environment = "PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/YOU/.local/bin:/home/YOU/.npm-global/bin:/usr/local/bin:/usr/bin:/bin"
Environment = SSH_AUTH_SOCK=%t/ssh-agent.socket
Restart = on-failure
RestartSec = 5
[Install]
WantedBy = default.target
```
> **Why set `PATH` and `SSH_AUTH_SOCK`?**
> systemd user services start with a minimal environment — no shell profile is sourced.
> Without an explicit `PATH`, OpenCode won't find tools installed via Homebrew, npm, or `~/.local/bin`.
> Without `SSH_AUTH_SOCK`, git operations over SSH (push, pull, clone) will fail because the agent socket isn't inherited.
> Adjust the `PATH` to match your own tool installation paths.
> `%t` expands to `$XDG_RUNTIME_DIR` (e.g. `/run/user/1000`), where most SSH agents write their socket.
** `~/.config/systemd/user/openchamber.service` **
```ini
[Unit]
Description = OpenChamber Web Server
After = opencode.service
[Service]
Type = simple
ExecStart = openchamber serve --port 3000 --host 0.0.0.0 --ui-password your-password --foreground
Environment = "OPENCODE_HOST=http://localhost:4095"
Environment = "OPENCODE_SKIP_START=true"
Restart = on-failure
RestartSec = 5
[Install]
WantedBy = default.target
```
```bash
systemctl --user daemon-reload
systemctl --user enable --now opencode openchamber
```
OpenChamber will be reachable at `http://<your-vpn-hostname>:3000` from any device on your VPN.
> **Note:** `--host 0.0.0.0` is required to listen on all interfaces. The default
> bind address is `127.0.0.1` (localhost only). Use `--host <ip>` or
> `OPENCHAMBER_HOST=<ip>` to bind to a specific interface instead.
</details>
2026-03-05 03:07:26 +02:00
<details>
<summary>Docker</summary>
2026-02-27 02:13:23 +08:00
```bash
docker compose up -d
```
2026-03-05 03:07:26 +02:00
Available at `http://localhost:3000` .
2026-02-27 15:34:51 +08:00
2026-03-05 03:07:26 +02:00
**UI Password:**
2026-02-27 15:34:51 +08:00
```yaml
environment :
UI_PASSWORD : your_secure_password
```
2026-03-15 00:12:11 +02:00
**Cloudflare Tunnel (optional):**
2026-02-27 15:34:51 +08:00
```yaml
environment :
2026-03-15 00:12:11 +02:00
OPENCHAMBER_TUNNEL_MODE : quick # quick | managed-remote | managed-local
OPENCHAMBER_TUNNEL_PROVIDER : cloudflare
2026-02-27 15:34:51 +08:00
```
2026-03-15 00:12:11 +02:00
For `managed-remote` mode, provide:
2026-02-27 15:34:51 +08:00
2026-03-15 00:12:11 +02:00
```yaml
environment :
OPENCHAMBER_TUNNEL_MODE : managed-remote
OPENCHAMBER_TUNNEL_HOSTNAME : app.example.com
OPENCHAMBER_TUNNEL_TOKEN : <token>
```
For `managed-local` mode, optionally provide:
2026-03-12 19:40:22 +02:00
2026-03-15 00:12:11 +02:00
```yaml
environment :
OPENCHAMBER_TUNNEL_MODE : managed-local
OPENCHAMBER_TUNNEL_CONFIG : /home/openchamber/.cloudflared/config.yml
```
2026-03-12 19:40:22 +02:00
2026-03-15 00:12:11 +02:00
Managed-local path note: `OPENCHAMBER_TUNNEL_CONFIG` must point to a path inside the container user home (`/home/openchamber/...` ). If your Cloudflare config references a credentials JSON file, that file path must also be accessible inside the container (mount with `volumes` ).
2026-03-12 19:40:22 +02:00
2026-04-17 21:26:56 +08:00
### Reverse proxy notes
- For a complete reverse proxy setup guide, see [`docs/REVERSE_PROXY.md` ](./docs/REVERSE_PROXY.md ).
- Website docs source lives at `packages/docs/content/docs/reverse-proxy.mdx` .
2026-03-12 19:40:22 +02:00
### Tunnel behavior notes
- OpenChamber supports one active tunnel per running instance (port).
- Starting a tunnel with a different mode/provider on the same instance replaces the current tunnel.
- Replacing or stopping a tunnel revokes existing connect links and invalidates remote tunnel sessions for that instance.
- Connect links are one-time tokens; generating a new link revokes the previous unused link.
**Data Directory Permission Note:** The `data/` directory is mounted into the container for persistent storage (config, sessions, SSH keys, workspaces). Before running, ensure the directory exists and has proper permissions:
2026-02-27 02:13:23 +08:00
```bash
2026-02-27 15:34:51 +08:00
mkdir -p data/openchamber data/opencode/share data/opencode/config data/ssh
2026-02-27 02:13:23 +08:00
chown -R 1000:1000 data/
```
2026-03-05 03:07:26 +02:00
**SSH/Git:** If git push/pull fails, run `ssh -T git@github.com` in terminal.
</details>
## Features
<details>
<summary><strong>Chat & Interaction</strong></summary>
- Branchable chat timeline with `/undo` , `/redo` , and one-click forks from any turn
- Multi-agent runs from one prompt with isolated worktrees for safe side-by-side comparisons
- Voice mode with speech input and read-aloud responses for hands-free workflows
- Plan/Build mode with a dedicated plan view for drafting and iterating steps
2026-03-05 11:20:39 +02:00
- Inline comment drafts on diffs, files, and plans - send feedback back to the agent
2026-03-05 03:07:26 +02:00
- Shell mode via leading `!` with inline output
- Share messages as images
- Mermaid diagrams render inline with copy/download actions
- Smart tool UIs for diffs, file operations, permissions, and task progress
</details>
<details>
<summary><strong>Git & GitHub</strong></summary>
- Full Git sidebar with staging, commits, push/pull, branch management, and rebase/merge flows
- PR creation with AI-generated descriptions, status checks, and merge actions
- Start sessions from GitHub issues and pull requests with context baked in
- Multi-remote push and fork-aware PR creation
- Worktree integration: isolated sessions per branch, merge back with conflict handling
- Git identities, gitmoji support, and multi-account GitHub auth
</details>
<details>
<summary><strong>Files, Diff & Terminal</strong></summary>
2026-06-08 11:10:32 -05:00
- Workspace file browser with inline editing, syntax highlighting, Vim mode, and markdown preview
2026-03-05 03:07:26 +02:00
- Beautiful diff viewer with stacked/inline modes, lazy loading for large changesets
- Integrated terminal with per-directory sessions, tabbed interface, and stable heavy-output performance
2026-03-05 11:20:39 +02:00
- Clickable file paths in messages - jump to exact line locations
2026-03-05 03:07:26 +02:00
- File-type icons across all views for faster visual scanning
</details>
<details>
<summary><strong>Web / PWA</strong></summary>
2026-03-15 00:12:11 +02:00
- Cloudflare tunnel with quick, managed-remote, and managed-local modes, secure one-time connect links, and QR onboarding
2026-03-05 03:07:26 +02:00
- Mobile-first: optimized chat controls, keyboard-safe layouts, drag-to-reorder projects
- Background notifications and cross-tab session tracking
- Self-update + restart flow that keeps your server settings intact
- Installable as PWA with project-aware naming
2026-02-27 02:13:23 +08:00
2026-03-05 03:07:26 +02:00
</details>
<details>
2026-06-05 23:58:43 +03:00
<summary><strong>Desktop (macOS + Windows)</strong></summary>
2026-03-05 03:07:26 +02:00
2026-06-05 23:58:43 +03:00
- Floating Mini Chat: keep a small always-on-top assistant beside your editor, browser, or terminal
- Multiple native windows for separate projects or sessions
- Native notifications for task alerts while OpenChamber is hidden
- One-click open in VS Code, Cursor, Terminal, Finder, Explorer, and more
- Desktop host switcher for local and remote OpenChamber instances
- Convenient tunnel management without manual setup
- Deep-link connections for joining remote OpenChamber from a link
- SSH remote access with host import, connection management, and port forwarding
2026-03-05 03:07:26 +02:00
</details>
<details>
<summary><strong>VS Code Extension</strong></summary>
2026-02-27 15:34:51 +08:00
2026-03-05 03:07:26 +02:00
- Editor-native: open files from tool output, keep sessions beside your code
- Agent Manager for parallel multi-model runs from a single prompt
- Right-click actions: add context, explain selections, improve code in-place
- Session editor panel, responsive layout, and theme mapping to your editor
- Edit-style tool results open directly in focused diff views
</details>
<details>
<summary><strong>Customization</strong></summary>
2025-12-07 19:32:53 +02:00
2026-03-05 03:07:26 +02:00
- 18+ built-in themes with light/dark variants
2026-03-05 11:20:39 +02:00
- Custom themes via JSON files in `~/.config/openchamber/themes/` - hot reload, no restart
2026-03-05 03:07:26 +02:00
- Configurable keyboard shortcuts for chat, panels, and services
- Font size, spacing, corner radius, and layout controls
- Customizable project icons with upload and automatic favicon discovery
- Skills catalog and local skill management for reusable automation
2025-12-07 19:32:53 +02:00
2026-03-05 03:07:26 +02:00
[Read the Guide: Custom Themes ](docs/CUSTOM_THEMES.md )
2025-12-07 19:32:53 +02:00
2026-03-05 03:07:26 +02:00
</details>
2025-12-07 19:32:53 +02:00
2026-03-05 03:07:26 +02:00
<details>
<summary><strong>Context & Productivity</strong></summary>
2026-02-27 02:13:23 +08:00
2026-03-05 03:07:26 +02:00
- Token usage, cost breakdowns, and raw message inspection panel
- Usage quota tracking across multiple providers with pace/prediction indicators
- Favorite model cycling via keyboard shortcuts
- Session folders and subfolders with drag-to-reorder
- Persistent project notes and todos per project
- Draft persistence per session with expanded focus mode for longer prompts
2026-01-22 22:24:11 +06:00
2026-03-05 03:07:26 +02:00
</details>
2026-02-27 02:13:23 +08:00
2026-03-05 03:07:26 +02:00
## Roadmap
2026-01-22 22:24:11 +06:00
2026-03-05 03:07:26 +02:00
Active development. Here's what's being worked on or planned:
2026-02-27 02:13:23 +08:00
2026-06-05 23:58:43 +03:00
- Linux desktop app
2026-03-05 03:07:26 +02:00
- Mobile app with remote instance and laptop connectivity
- More built-in tunneling options
2026-03-05 11:20:39 +02:00
- Kanban board for multi-agent management - keeping the human in the loop and in control
2026-03-05 03:07:26 +02:00
- Custom OpenCode plugins/tools built-in catalog
- Linear integration
- Built-in browser for running dev apps with agent integration
2025-12-07 19:32:53 +02:00
## Acknowledgments
2026-03-05 03:07:26 +02:00
Independent project, not affiliated with the OpenCode team.
2025-12-07 19:32:53 +02:00
**Special thanks to:**
2026-03-05 11:20:39 +02:00
- [OpenCode ](https://opencode.ai ) - For the excellent API and extensible architecture.
- [Flexoki ](https://github.com/kepano/flexoki ) - Beautiful color scheme by [Steph Ango ](https://stephango.com/flexoki ).
- [Pierre ](https://pierrejs-docs.vercel.app/ ) - Fast, beautiful diff viewer with syntax highlighting.
- [Ghostty-web ](https://github.com/coder/ghostty-web ) - Great implementation of a Ghostty web renderer.
- [David Hill ](https://x.com/iamdavidhill ) - Who inspired me to release this without [overthinking ](https://x.com/iamdavidhill/status/1993648326450020746 ).
- [My wife ](https://github.com/yulia-ivashko ), who - with zero AI background - sat down with the app for the first time and built the firework celebration that plays on every successful push.
2026-03-05 03:07:26 +02:00
- Every contributor who shaped this project with their PRs, ideas, and attention to detail.
## Contributing
See [CONTRIBUTING.md ](./CONTRIBUTING.md ) for development setup and guidelines.
2025-12-07 19:32:53 +02:00
2026-03-15 03:30:35 +02:00
Docs source lives in [`packages/docs` ](packages/docs/README.md ).
2025-12-07 19:32:53 +02:00
## License
MIT