Set up your own lab
labb is free and open source, and there's nothing to sign up for. You run it yourself, on a machine you own.
One prompt, the whole setup
Paste this into a coding agent that can run commands on the machine that will be the server. It installs Ollama if it's missing, pulls the models, starts labb in Docker and checks that it works, then gives you the link that creates your admin account. It asks before anything that needs sudo. The steps below are the same ones, if you'd rather type them yourself.
Read the whole prompt first
The whole lab, with Docker
You need Docker with Compose, and Ollama on the same machine or one it can reach.
Pull the models
On the Ollama machine: the default chat model, and the one that embeds documents and memories.
ollama pull gemma4:e4b ollama pull qwen3-embedding:0.6bLet the container reach Ollama
Ollama only listens on
127.0.0.1at first. On the Ollama machine (Linux, with Ollama as a service), this one command writes the setting, restarts Ollama and printsEnvironment=OLLAMA_HOST=0.0.0.0when it took.sudo mkdir -p /etc/systemd/system/ollama.service.d && printf '[Service]\nEnvironment="OLLAMA_HOST=0.0.0.0"\n' | sudo tee /etc/systemd/system/ollama.service.d/labb.conf >/dev/null && sudo systemctl daemon-reload && sudo systemctl restart ollama && systemctl show ollama -p EnvironmentDon't expose port 11434 to your network. Firewall it, or put
172.17.0.1, the Docker bridge address, in place of0.0.0.0. labb's server is the gateway to Ollama, and it checks API keys.Start labb
git clone https://github.com/randomencabulator/labb.git cd labb ./setup.sh # makes .env, with a random database password docker compose up -d --buildCreate the admin account
The server prints a setup link when it starts, and only that link can create the admin account, so nobody who reaches a fresh server first can take it. From the server itself,
http://localhost:8000works without it.docker compose logs labb-web | grep setup= # http://<server>:8000/?setup=…Then invite people from Settings → Invites.
Turn on HTTPS
The server speaks plain HTTP, and the mic needs HTTPS on other devices. This puts Caddy in front of it, with certificates from its own CA on your network. For a public domain, see HTTPS in the guide.
./setup.sh https
An agent in every terminal
On each PC (Linux or macOS), install it from your server. Then run labb in any project folder. It uses the server's models, your documents and your memories, and its sessions show up under Terminal in the web chat.
curl -fsSL http://<server>:8000/install.sh | sh # installs uv if needed, then labb
labb --login # approve this PC in the browserTo start work on a PC from the browser, run labb connect ~/code/project there and leave it running. It only works in the folders you name. More on your PCs.
labb on its own
labb also works without a server, talking straight to Ollama, OpenAI or Anthropic and keeping its chats and memories on the PC. Document search needs a server; everything else works.
uv tool install --python 3.14 git+https://github.com/randomencabulator/labb
labb # Ollama at http://localhost:11434; for another machine, set OLLAMA_HOST in ~/.labb/.envBefore you start
What does it cost?
labb is free and MIT licensed. If you turn on a cloud provider, you use your own API key under that provider's terms and pricing.
Does anything leave my network?
With Ollama, your chats, documents and memories stay on your machines. Web searches and page reads do go out, through the crawler. If you turn on OpenAI or Anthropic, your messages go to them, and with OpenAI's speech models, so do your recordings.
Which systems does it run on?
The server runs in Docker with Compose. PCs can install the terminal agent on Linux or macOS. There's an iOS app in the repository to build with Xcode.
How much disk does it take?
The crawler and the browser are about 1.8 GB each, mostly Chromium. Apps download their base images when the first one is built, and speech models are a few hundred MB.
Which ports does it use?
The web chat is on 8000 (or 443 with HTTPS). Apps get one port each from 9100 to 9199, and artifacts built in chats are on 8300. App pages have no sign-in yet, so keep 9100 to 9199 on your network.
Which model should I start with?
The default chat model is gemma4:e4b, with qwen3-embedding:0.6b for documents and memories. You can add others and change the default in Settings → Models. For small local models, pick the labb local engine, which keeps the prompt short. Bigger models draft Studio workflows and build apps much better.
Can admins read my chats?
No. Everyone sees only their own chats, documents and memories. Admins see usage numbers, never content.
How do I upgrade?
Run git pull && docker compose up -d --build on the server. Your data stays in its volumes, with apps and their data on spawner-data. On a PC, labb --update installs a newer version from the server, and labb tells you when one is available.
How do I report a vulnerability?
Please report it privately as SECURITY.md describes, not in a public issue.
Keep reading
- Studio walkthrough
- Build, run and check your first workflow.
- The full guide
- Every command, setting and server option, MCP servers, hooks, permissions and the HTTP API.
- Issues
- Found a bug or want something? Say so here.
- Contributing
- Contributions are welcome.