Install
Cerveau builds from source. There is no installer and no package: you build the panel once, build the binary, serve a model, and run. Fifteen minutes on a machine that already has Go and Node.
Requirements
| Component | Version | Why |
|---|---|---|
| Go | 1.25+ | The core. Also embeds the built panel via go:embed. |
| Node | 20+ | Builds the Svelte panel once. Not needed at runtime. |
| llama.cpp | any recent build | A llama-server binary and a GGUF model. Or vLLM — see Brain Cores. |
| Python | 3.10+ | Optional. Only for the embedder sidecar that gives you vector recall. |
Platform. Linux x86-64 and ARM64 today. macOS is close — the core and syscalls work, but the system monitor and the folder picker need platform shims. Windows is planned.
Build
The panel compiles to static assets that are embedded into the binary, so it has to be built first. You only repeat this step when the panel changes.
# 1. build the panel (embedded into the binary via go:embed)
cd panel && npm install && npm run build && cd ..
# 2. build the core
go build -o ~/.local/bin/crv ./cmd/crv
# 3. optional: the one-shot CLI
go build -o ~/.local/bin/crvcli ./cmd/crvcli
go build will fail if panel/build does not exist — go:embed needs the directory at compile time, not at run time.
Serve a model
Cerveau never starts an engine. You serve the model, it is handed a URL. Anything that speaks the OpenAI chat-completions API works.
llama.cpp
llama-server -m Qwen3.6-35B-A3B-UD-Q4_K_M.gguf \
--host 127.0.0.1 --port 8080 --jinja
That model — Qwen3.6-35B-A3B at Q4_K_M, about 22 GB — is the reference build every benchmark in the repository was measured against. --jinja is required: without it the server will not apply the model's chat template and tool calls come back as prose.
vLLM
vLLM is the second Core, for dense models that fit the card. Its setup is involved enough to have its own page: Brain Cores.
enable_thinking: false on every request. Without it a thinking model spends its entire token budget inside <think> and returns nothing usable.
First run
crv
Open http://localhost:7700. On first run the core writes ~/.config/cerveau/config.json, creates ~/.crv/, and fetches Typesense if it is not already managed.
Optional: the embedder
Hybrid vector recall needs an embedding endpoint. The bundled sidecar serves an OpenAI-compatible /v1/embeddings on :8081:
python3 sidecars/nemotron_embed.py
It loads Nemotron-3-Embed-1B and runs on the CPU by default. Without it, memory search falls back to keyword-only, which still works — it is just less good at finding a thing you described differently the second time.
Verify
# every component and its state
curl -s localhost:7700/api/health | python3 -m json.tool
A healthy response lists each component with ok: true. If the model shows as down, the URL in your config does not match where you actually served it.
127.0.0.1 for that reason. If you need it from another device, use Pocket over your own tailnet — never a port forward.