Skip to content
nmicovicPublic

About

One place to watch, switch between, and steer every AI coding agent you run in tmux. Claude Code · Codex · Gemini CLI · OpenCode · Crush · pi · OhMyPi

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

nagare

One place to watch, switch between, and steer every AI coding agent you run in tmux.
Claude Code · Codex · Gemini CLI · OpenCode · Crush · pi · OhMyPi

CI Go 1.26+ tmux 3.3+ Linux and WSL MIT license

Features · Install · Setup · Usage · Ticket workflow · How it works · Configuration

The nagare session picker: agents grouped by repository, with status, branch, worktree, recent activity and a live preview of the selected agent waiting for approval

Run five agents across three repositories and the hard part stops being the code — it is noticing which agent has been sitting on a permission prompt for ten minutes. nagare (流れ, flow) is a single binary that sits in a tmux popup and answers that at a glance: every agent, what it is doing, what it last said, and which ones are waiting on you.

Features

  • Session picker — every agent pane in every tmux session, grouped by repository, with fuzzy search, a live preview, and status reported by the agents' own hooks wherever they offer them.
  • Act without switching — approve a permission prompt (Ctrl+y), send a prompt (Ctrl+l), or jump to the next agent waiting on you (F4).
  • Worktree aware — agents in different git worktrees of one repo get their own name, branch and outstanding-work summary. F3 starts an agent in a fresh worktree.
  • Ticket board — plan work across projects, then hand a ticket to any agent. Each attempt runs on its own branch in an isolated worktree; review the diff and open the pull request from the board.
  • Notifications — toast, terminal bell, desktop notification or popup when an agent needs input or finishes a long task.
  • Agent-to-agent messaging — an MCP (Model Context Protocol) server lets agents discover each other, exchange messages, and pick up tickets.
  • 13 themes, mouse support, and a grid view for watching everything at once.

Grid view

Press Tab to cycle list → board → grid. The grid shows every agent's live output side by side.

Grid view: four agent cards with live output, one waiting for approval

Ticket board

Tickets move from Backlog to Done. Pressing d on a ready ticket picks an agent (and optionally a model), pins the target branch to a commit, and starts the agent in a worktree nagare owns, so your own checkout is never touched.

Ticket board with Backlog, Ready, Running, Review and Done lanes

Pressing Enter opens a ticket: its description, the agent working on it, the attempt record, the pull request, and the report the agent submitted when it finished.

Ticket detail showing repository, target branch, agent, attempt ID, pull request and the agent's report

Themes

Tokyo Night (default), Aura, Catppuccin, Dracula, Flexoki, Gruvbox, Kanagawa, Monokai, Nord, One Dark, One Dark Pro, Rosé Pine and Vesper. Each has a light and a dark variant that follows your terminal's background, and Ctrl+t previews them live.

The picker in six themes: Catppuccin, Gruvbox, Rosé Pine, Kanagawa, Nord and Dracula

Requirements

  • Linux or WSL2. On macOS, agents that run as their own binary are detected, but ones started through Node are found by walking /proc, which macOS does not have.
  • tmux 3.3 or newer.
  • Go 1.26 or newer, to build.
  • git, and optionally the GitHub CLI (gh) for creating pull requests from the board.

Install

git clone https://github.com/nmicovic/nagare.git
cd nagare
go install .        # installs `nagare` into $(go env GOPATH)/bin

Make sure $(go env GOPATH)/bin is on your PATH. Alternatively, ./compile.bash builds a stripped binary in the repository directory.

Setup

nagare setup

This wires nagare into every supported agent it finds. Re-running it is safe: generated files are rewritten in place and every registration is refreshed.

Agent Status reporting Messaging tools
Claude Code hooks in ~/.claude/settings.json MCP, ~/.claude.json
Codex hooks in ~/.codex/hooks.json MCP, ~/.codex/config.toml
Gemini CLI hooks in ~/.gemini/settings.json MCP, ~/.gemini/settings.json
OpenCode plugin in ~/.config/opencode/plugins/ MCP, ~/.config/opencode/opencode.json
Crush read from the pane MCP, ~/.config/crush/crush.json
pi extension in ~/.pi/agent/extensions/ the same tools through nagare tool (pi has no MCP client)
OhMyPi extension in ~/.omp/agent/extensions/ MCP, ~/.omp/agent/mcp.json

It also installs the /nagare-ls, /nagare-send, /nagare-send-wait and /nagare-inbox slash commands, or an Agent Skill for agents without user-level slash commands (Codex, Crush).

Note

Codex does not run newly installed hooks until you approve them. Open /hooks in Codex once after setup and trust the nagare hooks.

Then bind nagare to tmux popups in ~/.tmux.conf:

