Skip to content

Project sidebar · macOS

A Mac terminal with a project sidebar — not another row of tabs.

lpm gives every project you work on one persistent row in a sidebar. Its terminals, whether anything is running, and whether an agent is waiting on you all live under that row. Click a project and its workspace comes back — the terminals you left keep running and keep their scrollback.

Take the interruption test: tabs vs. sidebar

Free and open source · Native macOS build for Apple Silicon and Intel

Your dev servers, Claude Code and Codex in one window

A three-minute tour: start a stack, free a busy port, and run Claude Code and Codex side by side.

lpm is a desktop app with a multi-pane terminal workspace. Open this page on your computer to try the interactive demo.

Get lpmOr check your computers from your iPhone
Tabs vs. a project sidebar

The interruption test

The tour above shows lpm by itself. This is the comparison: one interruption across nine terminal sessions, first in a flat tab row, then with the same nine grouped by project. Nothing is created or closed along the way. You drive every step.

  1. 1.Flat tabs(current step)
  2. 2.Organize by project
  3. 3.Come back

You are mid-command in checkout · api. A ping lands: the auth hotfix needs a look. Switch to the auth hotfix.

9 sessions — flat tabs

$ pnpm --filter api dev

api listening on :4000

db pool ready (postgres@local)

$ pnpm test packages/api -- --grep "refund" (half-typed, not run)

The tab row scrolls sideways — swipe it to reach all nine sessions.

Nine sessions, every one prefixed with the project it belongs to. Two of them are the auth hotfix. Next: Switch to the auth hotfix.

Open one of the two auth-hotfix tabs to continue.

lpm itself is a desktop app; this is a web illustration of its sidebar. On a phone the walkthrough runs as a staged project list and terminal detail — the resizable side-by-side layout, and ⌘B, belong to the desktop app.

What it is — and isn't

Which sidebar are you looking for?

“Terminal with sidebar” means several different things. If you came looking for an editor's slide-out terminal drawer, that is a different category — lpm is a standalone terminal app, not a panel inside one. Here is what its sidebar is and is not.

Yes — this is the model

A list of projects

One row per project you work on: the checkout app, a client site, a hotfix copy, a remote box. Selecting a row opens that project — its terminals, its services, its git state. Everything below describes what those rows can tell you.

No

A file explorer or file tree

Rows are projects, not paths. The sidebar lists projects and stops there — no row expands into src/ and none of them previews a file. Files are one level in: open the project's Files tab (⌘⇧E) for a tree and a light editor, its Changes view for diffs, or send the folder to your editor.

No

A vertical strip of shell tabs

Turning a horizontal tab row on its side gives you the same flat list, only taller — the nine sessions in the test above would still be nine entries. In lpm a project's terminals live inside that project, so the sidebar length tracks how many projects you have, not how many shells.

Not the primary model

A saved SSH host list

lpm is not an SSH host manager, but SSH projects sit in the same project list as local ones — no separate SSH badge on the row. A paired computer or host appears as its own section, headed by that machine's name, which you can drag anywhere in the list.

Field guide

What a row can tell you

Seven things the sidebar communicates, and the deliberate limits on each.

  • Filled dot — running
  • Hollow dot — stopped
  • Red dot, muted name — config error (hover for the reason)
1
Folders
Group related projects one level deep. Folders collapse, you drag projects and folders into the order you want, and a collapsed folder keeps a one-line summary of what inside it needs you. Folders do not nest inside folders, so the list stays a list.
2
A copy or a Git worktree
Duplicate a project, or create a worktree from it, and the new one is listed directly beneath its parent in a stack you can collapse. A copy's dot has a faint twin behind it and a worktree's dot has a small branch mark. Folded, the stack sums up what its rows are doing, for example “2 needs you · 1 running”.
3
Running state
Filled green means something is running, hollow means nothing is, and red means that project's config has an error; hover the row and the tooltip names the problem. A spinner takes the dot's place while lpm is making copies or worktrees of a project, or removing it. Per-service detail and ports stay inside the project, not in the row.
4
Agent attention
Claude Code, Codex, Gemini CLI, Cursor CLI, OpenCode and omp report back into the row: the name shimmers while an agent works, turns amber when it needs an answer, turns red and reads “Problem” on an error, and turns blue when it finishes. Underneath, each agent gets its own row with a bell, alert, or check and how long it has been going; click one to jump to its tab. Other agents run fine in a terminal too; their rows light up only if a hook or script reports through lpm set-status.
5
Your own status marks
Tag a project or copy ⏳ In progress, ⛔ Blocked, ✅ Done, one of the ready-made marks like 👀 Review or ⏸️ Paused, or a status you define with your own emoji and label. The mark sits beside the name, with an optional note line under it, so a stack of copies reads like a to-do list.
6
Paired computers and hosts
Another computer or a Linux host you have paired appears as its own section, headed by that machine's name. A new one lands at the bottom of the list; drag its header to move it above your local projects. Its rows open the same project view your local rows do.
7
Width and collapse
Drag the divider anywhere between 160 and 400 px; the default is 260 px and your width is remembered. ⌘B collapses the sidebar out of the way when you want the terminals full-width. That collapsed state is not remembered between launches, so a fresh window always starts with the sidebar showing.
Around the rows

More that lives in the sidebar

Switch without the mouse

⌘1–⌘9 jump to the first nine projects in sidebar order, Ctrl+Tab flips between the projects you used last, and ⌘B hides the sidebar.

A menu on every row

Right-click for git (pull, push, commit, create a PR), Duplicate, New worktree, Open with your editor, or Detach to new window.

