For developers working with Claude Code

Run ten Claude sessions at once.
Always know which one needs you.

work gives every task its own git worktree and its own Claude Code session, and puts all of them in one window: who is waiting for your answer, what each one changed, where its pull request stands, and the terminal it runs in.

Windows · macOS · Linux · free and MIT licensed
The work app: every session on the left; one session's changes on the right

Why work

Several agents should make you several times faster.

Without help you get a terminal per agent, no idea which one finished or is stuck on a prompt, diffs nobody read and worktrees nobody removes. work takes that off your hands.

One task, one worktree, one agent

One step makes the branch, the checkout and the Claude session, and starts Claude on what you asked.

One window for all of them

The Inbox lists the sessions that want you: a permission prompt, finished work, a PR to merge or fix.

Review turn by turn

Every Claude turn is recorded: see what the last instruction changed, or everything since you looked.

Pull requests where you work

Failing checks and review comments go to the session's Claude; replies are posted only on your yes.

Nothing lost, nothing left

Sessions survive restarts. Merged work archives itself and restores exactly as it was.

A day with work

From the first coffee to the last merge.

Morning: see what needs you

The Inbox lists the sessions waiting for you, most urgent first.

  • A session blocked on npm test: Allow or Deny right there.
  • One that finished overnight: open it on its diff.
  • A pull request approved and green: merge it.
  • Today turns yesterday's work into a standup note.
The Inbox

Start something in one step

Press c, pick the project and say what Claude should do.

  • The branch is named from your words: PAY-31 … becomes feat/PAY-31.
  • The worktree is made, your local settings copied in, and Claude starts on your prompt.
  • Or start from a Jira issue, a pull request, or a PR you were asked to review.
The New worktree dialog

Watch them work

Each session has its terminal, its diff, its pull request and its code. Claude runs in a background host, so closing the window doesn't stop it and a reboot doesn't lose it, and work attach puts the same session in your own terminal.

The Terminal tab

Review what changed, not everything again

  • The diff opens on what changed since you last looked.
  • Pick one turn, one commit, or Shift+click any span of them.
  • Comment on a line: Claude gets it on its next turn.
  • Revert a file, tick files viewed, go full screen.
The Diff tab with its list of turns and commits

Find your way in the code

The Code tab shows the session's files with the changed ones marked. Ctrl+T searches types and members by name, files and text across all the repos, as in Visual Studio. Open in editor takes you to the same line in VS Code.

Code search

Pull requests, handled

  • Ship… pushes, opens the PR and merges it, checking it still has the commits you reviewed.
  • Failing checks and review comments go to the session's Claude, which drafts a reply to each thread.
  • You edit and post the replies. Nothing reaches GitHub without you.
  • When it merges, the session archives itself.
The PR tab

And the timesheet writes itself

The Time tab suggests each day's hours per Jira ticket from what you did: Claude's working time, your commits, the issues you moved, your meetings. Change what you like, then Post to Tempo.

The Time tab

Every feature

What it does, and what it does for you.

Everything below is in the app, and every action is also a work command.

🔔 Knowing who needs you

Inbox
Sessions that need your input, finished work you haven't seen, PRs ready to merge or failing, unanswered review comments.
Allow / Deny
Answer a permission prompt without opening the terminal, for the sessions the app runs; checked against the screen first.
Notifications and taskbar badge
A ping when a session needs you, never for the one you're looking at; the count on the app's icon.
Next that wants you (n)
One key to the next session that needs attention. Review all walks the finished ones.
Snooze and Blocked by
"Not now" until a time or a change; "waiting on that PR" until it merges.

🗂️ All sessions in one place

Session list
Every session with its status and PRs, on every page. Pin, group under your headings, drag into order.
Sessions table
Summary, changes, activity; Live, Archived or All; act on several at once.
Today
What each session did today or this week, as a standup note.
Quick switcher (Ctrl+P)
Any session by a few letters, from anywhere.
Conversation search
Every word of every conversation, kept past Claude Code's 30 days.
Overlap and context warnings
Two sessions touching the same files; a conversation getting too long.
Notes and Catch me up
Your scratchpad per session; a summary of one you left days ago.

⌨️ A real terminal for every agent

Terminal tab
Claude Code itself, live, in the app.
Survives restarts
Closing or updating the app doesn't end it; after a reboot it comes back with its conversation.
work attach
The same session in your own terminal, at the same time.
Idle sleep and restarts
Unused Claudes are stopped to free memory and resume when opened; outdated ones restart after their turn.
Send a prompt and Ask (Ctrl+K)
Saved instructions to one session or many; an assistant that knows what's on your screen.