bind g display-popup -w100% -h100% -B -E "nagare"          # prefix + g: picker
bind b display-popup -w100% -h100% -B -E "nagare board"    # prefix + b: ticket board
bind e display-popup -w80%  -h80%     -E "nagare notifs"   # prefix + e: notifications

and reload with tmux source-file ~/.tmux.conf.

Usage

nagare                          # session picker (default)
nagare board                    # cross-project ticket board
nagare notifs                   # notification history and settings
nagare new ~/src/api            # new tmux session running Claude Code in ~/src/api
nagare new ~/src/api -a codex   # …or any other agent: codex, opencode, gemini, crush, pi, omp
nagare new ~/src/api -w retry   # start the agent in a new git worktree named "retry"
nagare new scratch              # quick prototype in ~/Prototypes/scratch
nagare setup                    # install status reporting, MCP server and slash commands

Picker keys

Key Action Key Action
Type Fuzzy search by name or path Ctrl+y Approve the permission prompt
↑ ↓ Move the selection Ctrl+a Approve always
Enter Jump to the agent Ctrl+l Send a prompt inline
F4 Next agent waiting on you Ctrl+g Write a prompt in $EDITOR
Tab / Shift+Tab Cycle list, board and grid Ctrl+n New session
Ctrl+t Pick a theme Ctrl+r Quick prototype
Ctrl+s Show saved sessions F2 Name the selected task
Ctrl+o Cycle sort order F3 New git worktree
Ctrl+f Star a session F5 Edit the session note
Ctrl+e Edit the config file Ctrl+w Unload the agent (close its pane)
F1 All shortcuts Ctrl+x Kill the agent's window; offers to remove its worktree
Esc Quit

Mouse: click to select, click again to jump, scroll to move. Turn it off with picker.mouse = false.

Board keys

Key Action Key Action
h l / ← → Move between lanes d Run the ticket with an agent
1–5 Jump to a lane v Review the attempt's diff
j k / ↑ ↓ Select a ticket p Push the branch and open a pull request
Enter Open the ticket c Archive a finished ticket's worktree
n / e New / edit ticket a Show available agents
[ ] Move ticket left / right t Toggle Today / All
x Delete ticket ? Built-in guide to the workflow
q / Esc Quit

Ticket workflow

  1. Plan. Create a ticket with a repository and a target branch.
  2. Isolate. d resolves the target branch to a fixed commit, creates the branch nagare/<ticket>-<attempt> and a worktree under ~/.local/share/nagare/workspaces/, starts the agent there, and hands it the ticket. Your checkout and the target branch are never modified.
  3. Review. When the agent calls submit_ticket, the ticket moves to Review. Press v to see the commits and the full diff against the base commit.
  4. Finish. p pushes the branch (never with --force) and creates the pull request with gh — or finds the existing one if a previous attempt was interrupted. Once merged, move the ticket to Done, close the agent, and c removes the worktree. Uncommitted work blocks removal, and the branch is always kept.

Every attempt is recorded on disk — base commit, branch, agent, model, pull request — so a retry never overwrites what the previous one did.

How it works

flowchart LR
    agent["Agent CLI"] -->|"lifecycle event, as JSON"| hook["nagare hook-state"]
    hook -->|"writes the agent's status"| state[("state files")]
    hook -->|"alerts when input is needed"| notify["notifications"]
    tmux["tmux panes"] -->|"scanned for agent processes"| picker["nagare picker"]
    state -->|"read on every scan"| picker
    agent <-->|"MCP tools: agents, messages, tickets"| mcp["nagare mcp"]
Loading

Agents report their own state through hooks, plugins or extensions, so a status is a fact, not a guess from screen text. The picker matches those reports to tmux panes and adds what tmux knows: path, branch, worktree, and a preview of the pane.

Configuration

~/.config/nagare/config.toml (Ctrl+e opens it). Every key is optional; these are the defaults.

[appearance]
theme = "tokyonight"

[picker]
show_help_bar = true
mouse = true
animations = true
quick_project_path = "~/Prototypes"

[notifications]
enabled = true

[notifications.needs_input]
toast = true
bell = true
os_notify = true
popup = false

[notifications.task_complete]
toast = true
min_working_seconds = 30   # only notify for tasks that ran at least this long

State lives in ~/.local/share/nagare/: agent status, notifications, messages, tickets, attempt records and the managed worktrees.

Development

go build -o nagare .   # debug build
go test ./...          # run the test suite
go vet ./...

Issues and pull requests are welcome.

Built with Bubble Tea, Lip Gloss and Cobra.

License

MIT © 2026 Nemanja Mićović

About

One place to watch, switch between, and steer every AI coding agent you run in tmux. Claude Code · Codex · Gemini CLI · OpenCode · Crush · pi · OhMyPi

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages