How to brainstorm code changes with voice (for Claude Code or Codex sessions)
A phone-friendly way to talk through changes, ask for a plan, and keep voice providers on a tight privacy leash.
- CLI
- 0.1.0
- Preview ref
- f36aa45
I like typing when I’m writing real instructions.
But when I’m on my phone, voice is the only thing that reliably works for me in the “I have 30 seconds” moments:
- “Stop what you’re doing and explain what you changed.”
- “Before you keep going, ask me if you’re about to touch migrations.”
- “Summarize the plan and give me a 3-step checklist.”
I want to brainstorm and steer a real coding session with voice — but I don’t want the “voice layer” to become a second, disconnected conversation.
I’ve tried a few approaches (dictation, notes, just typing).
Happier is one of the options I use because voice can stay anchored to a real target session, and you get explicit privacy controls for what the voice provider can see.
TL;DR
- Decide what you actually want:
- voice brainstorming (talk first), or
- voice dictation (send everything straight into the session)
- Set up Happier on the machine that owns your repo/workspace, and connect your phone.
- In Settings → Voice, pick a voice mode:
- Happier Voice (fastest setup)
- Use my ElevenLabs (your account + billing)
- Local voice (device/self-hosted endpoints/on-device speech)
- Tighten privacy: start by turning off sharing for file paths and tool arguments.
- When you start talking, remember there are two threads:
- the hidden voice conversation (what you said + what it replied)
- the target session (the Claude Code/Codex session you actually want to act on)
The problem
When I’m away from my keyboard, I still want to keep a coding session moving — but I don’t want to send half-baked instructions just because typing on a phone is slow.
Voice solves that for “quick steering” and “quick clarification”.
The part that’s easy to miss: voice providers are external services. If you don’t look at the privacy toggles, you can accidentally share more than you intended.
What I tried first (and where I bounced off)
- Just typing on my phone: works for short messages, but I end up skipping nuance.
- Voice dictation straight into the message box: fast, but it’s easy to send the wrong thing (and it tends to dump every utterance into the session).
- Calling myself / leaving notes: weirdly effective, but not connected to the session.
- Happier voice: works when I want the speed of speech, while still keeping a real target session and real controls.
If you’re new to Happier (what it is, and where to get it)
If you haven’t seen Happier before: it’s an open-source companion app (mobile/web/desktop) for AI coding agents like Claude Code, Codex, and OpenCode.
The workflow here is: keep your repo and agent runtime on the machine that owns the workspace, and use Happier from your phone to monitor, steer, and continue the session.
Get set up:
- How to run Happier from your phone
- GitHub: https://github.com/happier-dev/happier
- Install/download: https://github.com/happier-dev/happier#how-it-works
- Discord (community + support): https://discord.gg/W6Pb8KuHfg
A workflow that works (step-by-step)
1) Pick a voice mode that matches your constraints
Open Settings → Voice.
Happier supports four voice modes:
- Off
- Happier Voice (managed realtime ElevenLabs)
- Use my ElevenLabs (realtime ElevenLabs with your API key + agent)
- Local voice (configurable STT/TTS pipeline)
A decision rule that matches how I actually use it:
- If I want the least setup: I start with Happier Voice.
- If I already have an ElevenLabs setup I care about: I use Use my ElevenLabs.
- If I want device speech, self-hosted endpoints, or on-device speech: I use Local voice.
2) Tighten privacy before you use voice “for real”
In voice settings, Happier has privacy controls for what voice providers can see.
The defaults are conservative, but the big two that matter to me are:
- Share file paths (off by default)
- Share tool arguments (off by default)
If you’re using voice to steer real coding work, those two are the difference between:
- “voice provider can help, but can’t see the guts of my filesystem/tool calls”
- “voice provider can see a lot more than I wanted it to”
If you want stricter privacy, also disable:
- Share recent messages
3) Understand the “hidden voice conversation” vs the “target session”
This was the most important mental model for me.
When voice is active, Happier keeps a hidden voice conversation.
That conversation exists so you can:
- review what it heard
- read voice replies as text
- continue by typing
- inspect what it announced
But voice still needs a real session to act on.
That session is the target session.
If voice feels like it’s “talking, but not doing anything”, it’s usually because:
- you’re looking at the voice conversation transcript, not the target session, or
- voice is pointed at the wrong target session
4) Decide whether you want “Direct to session” or “Agent” (Local voice)
If you’re using Local voice, you’ll see two conversation modes:
- Direct to session: transcribe speech and send it straight into the target session.
- Agent: talk to a dedicated voice agent first, then let it act on the target session.
The way I choose:
- I use Direct to session when I basically want dictation.
- I use Agent mode when I want the voice layer to ask questions, summarize, or double-check before it does something.
5) (Optional) Avoid “surprise working directories” with voice home vs project root
Local voice agent mode can start in different working directories depending on where you launch it:
- start voice globally (sidebar/global surface) → starts from voice home
- start voice from a session → starts in that session’s project root
If you want the safest/most neutral behavior, you can enable Stay in voice home so voice doesn’t jump into project roots automatically.
If you do want it to work like a real coding colleague inside the repo, starting from the session surface (project root) is usually what you want.
Why this works (and what breaks)
Voice works well in Happier because it’s not just “speech-to-text” — it’s a layer that can still point at a real session and act on it.
The two places it breaks in practice:
- Privacy mismatch: you intended “high level” but enabled sharing that exposes too much.
- Targeting mismatch: voice is active, but it’s pointed at the wrong session (or you’re reading the voice transcript instead of the target).
Common mistakes
- Turning voice on before checking privacy → do a quick pass through “Share recent messages / file paths / tool arguments” first.
- Expecting voice to replace the session → voice has its own conversation state; you still need a target session.
- Using Direct-to-session when you wanted the voice layer to be cautious → switch to Agent mode for “ask first” behavior.
FAQ
Does voice replace my Claude Code/Codex session?
No. Voice keeps its own hidden conversation state, and it targets a real session when it needs to act.
Which mode should I start with?
If you want a default: start with Happier Voice, then move to Local voice only if you have specific privacy/self-hosting/device constraints.