Gamechat – Voice-Based Agent Orchestrator Built in Rust

zdql1 pts1 comments

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...

gamechat install claude codex realtime agent

Related Articles