A work status on any row

Mark a project or copy In progress, Review, Blocked, or a status of your own, with an optional note under the name.

Plan usage at the bottom

Claude and Codex usage bars show how much of the window is gone, when it resets, and a pace marker. More on token usage.

Automations from the footer

Scheduled agent jobs open from the sidebar footer, and new results stay unread until you open them. See how to schedule Claude Code tasks.

Shells without a project

The Terminals entry opens quick shells for scripts and system commands, with the same tabs, splits, and agent status.

Where it earns its place

Three situations the model actually helps with

Several agents on one repo

Claude Code on a refactor, Codex on the tests, each in its own copy.

Give each task its own copy of the project: Duplicate for a standalone folder, or New worktree for a linked branch. The copies stack under the original instead of scattering through the list. Each one keeps its own terminals and agents, so moving between tasks is one click on a row, with no cd and no git stash.

Keeping clients and side projects apart

Two clients, an internal tool, and the thing you build at night.

Put each context in its own folder so the client work is one collapsible group and everything else stays out of view. Rows keep their order, so the project you reach for lands in the same place tomorrow.

Local, remote, and agent-driven work at once

A local stack, an SSH box, and Claude Code running somewhere in between.

SSH projects sit in the same list as local ones, and a paired computer gets its own section, so remote work is not a separate app to alt-tab into. When Claude Code or Codex needs an answer, the row it is working in turns amber — you find out from the sidebar instead of by checking each terminal in turn.

When it will not help

If you keep one shell open, or three or four tabs you can name from memory, a project sidebar is overhead you do not need — Terminal or iTerm2 already fits that shape, and switching costs you more than you get back. The model starts paying off when the tab row has stopped being scannable: several projects in flight, sessions you did not open today, or agents running in copies of the same repo.

FAQ

Questions about the project sidebar

  • Do my terminals keep running when I switch projects?

    Yes. Selecting another row swaps the workspace, but a project you have opened stays mounted: its terminals keep running, their scrollback stays, and a half-typed command is still at the prompt when you come back. Services run until you stop the project, and if Claude Code or Codex needs an answer while you are in another project, that project's row turns amber.

  • Is the sidebar a project list or a file explorer?

    A project list. Each row is a project you work on, and selecting it opens that project's terminals, services, and git state. The sidebar itself is only that list: rows do not expand into a file tree and none of them previews a file. Files are one level in: open the project's Files tab (⌘⇧E) for a tree and an editor, or its Changes view (⌘⇧R) for diffs, or send the folder to Finder or your editor with Open with.

  • Can I resize or hide the project sidebar?

    Yes. Drag the divider to any width between 160 and 400 pixels; the default is 260 pixels and the width you choose is remembered. ⌘B collapses the sidebar so the terminals go full-width, and pressing it again brings the sidebar back. The collapsed state itself is not remembered between launches, so a new window always opens with the sidebar showing.

  • Can I group projects into folders?

    Yes. Folders are one level deep — they are called folders in the UI, they collapse, and you drag projects into them and drag folders into the order you want. A folder cannot contain another folder, which keeps the sidebar a list you can scan rather than a tree you have to navigate.

  • Where do duplicates and Git worktrees show up?

    Directly beneath the project they came from, in a stack you can collapse. A duplicate or worktree inherits its parent's name with a suffix, a copy's dot has a faint twin and a worktree's dot a small branch mark, and the tooltip says which project it came from. Folded, the stack shows a one-line tally such as 2 needs you · 1 running, so a set of parallel copies stays together instead of scattered through the list.

  • What do the dots and colours in the sidebar mean?

    Each project has one dot: filled green when something is running, hollow when nothing is, and red when that project's config has an error. While lpm is making copies or worktrees of a project, or removing it, a spinner takes the dot's place. There are no per-service dots or ports in the sidebar; for that you open the project. Separately, Claude Code and Codex report their state into the row itself: the name shimmers while an agent works, turns amber when it needs an answer, turns red and reads Problem on an error, and turns blue when it is done. Each agent also gets its own row underneath with a bell, alert, or check and its elapsed time.

  • Do SSH projects and paired computers appear in the sidebar?

    Yes, in two different ways. An SSH project sits in the same project list as your local ones, with no separate SSH badge on the row. Another computer or a Linux host you have paired gets its own section, headed by that machine's name. It starts at the bottom of the list and you can drag it anywhere, above your local projects too; its rows open the same project view.

  • Is there a search box or a command palette for the sidebar?

    There is no search box in the sidebar. Use ⌘1–⌘9 to jump to one of the first nine projects, or hold Ctrl and tap Tab to flip between the ones you used last. Folders and the order you drag rows into keep the list itself scannable.

  • Can I mark a project as blocked or done?

    Yes. Right-click a project or copy and open Status to give it a work status: ⏳ In progress, 👀 Review, 🚀 Ready, ✅ Done, ⛔ Blocked with a reason, ⏰ Waiting, ❓ Needs decision, ⏸️ Paused, or one you define with your own emoji and label. The mark sits beside the name with an optional note line, and a collapsed folder or stack of copies counts them in its summary.

  • What else can I do from a sidebar row?

    Right-click a row for its git menu (pull, push, commit, create a PR, switch branch), Duplicate and New worktree, Open with your editor, Rename, and Detach to new window. Shift-click selects several projects to move into a folder or remove at once, and you can turn on double-click to start or stop a project in Settings.

Give every project a home.

Point lpm at the folders you already work in, drag them into the order that matches your week, and let each one hold its own terminals. Free and open source, on Apple Silicon and Intel Macs.