{"slug": "opensessions-a-beautiful-tmux-sidebar-no-nonsense", "title": "Opensessions – A beautiful TMUX sidebar, no nonsense", "summary": "Ataraxy Labs released Opensessions, a Rust-based sidebar plugin for tmux that provides session switching, agent state tracking, and repository breadcrumbs within existing tmux workflows. The tool, built with ratatui for native performance and zero runtime dependencies, includes a local WebSocket server on port 7391 that allows scripts and AI agents to push status updates, progress, and logs via HTTP. Opensessions supports live agent state across Amp, Claude Code, Codex, and OpenCode sessions, with per-thread unseen markers for done, error, and interrupted states.", "body_md": "Part of the— agent-native infrastructure for software development. See also:[Ataraxy Labs]stack[sem](semantic version control) ·[weave](entity-level merge driver) ·[inspect](semantic code review).Read the manifesto:\n\n[https://ataraxy-labs.com/#thesis]· Essays:[https://ataraxy-labs.com/blogs]· LLMs:[https://ataraxy-labs.com/llms.txt]\n\ntmux is all you need. make tmux great again :)\n\n`opensessions`\n\nis a sidebar for `tmux`\n\nwhen your sessions, agents, and localhost tabs start multiplying.\n\nIt 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.\n\nBuilt with Rust and [ratatui](https://ratatui.rs) for native performance and zero runtime dependencies.\n\ntmux 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.\n\nRequirements:\n\n`tmux`\n\n`cargo`\n\n([install Rust](https://rustup.rs))[TPM](https://github.com/tmux-plugins/tpm)\n\nAdd this to `~/.tmux.conf`\n\n:\n\n```\nset -g @plugin 'Ataraxy-Labs/opensessions'\n```\n\nThen reload tmux and install plugins:\n\n```\ntmux source-file ~/.tmux.conf\n~/.tmux/plugins/tpm/bin/install_plugins\n```\n\nBuild the binaries:\n\n```\ncd ~/.tmux/plugins/opensessions\ncargo build --release\n```\n\nOpen the sidebar with `prefix o → s`\n\n.\n\nTPM clones the repo into `~/.tmux/plugins/opensessions`\n\n. The sidebar and server run as native Rust binaries from `target/release/`\n\n.\n\nIf you want the same setup as a single shell command:\n\n```\ngrep -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 && cd ~/.tmux/plugins/opensessions && cargo build --release\n```\n\nUse TPM's built-in update (`prefix + U`\n\n) or run:\n\n```\n~/.tmux/plugins/tpm/bin/update_plugins opensessions\n```\n\nThen rebuild:\n\n```\ncd ~/.tmux/plugins/opensessions && cargo build --release\n```\n\nThe plugin automatically restarts the server on update so it picks up the new binary. Toggle the sidebar back on with `prefix o → s`\n\nif it was open.\n\nRun the uninstall script **before** removing the plugin files — it cleans up tmux hooks, keybindings, sidebar panes, and environment variables that would otherwise persist and cause glitching:\n\n```\nsh ~/.tmux/plugins/opensessions/integrations/tmux-plugin/scripts/uninstall.sh\n```\n\nThen remove the `set -g @plugin 'Ataraxy-Labs/opensessions'`\n\nline from `~/.tmux.conf`\n\nand run `prefix + alt + u`\n\n(TPM uninstall).\n\n- Live agent state across sessions for Amp, Claude Code, Codex, and OpenCode.\n- Per-thread unseen markers for\n`done`\n\n,`error`\n\n, and`interrupted`\n\nstates. - Session context in the UI: branch in the list, working directory in the detail panel, thread names, and detected localhost ports.\n- Programmatic metadata API: agents and scripts push status, progress, and logs to the sidebar via HTTP.\n- Fast switching with\n`j`\n\n/`k`\n\n, arrows,`Tab`\n\n,`1`\n\n-`9`\n\n, session reordering, hide/restore, creation, and kill actions. `prefix o → s`\n\nand`prefix o → t`\n\nfor sidebar focus and toggle,`prefix o → e`\n\nfor sidebar-safe`even-horizontal`\n\nlayout in the current window,`prefix o → 1`\n\nthrough`9`\n\nfor quick switching, optional no-prefix shortcuts, in-app theme switching, and plugin hooks for more mux providers or watchers.- Native Rust sidebar built with ratatui 0.30 and crossterm 0.29, with a local WebSocket server on\n`127.0.0.1:7391`\n\n.\n\nScripts and agents can push custom metadata to the sidebar over HTTP — no binary needed:\n\n```\n# Set a status pill on a session\ncurl -X POST http://127.0.0.1:7391/set-status \\\n  -H 'content-type: application/json' \\\n  -d '{\"session\":\"my-app\",\"text\":\"Deploying\",\"tone\":\"warn\"}'\n\n# Set progress\ncurl -X POST http://127.0.0.1:7391/set-progress \\\n  -H 'content-type: application/json' \\\n  -d '{\"session\":\"my-app\",\"current\":3,\"total\":10,\"label\":\"services\"}'\n\n# Push a log entry\ncurl -X POST http://127.0.0.1:7391/log \\\n  -H 'content-type: application/json' \\\n  -d '{\"session\":\"my-app\",\"message\":\"Tests passed\",\"source\":\"ci\",\"tone\":\"success\"}'\n```\n\nEndpoints: `/set-status`\n\n, `/set-progress`\n\n, `/log`\n\n, `/clear-log`\n\n, `/notify`\n\nTones: `neutral`\n\n, `info`\n\n, `success`\n\n, `warn`\n\n, `error`\n\n— each with a distinct icon and color.\n\nFull reference: [docs/reference/programmatic-api.md](/Ataraxy-Labs/opensessions/blob/main/docs/reference/programmatic-api.md)\n\nBuild and run from a local clone:\n\n```\ngit clone https://github.com/Ataraxy-Labs/opensessions.git\ncd opensessions\ncargo build --release\ncargo test\n```\n\nStart the sidebar manually (outside tmux, for testing):\n\n```\ncargo run -p opensessions-sidebar\n```\n\nStart the server:\n\n```\ncargo run -p opensessions-server\n```\n\nFor the full tmux workflow with keybindings, troubleshooting, and configuration options, follow the guide below.\n\n[Get started in tmux](/Ataraxy-Labs/opensessions/blob/main/docs/tutorials/get-started-in-tmux.md)[Set up Ghostty shortcuts](/Ataraxy-Labs/opensessions/blob/main/docs/how-to/set-up-ghostty-shortcuts.md)[Configuration reference](/Ataraxy-Labs/opensessions/blob/main/docs/reference/configuration.md)[Features and keybindings reference](/Ataraxy-Labs/opensessions/blob/main/docs/reference/features-and-keybindings.md)[Programmatic API reference](/Ataraxy-Labs/opensessions/blob/main/docs/reference/programmatic-api.md)[Architecture explanation](/Ataraxy-Labs/opensessions/blob/main/docs/explanation/architecture.md)[Contracts and extension interfaces](/Ataraxy-Labs/opensessions/blob/main/CONTRACTS.md)[Plugin authoring guide](/Ataraxy-Labs/opensessions/blob/main/PLUGINS.md)\n\n- Session ordering is persisted in\n`~/.config/opensessions/session-order.json`\n\n. - Amp watcher reads\n`~/.local/share/amp/threads/*.json`\n\nand clears unseen state from Amp's`session.json`\n\nwhen a thread becomes seen there. - Claude Code watcher reads JSONL transcripts in\n`~/.claude/projects/`\n\n. - Codex watcher reads transcript JSONL files in\n`~/.codex/sessions/`\n\nor`$CODEX_HOME/sessions/`\n\nand resolves sessions from`turn_context.cwd`\n\n. - OpenCode watcher polls the SQLite database in\n`~/.local/share/opencode/opencode.db`\n\n. - Hidden sidebars are stashed in a tmux session named\n`_os_stash`\n\n, so they can come back without restarting the sidebar process. - Clicking a detected port opens\n`http://localhost:<port>`\n\n.\n\n`apps/tui-rs/`\n\n— Rust ratatui sidebar client (connects to server over WebSocket)`apps/server-rs/`\n\n— Rust server that assembles state from mux providers and agent watchers`apps/sidebar-shim-rs/`\n\n— Lightweight shim for sidebar process management`apps/tui/scripts/`\n\n— Shell scripts for tmux sidebar launch and session switching\n\n`packages/runtime-rs/`\n\n— Shared Rust runtime: tmux provider, agent watchers, config, tracker, protocol`packages/sidebar-core-rs/`\n\n— Core sidebar rendering logic, extractable for snapshot tests`packages/sidebar-protocol-rs/`\n\n— Shared protocol types between server and sidebar\n\n`opensessions.tmux`\n\n— Root TPM entrypoint for users`integrations/tmux-plugin/`\n\n— tmux-facing scripts and host integration glue`integrations/amp/`\n\n— Amp agent integration`integrations/pi-extension/`\n\n— Pi extension integration\n\n- The app is effectively pinned to\n`127.0.0.1:7391`\n\ntoday. `theme`\n\n,`sidebarWidth`\n\n,`sidebarPosition`\n\n,`plugins`\n\n, and`mux`\n\nare 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.\n- tmux is the only supported mux today.\n\nMIT", "url": "https://wpnews.pro/news/opensessions-a-beautiful-tmux-sidebar-no-nonsense", "canonical_source": "https://github.com/Ataraxy-Labs/opensessions", "published_at": "2026-06-04 18:44:43+00:00", "updated_at": "2026-06-04 18:51:57.227367+00:00", "lang": "en", "topics": ["ai-tools", "ai-infrastructure", "ai-agents"], "entities": ["Opensessions", "TMUX", "Ataraxy Labs", "Rust", "ratatui", "TPM"], "alternates": {"html": "https://wpnews.pro/news/opensessions-a-beautiful-tmux-sidebar-no-nonsense", "markdown": "https://wpnews.pro/news/opensessions-a-beautiful-tmux-sidebar-no-nonsense.md", "text": "https://wpnews.pro/news/opensessions-a-beautiful-tmux-sidebar-no-nonsense.txt", "jsonld": "https://wpnews.pro/news/opensessions-a-beautiful-tmux-sidebar-no-nonsense.jsonld"}}