tagents
Know which Claude Code session needs you, without leaving tmux.
A live dashboard for every Claude Code chat you run in tmux: what each one is doing, which one is waiting on you, how much context it holds and what it has spent.
See it work
What it does
Shows who is waiting on you
A chat stuck on a question or a permission turns BLOCKED and is counted in its project’s header, so nothing waits unnoticed in a window you are not looking at.
Taps you on the shoulder
A desktop notification when a chat asks something, wants a permission or finishes its turn; click it and you land in that chat.
The chat beside the list
The dashboard is a tmux session of its own: enter on a row shows that chat on the right, and ctrl-g takes your terminal to where it lives.
Survives a reboot
Close the laptop, restart, kill the tmux server: every chat comes back in its window, on its account, with its model.
Forgets nothing
Closed chats stay one keystroke away, with their last prompts, and resume where they ran.
Keeps your accounts apart
Work and personal Claude logins, chosen per directory, with a badge on every row so you always know which one is paying.
Counts the cost
Context size and spend per chat, what each project burned in the last five hours, and the month so far against your plan’s limit.
A closer look
Never lose a session
tmux-resurrect and tmux-continuum bring back your sessions, windows and splits, but a chat comes back as an empty shell: they cannot know which conversation it was. tagents remembers, and resumes each one in its place, on the account it ran on, with its model and its window name.
Add two lines to ~/.tmux.conf, after the tmux-resurrect settings:
set -g @resurrect-hook-post-save-layout '~/.local/bin/tagents --resurrect-save'
set -g @resurrect-hook-post-restore-all '~/.local/bin/tagents --resurrect --auto'Without tmux-resurrect it still works: tagents --resurrect rebuilds what is missing.
Install
One command. It needs tmux, fzf, jq, git, Node 22.18+ and pnpm.
curl -fsSL https://raw.githubusercontent.com/SkuratovichA/tagents/main/install.sh | shIt puts one managed copy in ~/.local/share/tagents, the commands in ~/.local/bin and the Claude Code hooks in ~/.claude/hooks. Run it again, or tagents update, to update.
Then tell Claude Code about the hooks. Add this to ~/.claude/settings.json:
settings.json
{ "hooks": { "SessionStart": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"" }] }], "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"" }] }], "PreToolUse": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"", "async": true }] }], "PostToolUse": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"", "async": true }] }], "Notification": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"" }] }], "Stop": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"" }] }], "SubagentStop": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"", "async": true }] }], "SessionEnd": [{ "hooks": [{ "type": "command", "command": "sh \"$HOME/.claude/hooks/tmux-agent-state.sh\"" }] }] }, "statusLine": { "type": "command", "command": "sh \"$HOME/.claude/hooks/claude-statusline.sh\"", "padding": 0, "refreshInterval": 30 } }The hook is how a chat tells tagents what it is doing; the status line is where the model column comes from.
Then run it inside any tmux session. Every Claude chat with the hook shows up on its own, whether tagents started it or you typed claude in a pane yourself.
tagents
Notifications, status bar, plugin
Notifications
macOS asks once whether tagents may notify you. After that, a question, a permission prompt or a finished turn raises a banner, and a click opens that chat beside the list.
tagents plugin add ~/.local/share/tagents/packages/notify
tagents notify installStatus bar
For the tmux status bar, a one-line tally of your chats by state:
set -g status-right '#{?@tagents_counts,#{@tagents_counts},#(~/.local/bin/tagents --counts)}'Claude Code plugin
Gives every chat the tagents skill, so it knows the exact commands and flags of tagents instead of guessing, and a knowledge MCP server that searches your markdown notes.
/plugin install tagents --marketplace SkuratovichA/tagents