wtwt
Install
v0.1.3 · macOS · mit

Git worktrees,
without the ceremony.

Create, navigate, and clean up worktrees in seconds. wt handles path resolution, node_modules symlinking, and lifecycle hooks, so you can get to work instead of setting up work.

View on GitHubmacOS · arm64 · x64
wt list
mainclean
·feat-authdirty 3
·fix-typoclean
·claude-agentclean
01 — The model

One repo.
Many concurrent minds.

Git worktrees let one repository check out many branches at once, each in its own directory. Pair that with an agent reviewing a PR, a human shipping a fix, and a second agent exploring a spike. All running in parallel, none stepping on each other's working tree.

Repository
wt
~/projects/wt
Your main checkout. Unchanged.
  • feat-authclean
    .worktrees/feat-auth
  • claude-agentdirty · 7 files
    .worktrees/claude-agent
  • fix-typoclean
    .worktrees/fix-typo
  • spike-ragqueued
    wt add spike-rag
02 — Install

One line.
No dependencies to chase.

A precompiled macOS binary. No runtime, no package manager, no path hacks beyond adding ~/.local/bin to your shell.

install.sh
curl -fsSL .../install.sh | bash
Detected: macOS arm64
Latest: v0.1.3
Installed wt 0.1.3
→ wt shell-init >> ~/.zshrc
03 — Commands

A small vocabulary,
carefully chosen.

Seven commands cover the entire lifecycle of a worktree. They read aloud like English. They're safe by default, and they exit cleanly for scripts and agents.

i.wt add <branch>

Create a new worktree for a branch.

Creates .worktrees/<branch>, symlinks node_modules and .env files, runs your post_create hook.

ii.wt list

List every worktree at a glance.

Branch name, path, and clean/dirty state. Also available as wt ls. Renders plain text in non-TTY contexts.

iii.wt cd <branch>

Jump into a worktree's directory.

Prints the path for scripts. With the shell wrapper, cd's your current shell into the worktree directly.

iv.wt rm <branch>

Remove a worktree safely.

Refuses to delete dirty worktrees unless you pass -f. Runs your pre_remove hook before cleanup.

v.wt prune

Clean up orphaned references.

Removes metadata for worktrees whose directories were deleted manually. Safe to run anytime.

vi.wt

Open the interactive TUI.

Run with no arguments to browse worktrees. j/k to navigate, enter to jump, d to remove. Piped output falls back to wt list.

vii.wt shell-init

Print the shell wrapper function.

Pipe into your rc file once. It enables wt cd and bare wt to change directory in your current shell.

04 — Interactive

The shortest path
is muscle memory.

Type wt with no arguments. A quiet Ink-based TUI opens. Move with j and k. Jump, remove, or quit without reaching for your mouse.

wt · 4 worktrees
·mainclean
feat-authdirty 3
·fix-typoclean
·claude-agentclean
j/k nav · enter cd · d rm · q quit
05 — Config

Optional.
Always sensible.

Drop a .wt.toml in your repo root to customize. Every setting is optional; defaults do the right thing. Read left to right.

.wt.toml
[symlinks]
patterns = ["node_modules", ".env"]
[worktree]
dir = ".worktrees"
[hooks]
post_create = "bun install"
pre_remove  = ""
06 — For agents

Machines are
first-class citizens.

Every command is non-interactive by default. Output is clean text. Destructive operations use explicit flags, not prompts. Exit codes mean what you'd expect.

▲ non-tty

Plain text, on demand.

Pipe anywhere. The TUI is reserved for humans in a real terminal.

$ wt list | grep dirty
feat-auth .worktrees/feat-auth
● exit codes

Predictable, scriptable.

Zero on success, non-zero on failure. Errors go to stderr, never stdout.

$ wt add my-task && run-tests
created, tests dispatched
× no prompts

Opt in to danger.

Destructive actions require -f. No confirmation prompts to derail a pipeline.

$ wt rm my-task -f
- removed .worktrees/my-task
Get started

Stop setting up.
Start shipping.

Inspect the script before running ↗MIT license · macOS · source on GitHub