The voice operator is the Gemini Live session you're actually talking to. It listens to your microphone, replies out loud, and reads a live transcript of what's happening on your laptop. It is an operator, not a coder: it never writes code or runs commands itself, it relays your requests to Claude Code and tells you what happened.
In hosted zero-config mode, this same operator runs on Voxa's cloud instead of your laptop, using the cloud's Gemini key. The tool set is identical either way; tool calls are just sent back to the laptop over the connection instead of executing locally.
These are the tools Gemini can call while you talk. The orchestrator on the laptop is what actually carries them out.
Sessions and folders
| Tool | What it does |
|---|
start_claude_session | Starts (or relaunches) a Claude session in a given folder. |
set_working_dir | Switches the active session to a different folder. |
list_dirs | Lists subfolders so you can pick a working directory by voice. |
make_dir | Creates a new folder (and any missing parents) and starts a session there. |
new_session | Starts an additional Claude session in a folder while keeping the current one running. |
list_sessions | Lists all of Voxa's currently driven sessions with their status. |
switch_session | Moves the voice line to a different running session; both keep running. |
Driving Claude
| Tool | What it does |
|---|
send_to_claude | Sends your request to the active session verbatim; the result is spoken back once it's ready. |
queue_task | Adds another instruction to run right after the current one finishes. |
get_claude_status | Reports idle, working, finished, or errored, checked against the live pane. |
stop_claude | Interrupts the current task without losing the session or its context. |
read_session | Reads back recent lines or a search match from the attached session's transcript. |
Terminals
| Tool | What it does |
|---|
list_terminals | Lists Claude terminals already open on your machine, with status and a short hint of what they're doing. |
attach_terminal | Attaches to and starts driving one of those open terminals. |
Approvals
| Tool | What it does |
|---|
resolve_approval | Actuates a pending permission prompt or a dangerous-command/git card from your spoken decision. |
Git
| Tool | What it does |
|---|
git_status | Reads back the branch and a summary of changes, read-only. |
git_diff | Reads back a condensed diff against HEAD, read-only. |
git_commit | Stages and commits, but only after you approve a confirmation card. |
git_push | Pushes to the configured upstream, but only after approval, and never force-pushed. |
Misc
| Tool | What it does |
|---|
take_screenshot | Captures the laptop's main display and sends it to the phone. |
get_cost | Reports token usage and dollar cost for the session, read-only. |
Guardrails
- Loop guard: dispatch tools (
send_to_claude, queue_task) only fire after a genuine new turn from you. Gemini can't chain tool calls into a loop that dispatches work on its own.
- One task at a time: a busy guard blocks a second dispatch while Claude is still working on the last one, and that busy state is re-verified against the live terminal pane so it can't get stuck.
- Dangerous commands become approval cards: if what you dictate matches a recognized destructive pattern (recursive delete, force-push, dropping a database, wiping a disk, and similar), it's turned into a card that says "Careful: this [does the risky thing]. Run it?" instead of being dispatched straight away. Decline runs nothing; approving re-sends the same request with confirmation attached.
- Git writes always need approval:
git_commit and git_push never run immediately. They build a confirmation card naming the project and branch, and once you approve, the actual git command runs inside the visible Claude session, not a hidden subprocess, so you watch it happen. git_push never forces.
How it talks with you
- Barge-in is on by default: you can interrupt the operator mid-sentence and it'll stop and listen, using Gemini's own voice activity detection. Setting
VOXA_BARGE_IN=0 restores strict half-duplex turn-taking.
- It speaks your language, including Arabic, while still sending your request to Claude in the language you actually used.
- It relays Claude's questions: while Claude is working, its terminal output streams to the phone as text, and if Claude asks something on screen, the operator notices and repeats the question out loud instead of leaving you waiting on a silent line.