labb
Get labb

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.

Let an agent do it

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.

Copies it to your clipboard, ready to paste.
Read the whole prompt first
Run the server

The whole lab, with Docker

You need Docker with Compose, and Ollama on the same machine or one it can reach.

  1. 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.6b
  2. Let the container reach Ollama

    Ollama only listens on 127.0.0.1 at first. On the Ollama machine (Linux, with Ollama as a service), this one command writes the setting, restarts Ollama and prints Environment=OLLAMA_HOST=0.0.0.0 when 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 Environment

    Don't expose port 11434 to your network. Firewall it, or put 172.17.0.1, the Docker bridge address, in place of 0.0.0.0. labb's server is the gateway to Ollama, and it checks API keys.

  3. 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 --build
  4. Create 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:8000 works without it.

    docker compose logs labb-web | grep setup=   # http://<server>:8000/?setup=…

    Then invite people from Settings → Invites.

  5. 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
Add your PCs

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 browser

To 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.

Just the terminal

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/.env
Questions

Before 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.

Where next

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.