Appearance
Getting Started ​
This guide starts from the first decision you need to make:
- run Coleo directly from your terminal as local processes
- run Coleo in Docker as a local or home-server service
Choose Your Runtime Path ​
Path A: Local process ​
Use this when you want to run Coleo directly on your machine with Bun. This is the best fit for:
- local development
- source checkout workflows
- minimal setup on a laptop or desktop
- people who want to understand the moving parts before containerizing
Path B: Docker or home server ​
Use this when you want Coleo running as a service in containers. This is the best fit for:
- OrbStack or Docker Desktop on a Mac mini or laptop
- a home server on your LAN
- access over Tailscale, WireGuard, or another VPN
- a future path to Traefik and Authelia
See Docker Guide for the container path.
Prerequisites ​
For the local-process path:
- Bun v1.1+
- Git
For the Docker path:
- Docker or OrbStack
NATS: How It Works ​
For local-process development, you do not need to start NATS separately. If COLEO_NATS_URL is unset, coleo serve will bootstrap and manage a local standalone nats-server inside the active .coleo/ directory.
These features depend on NATS + JetStream:
- distributed
ArmAgentcommunication - remote arm spawning across hosts
- stream-backed activity and transcript/event history
If local bootstrap fails or you deliberately disable NATS, Coleo still supports:
- SQLite-backed core state
- local API server
- brain polling loop
- local web UI
Local process default ​
For the normal local-process path, just run:
bash
coleo serveThat will:
- install a pinned
nats-serverbinary into.coleo/binif needed - start JetStream-backed local NATS using
.coleo/natsfor state - point the API server at
nats://127.0.0.1:4222
Manual local NATS control ​
If you want to install or run that local NATS runtime yourself from a source checkout of this repository, use the helper scripts:
bash
bun run nats:install
bun run nats:runThat installs a pinned official nats-server binary into .coleo/bin and runs JetStream locally using .coleo/nats for state.
Equivalent direct command from the repo root:
bash
bash bin/run-nats.shIf you installed Coleo globally and do not have the repo checkout, either:
- let
coleo servebootstrap local NATS for you - clone the repo and use the helper scripts from there
- run NATS with Docker
- install the official
nats-serverbinary yourself and pointCOLEO_NATS_URLat it
Docker NATS option ​
If you are already using Docker, you can run just NATS from the hosting stack:
bash
docker compose \
--env-file deploy/self-host/.env.hosting \
-f deploy/self-host/docker-compose.hosting.yml \
up -d natsPath A: Run Coleo as Local Processes ​
1. Install Coleo ​
Install with mise ​
bash
mise use bun@latest
MISE_NPM_PACKAGE_MANAGER=bun mise use npm:coleo@latest
mise x -- coleo init --dir ./.coleoInstall with Bun + npm ​
bash
bun install -g coleo
coleo initFrom source ​
bash
git clone https://github.com/sirtimbly/coleo
cd coleo
bun install
bun run src/cli/index.ts initIf you are developing from source, use bun run src/cli/index.ts <command> instead of the global coleo binary.
2. Initialize state ​
If you did not already run init during install:
bash
coleo initThis creates .coleo state, arm configs, Maildir folders, and local config files.
When an OpenCode-backed arm is spawned, the API refreshes a cached authenticated model catalog from the local opencode models CLI and stores it in .coleo/cache/opencode-models.json. The Observatory uses that cache for OpenCode provider/model dropdowns instead of querying a live OpenCode server.
3. Start the API server ​
Foreground:
bash
coleo serveBackground daemon:
bash
coleo serve startDefault API URL:
http://localhost:8080- If
COLEO_NATS_URLis unset,coleo servewill also bring up local NATS atnats://127.0.0.1:4222
If you want to use a shared or remote NATS server instead, set COLEO_NATS_URL before starting the API server.
4. Start the web UI ​
If you installed a built package:
bash
coleo web startIf you are running from source:
bash
bun run web:devDefault UI URL:
http://localhost:5173
5. Start the brain ​
bash
coleo brain run6. Spawn an arm ​
bash
coleo arm spawn \
--name dev-arm \
--harness opencode-api \
--workdir /absolute/path/to/your-project7. Prompt it ​
bash
coleo arm prompt dev-arm "Add a dark mode toggle to the settings page"Path B: Run Coleo in Docker ​
Use the hosting blueprint under deploy/self-host/.
bash
cp deploy/self-host/.env.hosting.example deploy/self-host/.env.hosting
./deploy/self-host/bin/bootstrap-host.sh
docker compose \
--env-file deploy/self-host/.env.hosting \
-f deploy/self-host/docker-compose.hosting.yml \
up -d --buildDefault endpoints:
- Observatory:
http://localhost - API health:
http://localhost:8080/api/health - NATS:
nats://localhost:4222
For a home server over LAN, Tailscale, or another VPN, keep the same base Compose file and set:
bash
COLEO_BIND_HOST=0.0.0.0
COLEO_PUBLIC_ORIGIN=http://<your-private-hostname-or-tailscale-name>If you later want public internet exposure, add:
deploy/self-host/docker-compose.hosting.edge.example.yml
See Docker Guide for the full Docker path.
Recommended Progression ​
For most users, the clean progression is:
- Start with local processes if you are developing from source or just learning the system.
- Add local NATS only when you want distributed arms or stream-backed observability.
- Move to the Docker base stack when you want a stable service on a Mac mini or home server.
- Expose that base stack privately over LAN, Tailscale, or another VPN.
- Add Traefik and Authelia only when you actually need public internet exposure.
