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.

Choose your Mac download
Developer ID signed · Notarized by AppleSafety, checksums & removal
Try the interactive walkthrough

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

The window

This is lpm, sidebar open

Project rows stay on the left; the selected project's terminals and agent sessions fill the workspace on the right. Click another row and that whole workspace swaps.

Not a screenshot: the lpm window drawn in the page itself, with the app's own layout and colours. The green outline and its label are added here. checkout is the selected row, so the workspace holds its three terminals and the Claude Code session running in one of them — and while you sit there, auth-hotfix has gone amber further down the list, because the agent in that project is waiting on an answer.
Interactive product walkthrough

The interruption test

Nine terminal sessions and one interruption, run twice — once as a flat tab row, once with the sessions 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 macOS 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.

Disambiguation

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 else on this page 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 for lpm's diff and file views, or open its folder in Finder or your editor. Browsing a tree is your editor's job; lpm sits beside it rather than replacing it.

No

A vertical strip of shell tabs

Turning a horizontal tab row on its side gives you the same flat list, only taller — twelve sessions are still twelve 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 Mac or host appears as its own section beneath your local projects, headed by that machine's name.

Field guide

What a row can tell you

Six things the sidebar communicates, and the deliberate limits on each. Everything below is what the row actually shows — nothing here is aspirational.

  • Filled dot — running
  • Hollow dot — stopped
  • Red dot, labelled in the row — config error
1
Folders
Group related projects one level deep. They are called folders in the UI, they collapse, and you drag projects and folders into the order you want. Folders do not nest inside folders — 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. Its name is muted because it is inherited from the parent, and its tooltip names the project it came from.
3
Running state
One dot per project. 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. That is the entire vocabulary — no per-service dots, service counts, port numbers, or readiness checks live in the sidebar.
4
Agent attention
Claude Code and Codex report back into the row: the name shimmers while an agent is working, turns amber when it needs an answer from you, turns red with an alert icon on an error, and turns blue with a check when it finishes. Other agents run fine in a terminal, but they do not light up the row.
5
Paired Macs and hosts
A Mac you have paired appears as its own section under your local projects, headed by that machine's name. Its rows open the same project view your local rows do.
6
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.
Where it earns its place

Three situations the model actually helps with

Coming back from an interruption

A hotfix, a review, a question in Slack.

You leave a project mid-command and return twenty minutes later. Because the project you were on stays mounted while you are away, its terminals are still running, the scrollback is still there, and the command you had half-typed is still at the prompt. What you rebuild is your train of thought, not your workspace.

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 — and a duplicate you made for a risky refactor sits directly under the project it came from instead of drifting to the bottom of a tab row.

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 Mac 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

  • 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 for lpm's review pane and file-by-file diffs, or open its folder in Finder or your editor. lpm is a terminal workspace that sits beside your editor rather than replacing it.

  • 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. A duplicate or worktree inherits its parent's name with a suffix, shows that inherited name muted, and its tooltip says which project it is a duplicate or Git worktree of. That keeps a set of parallel copies together instead of scattered through the list in creation order.

  • 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. There are no per-service dots, service counts, ports, or health checks 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, red with an alert icon on an error, and blue with a check when it is done.

  • Do SSH projects and paired Macs 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. A Mac or host you have paired gets its own section beneath your local projects, headed by that machine's name, and its rows open the same project view.

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

    No. There is no sidebar search, no favourites, and no ⌘K palette for projects. The list is meant to stay short enough to scan, and folders plus the order you drag rows into are the tools for keeping it that way. If your list has grown past what you can scan, that is worth knowing about — it is the kind of thing that shapes what gets built next.

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.

Choose your Mac download
Developer ID signed · Notarized by AppleSafety, checksums & removal