I made a Claude Code session manager for tmux Developer Takuya created a tmux plugin called tmux-claude-session-manager to manage multiple Claude Code sessions. The tool provides an fzf-based picker that shows live status of all running sessions, allowing users to jump directly to sessions that need attention. It aims to improve developer workflow by reducing the friction of switching between multiple AI coding sessions. Tips https://www.devas.life/tag/tips/ I made a Claude Code session manager for tmux Hi, it's Takuya. I'm happy to introduce a tool for managing multiple Claude Code sessions in tmux. Here is a demo video: First, let me share a bit about the journey that led me to build it. Or, you can just jump right to the repo here: Tightening the feedback loop so agents can move fast Recently, I've read Christoph Nakazawa's blog post https://cpojer.net/posts/modern-engineering-values?ref=devas.life . He emphasizes the importance of the toolchain in boosting feedback loops and developer productivity to work efficiently with coding agents: Working with coding agents is basically the same as working in a large organization: You drop new engineers without context on the codebase all the time, just like agents The more constraints like lint rules, automated testing, and other methods of fast verification you put on the code, the faster people can iterate on their changes, and the faster they can get work done. It inspired me to focus on updating my tool setup and DX in my project. First, I focused on improving tool performance. For example, I recently migrated Inkdrop's build toolchain from webpack + Grunt to electron-vite@6-beta Vite 8 + Rolldown . It made the production build 10x faster, and the dev build now launches almost instantly. Also, I installed @typescript/native-preview https://npmx.dev/package/@typescript/native-preview?ref=devas.life , a Go-based rewrite of TypeScript. It's super fast and has improved my AI development pipeline, because the AI often runs a typecheck on every task. Similarly, I migrated my linter from eslint to oxlint , and my formatter from prettier to oxfmt .Next, the review process. I've been using the lazygit https://github.com/jesseduffield/lazygit?ref=devas.life integration of snacks https://github.com/folke/snacks.nvim/blob/main/docs/lazygit.md?ref=devas.life in Neovim. When I review changes across a lot of files, I use Yanuo's codediff.nvim https://github.com/esmuellert/codediff.nvim?ref=devas.life . Since I often jump around files, I added an option to automatically open the diff when changing the selection in the explorer without pressing Enter it got merged into codediff.nvim https://github.com/esmuellert/codediff.nvim/pull/400?ref=devas.life . Thanks, YanuoπŸ™ . These improvements have been great for boosting feedback loops in a single project bonus: without ever leaving the terminal screen or touching the mouse . As Christoph says, working with coding agents is like working in a large organization. It means you have a bunch of engineers to manage. Juggling multiple sessions is annoying The next pain point in my workflow is managing multiple Claude Code sessions. I usually run multiple Claude sessions simultaneously, because I have a lot of modules and libraries to maintain, e.g., the desktop app, mobile app, theme module, markdown renderer, React Native libraries, etc. I shared a tmux tip on how to run Claude Code in a tmux popup window with persistent sessions https://www.devas.life/how-to-run-claude-code-in-a-tmux-popup-window-with-persistent-sessions/ . It allows me to have fewer tmux windows instead of separate windows for each Claude Code session. But it's been annoying to check whether any sessions are finished or need my answers by switching windows and opening each session in a popup window. Introducing tmux-claude-session-manager So, I created a tool to manage Claude Code sessions in tmux. I published it as a tpm plugin https://github.com/craftzdog/tmux-claude-session-manager?ref=devas.life so you can quickly try it. It gives me a single fzf picker over all my running Claude sessions, so I can see which ones need me and jump straight to them instead of switching windows. In a nutshell, it supports: - πŸ”’ A central picker prefix + u listing every running Claude session. - 🟒 Live status per session β€” working / waiting / idle β€” driven by Claude Code hooks, so you instantly see which need you. - πŸ‘οΈ A live preview of each session's screen right in the picker. - 🎯 Smart jump β€” selecting a session switches your client to the window it was launched from, then resumes it in a popup over it. - πŸš€ A launcher prefix + y that opens/attaches a Claude session for the current directory. - ❌ Quick kill ctrl-x of finished sessions from the picker. It's built entirely on tmux primitives and shell scripts β€” there's no background daemon or extra process to keep alive. Here's the gist: Each session is a plain tmux session. When you launch one, the plugin starts a detached session named claude-