Cosmo Realtime SDK
Production

Recording & privacy

What a session persists, how to turn it off, and how to build consent in.

By default, sessions record: audio, video frames, transcripts, and tool events are persisted server-side as session artifacts. That default is right for debugging, quality review, and the session debugging workflow — and wrong for some products. The switch is per run.

Turning recording off

async with agent.start(store_recording=False) as session:
    ...
const session = await agent.start({ storeRecording: false });
var config = SessionConfig()
config.storeRecording = false

store_recording: false means the server writes nothing: no audio, no transcript artifact, no tool-event log. It is not redaction-after-the-fact — the artifacts are never created. The live session is unaffected; events still stream to your client, and anything you capture there is yours to govern.

store_recordingServer persists
unset / trueaudio, video frames, transcript, tool events
falsenothing

Choosing a policy

  • Record (default) while you're building: recorded sessions are the raw material for debugging, prompt iteration, and evals.
  • Don't record when the content is inherently sensitive — healthcare intake, financial details, screen share of arbitrary user desktops — or when your own privacy policy promises it.
  • Decide per run, not per product. store_recording is a session param precisely so the same agent can record a QA test call and not record a real patient call.

Recording consent is a product obligation the SDK can't discharge for you, but the primitives line up:

  • Put the disclosure where the conversation starts: in your UI before connecting, or in the agent's greeting for phone calls ("this call may be recorded…"). Call-recording disclosure is a legal requirement in many jurisdictions — treat the greeting as the compliance surface for outbound dials.
  • If consent is asked inside the conversation, start the session with store_recording: false and re-start recording-enabled (carrying context via resume_session_id) once the user agrees — the declined path never had artifacts to delete.
  • Session state and transcripts you mirror client-side are outside store_recording's scope; apply your own retention policy to anything you copy out of the event stream.

What the client keeps regardless

store_recording governs the server. Your client still receives transcripts, tool events, and (if you consume them) raw audio frames in real time. If your product must guarantee "nothing retained anywhere", audit your own handlers too: don't log transcript events, don't buffer agent_audio() to disk, and scrub analytics payloads.

On this page