Parallel development in tmux* with git worktrees
📖 Documentation · Install · Quick start · Commands · Changelog
Giga opinionated zero-friction workflow tool for managing git worktrees and tmux windows as isolated development environments. Perfect for running multiple AI agents in parallel without conflict.
Philosophy: Build on tools you already use. tmux/zellij/kitty/etc. for windowing, git for worktrees, your agent for coding - workmux ties them together.
* Also supports kitty, WezTerm, and Zellij as alternative backends.
📖 New to workmux? Read the introduction blog post for a quick overview.

Also from the author of workmux: aven, one queue for every project, with a keyboard-driven TUI for you and a CLI for your agents.
Parallel workflows. Work on multiple features the same time, each with its own AI agent. No stashing, no branch switching, no conflicts.
One window per task. A natural mental model. Each has its own terminal state, editor session, dev server, and AI agent. Context switching is switching tabs.
Automated setup. New worktrees start broken (no .env, no node_modules,
no dev server). workmux can copy config files, symlink dependencies, and run
install commands on creation.
One-command cleanup. workmux merge handles the full lifecycle: merge the
branch, delete the worktree, close the tmux window, remove the local branch.
Terminal workflow. Build on your terminal setup instead of yet another agentic GUI that won't exist next year. If you don't have one yet, tmux might be worth picking up.
New to worktrees? See Why git worktrees?
add)merge)/worktree skill.env, node_modules) into new
worktreesSome kind people have made videos about workmux on YouTube. If you're looking for a demo, check them out.
![]() Tmux is Still Better Than Herdr (Here's Why) Sam Natale |
![]() I Don't Want a New Terminal. I Want THIS for Tmux. DevOps Toolbox |
![]() Tmux Didn't Need a Replacement, It Needed Workmux Seth Phaeno |
Official sources: github.com/raine/workmux and workmux.dev. This project is not affiliated with workmux.com.
curl -fsSL https://raw.githubusercontent.com/raine/workmux/main/scripts/install.sh | bash
brew install raine/workmux/workmux
cargo install workmux
**mise:**
mise use -g cargo:raine/workmux
**Nix** ([flake and home-manager setup](https://workmux.dev/guide/nix)):
nix profile install github:raine/workmux
For manual installation, see pre-built binaries.
[!NOTE] workmux requires a terminal multiplexer. Make sure you have tmux (or WezTerm / Kitty / Zellij) installed and running before you start. See My tmux setup if you need a starting point.
bash
workmux init
This creates a .workmux.yaml file to customize your workflow (pane layouts,
setup commands, file operations, etc.). workmux works out of the box with
sensible defaults, so this step is optional.
bash
workmux add new-feature
This will:
- Create a git worktree at
<project_root>/../<project_name>__worktrees/new-feature
- Copy config files and symlink dependencies (if
configured)
- Run any post_create setup commands
- Create a tmux window named wm-new-feature (the prefix is configurable)
- Set up your configured or the default tmux pane layout
- Automatically switch your tmux client to the new window
Do your thing
Finish and clean up
Local merge: Run workmux merge to merge into the base branch and clean
up in one step.
PR workflow: Push and open a PR. After it's merged, run workmux remove
to clean up.
workmux uses a two-level configuration system:
~/.config/workmux/config.yaml): Personal defaults for all
projects.workmux.yaml): Project-specific overridesProject settings override global settings. When you run workmux from a
subdirectory, it walks upward to find the nearest .workmux.yaml, allowing
nested configs for monorepos. See the
Monorepos guide
for details. For hook lists (post_create, pre_merge, pre_remove) and file
operation lists (files.copy, files.symlink), you can use "<global>" to
include global values alongside project-specific ones. Other settings like
panes are replaced entirely when defined in the project config.
~/.config/workmux/config.yaml:
```yaml nerdfont: true # Enable nerdfont icons (prompted on first run) merge_strategy: rebase # Make workmux merge do rebase by default merge_keep: true # Keep worktree, window, and branch after merge by default confirm_unmerged_removal: false # Remove
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|