Metadata-Version: 2.4
Name: voice-vibecoder
Version: 2.29.2
Summary: Olaf The Vibecoder — a voice-controlled coding assistant using OpenAI Realtime API + Claude Code
Project-URL: Homepage, https://github.com/snokam/voice-vibecoder
Project-URL: Repository, https://github.com/snokam/voice-vibecoder
Project-URL: Issues, https://github.com/snokam/voice-vibecoder/issues
Author-email: Morten Jansrud <morten@jansrud.com>
License-Expression: MIT
License-File: LICENSE
Keywords: assistant,claude,coding,openai,realtime,tui,vibecoder,voice
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Requires-Python: >=3.10
Requires-Dist: claude-agent-sdk>=0.1.30
Requires-Dist: cryptography>=42.0
Requires-Dist: numpy>=1.24
Requires-Dist: platformdirs>=4.0
Requires-Dist: pyobjc-framework-avfoundation>=10.0; sys_platform == 'darwin'
Requires-Dist: rich>=13.0
Requires-Dist: sounddevice>=0.4
Requires-Dist: textual>=0.50
Requires-Dist: websockets>=12
Description-Content-Type: text/markdown

# 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

```bash
# 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
- Multi-language (English, Norwegian, Swedish) — spoken and transcribed

## Requirements

- Python 3.10+
- An OpenAI API key with Realtime API access
- [PortAudio](http://www.portaudio.com/) for microphone input (`brew install portaudio` on macOS)
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI installed

## Usage as a Library

Embed the voice coding screen in your own Textual app:

```python
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
