Skip to Content
cuelo.

01Start

Installation

Install Cuelo with one command, add your keys, and check that everything works.

Cuelo has two parts: the cuelo CLI, a single binary you install once, and the engine, the Python package that runs endpoints and serves the dashboard. The installer gives you the CLI, and uv brings in the engine and Python itself.

Requirements

Python3.12 or newer, managed by uv for you. Only needed directly for pip installs.
OSmacOS (Apple Silicon and Intel), Linux (x86_64, arm64, glibc 2.17+), Windows (x86_64, arm64)
uvNeeded to run endpoints: it fetches Python and the engine. Install uv.
MemoryAbout 200 MB per server process, or about 1 GB with the MaAI turn-taking models (PyTorch)
KeysOne speech provider (Smallest by default) and one LLM provider

Which Python?

If python3 --version says 3.11 or older, let uv fetch a newer one. Add --python 3.13 to the install command and uv downloads it for the tool alone.

Install

One command installs the cuelo CLI, verifies it against the release checksums, and adds it to your PATH. If uv is installed, it also sets up the matching engine.

curl -fsSL https://setup.cuelo.dev/install | bash

Installs to ~/.cuelo/bin. A specific version: curl -fsSL https://setup.cuelo.dev/install | bash -s -- v0.2.0. The CLI alone, without the engine: add --no-engine.

Check it:

cuelo --version

What the installer does

It detects your OS and CPU, downloads the matching binary from the GitHub release, refuses it if the SHA-256 doesn't match, installs to ~/.cuelo/bin, and adds that to your shell profile. Then, if uv is available, it runs uv tool install for the matching engine version. Read it first: curl -fsSL https://setup.cuelo.dev/install | less.

CLI and engine

The CLI (cuelo) is a single Go binary. The engine is the Python package cuelo that the CLI runs. The installers give you the CLI, and the engine arrives in one of three ways:

  • the installer installs it with uv (when uv is present),
  • cuelo start fetches it through uv on first run,
  • cuelo init and cuelo dev install it into each project's own environment.

So uv is the one prerequisite for running endpoints. Python itself is handled by uv.

Extras

When you install the engine yourself with uv or pip, extras choose the providers and models it includes. The installers use the recommended set.

ExtraAddsYou need it for
serverStarlette, Uvicorn, httpxserving the Realtime API, dashboard and HTTP tools. Almost always.
configPyYAML, jsonschemareading config.cuelo
sileroonnxruntime, numpythe VAD and the ONNX turn models: turn-1-mini, smart-turn, backchannel-detector
maaiPyTorch, einopsMaAI interruptions and backchannels (the default). About 1 GB.
smallest, deepgram, elevenlabs, cartesia, inworldhttpx, websocketsthat vendor's STT and TTS
assemblyai, sonioxwebsocketsthat vendor's STT
openaiopenaiOpenAI, Cerebras, OpenRouter, any OpenAI-compatible LLM
anthropicanthropicClaude models
postgres, mysqlpsycopg, PyMySQLstoring calls in Postgres or MySQL instead of SQLite

Without PyTorch: drop maai. Cuelo falls back to the small backchannel detector for interruptions and a VAD rule for backchannels. That uses about a fifth of the memory and is roughly ten times cheaper per call. See Turn-taking.

uv tool install "cuelo[server,config,silero,smallest,openai,anthropic]"

To add an extra later, re-run uv tool install with the new list and --force.

Add your keys

Cuelo reads credentials from a .env file in the current directory, or from the environment. They never go in config.cuelo.

.env
SMALLEST_API_KEY=...        # speech: STT and TTS
CEREBRAS_API_KEY=...        # LLM: or ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY

The default agent uses the first LLM it finds a key for: Cerebras, then Anthropic, OpenAI and OpenRouter. Every provider's variable is listed in Environment variables.

Download the turn-taking models

Model weights download on first use, pinned to a revision and checked by sha256. To fetch them ahead of time, for example before a demo or in a Docker image:

cuelo models pull --all

They go to ~/.cache/cuelo/models. Set CUELO_MODELS to move the cache.

Check that it works

Start the default endpoint

cuelo start

This opens the dashboard on http://127.0.0.1:4141. Press Connect on the Talk page and say hello.

Measure your machine

cuelo machine check

This streams real speech through the turn-taking stack and reports how many concurrent calls your machine handles in real time.

Create a project

cuelo init my-agent && cd my-agent
cuelo doctor        # config, credentials, generated code, imports
cuelo dev

The first cuelo dev installs the project's environment with uv.

Upgrade and uninstall

curl -fsSL https://setup.cuelo.dev/install | bash   # upgrade: re-run the installer
brew upgrade cuelo                                  # Homebrew
uv tool upgrade cuelo                               # the engine, when installed with uv
rm -rf ~/.cuelo && uv tool uninstall cuelo          # uninstall

Projects pin the engine version they were generated with. After upgrading the CLI, run cuelo generate in a project to move it to the new engine.

From source

To work on Cuelo itself, or to run the latest main:

git clone https://github.com/thoughtsinc/cues-harness && cd cues-harness
make setup          # Node, Python and Go dependencies
make cuelo          # bin/cuelo with the dashboard embedded
source .bashrc      # puts bin/ on PATH

Point a project at your checkout with cuelo generate --engine-path ../cues-harness/engine. See Contributing.

Troubleshooting

SymptomFix
port 4141 is in use; is cuelo already running?Stop the other server, or pass --port 5000.
MissingCredentialError: ... set SMALLEST_API_KEY in .envThe .env file must be in the directory you run from, or export the variable.
ModuleNotFoundError: starlette (or yaml, onnxruntime)An extra is missing. Re-install with server, config or silero.
Interruptions trigger on "yeah"maai isn't installed, so Cuelo fell back to a lighter detector. Install the maai extra.
Slow first callWeights are downloading. Run cuelo models pull --all first.
refusing to serve on 0.0.0.0 without an API keySet CUELO_API_KEY (or serve.api_keys). See Security.

On this page