Overmind
Keep Overmind
-m web=2,worker=3 to scale a process, a PORT stepped per process with ‑p and ‑P, Linux and *BSD, and a Procfile it reads fresh on every start.
Overmind runs each Procfile line as a tmux window and asks you to install tmux first. lpm imports the same named commands and runs them as panes in a Mac app: click one to read its output, stop or restart one without the rest, start them in dependsOn order.
Five rows go to Overmind. If any of them is load-bearing for you, stay where you are.
Facts checked against Overmind's own README, its releases page, Foreman's man page and tmux's manual page. Overmind's flags and commands here all come from its README, the Foreman line from its man page, and the detach behaviour from tmux's. lpm's own rows were re-read in the app source the same day, after lpm began importing Procfiles.
The short answer
Yes. Overmind here means DarthSim/overmind, the Procfile runner linked above, which drives each of your services as a tmux window. Its README is explicit that tmux is a prerequisite you install first.
lpm does the same job from a native Mac app. Each process in your config lands in a pane of its own, holding its last 10,000 lines, and you can stop and start any one of them without touching the rest, or run lpm service web restart. One that crashes stays down, its output kept. Those panes are for reading rather than typing — dropping you at a prompt inside a running process is the one thing overmind connect does that lpm has no answer for. Nothing here runs on tmux, so there is no multiplexer to install first. Your Procfile stays where it is: lpm imports its lines once, when you add the folder, and the shape carries over unchanged.
What you give up: lpm reads the Procfile once rather than on every start, will not hand each process a PORT, will not run two copies of one process, and needs a Mac to drive it. Everything else on this page is what you get in exchange.
web: bundle exec puma -C config/puma.rb → services:
worker: bundle exec sidekiq web:
css: bun run watch:css cmd: bundle exec puma -C config/puma.rb
port: 3000
worker:
cmd: bundle exec sidekiq
dependsOn: [web]
css: bun run watch:cssOvermind
-m web=2,worker=3 to scale a process, a PORT stepped per process with ‑p and ‑P, Linux and *BSD, and a Procfile it reads fresh on every start.
lpm
No tmux to install, a project switcher across repos, dependsOn for start order, and Claude Code or Codex in a tab beside the services.
Both
Nothing conflicts. lpm never touches your Procfile or your .overmind.env, so the Overmind workflow you already have keeps working.
lpm writes the three services on the right when you add the folder — same names, same commands. The port label, dependsOn and the profile are what you add after. Keep the Procfile in the repo if Heroku or Foreman still needs it.
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq
css: bun run watch:cssservices:
web:
cmd: bundle exec puma -C config/puma.rb
port: 3000
worker:
cmd: bundle exec sidekiq
dependsOn: [web]
css: bun run watch:css
profiles:
api: [web, worker]dependsOn orders the start: worker goes up after web, whatever order the lines sit in. It sequences the starts rather than waiting for readiness — that is what lpm wait is for.profiles start a subset: lpm start --profile api, where Overmind takes overmind start -l web,worker or OVERMIND_PROCESSES.port: is a label lpm checks for conflicts before starting, and it names the process holding one. It is not assigned to your process, so keep exporting PORT yourself. Commit the same services and profile as .lpm.yml in the repository to share them.Every field a service takes — cmd, cwd, port, env, dependsOn — is in the config reference.
What overmind start produces in tmux windows, produced instead as panes you click.
Fifteen rows. Five of them go to Overmind — the first four, plus typing at a running process — and those five are the honest reason to stay.
| Capability | lpm | Overmind |
|---|---|---|
| Picks up Procfile edits on the next start | no — imported once, when the project is added | Yes |
| Automatic PORT allocation | port declared for conflict checks, not assigned | PORT stepped per process (-p / -P) |
| Scales one process to several instances | one process per service | -m web=2,worker=3 |
| Which machines it runs on | Mac app; Linux and SSH boxes as hosts | macOS, Linux, *BSD |
| Whether tmux has to be installed first | no — lpm does not use tmux | yes — install tmux, then Overmind |
| Reads a config committed in the repo | .lpm.yml | Procfile |
| Drafts the config for you | built in, from the Procfile and other manifests; Claude Code, Codex, Gemini CLI or OpenCode can redraft it | No |
| Type at one running process | No | overmind connect |
| Restart web without restarting worker | Yes | Yes |
| Start order you declare, not line order | dependsOn | No |
| Start a subset of processes | --profile | -l / OVERMIND_PROCESSES |
| Port conflict caught at start, holder named | Yes | No |
| What a session survives | quitting the app | closing the terminal |
| Running it on a remote dev box | SSH projects, declared ports forwarded to localhost automatically | run it on the box yourself |
| Run the project in several copies at once | 1–50 worktrees or standalone copies | No |
Read the five rows lpm loses twice. Overmind reads your Procfile afresh every time it starts where lpm imported it once, hands each process a PORT, runs several instances of one process, installs on Linux and *BSD where lpm needs a Mac to drive from, and drops you at a prompt inside a running process with overmind connect. If one of those five is load-bearing, stay where you are — nothing below outweighs a workflow that already works.
The overmind verbs you type in a day, and what replaces each one. The last two rows have no overmind command to translate.
| overmind | lpm | Notes |
|---|---|---|
overmind start | lpm start | |
overmind start -l web,worker | lpm start --profile api | |
overmind restart web | lpm service web restart | |
overmind stop worker | lpm service worker stop | |
overmind connect web | click the service's tab in the project, or lpm logs web -n 500 | |
overmind echo | open the project; each service's output is already in its pane | |
overmind run yarn install | lpm run --command "yarn install" | a one-off command in the project's folder |
overmind kill | lpm stop | lpm reaps each service's process tree |
— | lpm wait --service web | block a script until the service is up |
— | lpm duplicate -n 3 --run claude --prompt "…" | three copies of the project, an agent running in each |
overmind
overmind startlpm
lpm startovermind
overmind start -l web,workerlpm
lpm start --profile apiovermind
overmind restart weblpm
lpm service web restartovermind
overmind stop workerlpm
lpm service worker stopovermind
overmind connect weblpm
click the service's tab in the project, or lpm logs web -n 500overmind
overmind echolpm
open the project; each service's output is already in its paneovermind
overmind run yarn installlpm
lpm run --command "yarn install"a one-off command in the project's folder
overmind
overmind killlpm
lpm stoplpm reaps each service's process tree
overmind
—lpm
lpm wait --service webblock a script until the service is up
overmind
—lpm
lpm duplicate -n 3 --run claude --prompt "…"three copies of the project, an agent running in each
Anything that changes what is running — lpm start, lpm stop, or a lpm service … restart — goes through the app, so keep lpm open: it owns the panes. lpm logs and lpm list only read, so they answer from a cold shell — lpm list is where you see how many services a project has up.
A short video: a profile starts just the services it names.Click any process tab — it runs live in your browser.
lpm is a macOS app with a multi-pane terminal workspace. Open this page on your computer to try the interactive demo.
Get lpm for MacOr check your Macs from your iPhoneClick a step to run it in the window.
Done poking around? Get lpm for Mac and point it at your own projects.
port: is a label used to check for conflicts before a start and to name the process holding one; you still export PORT yourself. If automatic assignment is what keeps your Procfile portable, that is a real reason to stay on Overmind.Persistent panes without a .tmux.conf — what survives a restart on each side, and what does not.
The original Procfile runner: one interleaved stream, its -m formation flag, and what changes when each process gets a pane.
Every key a service takes — cmd, cwd, port, env, dependsOn — and the profiles that start a subset.
Pick a host from your SSH config, give its processes their own panes, and forward a port when you need one.
Pair a Linux machine as a headless host, then drive its services and its agents from the Mac app.
What lpm duplicate -n 3 actually creates, and the ignored files a linked worktree leaves behind.
lpm converts the lines as you add the folder. Each process opens as a pane you can click, stop or restart without the rest, and read 10,000 lines back — with no tmux installed anywhere. Free and open source on GitHub.