🔍 Reviewing what the agent did

Diff
Uncommitted or the whole branch, split or unified, with a switch per repo in a group.
Turns and commits
One turn, one commit, or any span; Last turn and Since you looked one click away.
Comments to Claude
On a line, a file or the whole change, delivered on its next turn.
Revert file, Viewed, Full screen
Undo a file and tell Claude; tick what you've read; the diff over the whole window.
wd
The same diff page for any folder, from the command line.

📄 Reading the code

Code tab
The session's files as they are now, changed ones marked.
Search the code (Ctrl+T)
Types and members by name, files and text, across a group's repos.
Open in editor
The file in VS Code at the line you're reading.

🔀 Pull requests

PR tab
Each PR's stage, checks and review threads.
Ask Claude to fix
Failing checks sent to the session's Claude, once per push.
Review replies on your yes
Claude plans the changes and drafts replies; you post them.
Ship…
Push, open, merge, with the reviewed commits checked first; a group repo by repo.
Merged → archived
A session whose PRs merged archives itself.

🚀 Starting work

New worktree (c)
A project and a prompt; the branch is named from it.
From a PR, from Jira
Work on a PR's branch, review someone's PR, or start an issue; new Jira issues can start themselves.
Fork and stacked sessions
Branch off a session with a summary for the new Claude; children follow their parent and move onto main when it merges.
Groups
One worktree across several repos, one Claude seeing all of them.
Local settings, dev server
Ignored settings copied in; each worktree its own port and preview.

🧹 Finishing and cleaning up

Behind main
How far behind, whether it conflicts, and Update from main.
Archive and Restore
Keeps the conversation, uncommitted files and local settings; Restore brings it all back. Shows who archived it and when.
Clean up
Merged worktrees, old build output, branches already in main. Never unpushed work.
Move to another computer
Sessions, conversations and settings in one bundle.

⏱️ Time

Time tab
Each day's hours per ticket, suggested from Claude's work, commits, Jira and meetings.
Post to Tempo
One click, never touching worklogs you made by hand.
Work time
How long each session's Claude worked, per day.

🖥️ The app

Desktop app
Windows, macOS, Linux; updates itself while your Claudes keep running.
Activity
What runs in the background, and why it decided what it did.
Demo
work web --demo: the real app on a made-up world.
Command line
Every action as a work command, for scripts and for Claude itself.

Keyboard

Your hands stay on the keys.

? in the app shows them all.

cNew worktree
nNext that wants you
j / kNext / previous session
Alt+1…9Session 1–9
Ctrl+PQuick switcher
Ctrl+KAsk
Ctrl+TSearch the code
1 2 3 4Terminal, Diff, PR, Code
eArchive / Restore
zSnooze
pSend a prompt
oOpen in editor
fFork
⇧+SShip

Install

Up and running in a minute.

The desktop app

The dashboard in its own window, with the work and wd commands included. It updates itself.

Or the command line

The same dashboard in your browser.

# npm (Node 22.13+)
npm install -g @moberg_hr/work-tree

# or Homebrew
brew install moberghr/work-tree/work

# open the dashboard
work web

# or try it on a made-up world first
work web --demo

What it uses

On first start, the Welcome page finds your repos and checks these for you.

Gitneededworktrees
Claude Codeneededthe agent in each session
GitHub CLIoptionalpull requests
Atlassian CLIoptionalJira and the Time tab

FAQ

Common questions.

Why worktrees?

Each branch gets its own folder, with its own node_modules, build output, dev server and Claude session. Several agents work at once without stepping on each other, and you never stash to switch.

Does closing the app stop my agents?

No. Claude sessions run in a background host: closing or updating the app doesn't end them. After a reboot they come back with their conversation.

Can it post on GitHub without me?

No. Claude drafts replies to review comments; they're posted only when you click Post or tell Claude yes in its conversation. work merges a pull request only when you click Merge in Ship.

What does Archive delete?

Only what can be recreated. The worktree folder is removed when everything in it is pushed or saved; uncommitted files and local settings are saved first, and Restore puts everything back. A worktree with commits not yet in main is kept.

Do I need Claude Code?

It's the default and gets every feature. Another CLI agent runs in the terminal tab and is managed the same way, with a simpler working / idle status and without the features that read Claude's conversation and hooks.

Is it open source?

Yes, MIT licensed. Issues and pull requests are welcome on GitHub.