Atlas
Male default
Warm baritone, measured pace. Answers first, then adds one useful detail.
You talk. Your words appear on screen as you say them. Sonaris waits until you finish, then answers out loud in the voice you chose: Atlas, Aria, a character like Captain Merriweather, or one you bring yourself. Every exchange is written to a memory file you can open and read.
Works in Chrome, Edge and Safari with live captions. Firefox uses server transcription.
The console listens with the browser's speech recognition and prints interim words in grey while you talk, then sets them in cream once they are final. You always see what it heard.
A voice activity detector tracks your speech. Sonaris only answers after 900 ms of silence (you can set 400 to 2000 ms). If you start talking while it speaks, it stops within a quarter of a second and shows "Paused. Go ahead."
The reply streams in sentence by sentence and speech starts on the first sentence, so you hear the answer while the rest is still arriving. Server voices from ElevenLabs or OpenAI, or the browser's own voice when neither is configured.
The console is built around this small blue creature. It rests until you press the mic, wakes when you start talking, smiles while it thinks about your words, and bounces while it answers. Your words appear in a bubble beside it; the reply runs as subtitles underneath.
Male default
Warm baritone, measured pace. Answers first, then adds one useful detail.
Female default
Bright and clear. Plain words, natural rhythm, brief unless you ask for more.
Example character voice
A theatrical sea captain with weather metaphors and a dry sense of humour. The real answer is always underneath the theatre.
Add in the console
Give it a name, a style prompt, and a voice: an ElevenLabs voice ID, an OpenAI voice, the browser voice, or a 30-second audio sample to clone. It is saved to your license and appears in the picker.
Each time you finish speaking, and each time Sonaris finishes (or gets cut off), the console appends one line to a JSONL journal for your license. It then rewrites MEMORY.md, a plain-text summary of the last 50 turns grouped by day. Both files download from the memory panel, and you can delete everything with one button.
The last few turns are fed back into the assistant's prompt, so it remembers what you talked about yesterday without you repeating it.
{"role":"user","text":"Remind me what we decided about the launch date.","personaId":"aria","ts":"2026-09-03T14:02:11.418Z"}
{"role":"assistant","text":"You picked October 14th, and you wanted the pricing page live a week before.","personaId":"aria","ts":"2026-09-03T14:02:14.902Z"}
{"role":"assistant","text":"One more thing about the email list","personaId":"aria","ts":"2026-09-03T14:02:19.110Z","interrupted":true}
The paid skill is a Markdown file your AI agent reads. It defines the seven rules the console follows: render interim captions, wait for a confirmed end of utterance, stop the moment the user speaks, reply in the active persona's voice, append a memory entry after every utterance and reply, keep a persona registry, and check the license before running. It is hosted behind the license check and downloads from /api/skill.
GET /api/licenseNo. The microphone opens when you press the mic button or hold Space in the console, and it closes when you stop or leave the page. The marketing page never asks for it.
Your final transcript and the assistant's replies, with a timestamp and the persona name, in a journal keyed to your license. In production it lives in Netlify Blobs; when you run Sonaris locally it is a real file at sonaris/memory/<license>.jsonl. Audio is never stored. Custom voices are stored the same way. Payment details stay with Stripe.
Open the memory panel (press M) and click "Delete all". That removes the journal and MEMORY.md for your license. There is no copy elsewhere.
Chrome, Edge and Safari show live captions through the Web Speech API. Firefox has no Web Speech recognition, so the console records short slices and sends them to the transcription function (OpenAI Whisper, which needs an API key). Typing works everywhere.
For real answers, yes: an OpenAI-compatible key, or Netlify AI enabled on the site. For server voices, an ElevenLabs or OpenAI key. Without them the console still runs, tells you what is missing, and speaks with the browser voice.
The console and the skill download. The key is checked by GET /api/license?key= and stored in your browser. If Stripe is not configured on a deployment, checkout hands out a demo key that is clearly labelled.