Olaf The Vibecoder
Talk to your codebase like a colleague. You speak an idea; Olaf holds a natural voice conversation while coding agents (Claude Code and friends) quietly build it on separate git branches. Ask to see the diff, say "merge it", and it lands on main — the whole loop, hands-free.
you: "lag en fil med et dikt i repoet"
olaf: "Klart, jeg setter i gang!" → agent builds on branch 'dikt'
you: "vis diff" → colorized diff in the TUI
you: "merge det inn i main"
olaf: "Ferdig! Dikt er merget inn i main."
Quick Start
# Install and run
uv tool install voice-vibecoder
vibecoder
On first launch, a setup wizard will guide you through connecting your OpenAI or Azure OpenAI account. Press s anytime to change settings.
Features
- Natural conversation — full-duplex voice: interrupt Olaf mid-sentence and it stops and listens (system echo cancellation on macOS, adaptive echo gate elsewhere). Short spoken answers, follows your language, resumes previous conversations where they left off
- Invisible agent orchestration — multi-instance Claude Code agents in separate git worktrees; Olaf narrates progress and delivers results
- Voice-driven git — show diffs, merge branches into main, clean up worktrees, all by voice; conflicts are reported, never half-merged
- Live file tree per agent (including files the agent just created) and GitHub-style diff view
- Session persistence across restarts
- Push-to-talk and voice activity detection modes
- OpenAI and Azure OpenAI realtime (GA voices marin/cedar), Gemini Live,
and GPT-Live on Azure Foundry (
provider: "gpt-live"): full-duplex voice with the tools running through Responses delegation. It reuses the Azure endpoint and key;VOICE_LIVE_DEPLOYMENT,VOICE_LIVE_DELEGATION_MODELandVOICE_LIVE_VOICEoverride the defaults (gpt-live-1,gpt-5.4,cedar) - Multi-language (English, Norwegian, Swedish) — spoken and transcribed
Requirements
- Python 3.10+
- An OpenAI API key with Realtime API access
- PortAudio for microphone input (
brew install portaudioon macOS) - Claude Code CLI installed
Usage as a Library
Embed the voice coding screen in your own Textual app:
from pathlib import Path
from voice_vibecoder import VoiceCodingApp, VoiceCodingScreen, VoiceConfig
# Standalone app with custom config
config = VoiceConfig(
app_name="My Coding Assistant",
config_dir=Path.home() / ".my-app",
data_dir=Path.home() / ".my-app",
log_dir=Path.home() / ".my-app" / "logs",
on_startup=lambda send: send("Hello from startup!"),
)
VoiceCodingApp(config=config).run()
# Or embed the screen in your own Textual app
screen = VoiceCodingScreen(repo_root, config=config)
Configuration
Settings are stored using platform-standard directories:
| Platform | Config | Data | Logs |
|---|---|---|---|
| macOS | ~/Library/Application Support/voice-vibecoder/ |
~/Library/Application Support/voice-vibecoder/ |
~/Library/Logs/voice-vibecoder/ |
| Linux | ~/.config/voice-vibecoder/ |
~/.local/share/voice-vibecoder/ |
~/.local/state/voice-vibecoder/log/ |
Git worktrees are created as siblings of your project directory (e.g., ../my-project-feat-login).
Keyboard Shortcuts
| Key | Action |
|---|---|
q / Esc |
Quit |
m |
Toggle mute |
s |
Settings |
c |
Cancel current Claude task |
Space |
Push-to-talk (when in PTT mode) |
License
MIT
Release files for voice-vibecoder 2.32.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| voice_vibecoder-2.32.0.tar.gz | 132.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voice_vibecoder-2.32.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 261.4 kB
Release files / voice_vibecoder-2.32.0.tar.gz
| Download URL | voice_vibecoder-2.32.0.tar.gz |
|---|---|
| Size | 132.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6a4eb74facc418c55f2d6d9a07337ab830d4685bc929004c145f8a8971fa07d5
|
|
BLAKE2b-256 checksum How to use checksums |
bf70b7415387f65711e71bcb65cb6308b0999f68a03ad8b3e086f6db697a9607
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / voice_vibecoder-2.32.0-py3-none-any.whl
| Download URL | voice_vibecoder-2.32.0-py3-none-any.whl |
|---|---|
| Size | 128.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
39b22ab3455ca62edf57c754efb98043729ead88f9e6c4e16e05c084f81604fc
|
|
BLAKE2b-256 checksum How to use checksums |
a6496220e51985d003a2951c2ed800bf969bb5568333a4e6c7526c0db06b6aa2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log