A template remembers a set of folders and what runs in them.
The same folders under the same accounts every morning become one click. Whatever is open right now can be saved as the set.
The control room for your coding CLIs.
Every session in one window, with the files, the diff and the terminal beside it.
Simulated: the sessions are made up and nothing leaves this page.
Every session as a tile, in the order that matters: the ones that want an answer first, then the working ones, then the quiet ones.
Each tile shows its last lines, its folder and its state. A session has exactly one state, and that state has the same name wherever it appears.
A permission comes before a plain question, and the session that has waited longest comes before the others. Within a state the order they came in is kept, so the board does not reshuffle while nothing changes.
Every session is a PTY that keeps running when the window closes.
The daemon owns the terminals. The window is a client that shows them, and there may be several windows at once. Close it and try.
2 MiB of scrollback per session, kept by the daemon. Older output falls off the back.
The stream also runs into a recording on disk, which the search reads and the player plays back with a scrubber.
From any other terminal, plxr attach <which> joins a session. Ctrl-Q twice lets go.
Unix PTYs on macOS and Linux, ConPTY on Windows, through one layer.
If plxr itself stops unexpectedly, the tile says orphaned and a click picks the conversation back up.
Projects, file tree, what has changed (with the diff), review, search, inbox, usage against your plan's limits, open ports, archive, notes.
Changes · looks at the project being worked in. What has changed in the working tree, staged and not, with the diff.
Start a session the way you always start it: the folder, the CLI, the account.
A CLI that is not on the PATH your login shell has is greyed out with “not found” before you click, and an account close to the end of one of its windows is marked while the choice still costs nothing.
From a shell it is plxr new [path] [-- command …], which starts Claude Code in the current folder when you name nothing.
The same folders under the same accounts every morning become one click. Whatever is open right now can be saved as the set.
blocked recognises a decision waiting in the visible text, working a spinner. After idle_seconds without output the session counts as idle_status. Claude Code reports its own state once plxr setup-hook has hooked into its events; every other CLI is read from the screen.
The tube, Windows 95, pen and paper, pixels. They are not colour schemes: each one draws the whole window its own way, with its own icon set.
⌘K for everything, ⌘1…⌘9 for the views, ⌘B ⌥⌘B ⌘J for the edges, ⌘N for a new session, ⌘W to close a panel.
Press keys to find them on the map. Keys your browser uses, like ⌘W, still do what they do in the browser.
Every shortcut lives in one table: the handlers read it, the list under ? prints it, and in the settings each row can be bound to another key.
On Linux and Windows the ⌘ chords are Ctrl chords and ⌥ is Alt. While a terminal has the keyboard, a Ctrl chord or an F-key belongs to the program running in it.
The daemon listens on 127.0.0.1 on a random port behind a token in ~/.plxr/daemon.json. Nothing leaves the machine.
daemon.json is written with mode 0600, because it holds the token.
Every request under /api and /ws needs the token. Without it the answer is 403.
One daemon at a time: a lock file decides which process gets to be it.
PLXR_HOME moves the whole home, so a build of your own runs next to the installed one without touching it.
Reaching plxr from another machine is a switch under Settings, off until you turn it on. Then the token, or a pairing code that works once for ten minutes, stands between the network and the daemon.
One command. It works out which system you are on, takes the newest release and puts it where that system keeps programs.
Nothing else is touched: no package manager, no service, no admin rights.
Release notes (opens in a new tab)All releases (opens in a new tab)
Once it runs it keeps itself up to date: a new version shows as a band at the top of the window, and one click installs it.
Go 1.23+Node 20+bundle-macos.sh makes the .app; the Linux package is built by CI on a tag (.github/workflows/linux.yml), Windows cross-compiles from macOS.
./build.sh# the frontend, then the binary
./try.sh# start this build in a home of its own, next to the installed one
./check.sh# every gate: the static ones, the tests, and the window checks
A Go daemon owns the sessions, the archive and the settings and serves an HTTP/WS API plus the interface; a Wails v3 window loads that interface; the interface itself is Next.js, statically exported, laid out with dockview. BUILD.md (opens in a new tab) is the log of what is done and what is not.
Every session is a PTY that keeps running when the window closes.
Owns the sessions, the archive and the settings.
/api/*/ws/*/127.0.0.1 on a random port, behind a token in ~/.plxr/daemon.json
loads 127.0.0.1:PORT/?token=…
Next.js, statically exported, laid out with dockview
How plxr is put together: coding CLIs run in PTYs owned by the plxr daemon, written in Go. The daemon serves an HTTP and WebSocket API and the interface on 127.0.0.1. A Wails v3 window loads that interface.
Every set of icons and every library that ships with plxr is listed under Settings → Licences, with its licence in full.
crtPalette(140, 94, 51, 200)