Desktop OpenCode UI for managing projects, folders, and chat sessions.
Drives the same OpenCode runtime you use in the terminal—including stacks extended with Oh My OpenCode.
| Layer | Role |
|---|---|
| OpenCode | Core open-source AI coding agent; exposes a local HTTP API and stores sessions (e.g. ~/.local/share/opencode/opencode.db). |
| Oh My OpenCode | Optional plugin layer on top of OpenCode: orchestration, agents (e.g. Sisyphus-style planning), hooks, MCP tooling, LSP—see ohmyopencode.com and installation. |
| Elia-OC (this app) | Native UI: project/folder picker, All Sessions, chat, tool timelines, terminals, GitHub helpers—everything is sent through OpenCode (managed or PATH binary). |
You do not embed Oh My OpenCode inside Elia-OC. Install OpenCode, add Oh My OpenCode with their installer (bunx / npm / etc.), then run Elia-OC. As long as opencode runs with Oh My OpenCode enabled in your environment, the desktop app talks to that same stack via the OpenCode server and session IDs (ses_*).
Recommended flow
- Install OpenCode and verify
opencodeworks in a terminal. - Install Oh My OpenCode so your OpenCode CLI loads agents/workflows you care about (e.g. orchestrator models aligned with
big-pickle). - Install Elia-OC (build from this repo or copy the
.app). - In Settings → General, set OpenCode to managed (app installs/updates the binary) or PATH (use your existing
opencodewith Oh My OpenCode already configured).
Default model in this fork is opencode/big-pickle, which matches common Oh My OpenCode / Sisyphus-style setups.
Elia-OC is a fork of Jean, reshaped into an OpenCode-first desktop client (Claude/Codex paths are not the focus).
UI / behavior changes that matter for OpenCode
- OpenCode-only chat path — Messages go through the OpenCode HTTP server; working directory comes from the selected folder / OpenCode session
directoryin SQLite. - All Sessions — Lists OpenCode sessions; picking an existing project folder can open an OpenCode sessions dialog (list + New session) instead of failing on “project already exists”.
- Structured tool replies — JSON payloads from MCP tools (
message+mcp_name/tool_name) render as a dedicated card instead of broken markdown. - Branding — Product name Elia-OC;
package.jsonnameelia-oc(Rust crate may still bejeaninternally).
- Project & worktree management — Multi-project support, git worktree automation, custom avatars (Jean-era features kept where useful).
- OpenCode sessions — Per-folder session list, create session in directory, sync with OpenCode DB.
- AI chat (OpenCode) — Model selection (big-pickle, Kimi2.5, MiniMax2.5), thinking/effort, MCP, files, images, prompts.
- Magic / GitHub / dev tools — Inherited panels (issues, PRs, terminal, diff, etc.) where still wired; core assistant remains OpenCode.
- Remote access — Optional HTTP + WebSocket server for browser clients (same command dispatch rules as upstream).
| Model | Notes |
|---|---|
| big-pickle (default) | Large context; typical orchestrator pairing with Oh My OpenCode-style workflows. |
| Kimi2.5 / MiniMax2.5 | Alternatives available in the UI. |
- Bun or Node.js
- Rust
- Windows: Visual Studio Desktop development with C++ workload
- OpenCode on PATH or installed via app settings after first launch
- Optional: Oh My OpenCode installed for your OpenCode CLI
git clone <your-fork-url> OpenCode_JeanUI
cd OpenCode_JeanUI
bun install
# If CI=1 breaks the CLI, use: env -u CI bunx @tauri-apps/cli build
bun run tauri buildDefault macOS build (native / optimized for the machine you build on — Apple Silicon on M-series):
bun run tauri:build:macosUniversal binary (Intel + Apple Silicon in one .app) — install both targets, then:
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
bun run tauri:build:macos:universalInstall script (bun run build:macos:install) uses the native build by default; pass -u or ELIA_MACOS_UNIVERSAL=1 for universal.
Release bundle paths (example):
src-tauri/target/release/bundle/macos/Elia-OC.appsrc-tauri/target/release/bundle/dmg/*.dmg
Signing: Default scripts use
--no-signso local builds work without Apple certificates. For a signed release, setAPPLE_SIGNING_IDENTITY(and related env) and runbun run tauri:build:macos:signedorbun run tauri:build:macos:universal:signed. Updater artifacts may requireTAURI_SIGNING_PRIVATE_KEY.
- macOS — Primary
- Windows / Linux — Best-effort / community
OpenCode_JeanUI/
├── src/ # React UI
│ ├── components/chat/ # Messages, OpenCode session modal, tool UI
│ ├── services/ # opencode-cli.ts, chat transports
│ └── store/ # Zustand
├── src-tauri/ # Tauri + Rust
│ ├── opencode_cli/ # DB session listing, directory filter, HTTP session create
│ ├── chat/ # send path, OpenCode context directory for ses_*
│ └── http_server/ # WebSocket command dispatch
└── dist/ # Vite output (bundled into the app)
Runtime data OpenCode owns (shared with terminal + Oh My OpenCode):
- Session DB:
~/.local/share/opencode/opencode.db - Local OpenCode server port (app can auto-start / acquire)
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the Apache License 2.0.
- Based on Jean by Andras Bacsai.
- Powered by OpenCode.
- Works alongside Oh My OpenCode when installed for your OpenCode CLI.
