A desktop AI assistant for managing multiple projects, worktrees, and chat sessions with Claude CLI, Codex CLI, Cursor CLI, OpenCode, PI, Command Code, Grok, and Kimi Code.
Repo: coollabsio/jean
What's inside
A desktop AI assistant for managing multiple projects, worktrees, and chat sessions with Claude CLI, Codex CLI, Cursor CLI, OpenCode, PI, Command Code, Grok, and Kimi Code.
Tauri v2 ยท React 19 ยท Rust ยท TypeScript ยท Tailwind CSS v4 ยท shadcn/ui v4 ยท Zustand v5 ยท TanStack Query ยท Pierre Diffs ยท xterm.js
Jean is an opinionated native desktop app built with Tauri that gives you a powerful interface for working with Claude CLI, Codex CLI, Cursor CLI, OpenCode, PI, Command Code, Grok, and Kimi Code across multiple projects. It has strong opinions about how AI-assisted development should work - managing git worktrees, chat sessions, terminals, GitHub and Linear integrations in one cohesive workflow.
No vendor lock-in. Everything runs locally on your machine with your own CLI installations.
For more information, take a look at jean.build.
Download the latest version from the GitHub Releases page or visit jean.build.
brew tap coollabsio/jean
brew install --cask jean
Prerequisites:
kernel32.lib and other system libraries required by Rust)See CONTRIBUTING.md for full development setup and guidelines.
Every Jean instance can run Web Access: an embedded HTTP + WebSocket server that serves the same UI in a browser. That applies to both:
| Mode | How you get Web Access |
|---|---|
| Native desktop (macOS / Windows / Linux) | Settings โ Web Access - enable the HTTP server, set port/bind address, copy the token URL |
Headless server (jean-server) | Always on - the process is the Web Access endpoint |
Use it to open Jean from another machine on your LAN, a phone/tablet browser, or a remote host. Token authentication is on by default; keep it enabled for any non-localhost bind.
Web Access binds a normal TCP port (default 3456). For access beyond the local machine, prefer a private mesh VPN rather than exposing the port to the public internet:
jean-server --host 127.0.0.1 plus tailscale serve --bg 3456 so the
browser gets real HTTPS (clipboard and other secure-context APIs work).
Binding the Tailscale IP directly (--host tailscale) is HTTP-only and
browsers will treat it as an insecure origin.127.0.0.1Keep token auth enabled, use a long random token
(openssl rand -base64 32), and avoid binding 0.0.0.0 on untrusted networks
unless you also terminate TLS and restrict who can reach the port.
127.0.0.1 for local only, LAN IP,
0.0.0.0, or your Tailscale IP)?token=...) in a browser, or share it with
devices that can reach that hostThe native app can also connect to a remote Jean Web Access server (title bar server icon โ Add remote) while keeping the desktop shell.
jean-server)Run Jean as a standalone Linux server with browser Web Access - no desktop window, GTK, or WebView required. Linux amd64 and arm64 only (glibc + OpenSSL 3; Ubuntu 22.04+ / Debian 12+ recommended).
Interactive install (prompts for bind interface + port when a TTY is available):
curl -fsSL https://raw.githubusercontent.com/coollabsio/jean/main/scripts/install-jean-server.sh | sudo bash
Non-interactive (defaults to 127.0.0.1:3456, or pass --host / --port):
curl -fsSL https://raw.githubusercontent.com/coollabsio/jean/main/scripts/install-jean-server.sh | sudo bash -s -- -y
Or from a clone:
sudo ./scripts/install-jean-server.sh --host 127.0.0.1 --port 3456 -y
The installer downloads the latest release, installs the binary, writes an env
file (host/port/token), and registers a systemd service. Re-run to upgrade;
existing tokens are preserved unless you pass --token.
Common options:
# Public bind with an explicit token
sudo ./scripts/install-jean-server.sh \
--host 0.0.0.0 \
--port 3456 \
--token "$(openssl rand -base64 32)" \
-y
# Tailscale-only bind (auto-detect Tailscale IPv4) - recommended for remote use
sudo ./scripts/install-jean-server.sh --host tailscale -y
# Current user only (user systemd unit)
./scripts/install-jean-server.sh --user-install --host 127.0.0.1 -y
jean-server --host 127.0.0.1 --port 3456
# or with an explicit token:
jean-server --host 127.0.0.1 --port 3456 --token "$JEAN_TOKEN"
--host accepts localhost, presets (tailscale, lan, 0.0.0.0, โฆ), or
any IP/hostname to bind only that interface. Docker images are also published
as ghcr.io/coollabsio/jean-server.
See docs/headless-server.md for systemd details, reverse proxies, updates, native remote connections (including Install via SSH from user + IP), and security notes.
See CONTRIBUTING.md for development setup and guidelines.
| Andras Bacsai |
|---|
Learn more about our approach: Philosophy
.ai/
gemini-cli-feasibility.md
lessons.md
todo.md
.claude/
agents/
codebase-mental-model-documenter.md
react-architect.md
tauri-rust-expert.md
ui-design-expert.md
user-guide-expert.md
commands/
check.md
init.md
.commandcode/
taste/
taste.md
.cursor/
rules/
main.mdc
.cursorignore
.dockerignore
.gitattributes
.github/
FUNDING.yaml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
workflows/
ci-build.yml
preflight.yml
release.yml
server-release.yml
.gitignore
.prettierignore
.vscode/
extensions.json
settings.json
AGENTS.md
bun.lock
CLAUDE.md
components.json
CONTRIBUTING.md
data/
.maxio-keys.json
buckets/
backups/
.bucket.json
my-bucket/
.bucket.json
dist/
.gitkeep
Dockerfile.server
Dockerfile.server-runtime
docs/
APPMIMAGE_BUILD_ARCH_LINUX.md
CONTRIBUTING.md
developer/
ai-checkpoints.md
architectural-patterns.md
architecture-guide.md
auto-updates.md
build-performance.md
bundle-optimization.md
coderabbit-cli.md
command-system.md
data-persistence.md
embedded-browser-grab.md
keyboard-shortcuts.md
logging.md
menus.md
model-catalog.md
notifications.md
performance-patterns.md
releases.md
server-agent-browser.md
server-architecture.md
state-management.md
testing.md
troubleshooting.md
GETTING_STARTED.md
headless-server.md
README.md
SECURITY_PRODUCTION.md
SECURITY.md
superpowers/
plans/
2026-07-18-jean-ios-remote-client.md
2026-07-18-remote-jean-connections.md
2026-08-08-antigravity-cli-backend.md
specs/
2026-07-18-remote-jean-connections-design.md
tasks-done/
.gitkeep
tasks-todo/
.gitkeep
task-x-clear-context-execution-modes.md
task-x-e2e-testing-setup.md
task-x-http-server-web-access.md
task-x-server-agent-browser.md
task-x-voice-actions-command-box.md
tasks.md
template-requirements.md
e2e/
fixtures/
invoke-handlers.ts
mock-data.ts
tauri-mock.ts
playwright.config.ts
stubs/
tauri-plugin-clipboard.ts
tauri-plugin-dialog.ts
tauri-plugin-opener.ts
tauri-plugin-process.ts
tauri-plugin-updater.ts
tests/
app-loads.spec.ts
chat-messaging.spec.ts
keyboard-shortcuts.spec.ts
mcp-persistence.spec.ts
model-selection.spec.ts
navigation.spec.ts
preferences.spec.ts
session-management.spec.ts
terminal-persistence.spec.ts
theme-switching.spec.ts
worktree-drag-reorder.spec.ts
vite.config.e2e.ts
eslint.config.js
GEMINI.md
icon.sh
index.html
jean-core/
Cargo.toml
src/
agent_browser/
mod.rs
antigravity_cli/
commands.rs
config.rs
mcp.rs
mod.rs
auto_fix/
mod.rs
scheduler.rs
types.rs
background_tasks/
commands.rs
mod.rs
browser/
mod.rs
chat/
antigravity.rs
claude.rs
coalesce.rs
codex_server.rs
codex.rs
commandcode.rs
commands.rs
context_instructions.rs
cursor.rs
detached.rs
grok.rs
handoff.rs
jean_mcp.rs
kimi.rs
mod.rs
naming.rs
native_history.rs
opencode.rs
pi.rs
registry.rs
run_log.rs
storage.rs
tail.rs
types.rs
wakeup.rs
claude_cli/
commands.rs
config.rs
mcp.rs
mod.rs
cli_update/
mod.rs
coderabbit_cli/
commands.rs
config.rs
mod.rs
codex_cli/
commands.rs
config.rs
mcp.rs
mod.rs
commandcode_cli/
commands.rs
config.rs
mod.rs
cursor_cli/
commands.rs
config.rs
mcp.rs
mod.rs
gh_cli/
commands.rs
config.rs
mod.rs
grok_cli/
commands.rs
config.rs
mcp.rs
mod.rs
http_server/
assets.rs
auth.rs
dispatch.rs
mod.rs
server.rs
websocket.rs
jean_mcp_config.rs
jean_mcp_core.rs
jean_mcp_socket.rs
jean_mcp_stdio.rs
kimi_cli/
commands.rs
config.rs
mcp.rs
mod.rs
lib.rs
opencode_cli/
commands.rs
config.rs
mcp.rs
mod.rs
opencode_server/
mod.rs
opinionated/
commands.rs
mod.rs
pi_cli/
commands.rs
config.rs
mod.rs
platform/
cli_detect.rs
mod.rs
process.rs
shell.rs
wsl.rs
prerequisites.rs
projects/
checkpoints.rs
commands.rs
git_log.rs
git_status.rs
git.rs
github_actions.rs
github_issues.rs
linear_issues.rs
mod.rs
names.rs
pr_status.rs
release_notes.rs
saved_contexts.rs
sentry_issues.rs
storage.rs
types.rs
runtime.rs
server_update/
mod.rs
terminal/
attention.rs
commands.rs
mod.rs
pty.rs
registry.rs
types.rs
version.rs
jean.json
LICENSE.md
logo_og.jpeg
logo_og.jpg
logo.png
package.json
playwright.config.ts
prettier.config.js
public/
apple-touch-icon.png
favicon.png
ghostty-vt.wasm
logo.png
sounds/
.gitkeep
jobs-done.wav
work-work.wav
README.md
screenshots/
SCR-20260304-krym.png
SCR-20260304-ksgh.png
SCR-20260304-ksjn.png
SCR-20260304-ksnq.png
SCR-20260304-kstl.png
SCR-20260304-ktab.png
SCR-20260304-ktwr.png
SCR-20260304-kuhk.png
scripts/
appimage-webkit-fix.sh
appimage-webkit-fix.test.mjs
assert-release-version.js
build-appimage.sh
bump-version.js
bump-version.test.mjs
complete-task.js
docker-entrypoint.sh
install-jean-server.sh
install-jean-server.test.mjs
install-local-macos.mjs
install-local-macos.test.mjs
install-local-server.mjs
install-local-server.test.mjs
prepare-release.js
server-ci-assets.test.mjs
tauri-dev-before.mjs
tauri-dev-rdp.sh
tauri-dev-with-web-access.sh
SECURITY.md
src/
src-server/
Cargo.lock
Cargo.toml
src/
main.rs
src-tauri/
.gitignore
build.rs
capabilities/
browser-pane.json
default.json
desktop.json
Cargo.lock
Cargo.toml
icons/
128x128.png
128x128@2x.png
256x256.png
256x256@2x.png
32x32.png
32x32@2x.png
512x512.png
512x512@2x.png
64x64.png
android/
mipmap-anydpi-v26/
ic_launcher.xml
mipmap-hdpi/
ic_launcher_foreground.png
ic_launcher_round.png
ic_launcher.png
mipmap-mdpi/
ic_launcher_foreground.png
ic_launcher_round.png
ic_launcher.png
mipmap-xhdpi/
ic_launcher_foreground.png
ic_launcher_round.png
ic_launcher.png
mipmap-xxhdpi/
ic_launcher_foreground.png
ic_launcher_round.png
ic_launcher.png
mipmap-xxxhdpi/
ic_launcher_foreground.png
ic_launcher_round.png
ic_launcher.png
values/
ic_launcher_background.xml
icon.icns
icon.ico
icon.png
icon.png.backup
ios/
AppIcon-20x20@1x.png
AppIcon-20x20@2x-1.png
AppIcon-20x20@2x.png
AppIcon-20x20@3x.png
AppIcon-29x29@1x.png
AppIcon-29x29@2x-1.png
AppIcon-29x29@2x.png
AppIcon-29x29@3x.png
AppIcon-40x40@1x.png
AppIcon-40x40@2x-1.png
AppIcon-40x40@2x.png
AppIcon-40x40@3x.png
AppIcon-512@2x.png
AppIcon-60x60@2x.png
AppIcon-60x60@3x.png
AppIcon-76x76@1x.png
AppIcon-76x76@2x.png
AppIcon-83.5x83.5@2x.png
Square107x107Logo.png
... 1000 moreFAQ
jean is a Claude Code plugin with hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.