One daemon. Every agent CLI you run. Any browser.

sudock is a local daemon that owns your Claude Code, Codex, Gemini, and shell sessions as persistent tabs — then hands you a browser client that sees the exact same live state, from your laptop or your phone.

It doesn't drive your CLI tools or own your conversations. It attaches to sessions the vendor tool already owns, reading the same session files Claude Code, Codex, and Gemini already write to disk, and resuming with each tool's own --resume. Uninstall sudock and every session still opens fine without it.

Why this exists

It started with a bad phone experience.

I kept wanting to check on long-running agent sessions from my phone — approve a command, read what an agent had done, nudge it and walk away again. The obvious answer was "just SSH in." SSHing into your machine from a phone is miserable: tiny keyboard, no real terminal, dropped connections, squinting at a session you can barely scroll.

So sudock is the thing I wanted instead. A daemon runs on the machine where the code, the git history, and the CLI agents already live. It owns the terminal sessions. Any browser — laptop, tablet, phone — attaches over a WebSocket and sees the exact same live state. Close the lid, pick up the phone, tap into the tab, and it's the session that never stopped running.

— from the project README

What's actually built

Five things that work today, and one that's on the way.

one daemon, every tool
Claude Code, Codex, Gemini CLI, Pi / oh-my-pi, Grok, or a bare shell each spawn as a tab under a project — a project is just a folder on disk. Per-tool adapters know which is which: auto-named topic, context usage, and a working / blocked / idle / complete state, where the tool exposes enough to tell.
sessions that outlive the daemon
PTYs die when the daemon restarts; your conversations don't. sudock relaunches each tab with the tool's own --resume <id> — exact for Claude Code and Pi/omp, best-effort for Codex and Gemini — and refuses visibly rather than silently starting a fresh session if a resume isn't safe.
any browser is a full client
The daemon binds loopback by default; pair a second device with a 6-digit PIN and it attaches over WebSocket to the same tabs. Multiple browsers can watch and drive the same session at once — close one, the tab keeps running on the daemon.
cross-tool session history
sudock indexes the session files Claude Code, Codex, Gemini, and Pi/omp already write, plus import-only history from Cursor agent and Claude Desktop, so past work — even sessions started before sudock existed — shows up in "Resume from history."
split panes + a command palette
Tile several tabs side by side and every visible pane streams live, not just the focused one. Cmd+K searches live tabs, projects, and imported sessions from anywhere.
a control socket for your own agents in progress
A separate, bearer-token-authenticated API can list, spawn, feed input to, and wait on tabs — the base for seating one agent as a coordinator that dispatches work to the others. A "group chat" surface that merges several tabs into one routed conversation is designed and being built, not shipped yet.

What it looks like

Status

  • 0.8-era, active development. Expect rapid iteration, not a 1.0 stability promise.
  • AGPL-3.0-only. Self-hosting is free, forever. A commercial license exists for running a modified sudock as a closed network service.
  • Linux and macOS, native. Windows runs native via ConPTY, or inside WSL if that's where your CLI agents already live.
  • Not accepting code PRs yet — a CLA needs to be in place first — but bug reports with clear repro steps are welcome.