A fast, plugin-extensible workspace and session manager for git repos. Browse, create, and switch between worktree-based sessions with a single command.
Switching between tasks means juggling git branches, stashing changes, and losing editor context. ez turns git worktrees into managed "sessions" — each task gets its own directory, branch, and terminal, so you never lose your place. An interactive fzf browser ties it all together.
cargo install --locked --git https://github.com/user/ez-workspaces.gitAdd shell integration:
echo 'eval "$(ez init-shell zsh)"' >> ~/.zshrc
# or for bash:
echo 'eval "$(ez init-shell bash)"' >> ~/.bashrcFor PowerShell, add to your $PROFILE:
Invoke-Expression ((& ez init-shell pwsh) -join "`n")ez plugin enable git-worktree # worktree-backed sessions
ez plugin enable tmux # tmux integration (optional)
ez plugin enable zellij # zellij integration (optional)
ez config add-root ~/workspace # register a workspace directory
ez add ~/workspace/my-project # register a repo
ez # launch the interactive browserFrom the browser, select a repo to see its sessions. Press Alt-n to create a new session — ez creates a worktree and drops you in.
Sessions are tree-structured metadata. Plugins give them physical meaning:
- git-worktree — creates/deletes worktrees on session create/delete
- tmux — creates tmux sessions, auto-attach on enter,
Ctrl-ato browse tmux sessions - zellij — same for zellij: a session per workspace session,
Ctrl-zto browse them
Worktrees live as siblings of the repo in a .ez/ directory:
~/workspace/
my-repo/ # original repo
.ez/my-repo/
feature-auth/ # worktree session
bugfix-crash/ # worktree session
Non-git directories can also be tracked — sessions become bookmarks without worktree management.
Launch with ez. The preview pane shows all available keybinds.
Views — switch with keybinds anytime:
Ctrl-tTree ·Ctrl-wWorkspace ·Ctrl-eRepo ·Ctrl-oOwner ·Ctrl-gLabel
Workspace drill-down — while browsing directories:
Alt-aclone a repo into the current directory
Repo view actions:
Alt-llabels ·Alt-dremove ·Ctrl-ssort
Session actions — inside a repo's session picker:
Enterenter ·Alt-nnew ·Alt-Nbare ·Alt-sfrom dirty ·Alt-rrename ·Alt-ddelete ·Alt-llabels ·Ctrl-dcd ·Ctrl-ssort ·Alt-inote ·Alt-Inote cd
All keybinds are configurable.
Bundled plugins — just enable:
ez plugin enable git-worktree # worktree lifecycle
ez plugin enable tmux # tmux session management
ez plugin enable zellij # zellij session management
ez plugin enable cursor-mcp-auth # share Cursor MCP OAuth tokens across worktrees
ez plugin enable cursor-trusted-workspace # auto-trust worktree workspaces in Cursor
ez plugin enable cursor-mcp-approvals # auto-approve MCP servers in Cursor
ez plugin enable kv # per-session KoalaVim environmentsCustom plugins use a JSON-over-stdio protocol. See the Plugin Guide.
Set, list, or unset per-session environment variables (exported when you enter a session):
ez session env set AWS_PROFILE staging # current session
ez session env set AWS_PROFILE staging --session feature-x
ez session env list
ez session env list --json
ez session env unset AWS_PROFILEalias del='ez session delete'
alias new='ez session new'
alias note='ez session note open'
alias Note='ez session note cd'tmux — open the current session's note in a popup:
bind -T prefix n display-popup -E -w 65% -h 65% "ez session note open"- User Guide — full command reference, config options, name builder modes
- Plugin Guide — writing custom plugins
- Architecture
- Design
- Rust 1.70+
- fzf
- git
- jq (for bundled plugins)
- tmux or zellij 0.40+ (optional)
Plugins are bash scripts and require the following on Windows:
- Git for Windows — provides
bash.exeused to run plugins- Install:
winget install Git.Gitor download from https://gitforwindows.org
- Install:
- jq — used by plugins for JSON parsing
- Install:
winget install stedolan.jqor download from https://jqlang.github.io/jq/
- Install:
Or run make setup to install both automatically.
AGPL-3.0
