@9punk/9cli
v0.1.37
Published
9CLI — a local multi-session command center for Claude Code and other CLI agents. Finds your projects, spawns real sessions in them, and shows every one on a board in your browser.
Maintainers
Readme
9CLI
A local multi-session command center for Claude Code and other CLI agents.
You already run more than one agent at a time. 9CLI is the board that shows you all of them at once — which one is waiting on you, which one is working, which one finished — so you stop alt-tabbing between terminal windows to find out.
Before you run it: you need Node.js 22 or newer (node -v to check —
nodejs.org if you have none; nothing below can install
Node for you), and Claude Code
for the sessions themselves. If Claude Code or git is missing, 9CLI still opens
and shows you what to fix.
Linux: 9CLI's terminal component,
node-pty, ships no prebuilt binary for Linux, so npm compiles it during the command below. Without a C toolchain that step fails with compiler errors before any of 9CLI's own code runs, so 9CLI cannot catch it or explain it. Install one first — on Debian/Ubuntu:sudo apt install build-essential python3.
npx @9punk/9cliNo global installation required. npm keeps a cached copy of the package, and
9CLI keeps your settings in ~/.multicli/. It starts a daemon on 127.0.0.1,
prints a URL and opens the board in your browser. Point it at the folder your
projects live in once; it looks in that folder and two levels below it for git
repos and gives each one an Activate button. Pointing it at a single repo
works too — that repo is then the project it shows.
The URL is always printed, so a headless box, a container or an SSH session
works exactly as well — open it yourself. --no-open skips the browser.
Run it again while one is already running and it opens the existing board
rather than starting a second one. npx @9punk/9cli stop ends a running daemon
and everything it started — via npx, because a bare 9cli only exists if you
installed the package globally, and npx does not. If the port is taken by
something that is not 9CLI, 9CLI takes the next free loopback port and says
which; it never touches whatever is already there.
→ 9CLI.dev
What it does
- Four lanes, not four windows. Every session sits in Needs you, Working, Idle or Finished. "Needs you" means a real permission or confirmation prompt is on screen and nothing is moving until you answer — the board tells you, rather than you finding out twenty minutes later.
- Real sessions, real terminals. Each card is an actual pty running
claude(or whatever you point it at) in that project's folder. You can type into it. - Per-project permission profiles. Read-only, Standard, Trusted or Full,
chosen per project and never in bulk, applied through Claude Code's own
--settings. Every card carries a badge saying what that project is allowed to do. Full asks you to confirm, once. - Copy output / Copy last response / History. Read from a transcript the daemon rebuilds from the session itself, not scraped off the screen — so the full-screen redraws that normally destroy your scrollback don't take the conversation with them.
- Safely close all. Commit, push, back up and then stop — only the steps that actually apply to each project, and it verifies nothing was left running.
- Sidekick. Keep the Claude web conversation for a project one click away. A bookmark, nothing more — 9CLI never reads or sends it.
- Four themes, a keyboard-driven layout, and a Help panel (press
?) that is a genuine 60-second tour.
Requirements
| | |
|---|---|
| Node.js | 20 or newer (node -v) |
| Claude Code | for the sessions to be worth watching — install guide |
| git | the project scan reads branch and commit state |
| A browser | the board is a web page served from your own machine |
9CLI runs a doctor check at startup and tells you which of these it could not find, so you don't have to guess. If one is missing, broken or not responding, the board still opens — in a recovery mode that says what is wrong, gives the next step for your platform, and has a Re-check button — and sessions stay off until it is fixed. The one thing it cannot help with from inside is Node itself: with no Node, or one too old to start 9CLI, there is nothing running to show you anything, which is why Node is listed above the install command.
Platforms.
| | |
|---|---|
| Windows | Tested. This is the platform 9CLI is developed and released on. |
| macOS | Experimental, and not verified end to end on real hardware. The macOS paths exist and are unit-tested, but nobody has run the app through a full session on a Mac. Treat it as untested. |
| Linux | Experimental and unverified. node-pty has no prebuilt binary, so installing needs a C toolchain (build-essential, python3). |
Reports from macOS and Linux are very welcome — they are the only thing that moves either row.
Free and Pro
Free — no account, no sign-up, no email. The whole command center: every feature, every theme, unlimited projects. Capped at 2 sessions running at the same time. You never have to sign in to use it.
Pro — unlimited concurrent sessions. Coming soon. It is not on sale yet, and the app will say so rather than showing you a checkout that does nothing. If you already hold Pro, sign in from the board and it applies to this machine.
What it sends
9CLI is local-first, and specifically:
- The daemon binds
127.0.0.1only. It is not reachable from your network. - 9CLI does not send your code, your prompts or your session output anywhere. The board, the daemon and everything they store are local; nothing is uploaded to 9punk, logged remotely, or used for anything.
- Claude Code does send your prompts to its provider, and that is the point of
it. 9CLI runs
claudein a terminal in your project folder, exactly as you would yourself, and from that moment your prompts and whatever context Claude Code gathers go to whichever provider it is configured for — Anthropic, or Bedrock/Vertex if you have set those up. 9CLI does not see, change or record that traffic, and it cannot stop it either. "Local" describes the board, not the model. Worth knowing before the first prompt rather than after it. - The board fetches nothing from the internet to draw itself — fonts and terminal library are served from your own daemon.
- Two network calls exist, and both are about your plan, not your work: an anonymous check for pricing and availability, which carries no account, no identifier and no version; and, only if you sign in, a check of what plan you are on. Signed out, the first is the only call 9CLI ever makes.
Where your settings live
~/.multicli/ — your chosen root, your session definitions and their permission
profiles. Written atomically, so a crash or a reboot loses nothing. Delete the
folder to start completely clean.
Nothing about what is running is persisted: a session that was live when the daemon stopped is not live now, and 9CLI will not pretend otherwise.
Nothing you type is written to disk. 0.1.10 and 0.1.11 staged a large
prompt to ~/.multicli/prompts/ on the way to the session, because Windows
could not hand a program that much text through a terminal in one piece. That is
fixed a layer down as of 0.1.11 and the staging is gone as of 0.1.13 — a large
prompt now travels straight into the session as a paste. If an older 9CLI left a
prompt file behind, 9CLI removes it the next time it starts.
A note on trust
The daemon runs as you and spawns your shells. It is exactly as trusted as your terminal, and it is not a sandbox — the permission profiles configure Claude Code, they do not contain it. Point 9CLI at projects you would open a terminal in anyway.
Support
License
Proprietary. © 2026 9Punk LLC, all rights reserved. See LICENSE and the Terms of Service. 9CLI is licensed, not sold.
