HeyDucky — your AI rubber duck that actually talks back. Voice-controlled debugging assistant for your terminal.
Project description
HeyDucky 🦆
Your AI rubber duck that actually talks back.
HeyDucky is a voice-controlled AI debugging assistant that runs in your terminal. Press Space, describe your problem out loud, and the AI reads your code, sets breakpoints, steps through execution, and explains what it finds — all hands-free.
Think rubber duck debugging, except the duck is an AI that understands your codebase, controls your debugger, and talks back.
Built with Textual for the TUI, Claude for the AI, and faster-whisper for local speech-to-text.
Install
macOS (recommended):
curl -fsSL https://raw.githubusercontent.com/IdanG7/HeyDucky/master/install.sh | bash
Homebrew:
brew tap IdanG7/heyducky https://github.com/IdanG7/HeyDucky
brew install heyducky
pipx (if you already have portaudio):
pipx install heyducky[tts]
From source:
git clone https://github.com/IdanG7/HeyDucky.git
cd TalkToMe
pip install -e ".[tts,dev]"
Quick Start
# First-time setup — configure your Anthropic API key
ducky --setup
# Talk to the duck about a project
ducky --project /path/to/your/code
# Debug a Python script
ducky script.py
# Just launch in the current directory
ducky
How It Works
HeyDucky combines three things that make debugging less painful:
- Voice input — explain your bug out loud instead of typing. Local Whisper transcription keeps your audio private.
- AI understanding — Claude reads your code, understands the context, and drives the debugger for you.
- Real debugger control — not just chat. HeyDucky sets breakpoints, steps through code, inspects variables, and evaluates expressions via the Debug Adapter Protocol (DAP).
Usage
Chat Mode
ducky
ducky --project ~/myapp
Press Space to talk. The AI can read files, browse the project tree, run git commands, and discuss your code. No debugger attached — this is pure conversation with full tool access.
Debug Mode
ducky script.py
ducky --project ~/myapp src/main.py
Launches the script under a debug adapter. The AI can set breakpoints, step through code, inspect variables, and evaluate expressions — all via voice.
Remote Debug
# On the remote machine:
debugpy --listen 0.0.0.0:5678 --wait-for-client script.py
# On your machine:
ducky --attach 192.168.1.50:5678 --language python \
--path-map /home/user/project=/Users/me/project
Connects to a debug adapter running on another machine. Use --path-map to map remote paths to local source.
Supported languages: Python, C/C++, Go, Rust
Keyboard Shortcuts
| Key | Action |
|---|---|
Space |
Push-to-talk (hold or toggle) |
1-5 |
Switch tabs (Source, Chat, Variables, Stack, Output) |
t |
Toggle focus: file tree / source |
o |
Open a different project |
h |
Browse chat history |
s |
Settings |
e |
Export session to markdown |
m |
Mute/unmute TTS |
F5 |
Continue execution |
F10 |
Step over |
F11 |
Step into |
q |
Quit |
Configuration
Config lives at ~/.config/ducky/config.toml. Run ducky --setup to edit interactively, or edit the file directly:
[ai]
provider = "claude"
model = "claude-sonnet-4-5-20250929"
api_key = "sk-ant-..."
compaction_enabled = true
[voice]
whisper_model = "base.en" # tiny.en | base.en | small.en
sample_rate = 16000
silence_threshold = 0.02
silence_duration = 1.5
[tts]
enabled = false
api_key = "" # ElevenLabs API key
voice_id = "UgBBYS2sOqTuMpoF3BR0"
[appearance]
theme = "textual-dark"
You can also set ANTHROPIC_API_KEY as an environment variable instead of putting it in the config file.
Requirements
- macOS (primary platform)
- Python 3.10+
- portaudio (
brew install portaudio) — for microphone access - Anthropic API key — for Claude
- Microphone — for voice input
Optional:
- ElevenLabs API key — for text-to-speech (the duck talks back!)
- debugpy (included) — for Python debugging
- lldb-dap — for C/C++ debugging
- delve — for Go debugging
- codelldb — for Rust debugging
Development
git clone https://github.com/IdanG7/HeyDucky.git
cd TalkToMe
make install # editable install with dev deps
make test # run tests
make lint # run ruff
make check # lint + format check + tests
See CONTRIBUTING.md for full development setup and guidelines.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file heyducky-0.1.0.tar.gz.
File metadata
- Download URL: heyducky-0.1.0.tar.gz
- Upload date:
- Size: 59.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
268906cd4ce9f98e917f958ba70a05c2c257152270d4d71b3fd62f884281f51e
|
|
| MD5 |
c57f65d40f1811f5134cb8c6d396c775
|
|
| BLAKE2b-256 |
54ed0bff0181c6e4b3e0ef15fae9d9bf5d4536f85be022c2168e71017a5285d6
|
Provenance
The following attestation bundles were made for heyducky-0.1.0.tar.gz:
Publisher:
publish.yml on IdanG7/HeyDucky
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
heyducky-0.1.0.tar.gz -
Subject digest:
268906cd4ce9f98e917f958ba70a05c2c257152270d4d71b3fd62f884281f51e - Sigstore transparency entry: 985792695
- Sigstore integration time:
-
Permalink:
IdanG7/HeyDucky@cdb8b697c5ebe16c6bda939358c01be942543de4 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/IdanG7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cdb8b697c5ebe16c6bda939358c01be942543de4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file heyducky-0.1.0-py3-none-any.whl.
File metadata
- Download URL: heyducky-0.1.0-py3-none-any.whl
- Upload date:
- Size: 79.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
194b3793824c2dd2a9f086d09492b9ab16d7b97c9d56f9228010a0322fafa417
|
|
| MD5 |
cb46d0691817c7d8606b502af213b634
|
|
| BLAKE2b-256 |
54080ce42e8d0f6eab83b6b394d5e46dc6c903103826294b8ba34c4308769b9b
|
Provenance
The following attestation bundles were made for heyducky-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on IdanG7/HeyDucky
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
heyducky-0.1.0-py3-none-any.whl -
Subject digest:
194b3793824c2dd2a9f086d09492b9ab16d7b97c9d56f9228010a0322fafa417 - Sigstore transparency entry: 985792720
- Sigstore integration time:
-
Permalink:
IdanG7/HeyDucky@cdb8b697c5ebe16c6bda939358c01be942543de4 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/IdanG7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cdb8b697c5ebe16c6bda939358c01be942543de4 -
Trigger Event:
release
-
Statement type: