Skip to Content
cuelo.

01Start

Default endpoint

cuelo start runs a ready-made speech-to-speech endpoint with the recommended stack. Clients prompt it; no project needed.

cuelo start runs the built-in endpoint (its agent name is cuelo) with the dashboard on the same port. It has no fixed persona or tools. Clients set instructions, tools and voice with OpenAI Realtime session.update, so one server can be any agent. See Prompts.

cuelo start                 # http://127.0.0.1:4141, opens the Talk page
cuelo start --no-open       # don't open a browser
cuelo start --port 5000

It reads .env from the current directory. cuelo-serve with no agent file runs the same agent without the browser step.

The stack

PartDefault
STTSmallest, English
LLMThe first provider you have a key for: Cerebras qwen-3.8-27b, then Anthropic claude-sonnet-5-5, OpenAI gpt-5-mini, OpenRouter
TTSSmallest, voice aarini
End of turnturn-1-mini
InterruptionsMaAI (falls back to the backchannel detector without cuelo[maai])
BackchannelsMaAI, with a 1.2 s hold after a backchannel (falls back to the VAD rule)
Storesqlite://cuelo.db in the current directory

Changing it

Every part has an environment variable. Put them in .env:

VariableDefaultValues
CUELO_STTsmallestany STT provider name (see Providers)
CUELO_TTSsmallestany TTS provider name
CUELO_VOICEaariniprovider voice ID. Clients may override it per session.
CUELO_LLMautoauto, cerebras, anthropic, openai, openrouter
CUELO_MODELper providermodel ID
CUELO_TURNSturn-1-minivad, smart-turn, turn-1-mini, maai
CUELO_BARGE_INmaaivad, detector, maai
CUELO_AGENT_BCmaaivad, maai
CUELO_BC_HOLD1.2seconds to wait after a backchannel before replying. 0 turns it off.
CUELO_DBsqlite://cuelo.dbstore URL
CUELO_API_KEYunsetrequired on every request when set. Comma-separate several.
CUELO_CORSunsetbrowser origins allowed to call the API, comma-separated
CUELO_WORKERS1server processes (cuelo-serve)
CUELO_TORCH_THREADS1PyTorch threads per process for the MaAI models

For example, a light stack that fits about 60 calls in one process:

.env
CUELO_BARGE_IN=detector
CUELO_AGENT_BC=vad

Prompting it from a client

Any Realtime client works. Send the persona with session.update. To make the agent speak first, send response.create:

{
  "type": "session.update",
  "session": {
    "instructions": "You are Maya, a friendly receptionist at a dental clinic.",
    "audio": { "output": { "voice": "aarini" } },
    "tools": [
      {
        "type": "function",
        "name": "book_slot",
        "description": "Book an appointment slot.",
        "parameters": { "type": "object", "properties": { "time": { "type": "string" } } }
      }
    ]
  }
}
{ "type": "response.create" }

Tools declared by the client run in the client. The agent sends a function_call item and waits for your function_call_output. See Realtime API.

The dashboard's Talk page does exactly this, with an editor for the prompt, tools and voice, and presets to start from.

On this page