tmux is all you need. make tmux great again :)
opensessions is a sidebar for tmux when your sessions, agents, and localhost tabs start multiplying.
It lives inside your existing tmux workflow instead of replacing it: one small pane for session switching, agent state, repo breadcrumbs, and quick jumps back into the right terminal.
tmux is the only supported mux today. There is older zellij integration code in the repo, but it is not stable enough to document as supported; we are looking for maintainers who want to help bring it back to that bar.
Requirements:
tmuxbun- TPM
Add this to ~/.tmux.conf:
set -g @plugin 'Ataraxy-Labs/opensessions'Then reload tmux and install plugins:
tmux source-file ~/.tmux.conf
~/.tmux/plugins/tpm/bin/install_pluginsOpen the sidebar with prefix s.
TPM clones the repo into ~/.tmux/plugins/opensessions. It does not install a standalone opensessions binary. opensessions runs from that checkout with your local bun installation.
If you want the same setup as a single shell command:
grep -q "Ataraxy-Labs/opensessions" ~/.tmux.conf 2>/dev/null || printf '\nset -g @plugin '\''Ataraxy-Labs/opensessions'\''\n' >> ~/.tmux.conf && tmux source-file ~/.tmux.conf && ~/.tmux/plugins/tpm/bin/install_plugins@opensessions/mux-tmuxand the tmux plugin flow are supported.@opensessions/mux-zellijis still experimental.- The repo is organized for contributors around runnable apps, reusable packages, and host integrations.
- Live agent state across sessions for Amp, Claude Code, Codex, and OpenCode.
- Per-thread unseen markers for
done,error, andinterruptedstates. - Session context in the UI: branch in the list, working directory in the detail panel, thread names, and detected localhost ports.
- Fast switching with
j/k, arrows,Tab,1-9, session reordering, hide/restore, creation, and kill actions. - A tmux command table on
prefix o, optional no-prefix shortcuts, in-app theme switching, and plugin hooks for more mux providers or watchers. - Bun workspace, source-first execution, and a local server on
127.0.0.1:7391.
Smoke test from a local clone:
git clone https://github.com/Ataraxy-Labs/opensessions.git
cd opensessions
bun install
bun test
bun run start:tuiThat starts the sidebar client and auto-launches the server if needed.
For the full tmux workflow with keybindings, troubleshooting, and configuration options, follow the guide below.
- Get started in tmux
- Configuration reference
- Features and keybindings reference
- Architecture explanation
- Contracts and extension interfaces
- Plugin authoring guide
- Session ordering is persisted in
~/.config/opensessions/session-order.json. - Amp watcher reads
~/.local/share/amp/threads/*.jsonand clears unseen state from Amp'ssession.jsonwhen a thread becomes seen there. - Claude Code watcher reads JSONL transcripts in
~/.claude/projects/. - Codex watcher reads transcript JSONL files in
~/.codex/sessions/or$CODEX_HOME/sessions/and resolves sessions fromturn_context.cwd. - OpenCode watcher polls the SQLite database in
~/.local/share/opencode/opencode.db. - Hidden sidebars are stashed in a tmux session named
_os_stash, so they can come back without restarting the sidebar process. - Clicking a detected port opens
http://localhost:<port>.
apps/server— Bun server bootstrap that wires together built-in mux providers and agent watchersapps/tui— OpenTUI sidebar client built with Solid, plus the canonical sidebar launcher script
packages/runtime— shared runtime logic: tracker, config, plugin loader, server internals, themes, orderingpackages/mux/contract— mux contracts and capability guards exposed as@opensessions/muxpackages/mux/providers/tmux— tmux provider exposed as@opensessions/mux-tmuxpackages/mux/providers/zellij— experimental zellij provider exposed as@opensessions/mux-zellijpackages/mux/tmux-sdk— lower-level typed tmux bindings used by tmux-aware code
opensessions.tmux— root TPM entrypoint for usersintegrations/tmux-plugin— tmux-facing scripts and host integration glue
- The app is effectively pinned to
127.0.0.1:7391today. theme,sidebarWidth,sidebarPosition,plugins, andmuxare wired through the runtime; other typed config fields are not all live yet.- Inline theme objects exist in core, but the running server persists and broadcasts theme names.
MIT