CLIque, a folder for every CLI on the box.
CLIque is a driver, not an IDE, that keeps a private tmux server, puts every AI coding-agent session, Claude Code, Codex, Gemini, Grok, Antigravity, or anything added in four lines of config, in a folder you can find, and gives you a browser to jump between them. 24 MB resident, no framework, no build step, Python standard library only.
Repo stats
CLIque is three repos: the panel itself, a native Android client, and a Windows desktop client. Live hourly, from the local checkouts and the GitHub API.
clique (the panel)
clique-android
clique-desktop
Why I built it
If you run more than two coding agents at once, you already know the problem: terminals everywhere, no idea which one is waiting on you, a conversation you cannot get back to. CLIque is the panel for that.
It replaces two tools I was running before it, Codeman and CodemanPanel. The whole argument is size: Codeman measured 253 MB resident; CLIque measures 24 MB, and that gap is the product. It is a driver, not an IDE: it does not parse a vendor's protocol, impersonate a model, or reimplement the tools I already have. It keeps a private tmux server, puts every session in a folder I can actually find, and gives me a browser to jump between them.
[The specific day-to-day moment that pushed me to replace Codeman, in my words]
What it does
From the repo's own feature table.
- Command palette. Ctrl/Cmd+K: fuzzy jump between sessions, most-recently-used first.
- History, resume and reap. Every conversation your CLIs have kept, filed by directory, resumable in one click. An idle tab's process stops after a few hours (about 700 MB freed for an idle Claude) and resumes exactly where it was.
- Worktrees. Start a session in its own git worktree, so several agents work the same repo at once without touching each other's files.
- Conversation view. A CLI that draws full-screen keeps no scrollback; this reads its transcript back in a clean sheet.
- Agent-drivable. A one-word state per session and a wait-until-done call, so an agent can drive CLIque itself: fan one task across many repos and collect the results.
- Told, not checked. One webhook posted when a session wants you, errors, finishes or dies. ntfy, Gotify, Discord, Mattermost and Uptime Kuma push all speak it: real phone notifications, no app of its own.
- Security. Password login (scrypt), API tokens, CSRF, Origin and Host checks, CSP with per-response nonces.
- Phone and PWA. Installs as its own app on a phone: a drawer sidebar, a full-width pane, and an on-screen row for the keys a terminal needs.
Stack and architecture
Python 3.11+ and tmux, nothing else. No framework, no node_modules, no build step. Its own tmux server (tmux -L clique), isolated from anything else on the box. A PTY exists only while a browser is attached, so an idle session costs the process nothing; cost scales with open tabs, not with session count. Each viewer gets its own grouped tmux session, since a plain attach makes every client share one size. Closing a tab sends SIGHUP and detaches; it does not kill the session. Neither test suite is mocked: tools/smoke.py runs against a real tmux server, tools/smoke_http.py runs over real HTTP and WebSocket, and GitHub Actions runs both on every push.
Status
Live and in daily use, on PyPI as clique-panel. The Android client installs and self-updates from CLIque's own F-Droid repository at fdroid.useclique.dev/repo. The Windows desktop client is a WebView2 window around the same panel, about 8 MB, with its own taskbar icon and an updater. What ships next, and why, is tracked in the repo's own ROADMAP.md and CHANGELOG.md.
FAQ
pip install clique-panel (needs Python 3.11+ and tmux), then clique password and clique. It binds to loopback by default; a Tailscale or reverse-proxy tunnel is needed to reach it from another machine.