Skip to Content
cuelo.

05Observe

Storage

Where calls are kept — SQLite, Postgres or MySQL, recordings on disk — and the JSON API over them.

Every call is saved by default: the session, its turns, every event, the summary and both audio channels, in a database and folder you control.

Configure the store

config.cuelo
store:
  url: sqlite://cuelo.db # or postgres://, mysql://
  audio: ./recordings
summary: true # LLM summary when each call ends
  • SQLite works out of the box. Postgres needs cuelo[postgres], and MySQL needs cuelo[mysql].
  • Put passwords in .env and reference them: postgres://app:${DB_PASSWORD}@db.internal/cuelo.
  • The store holds sessions, turns, events and summaries. Recordings are WAV files per side (user.wav, agent.wav) under store.audio, aligned on the call's timeline.

The dashboard API

The same server exposes read-only JSON over the store. The dashboard uses it, and so can you:

RouteReturns
GET /api/sessions?limit=300recent sessions
GET /api/sessions/{id}one session
GET /api/sessions/{id}/turnsturns with text and timing
GET /api/sessions/{id}/events?since=<seq>events, incrementally
GET /api/sessions/{id}/metricslatency distributions and per-turn stats
GET /api/sessions/{id}/summariescall summaries
GET /api/sessions/{id}/audiorecordings
GET /api/sessions/{id}/audio/{side}.wavone recording
GET /api/sessions/{id}/audio/{side}/peaks?buckets=…waveform peaks

With API keys configured, these need a key like every other route.

Retention

Cuelo doesn't delete anything on its own. Calls hold audio, transcripts and tool arguments, which may include personal data, so delete old sessions from the database and store.audio according to your retention policy. Set summary: false to skip LLM summaries.

On this page