Skip to main content

Install

lmstack ships as a Claude Code plugin. That is the only supported way to install it — there is no curl-pipe-sh, no clone step, and nothing to build.

/plugin marketplace add ric03uec/lmstack
/plugin install lmstack@lmstack

The first command registers this repository as a marketplace; the second installs the plugin from it. Restart is not required — the commands appear immediately.

Prerequisites

Two of these are needed before the stack can come up. The plugin checks and tells you which is missing rather than failing partway through a bring-up.

ToolCheckInstall with
Ansiblecommand -v ansible-playbookuv tool install ansible-core
tmuxcommand -v tmuxYour package manager (apt install tmux, brew install tmux)
git, python3, jqcommand -v eachUsually present already

Ansible is the one usually missing. Install it with uv tool install ansible-core, not pipx and not the system package manager — the distribution packages lag far enough behind that the playbooks fail on collection versions.

pi is optional and only needed for /lmstack:exec, which runs a local model in a live editor session. Install it with curl -fsSL https://pi.dev/install.sh | sh. The other three commands do not need it.

What you get

CommandWhat it does
/lmstack:analyze [target]Probes the hardware — locally or over SSH — and reports what fits, before anything is installed
/lmstack:install [target]Brings the stack up behind one OpenAI-compatible endpoint
/lmstack:harvest <source>Reads a backlog and classifies which items the local stack can attempt
/lmstack:exec <key>Runs one of them and ends with a pull request

Start with /lmstack:analyze. It reads the GPU, does the VRAM arithmetic, and tells you which models fit. Nothing is written and nothing is installed, so it is safe to run against a machine you have not decided about yet.

Pass an SSH target to point either command at a remote box:

/lmstack:analyze devashish@h1-nvidia

Where things get written

Everything generated lands under ~/.lmstack/, keyed by host role:

~/.lmstack/
├── <role>/
│ ├── vars.yml host variables the playbooks read
│ ├── stacklog/ append-only change log
│ └── tasks/ the harvested task queue
├── ledger.jsonl one line per completed exec run
└── runs/ per-run briefs, transcripts, judge findings

Nothing is written into a repository — not the lmstack clone, not yours. The one exception is /lmstack:exec, which creates a git worktree and a branch it made itself, and never touches your checked-out branch, index, or stash.

Secrets are never read back. When the install needs a value from an env file it prints the command for you to run, and the change log redacts anything that looks like a key before it is written.

Working on lmstack itself

Clone it and run make plugin-dev, which starts Claude Code with the working tree loaded as the plugin. Edits to a skill take effect in the next session with nothing to reinstall — skills resolve their own location at runtime through ${CLAUDE_PLUGIN_ROOT}, so there is no path to bind and nothing to re-template.

Run make test before you push. It needs no host, no GPU, and no network.

Uninstalling

/plugin uninstall lmstack@lmstack

That leaves ~/.lmstack/ and anything running on the GPU hosts alone. A stack is stopped on the host it runs on:

docker compose -f ~/.lmstack/docker-compose.yml down