Desktop overlay for Claude Code CLI on Linux.
Float, tab, approve, and prompt without leaving your workflow.
This is a Linux adaptation of clui-cc by Lucas Couto. The original project targets macOS only. This fork adds:
- Linux support — tested on Ubuntu 22+, Fedora 38+, and Arch Linux
- Screenshot capture — auto-detects
gnome-screenshot,scrot, orimport(ImageMagick) - Terminal detection — opens your default terminal automatically (GNOME Terminal, Konsole, Alacritty, etc.)
- Tray icon — adapted for Linux desktop environments (GNOME, KDE, XFCE)
- Desktop integration —
.desktopfile and Linux-compatible icon set - Python 3.12+ fix — auto-installs
setuptoolswhen missing (removed from stdlib in 3.12) - Electron sandbox fix — handles the
--no-sandboxrequirement on Linux automatically
- Floating overlay — transparent, always-on-top window. Toggle with
Alt+Space - Multi-tab sessions — each tab spawns its own
claude -pprocess with independent session state - Permission approval UI — review and approve/deny tool calls in-app before execution
- Conversation history — browse and resume past Claude Code sessions
- Skills marketplace — install plugins from Anthropic's GitHub repos without leaving the app
- Voice input — local speech-to-text via Whisper (no cloud transcription)
- File & screenshot attachments — paste images or attach files directly
- Dark/light theme — follows system preference
- Auto-detection — finds your terminal, screenshot tool, and shell automatically
git clone https://github.com/LuisMIguelFurlanettoSousa/clui-cc-linux.git
cd clui-cc-linux
./start.shRequires Node.js 18+, Python 3, and Claude Code CLI. The start script checks everything and tells you what's missing.
Toggle the overlay: Alt+Space (or Ctrl+Shift+K as fallback).
Prerequisites
1. Install Node.js 18+ (via your package manager or nvm):
# Ubuntu/Debian
sudo apt install nodejs npm
# Fedora
sudo dnf install nodejs npm
# Or via nvm (any distro)
nvm install --lts2. Install Python 3:
# Ubuntu/Debian
sudo apt install python3
# Fedora
sudo dnf install python33. Install build tools:
# Ubuntu/Debian
sudo apt install build-essential
# Fedora
sudo dnf groupinstall "Development Tools"4. Install Claude Code CLI:
npm install -g @anthropic-ai/claude-code5. Authenticate Claude Code (follow the prompts):
claudeDevelopment
npm install
npm run dev # hot-reload (renderer changes update instantly)
npm run build # production buildRenderer changes update instantly during dev. Main-process changes require restarting npm run dev.
Architecture and Internals
Clui CC is an Electron app with three layers:
┌─────────────────────────────────────────────────┐
│ Renderer (React 19 + Zustand + Tailwind CSS 4) │
│ Components, theme, state management │
├─────────────────────────────────────────────────┤
│ Preload (window.clui bridge) │
│ Secure IPC surface between renderer and main │
├─────────────────────────────────────────────────┤
│ Main Process │
│ ControlPlane → RunManager → claude -p (NDJSON) │
│ PermissionServer (HTTP hooks on 127.0.0.1) │
│ Marketplace catalog (GitHub raw fetch + cache) │
└─────────────────────────────────────────────────┘
src/
├── main/ # Electron main process
│ ├── claude/ # ControlPlane, RunManager, EventNormalizer
│ ├── hooks/ # PermissionServer (PreToolUse HTTP hooks)
│ ├── marketplace/ # Plugin catalog fetching + install
│ ├── skills/ # Skill auto-installer
│ └── index.ts # Window creation, IPC handlers, tray
├── renderer/ # React frontend
│ ├── components/ # TabStrip, ConversationView, InputBar, etc.
│ ├── stores/ # Zustand session store
│ ├── hooks/ # Event listeners, health reconciliation
│ └── theme.ts # Dual palette + CSS custom properties
├── preload/ # Secure IPC bridge (window.clui API)
└── shared/ # Canonical types, IPC channel definitions
- Each tab creates a
claude -p --output-format stream-jsonsubprocess. - NDJSON events are parsed by
RunManagerand normalized byEventNormalizer. ControlPlanemanages tab lifecycle (connecting → idle → running → completed/failed/dead).- Tool permission requests arrive via HTTP hooks to
PermissionServer(localhost only). - The renderer polls backend health every 1.5s and reconciles tab state.
- Sessions are resumed with
--resume <session-id>for continuity.
Clui CC operates almost entirely offline. The only outbound network calls are:
| Endpoint | Purpose | Required |
|---|---|---|
raw.githubusercontent.com/anthropics/* |
Marketplace catalog (cached 5 min) | No — graceful fallback |
api.github.com/repos/anthropics/*/tarball/* |
Skill auto-install on startup | No — skipped on failure |
No telemetry, analytics, or auto-update mechanisms. All Claude Code interaction goes through the local CLI.
| Component | Version |
|---|---|
| Ubuntu | 24.04 LTS |
| Fedora | 38+ |
| Node.js | 20.x LTS, 22.x |
| Python | 3.12 - 3.14 |
| Electron | 33.x |
| Claude Code CLI | 2.1.71+ |
- Requires Claude Code CLI — Clui CC is a UI layer, not a standalone AI client. You need an authenticated
claudeCLI. - Transparent click-through not available on Linux — this is an Electron limitation on X11/Wayland.
- Alt+Space may conflict — some Linux window managers (e.g., KDE, i3) bind
Alt+Spaceby default. Remap the WM shortcut or useCtrl+Shift+K.
For setup issues and recovery commands, see docs/TROUBLESHOOTING.md.
Quick self-check:
npm run doctorSee CONTRIBUTING.md for guidelines.
- Original project by Lucas Couto
- Linux adaptation by Luis Miguel
If you found this useful, give it a ⭐ to help others discover it!