https://github.com/cfal/garcon
Garcon is a coding workspace for Claude Code, Codex, OpenCode, and Amp.
https://github.com/cfal/garcon
ampcode claude-code codex git-workflow opencode
Last synced: 29 days ago
JSON representation
Garcon is a coding workspace for Claude Code, Codex, OpenCode, and Amp.
- Host: GitHub
- URL: https://github.com/cfal/garcon
- Owner: cfal
- License: other
- Created: 2026-02-23T13:42:57.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-03-25T09:07:29.000Z (about 1 month ago)
- Last Synced: 2026-03-25T14:33:00.026Z (about 1 month ago)
- Topics: ampcode, claude-code, codex, git-workflow, opencode
- Language: TypeScript
- Homepage:
- Size: 3.64 MB
- Stars: 6
- Watchers: 0
- Forks: 0
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Garcon
Garcon is a coding workspace for Claude Code, Codex, OpenCode, and Amp.
Main workspace
Built-in Git workbench
Mobile layout
Main workspace (dark theme)
## Capabilities
- Multi-provider chat sessions (`claude`, `codex`, `opencode`) with per-chat model selection
- Unified coding workspace tabs: chat, files, terminal, and git
- Full Git workbench: status, diff, staging/hunks, branches, history, commit/push/pull/fetch, worktrees, revert
- Persistent chat history with pin/archive/reorder/read-state/fork operations
- Per-chat message queueing (enqueue, pause, resume, clear) with recovery after restart
- File workspace: tree/list/browse, text editing, binary/image viewing, and image upload for prompts
- Built-in terminal tab (PTY over WebSocket) with reconnectable sessions
- Configurable project access boundary for filesystem safety
## Architecture
- `web/`: SvelteKit frontend (chat, files, shell, git panels)
- `server/`: Bun server + WebSocket orchestration + provider adapters
- `common/`: shared WS contracts and chat/event types
## Requirements
- [Bun](https://bun.sh/)
- At least one agent backend:
- Claude CLI (`claude`) and local Claude auth
- Codex auth (`~/.codex/auth.json`) or `OPENAI_API_KEY`
- OpenCode provider keys/config (through OpenCode SDK)
## Quick Start
```bash
git clone https://github.com/cfal/garcon.git
cd garcon
bun run install
bun run start
```
Default URL: `http://127.0.0.1:8080` (override with `GARCON_PORT` or `--port`)
On first launch, create the single local account at `/setup`, then configure providers in Settings.
If you start the server with auth disabled, onboarding/login is skipped and you enter the app directly.
## Run and Configuration
### CLI
```bash
bun run start --port 8080 --bind-address 127.0.0.1 --project-base-dir /path/to/repos
```
Disable auth at startup (requires server restart to change):
```bash
bun run start -- --disable-auth
# or GARCON_DISABLE_AUTH=true bun run start
```
Run `bun run help` to see all flags and supported environment variables.
### Build Executable
Build a standalone Bun executable (server + embedded static frontend assets):
```bash
bun run build-exe
```
This command runs checks/tests, builds `web/build`, compiles `dist/garcon`, and runs a smoke test against the executable.
At server startup, static assets are served from embedded assets when `Bun.embeddedFiles` is non-empty.
Otherwise the server reads from `web/build`.
### Docker
Docker Hub images are published periodically but may lag behind the latest commits.
For the most up-to-date version, build the image locally with `docker compose build` (see the Docker Compose section below).
Test with Docker Hub image:
```bash
docker run -d \
--name garcon \
--init \
--restart unless-stopped \
-p 8080:8080 \
-e GARCON_PORT=8080 \
-e GARCON_BIND_ADDRESS=0.0.0.0 \
-e GARCON_PROJECT_BASE_DIR=/projects \
-e OPENAI_API_KEY="${OPENAI_API_KEY:-}" \
-v garcon-data:/home/garcon/.garcon \
-v "$HOME/repos":/projects \
-v "$HOME/.claude":/home/garcon/.claude \
-v "$HOME/.codex":/home/garcon/.codex \
-v "$HOME/.opencode":/home/garcon/.opencode \
-v "$HOME/.opencode/opencode-data":/home/garcon/.local/share/opencode \
-v "$HOME/.opencode/opencode-state":/home/garcon/.local/state/opencode \
-v "$HOME/.opencode/opencode-cache":/home/garcon/.local/cache/opencode \
-v "$HOME/.amp":/home/garcon/.amp \
garconide/garcon:latest
```
Run with Docker Compose (builds local image):
```bash
GARCON_PROJECT_DIR=~/repos docker compose up -d
```
Custom port:
```bash
GARCON_PROJECT_DIR=~/repos GARCON_PORT=3000 docker compose up -d
```
Set `GARCON_PROJECT_DIR` (compose) or the `/projects` bind mount (`docker run`) to the directory containing your repos. Pass any API keys (e.g. `OPENAI_API_KEY`) as needed. Config is persisted in `garcon-data`.