← All posts Filed under: Tools, Agents, Workflow
Journal — field note · 01

Why I use
emdash.

On running multiple coding agents in parallel without losing your mind in terminal tabs — and why organization, not capability, is the feature that matters.

Worktree per task. Clean switching. A chime when they’re done.

Quick context before I get into it: Emdash is an open-source desktop app for running multiple coding agents in parallel, each in its own Git worktree. It’s built by Arne and Raban at generalaction (YC W26), it’s provider-agnostic (works with Claude Code, Codex, Gemini, Droid, and ~20 others) and it’s local-first — app state lives in a SQLite file on your machine rather than on someone’s server. You can brew install --cask emdash or grab it from GitHub releases.

Okay, onto why I actually use it.


1.It’s organized

The thing I like most about Emdash is that it’s organized.

That sounds boring, but hear me out. Before Emdash, running coding agents meant a forest of terminal tabs. One for the agent working on the bug fix. Another for the one refactoring the API. A third for “wait, what was this one doing again?” I’d lose track of which tab belonged to which task within about twenty minutes.

Emdash gives every task its own Git worktree and wraps the whole thing in a UI you can actually navigate. Switching between tasks is seamless: you click, you’re there, the state is preserved, the diffs are waiting for you. It’s the same repo, multiple workstreams, no collisions. That alone is worth it to me. Way better than juggling terminal tabs.

Workstream simulator
idle
agent: autocompleter offline

Waiting to compile…

agent: test-runner offline

Waiting to compile…

Emdash · manager click
Fixes compiled in bug-fix-cors. Tests passed. Click to review the diff.
Review diff →
git diff origin/main -- src/components/Grid.jsx
122  return (
123    <div class="grid">
124-    {data.map(item => <ProductCard {...item} />)}
124+    {data.map(item => <ProductCard key={item.id} {...item} />)}
125    </div>
plays a soft success chime when both finish

You can also spawn multiple agents inside a single worktree, each working on a different piece of the same feature. That’s been useful when a feature has clearly separable parts and I want them moving in parallel without fragmenting into separate branches.

2.What it doesn’t do (yet)

No split screen. You only see one agent at a time. If you want to watch two of them work simultaneously, you can’t — you pick one, the others run in the background.

Honestly, this bothered me less than I expected. Emdash fires off a notification and a sound when an agent finishes, with the agent’s name. So I queue up work, go do something else (read, answer email, work on something in a different worktree) and the sound pulls me back when there’s a diff to review. It turns out I don’t actually need to watch agents work. I need to know when they’re done.

That’s the loop: kick off tasks, go do other things, hear a chime, review a diff, move on.

3.The actual takeaway

Emdash didn’t make agents smarter. It made running them sane. The organization is the product: worktrees per task, clean switching, notifications that let you step away. For something that’s still early and missing obvious features like split screen, it’s already the tool I reach for.

The fact that it’s open source is a nice bonus. If split screen matters enough to someone, they can go build it; the repo is right there, contributions welcome.

If you’ve been running agents in terminal tabs and losing your mind, try it: emdash.sh.

Note to self: split screen would be nice. So would a queue view.