Nine Months of Multitasking with Git Worktrees and Autowt
In July 2025, I started working on autowt to make git worktree management simpler. It was partly a response to seeing people over-building “agentic multitasking” tools, heavyweight opinionated GUIs or multiple-git-clone-agent-queue managers or Claude Code menu bars. When I heard git worktrees were a thing, I thought, why don’t we just automate that a little bit and then we can add agent stuff on top of it as needed?
(If you just want to know what autowt can do for you, read the docs. This post is more about the process than the result!)
Fundamentally, git worktrees are git clones of one repo, but sharing one .git/ directory. You only pay the cost of checkout and avoid the cost of cloning over a network. They’ve been a feature of git for years, but not a popular one, until the rise of coding agents raised the perceived value of multitasking. It was exotic to need a second clone before you found yourself waiting for Claude Code to do something.
The UX of git worktrees is minimalistic:
git worktree add ~/worktrees/new-feature -b new-feature
# (Open a new terminal tab)
cd ~/worktrees/new-feature
uv sync # install dependencies
cp <repo_dir>/.env . # copy secrets
But I wanted it to look more like this:
awt go new-feature
# there is no step 2; you're already on the new-feature branch
# in a fresh worktree
If you make creating and switching to worktrees seamless, you don’t need “agent integration” on top of it. Just start claude if you want claude. Every project has slightly different needs. Straightforward customization can be more important than magic. (Integration can help, which is why autowt can auto-start coding agents and integrate with issue trackers.)
With this vision in mind, I started coding. I leaned heavily on agents at first, which meant the results were just OK. As I got my head around the edge cases and the shape of a good API, I refactored and rewrote, until I was finally comfortable sharing it out as a usable project. As the months went by, I picked up a few dozen users, some of whom filed tickets or sent PRs to help me sand off the rough edges.
Earlier I said that customization is more important than magic. Well, a little magic is good too. One thing autowt does that I don’t see anywhere else is terminal automation. I multitask by flipping between tabs in iTerm2. “Go to a worktree” to me means ”go to the iTerm2 tab associated with a worktree.” So autowt uses AppleScript—or dbus on Linux!—to automate your terminal program, opening or switching to tabs. I broke this part of autowt out into its own library, automate-terminal, with support for 8 terminal emulators across macOS and Linux, including tmux.
Today, autowt is rolled out internally at Descript, and there are real people daily-driving it out in the wild. It’s very fulfilling to have written a tool I invoke many times per day. Most of my side projects are of the “wouldn’t it be cool if…” variety, but autowt has changed my actual day-to-day process.