Skip to content

Configuration

Path Holds
$XDG_CONFIG_HOME/ailoud/config.yaml settings (default ~/.config/ailoud)
$XDG_CONFIG_HOME/ailoud/templates/ summary templates
$XDG_DATA_HOME/ailoud/ailoud.db the library (default ~/.local/share/ailoud)
$XDG_DATA_HOME/ailoud/media/ AILoud's copies of your audio

ailoud setup writes the config file for you. Edit it by hand any time.

A full config file

stt:
  provider: whisper-cpp
  whisperCpp:
    binary: whisper-cli
    model: ~/.local/share/ailoud/models/ggml-small.bin
    vadBinary: whisper-vad-speech-segments
    vadModel: ~/.local/share/ailoud/models/ggml-silero-v5.1.2.bin
  diarization:
    binary: sherpa-onnx-offline-speaker-diarization
    segmentationModel: ~/.local/share/ailoud/models/sherpa-pyannote-segmentation-3-0.onnx
    embeddingModel: ~/.local/share/ailoud/models/3dspeaker_campplus.onnx
    threshold: 0.6
    threads: 4

llm:
  provider: claude-cli
  claudeCli:
    binary: claude
    model: sonnet
    contextTokens: 200000

Language model

Pick one provider. The others are ignored.

llm:
  provider: llama-cpp
  llamaCpp:
    binary: llama-cli
    model: ~/.local/share/ailoud/models/qwen2.5-3b-instruct-q4_k_m.gguf
    contextTokens: 8192
    maxOutputTokens: 1024
    threads: 4
llm:
  provider: claude-cli
  claudeCli:
    binary: claude
    model: sonnet
    contextTokens: 200000

Uses your Claude Code sign-in. No API key.

llm:
  provider: anthropic
  anthropic:
    baseUrl: https://api.anthropic.com/v1
    model: claude-sonnet-5
    contextTokens: 200000
    maxOutputTokens: 2048

Needs ANTHROPIC_API_KEY.

llm:
  provider: openai-compatible
  openaiCompatible:
    baseUrl: https://api.openai.com/v1
    model: gpt-4o-mini
    contextTokens: 128000
    maxOutputTokens: 1024

Needs OPENAI_API_KEY. Point baseUrl at Ollama or LM Studio for a local server, which needs no key.

Environment variables

Variable Used for
AILOUD_LLM_API_KEY any provider; wins over the vendor variable
ANTHROPIC_API_KEY anthropic
OPENAI_API_KEY openai-compatible
XDG_CONFIG_HOME where the config lives
XDG_DATA_HOME where the library lives
PAGER which pager long output uses; empty disables it

Keys are read from the environment only. They are never written to config.yaml and never logged. A variable that is set but empty counts as unset.

Choosing a model

setup asks the provider which models your key can use:

ailoud setup --llm claude-api

Answer up front instead:

ailoud setup --llm claude-api --llm-model claude-opus-5 --yes

Context size is not adjusted for you

No provider reports a model's context window, so switching to a small-context model needs contextTokens set by hand. The symptom is a context error from the API on a long transcript.

When doctor is unhappy

ailoud doctor
ailoud doctor --fix

doctor reports every binary, model, path and permission with a fix for each.

ok    ffmpeg                         ffmpeg version 9.0.1
FAIL  whisper model                  not configured
      fix: Set "stt.whisperCpp.model" in ~/.config/ailoud/config.yaml ...
n/a   language model                 not configured

Three states, not two:

State Means
ok ready
FAIL AILoud cannot run until this is fixed
n/a an opt-in feature is off; everything else still works

n/a covers --multilingual, --diarize and summaries. They never make doctor fail.

Exit codes: 0 ok, 1 failure, 2 usage, 3 environment.

Concurrency

setup and doctor --fix take a lock on the data directory, so two runs cannot download into the same path at once. A stale lock left by a crash is taken over automatically.