v0.10.3 · regular repos first-class

Branches are working contexts.

owt makes Git worktrees practical for daily development. Run it in the repo you already have, create isolated branch directories, and move between them without stashing, rebuilding, or losing editor state.

regular repos supported optional .bare layout PR + git status visible
$ npm install -g oh-my-worktree
owt terminal UI showing a list of Git worktrees, branch status, and selected worktree details
real TUI screenshot working contexts, Git status, PR state, and actions in one view

Stop treating branches like bookmarks.

Reviewing a PR, testing a hotfix, keeping a feature open, and checking main before release should not all compete for one checkout. With worktrees, each branch gets its own directory. owt gives that model a daily driver.

Plain Git flow owt flow
git worktree list Visual list with status and PR state
git worktree add ../feat -b feat Press a, pick the branch context
cd ../feature && git status Press Enter to move your shell
git fetch && git pull Press f, p, or P
Supported layouts
regular repo
├── my-app/             # run owt here
└── ~/.owt/worktree/my-app/
    ├── feature-auth/
    └── hotfix-payment/

.bare workspace
├── .bare/              # optional
├── main/
└── review-pr-42/

Built for practical worktree use

The fast path for creating, reading, switching, and cleaning up branch contexts.

📊

Branches as contexts

Keep a PR review, hotfix, feature, and main checkout open at the same time without stashing.

Fast TUI workflows

Create, delete, fetch, pull, push, merge, filter, and sort worktrees with single keystrokes.

🔍

Regular repos first

Run owt inside the repository you already have. New worktrees default under ~/.owt/worktree.

🔄

Optional .bare layout

Use owt clone when you want one project folder with sibling worktrees next to a hidden .bare repo.

🖥️

Status and PR visibility

See dirty state, ahead/behind counts, last commit, and best-effort GitHub PR state before you switch.

🐚

Shell and app handoff

Press Enter to move your shell, o for editor, t for terminal, or y to copy the path.

Install, then open your current repo

Use npm for the packaged binary, npx for a one-off run, or build from source.

npm Recommended

npm install -g oh-my-worktree
# Or run without installing
npx oh-my-worktree

Cargo Rust

cargo install --git https://github.com/dding-g/oh-my-worktree
# Or build from source
git clone https://github.com/dding-g/oh-my-worktree.git
cd oh-my-worktree && cargo build --release

Shell Integration

Install the shell helper once. After that, pressing Enter exits the TUI and moves your current shell into the selected worktree.

  • 1 Run owt setup to print the helper for your shell
  • 2 Add the function to your zsh, bash, or fish config
  • 3 Reload with source ~/.zshrc (or your shell's config)
owt() {
    local output_file=$(mktemp)
    OWT_OUTPUT_FILE="$output_file" command owt "$@"
    local exit_code=$?

    if [ -f "$output_file" ]; then
        local target=$(cat "$output_file")
        rm -f "$output_file"
        if [ -n "$target" ] && [ -d "$target" ]; then
            cd "$target"
        fi
    fi

    return $exit_code
}

Daily actions stay on the keyboard

The common path is fast: move, add, delete, sync, merge, open, copy, and leave.

Navigation

jkMove up / down
ggGJump to top / bottom
/Search worktrees
EnterEnter worktree (cd)

Worktree Actions

aAdd new worktree
dDelete worktree
rRefresh list
sCycle sort mode

Git Operations

fFetch remotes
pPull from remote
PPush to remote
mMerge upstream

External Apps

oOpen in editor
tOpen in terminal
yCopy path to clipboard
cOpen config

Make worktrees your default branch workflow.

Start in your existing repository, or clone into the optional .bare layout when sibling worktrees fit the project.