GitHub - zdql/gamechat: Voice Orchestrator for monitoring concurrent agent workflows · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
zdql
gamechat
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>5 Commits<br>5 Commits
.github/workflows
.github/workflows
src
src
.gitignore
.gitignore
Cargo.lock
Cargo.lock
Cargo.toml
Cargo.toml
LICENSE
LICENSE
README.md
README.md
install.sh
install.sh
View all files
Repository files navigation
gamechat
Voice-driven supervisor for Claude Code and Codex. You talk to a low-latency Realtime model in your terminal; whenever you ask for real work, it dispatches a job to a background coding agent and narrates the result when it lands.
🎤 ──▶ OpenAI Realtime (gpt-realtime-2) ──▶ 🔈<br>│ tool: delegate_to_orchestrator(slug, intent, …)<br>│ tool: sub_agent_progress(slug)<br>OrchestratorJobManager<br>│ one worker task per slug, ordered within a slug,<br>│ concurrent across slugs<br>┌───────┴────────┐<br>`claude -p` `codex exec`<br>(Claude Code) (Codex CLI)
Architecture
There is exactly one realtime voice loop and an async worker pool for background agent jobs. Those are the two halves of the binary.
The voice loop (src/voice_loop/)
A single tokio::select! loop that owns:
a microphone stream (cpal, mono, resampled to 24 kHz)
a websocket to the OpenAI Realtime API
a playback buffer (cpal again, jittered)
a channel of job-completion events from the worker pool
On startup it sends a session.update that registers two tools — delegate_to_orchestrator and sub_agent_progress — and tells the model to use stable snake_case slugs for each background task. Reusing a slug continues the same orchestrator conversation; new slugs spawn parallel work. Run gamechat --print-realtime-config to inspect the exact JSON.
The worker pool (src/orchestrator/)
OrchestratorJobManager runs in its own task. Behind it:
One worker per slug. All sends for refactor_docs go through the same OrchestratorSession, in order. Different slugs run concurrently in independent sessions.
A ProgressStore. Workers stream snippets into a slug-keyed buffer; sub_agent_progress queries it with built-in rate limiting (~5 s) so the model can't poll itself into a loop.
A Provider / Session trait with two backends:
claude — spawns claude -p per send. First send uses --name ; subsequent sends use --resume . Claude Code's server-side prompt cache does the heavy lifting; we don't maintain our own.
codex — spawns codex exec per send and tails its output back through the same SendResult shape.
Adding a third backend means implementing Provider and wiring one match arm in main.rs. The voice loop doesn't know which agent is on the other end.
Install
curl -fsSL https://raw.githubusercontent.com/zdql/gamechat/main/install.sh | sh
Pulls the latest prebuilt binary for your platform from GitHub Releases and drops it in ~/.local/bin/gamechat. Supported platforms: darwin-arm64, darwin-x86_64, linux-x86_64, linux-arm64.
The installer also prompts (hidden input) for your OPENAI_API_KEY and stores it at ~/.config/gamechat/env (mode 0600). gamechat reads that file automatically from any working directory, so gamechat --realtime just works after install. Skip the prompt with GAMECHAT_NO_PROMPT=1.
If ~/.local/bin isn't on your PATH, the installer prints the line to add to your shell profile.
Pin a version or change install location:
GAMECHAT_VERSION=v0.1.0 INSTALL_DIR=/usr/local/bin \<br>sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdql/gamechat/main/install.sh)"
From source
git clone https://github.com/zdql/gamechat.git && cd gamechat<br>cargo install --path .
Requires Rust 1.87+. Linux additionally needs libasound2-dev (and pkg-config) for cpal.
Prerequisites
OPENAI_API_KEY — required. The Realtime API runs on OpenAI regardless of which background agent you use.
A coding agent on your $PATH:
Claude Code (claude) — default backend.
Codex CLI (codex) — pass --provider codex.
Microphone + speakers.
gamechat looks for env...