Sleeptalk

Get started

Just a model

Make a voice call directly to a model, with one API key or a local Ollama, and no agent framework.

Choose the model-only path

Run sleeptalk and choose Just a model, the last entry under "Which agent harness do you want to talk to?". To switch an existing profile, run sleeptalk settings. This path is useful for conversation and for checking the speech pipeline before adding an agent.

The model-only adapter has no tools, file access, or web search. It cannot read your repository or run a command. Select an agent adapter when you need those capabilities.

Configure a provider

  1. Select OpenRouter (the default), OpenAI, Anthropic, Ollama, or another OpenAI-compatible endpoint.
  2. Select or enter a model. The name is prefilled per vendor; for Ollama, setup lists the models you have pulled.
  3. Enter the model API key in the masked prompt. Setup checks it before storing it. Ollama asks for no key, and another loopback server can leave it empty.
  4. Configure your speech provider and call destination.

The key goes into the private credential store, scoped to the exact endpoint it was checked against. The profile holds only a reference. Switching vendors asks for a new key. OPENAI_API_KEY and other keys in the environment are ignored.

Remote endpoints require HTTPS. Plain HTTP is allowed only on localhost or 127.0.0.1. OAuth and subscription logins are not supported by this adapter.

One key for the model and for speech

The model key is separate from the speech key, but one account can serve both. If the model runs on OpenRouter, Venice, Groq, or Together, sleeptalk host ensure can find that key in Sleeptalk's credential store and set voice up from it. See Speech providers.

Use a local model

With Ollama installed, start its server and pull a model, then select Just a model → Ollama:

Ollama
ollama serve
ollama pull llama3.2
sleeptalk

The endpoint is http://127.0.0.1:11434/v1, and nothing secret is stored. If Ollama is not running during setup, the step says how to start it and lets you type the model name anyway. A model you have not pulled fails the first call with a 404 naming it.

A local model does not make the whole call offline when cloud speech is selected. Pair it with local speech and a same-machine call destination for an offline setup.

Set it up through an agent

An agent collects the model key on a private page, then creates the profile with the returned credential reference:

Private model-key entry
sleeptalk host auth start --request-id model-001 \
  --mode api_key --protocol openai-completions \
  --base-url https://openrouter.ai/api/v1 --model anthropic/claude-opus-5 \
  --user-browser-local

sleeptalk host auth status --request-id model-001 reads the request without returning the key. Then pass --agent model with --agent-auth-mode, --agent-auth-protocol, --agent-auth-url, and --agent-credential-ref to sleeptalk host input start or host input link for the speech setup. sleeptalk host probe-runtime --agent model with the same options reports ready when the stored key answers for the selected model.

VendorProtocolEndpoint
OpenRouteropenai-completionshttps://openrouter.ai/api/v1
OpenAIopenai-completionshttps://api.openai.com/v1
Anthropicanthropic-messageshttps://api.anthropic.com
Ollamaopenai-completionshttp://127.0.0.1:11434/v1 (no key)
Otheropenai-completionsany HTTPS base URL, or http:// on loopback

Conversation and tuning

Each turn streams one chat request, and Sleeptalk speaks sentences as they arrive. History lasts for the running process. history_turns limits the prior exchanges replayed on each turn; 0 disables cross-turn history. Barge-in aborts the active request and records the spoken portion as the model's response.

Optional model profile settings
[agent.options]
max_tokens = 1024
history_turns = 20
connect_timeout_s = 10
idle_timeout_s = 60

The idle timeout measures silence from the model endpoint before the turn fails. It is separate from the VAD silence window.

Errors

  • rejected the credential (HTTP 401/403): enter the key again in sleeptalk settings.
  • no such model or path (HTTP 404): the model name is wrong for that vendor, or the base URL is missing its /v1.
  • sent nothing for 60s: the endpoint stalled. Raise idle_timeout_s for slow models or check the vendor's status page.

See the model-only guide for the answers-file fields and the full profile shape.