A lightweight TUI to manage your fleet of agents across all your projects.
- Guided 3-step workflow: pick a project, pick/create a workspace (git worktree), then launch a tool (
opencode,amp,claude,codex, ornone). - Fast fuzzy filtering in every step (projects, workspaces, tools, and sessions).
- Scans
~/Projects(or provided roots) up to 2 levels deep, skipping hidden/common vendor directories. - Built-in tmux session switcher: press
ctrl+sfrom the main screens to open Active tmux sessions, filter them, and pressenterto attach. - In wide terminals, Active tmux sessions shows a table with
Project,Branch, andLast active. - Workspace tmux sessions are prewarmed in the background and reused if already running. Each supported tool (
opencode,amp,claude,codex, andnone) is opened in its own tmux window inside the same workspace session. - Project/workspace lifecycle management in-app (create and delete with confirmation and cleanup). Worktree deletions are limited to rivet-managed worktrees under
~/.rivet/worktrees(project root is protected). - Stale worktree references (from manually deleted directories) are automatically pruned whenever the worktree list is loaded, keeping the list accurate.
- Keyboard-first UX with help modal (
?), theme picker (ctrl+t), and a persistent help bar. - Optional non-interactive mode for launching sessions directly via CLI flags.
After selecting a project/worktree tuple, the program prewarms one tmux session for that workspace (creating it if needed) and ensures a window exists for each supported tool. Existing workspace sessions are reused, and selecting none opens a shell window immediately.
caching.mp4
Deleting a worktree also kills the workspace tmux session using it (including its tool windows). Only the project root and rivet-managed worktrees under ~/.rivet/worktrees are listed, and the root worktree cannot be deleted from the UI.
worktrees.mp4
Deleting a project also kills its workspace tmux sessions (including their tool windows).
projects.mp4
Common actions are visible in the help bar at the bottom for better discoverability, but a more comprehensive help menu is one key press "?" away on every view.
help.mp4
- tmux
- git
opencode,amp,claude, and/orcodex(optional fornonesessions)- Projects must be valid git repositories. The tool by default will look for projects under
~/Projectsand additional worktrees will be created under~/.rivet/worktrees/
$ mkdir -p ~/Projects ~/.rivet/worktrees
$ go install github.com/ariguillegp/rivet/cmd/rv@latestCreate keybindings to run this tool from your regular shell environment and from inside tmux sessions. If are you are not using ~/Projects/ as your base directory for your project repositories, you will need to run rv YOUR_BASE_DIR to find out the repos you wanna work on.
Bash
Add the following line to your ~/.bashrc
bind -x '"\C-f": "rv YOUR_BASE_DIR"'tmux
Add the following line to your ~/.config/tmux/tmux.conf so you can use tmux-prefix + f to launch rv from a tmux session
bind-key f run-shell "tmux has-session -t rv-launcher 2>/dev/null && tmux kill-session -t rv-launcher; tmux new-session -d -s rv-launcher 'bash -lc \"rv YOUR_BASE_DIR\"'; tmux switch-client -t rv-launcher"This launches rv in a temporary tmux session to keep your current session clean.
Zsh
Add the following line to your ~/.zshrc
bindkey -s '^f' 'rv YOUR_BASE_DIR\n'tmux
Add the following line to your ~/.config/tmux/tmux.conf so you can use tmux-prefix + f to launch rv from a tmux session
bind-key f run-shell "tmux has-session -t rv-launcher 2>/dev/null && tmux kill-session -t rv-launcher; tmux new-session -d -s rv-launcher 'zsh -lc \"rv YOUR_BASE_DIR\"'; tmux switch-client -t rv-launcher"This launches rv in a temporary tmux session to keep your current session clean.
rv [directories...]Rivet starts tools directly inside tmux sessions using your default shell, so no login shell flags are required.
By default, rv scans ~/Projects (personal preference). Pass custom directories as arguments:
rv ~/projects ~/workScanning goes up to 2 directory levels deep and skips common vendor/cache directories such as .git, node_modules, vendor, .cache, .venv, __pycache__, and target.
Open a session directly without the UI:
rv --project my-project --worktree main --tool opencode [--detach]
rv --project my-project --worktree main --tool amp [--detach]
rv --project my-project --worktree main --tool claude [--detach]
rv --project my-project --worktree main --tool codex [--detach]
rv --project my-project --worktree main --tool none [--detach]--project and --worktree accept names or paths. If the worktree doesn't exist yet, rivet creates a new worktree/branch automatically. Use --create-project to initialize a missing project (in the first root or at the provided path).
Create a new project non-interactively:
rv --project my-project --worktree main --tool opencode --create-projectInspired by:
- agent-of-empires (Rust + ratatui + tmux)
- agent-deck (GO + BubbleTea + tmux)
MIT
