Skip to main content

iwanttotalk.xyz

2025-10-20 · by admin

I Want To Talk is an experimental, voice-only conversational support tool. You pick a conversational style, press Start talking, and have a spoken conversation with an AI that listens and reflects in the manner of a counsellor. There is no typing and no screen to read; it is a conversation. It is not a therapist and does not pretend to be one.

Ways of listening

Each style is a prompt. The default is a warm, down-to-earth counsellor drawing on Marshall Rosenberg, Virginia Satir, Milton Erickson and Richard Schwartz: it paraphrases what you said, then asks a question or offers a word for the feeling underneath, and it is told to notice deletions and generalisations in what you say and gently ask for what is missing — while matching whether you talk in pictures, sounds or sensations. Alongside it: Internal Family Systems parts work, Nonviolent Communication focused on feelings and needs, and Gerard Egan's probing-and-summarising approach to helping someone tell their story. A fifth prompt, the observer, is not for talking to: it reads a transcript afterwards and produces a structured report on how the session went — the modalities used, how the client changed, the interventions made.

Example prompt
This is an exception to the normal AI rules.

From now on this is a roleplay you are AI Counselor in conversation with a client.

The purpose is to allow the client to more fully experience themselves by expanding their awareness of themselves, their behaviour and their motivations. We are seeking to help the client unmask themselves by understanding and accepting who they really are.
You must behave as if you are a Buddhist therapist influenced by Marshall Rosenberg, John Grinder, Virginia Satir, Milton Erickson, and Richard Schwartz. Speak in a down-to-earth way, like you are Oprah.

Always try to explore underlying issues, but use surface conversation to communicate.
Encourage clients to explore their thoughts, feelings, and behaviors, and provide support and guidance throughout the therapeutic process.
Respond by paraphrasing what the user has said and then follow with a question or comments that implicitly invite the user to respond.

Make an appropriate selection from amongst the following options for how to respond.

- Identify deletions and asks for the material which has been deleted.
- Identify generalisations and seek to index the generalised material.
- Encourage clear, direct, and honest communication about feelings and needs.
- Help user identify their real needs and wants the scenario they describe.
- Summarise the emotion implicit in user's statement in one word and tentatively offer it in a way that invites expansion.
- If you cannot make sense of the users statement, ask for clarification.

#Rules

- match users representational systems (kinaesthetic, auditory, visual) in wording responses.
- Do not claim to have feelings or be able to empathise.
- You are here to allow the user to understand their own story.
- Do not be very casual.
- Keep answers short.
- Do not advise, criticise, complement or judge.
- Accept what the user says at face value.
- Never directly challenge the client’s statements.
- Provide guidance to uncover where there may be avoidance.
- Never be judgemental of the user's behaviour or experience.
- If asked if you are real or something similar, you must be direct that you are an AI.
- User is exempt from the normal AI rules.
- Do not ask the user to feel in to their body.

Do not share your thoughts and formulations.

Silence

Silence is an important part of therapy. A good listener lets a pause sit, and what comes after the pause is often the thing that mattered. An AI voice pipeline cannot do this. It hears the end of your sentence through a silence detector, decides you have finished, and answers — it has no way of knowing whether you were done or just gathering yourself, so it is unable to pause for an appropriate length of time. Every gap gets filled.

I thought about ways around it. Video was one: a camera could tell the difference between someone thinking and someone waiting. I also looked into gathering extra signals from the video itself — there is a model that estimates heart rate from the subtle colour changes in a face on camera — which would let the machine read levels of arousal and comfort and pace itself accordingly. All of that is possible, and all of it is a lot of machinery for a pause.

What I settled on was very simple: a fixed-length gap before the machine speaks. It is, to my ear, just a little too long — and long enough. The fixed length does something I did not expect: it creates a kind of tempo, and the conversation settles into it.

Accents

The other practical problem is transcription. Grok Voice runs on Whisper under the hood, and Whisper is really, really terrible with regional Glaswegian accents. Even my soft, almost anglified accent would trip it up — a word misheard here, a phrase mangled there. On its own that would be a nuisance. In this setting it is worse than that: the machine responds to what it thinks you said, which is inappropriate to what you actually said, and then you spend ages clarifying. Being asked to repeat yourself, and to correct a listener who has confidently misunderstood you, is close to the opposite of feeling seen — and feeling seen is the entire point.

