Talk it through. Answering back is optional.

Duckwork listens while you think out loud, from anywhere on your Mac. In its default Silent mode nothing answers back. Press a key when you want a response.

brew install --cask azettl/tap/duckwork

"...so the retry loop fires, but counter never seems to move..."

"...wait, is it re-declared inside the loop? Let me look..."

no response, the session keeps listening

"...the retry counter never moves, even though the loop clearly runs three times..."

"Sounds like the counter is being re-declared inside the loop instead of incremented."

"...can you check retry.py and tell me if counter is scoped wrong?"

MCP → read_file(retry.py)
"Confirmed. Line 14 declares counter = 0 inside the loop. Move it above the while to fix it."
On-device · Listening ⌥⌘E or ⌥⌘F to escalate
Works with
Ollama Anthropic API OpenAI-compatible APIs MCP tools

Explaining a problem out loud is often how you solve it, well before anyone answers. Duckwork gives you room for that part and waits.

The quiet is the point.
How it works

One always-on path. One optional branch.

Listening runs until you stop it. A response happens when you press an escalation key, or when you pause in a mode that answers.

Hotkey
start
Continuous
listening
Hotkey
stop
Transcript
saved locally
Response branch · an escalation hotkey in any mode, or a pause in Echo and Full Assistant
Escalate
(hotkey)
Echo or
Full response
MCP tool call
(Full only)
Spoken reply
(optional)

After a response, the session returns to listening in whatever mode it was in. Escalating from Silent gives you a single answer and drops straight back. The same actions work on a saved transcript later, from your history, including a full session summary.

Modes

Three depths, one session

Switch mid-thought. Every session starts in Silent.

Silent

Nothing is sent anywhere and nothing answers. Pause for as long as you want. Silence stays silent.

default mode

Echo

Paraphrases what you just said in a sentence or two, so you can hear your own thinking back. It reflects and stays out of the way.

⌥⌘E or a pause

Full Assistant

A full answer, using any MCP tools you have connected, spoken aloud if you want. Then it returns to listening.

⌥⌘F or a pause
Models

Bring your own model

Run it fully offline, point it at your own API, or connect Claude directly. Switch provider or voice whenever you want.

Any backend
Ollama for fully local models, any OpenAI-compatible endpoint, or Anthropic directly. Switch anytime.
Any voice
Pick from every voice already installed on your Mac. Duckwork speaks each one exactly as it ships.
Your tools
Connect MCP servers and Full Assistant mode can use them to act on what you are working on.
Stays on your Mac by default
Speech recognition runs on-device by default. Session history is stored locally. No telemetry.