* docs: clarify named and quick Cloudflare tunnel usage * feat: make chat file paths openable from rendered responses * perf: speed up chat file-path links and open behavior * fix: open chat file references at mentioned lines * fix: prevent context panel flicker on blocked file opens
227 lines
15 KiB
Markdown
227 lines
15 KiB
Markdown
# <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
|
|
|
|
[](https://github.com/btriapitsyn/openchamber/stargazers)
|
|
[](https://github.com/btriapitsyn/openchamber/network/members)
|
|
[](https://github.com/btriapitsyn/openchamber/releases/latest)
|
|
[](https://opencode.ai)
|
|
[](https://zread.ai/btriapitsyn/openchamber)
|
|
[](https://discord.gg/ZYRSdnwwKA)
|
|
[](https://ko-fi.com/G2G41SAWNS)
|
|
|
|
Web and desktop interface for the [OpenCode](https://opencode.ai) AI coding agent. Works alongside the OpenCode TUI.
|
|
|
|
The OpenCode team is actively working on their own desktop app. I still decided to release this project as a fan-made alternative.
|
|
|
|
It was entirely built with OpenCode tool - first with the TUI version, then with the first usable version of OpenChamber, which I then used to build the rest.
|
|
|
|
The whole project was built entirely with AI coding agents under my supervision. It started as a hobby project and proof of concept that AI agents can create genuinely usable software.
|
|
|
|

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

|
|

|
|

|
|

|
|

|
|
|
|
<p>
|
|
<img src="docs/references/pwa_chat_example.png" width="45%" alt="PWA Chat">
|
|
<img src="docs/references/pwa_terminal_example.png" width="45%" alt="PWA Terminal">
|
|
</p>
|
|
|
|
</details>
|
|
|
|
## 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
|
|
|
|
- Cloudflare tunnel access with two modes: Quick Tunnel (CLI) and Named Tunnel (in-app settings)
|
|
- 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
|
|
|
|
### Desktop (macOS)
|
|
|
|
- Native macOS menu integration with polished app actions and deep-link handling
|
|
- Multi-window support for parallel project/session workflows
|
|
- "Open In" shortcuts for Finder, Terminal, and your preferred editor
|
|
- Fast switching between local and remote instances
|
|
- Workspace-first startup flow with directory picker and steadier window restore behavior
|
|
|
|
### 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
|
|
|
|
Create your own color schemes by dropping JSON files into `~/.config/openchamber/themes/`. Hot reload supported — no restart needed.
|
|
|
|
[**Read the Guide: Custom Themes**](docs/CUSTOM_THEMES.md)
|
|
|
|
## Installation
|
|
|
|
### VS Code Extension
|
|
|
|
Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=fedaykindev.openchamber) / [Open VSX Registry](https://open-vsx.org/extension/FedaykinDev/openchamber) or search "OpenChamber" in Extensions.
|
|
|
|
### CLI (Web Server)
|
|
|
|
```bash
|
|
# Quick install (auto-detects your package manager)
|
|
curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash
|
|
|
|
# Or install manually
|
|
bun add -g @openchamber/web # or npm, pnpm, yarn
|
|
```
|
|
|
|
```bash
|
|
openchamber # Start on port 3000
|
|
openchamber --port 8080 # Custom port
|
|
openchamber --daemon # Background mode
|
|
openchamber --ui-password secret # Password-protect UI
|
|
openchamber --try-cf-tunnel # Create a Cloudflare Quick Tunnel for remote access
|
|
openchamber --try-cf-tunnel --tunnel-qr # Show QR code for easy mobile access
|
|
openchamber --try-cf-tunnel --tunnel-password-url # Include password in URL for auto-login
|
|
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
|
|
openchamber stop # Stop server
|
|
openchamber update # Update to latest version
|
|
```
|
|
|
|
Named Tunnel mode is configured in-app (Settings -> OpenChamber -> Tunnel). The CLI currently supports Quick Tunnel flags only. `--tunnel <config.yml>` is not supported yet.
|
|
|
|
### Desktop App (macOS)
|
|
|
|
Download from [Releases](https://github.com/btriapitsyn/openchamber/releases).
|
|
|
|
### Docker Compose
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
The service will be available at `http://localhost:3000`.
|
|
|
|
**UI Password (optional):** To enable password-protected access, uncomment and set the `UI_PASSWORD` environment variable in `docker-compose.yml`:
|
|
|
|
```yaml
|
|
environment:
|
|
UI_PASSWORD: your_secure_password
|
|
```
|
|
|
|
Or pass it via command line:
|
|
|
|
```bash
|
|
UI_PASSWORD=secret docker compose up -d
|
|
```
|
|
|
|
**Cloudflare Tunnel (optional):** To enable Cloudflare Quick Tunnel for remote access, set the `CF_TUNNEL` environment variable:
|
|
|
|
```yaml
|
|
environment:
|
|
CF_TUNNEL: "true" # Options: true, qr, password, full
|
|
```
|
|
|
|
| Value | Description |
|
|
| ---------- | ------------------------------- |
|
|
| `true` | Enable tunnel only |
|
|
| `qr` | Enable tunnel + QR code |
|
|
| `password` | Enable tunnel + password in URL |
|
|
|
|
### Named Cloudflare Tunnel (persistent hostname)
|
|
|
|
OpenChamber also supports Named Tunnel mode for more reliable long-lived access with your Cloudflare account and custom hostname.
|
|
|
|
- Configure it in-app at **Settings -> OpenChamber -> Tunnel** and switch mode to **Named**.
|
|
- Named tunnels require a domain in your Cloudflare account.
|
|
- Cloudflare setup guide: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/
|
|
- CLI note: `--tunnel <config.yml>` is not supported yet.
|
|
|
|
**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:
|
|
|
|
```bash
|
|
# Create data directories with correct ownership
|
|
mkdir -p data/openchamber data/opencode/share data/opencode/config data/ssh
|
|
|
|
# Fix permissions (replace $USER with your username)
|
|
chown -R 1000:1000 data/
|
|
```
|
|
|
|
Without proper permissions, the container may fail to start or encounter permission denied errors when writing to these directories.
|
|
|
|
**SSH/Git Authentication Note:** If git pull/push fails. Run `ssh -T git@github.com` in terminal.
|
|
|
|
## Prerequisites
|
|
|
|
- [OpenCode CLI](https://opencode.ai) installed
|
|
- Node.js 20+ (for web version)
|
|
- [cloudflared](https://github.com/cloudflare/cloudflared/releases) (required for `--try-cf-tunnel`)
|
|
|
|
See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
|
|
## Tech Stack
|
|
|
|
### Frontend
|
|
|
|

|
|

|
|

|
|

|
|
|
|
### State & UI
|
|
|
|

|
|

|
|
|
|
### Backend & Desktop
|
|
|
|

|
|

|
|

|
|
|
|
## Acknowledgments
|
|
|
|
Independent project, not affiliated with OpenCode team.
|
|
|
|
**Special thanks to:**
|
|
|
|
- [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.
|
|
- [Tauri](https://github.com/tauri-apps/tauri) - Desktop application framework.
|
|
- [Ghossty-web](https://github.com/coder/ghostty-web) - for a great implementeation 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?s=20).
|
|
- My wife, who created a beautiful firework animation for the app while testing it for the first time.
|
|
|
|
## License
|
|
|
|
MIT
|