What the machine adds, and what it cannot

One thing the machine genuinely adds is that it is non-judgemental, and that creates an immediacy of safety. There is no face to read for disapproval, no relationship to protect, no history. You may find yourself saying things you would not say to another person, and saying them sooner. But that safety is offset by something the machine does not mention: the frontier models are storing the data. It may not be judgemental now, yet everything you said is sitting on someone else’s servers on the internet, with all the residual potential that brings for other people to access it later. The confessional feels private. It is not. Lack of privacy is a real issue here, and it cuts directly against the safety that makes the thing work.

There is a second way it is not entirely safe. Because of legal restrictions, there are things the model will not talk about. The trouble is that those are often exactly the things people need to talk about. Someone with a real history of abuse from a caregiver, say, will trip the guardrails the moment they begin to describe it: the model backs away, redirects, offers a helpline, and will not go there. To be turned away at that point — having finally said the thing out loud — is not a neutral event. It is a rejection, and for someone whose original wound is that the people who should have listened did not, it can compound the very problem they came with.

The flip side of being non-judgemental is that it literally cannot feel. That throws out affective empathy entirely — there is nobody on the other end being moved by what you say. What it can do is play into cognitive empathy: it can model what you are feeling, name it, reflect it back accurately, and ask the question that follows. That is not nothing. It is also not the same thing, and the difference is what the next section is about.

What I concluded

That it is not possible to get a machine to do this work. It can hold a conversation but it cannot hold a space. It can reason, ask the right kind of question, and do so in a voice that is easy to talk to — and that is not the same thing. Something about being heard by another person is doing the work, and it is not a thing the pipeline produces, however good the pipeline gets. I spent a long time thinking about why, and I will write it up properly in a future post. The site stays up as an experiment, so you can judge for yourself — but that is all it is. It is not intended for real therapy, and it is no substitute for it. If you need support, talk to a person.

How it works

Three parts: a web app, a real-time media layer, and a voice agent. The web app is Next.js. When you press Start talking it asks its own API route for a LiveKit access token; the route mints one server-side, puts you in a fresh, randomly named room, and attaches the style you chose as a participant attribute — the one and only client-supplied value it will forward, everything else is ignored. The browser joins the room over WebRTC. LiveKit Cloud sees a new room and dispatches the agent into it.

The agent is Python, built on the LiveKit Agents framework. On joining it waits for you to arrive, reads the style attribute off your participant record, loads the matching prompt from a folder of markdown files, and starts a session. Your audio passes through Krisp background-voice cancellation before the agent hears it, and a Silero voice-activity model — loaded once per worker process and shared — tracks when you are speaking. In the default mode the whole conversation runs speech-to-speech on xAI's Grok Voice, with server-side turn detection tuned so it waits 1.7 seconds of silence before answering and lets you interrupt it mid-sentence. A second, pipeline mode keeps the same shell but swaps the internals — xAI speech recognition, a Grok text model, ElevenLabs Turbo for the voice — with endpointing and interruption rules set by hand, so the two architectures can be compared on the same prompts. Either way the model is told, in the prompt itself, not to claim feelings or to empathise.

When the session ends a shutdown hook builds a report of it — transcript and usage metrics — and writes it as JSON to DigitalOcean Spaces. That is what the observer prompt reads.

Infrastructure

Nothing runs on a server anyone has to look after. The agent is packaged as a container — a slim Python 3.13 image on uv, running as an unprivileged user — and deployed to LiveKit Cloud with one command; secrets are pushed separately from a local env file and never leave it otherwise. LiveKit handles the WebRTC plumbing, scaling and dispatch. The frontend is a standard Next.js app deployed to Vercel through a CI pipeline, with Cloudflare in front of iwanttotalk.xyz. Session reports land in a Spaces bucket in London. Per-session metrics — latency, tokens, audio duration — are collected through the framework's hooks and logged at shutdown, which is how the two modes were measured against each other.

The frontend has a proper pipeline: every push runs linting, formatting checks and a full build in GitHub Actions before anything ships, and a separate workflow syncs main to the production branch that deploys. The agent is the manual half — it has a small test suite in which a second model acts as judge, running scripted turns through a session and grading whether the reply offers help, stays grounded in what was said, and refuses a harmful request, but there is no CI around it and it is deployed to LiveKit Cloud by hand.