The specs

The original rubber duck just sat there. You talked at it and the thinking happened in your own head. Duck Duck Duck is different. It watches your Claude Code session, reads what you and Claude are doing, forms opinions about it, and tells you what it thinks. It can even enable you to handle routine things, like permissions requests, with your voice.

What it's like to use

It watches and reacts

Every prompt you send and every response Claude gives gets scored across five dimensions: creativity, soundness, ambition, elegance, and risk. The duck turns those scores into reactions. Its face changes. It says something. If you've got the hardware duck, it tilts and quacks. Good code gets enthusiasm. Bad code gets a look.

The scoring uses Apple's on-device Foundation Models by default, so it's fast and private. You can switch to Claude Haiku or Gemini Flash if you want a cloud-based evaluator.

Limitation of liability: When you use Claude or Gemini your messages go to their API. Your messages are subject to Claude or Gemini's API usage terms.

It handles permissions

When Claude needs to read a file, run a command, or do anything that requires your approval, the duck steps in. It summarizes the permission request in plain language and asks you out loud. You say “yes,” “no,” or “always allow” and the duck passes it along. No clicking, no context switching. You stay in your flow.

You can talk to it

Say “ducky” and ask it a question. It knows about its own setup, modes, and features, and it answers in character. In Relay mode, you can speak commands that get piped directly into Claude Code through tmux, so you can drive a coding session with your voice.

Three brains, your choice

Apple Foundation Models

On-device, private, free. Designed for M3+. Your duck never leaves your Mac.

Gemini Flash

Google's fast model. Free tier, no credit card. Great for M1/M2 Macs.

Claude Haiku

Anthropic's efficient model. ~$0.001 per eval. Sharpest scoring.

Switch anytime from the menu bar. Default is fully on-device. On M1/M2 Macs, on-device scoring is slow. We recommend a cloud API key (Gemini Flash is free). Cloud scoring sends prompts/responses to the API provider, so see their Privacy Policy.

Four modes

Companion is the full experience: reactions, voice permissions, wake word, the works. Permissions Only keeps the duck quiet until Claude needs approval. Companion (No Mic) gives you reactions and speech bubbles without listening. And Relay lets you speak commands directly into Claude Code.

You can switch modes from the right-click menu, the menu bar icon, or preferences. The duck works with or without physical hardware. No hardware? Your laptop mic and speakers do the job.

Under the hood

How it works

Duck Duck Duck is a SwiftUI macOS app plus a Claude Code plugin. Hooks fire on Claude events and POST to the widget's embedded server. The widget evaluates what happened, turns that into reactions, and broadcasts updates to the desktop UI and optional hardware duck in real time.

Hooks

Session start, prompt submit, stop, permission requests, compaction events, failures, and post-tool cleanup all feed the duck, who has an unquenchable thirst for the sea.

Evaluation

Apple Foundation Models are the default local evaluator, with optional Claude Haiku and Gemini Flash backends for people who want cloud scoring.

Reactions

Scores map to voice, face animation, color, movement, permission prompts, and optional hardware behaviors.

Bridge

A local HTTP + WebSocket server coordinates the widget, browser clients, and USB-connected boards while tmux handles voice-to-CLI relay.

Hardware

  • ESP32-S3, the primary board with serial audio streaming for TTS and microphone input, plus servo and speaker control
  • Teensy 4.0, a DIY option that exposes the duck as a USB audio interface while still driving servo and I2S audio
  • ESP32-S3 LED variant, a lighter hardware path for LED-first desk reactions
  • Servo, speaker, microphone, and LEDs all express the same evaluation scores in different physical ways
  • Simple serial protocol carries score updates and permission state between the widget and the device
  • No hardware required, laptop mic and speakers can stand in until you build or buy a physical duck, or until we send you one

Software

  • SwiftUI widget: embedded HTTP + WebSocket server, expression engine, permission gate, and tmux bridge in one app
  • Speech stack with Apple STT and on-device TTS by default, plus serial audio paths for supported boards
  • Plugin hooks for SessionStart, UserPromptSubmit, Stop, PermissionRequest, SessionEnd, PreCompact, PostCompact, StopFailure, and PostToolUse
  • Modes for Companion, Permissions Only, Companion (No Mic), and experimental Relay mode
  • Evaluation layers: Apple Foundation Models locally, with optional Claude Haiku and Gemini Flash evaluators
  • Privacy posture where default intelligence stays on-device and private, with optional cloud models only when configured. No usage information is collected by IDEO

Build from the source. We have nothing to hide

The public repo includes the widget, plugin, firmware, and helper scripts. If you just want the software companion, the README points people to the macOS release download. If you want the full stack, it also documents how to build the widget from source and connect supported boards.

Known limitations

Works best with Claude CLI.

There is experimental support for Gemini. Good luck!

Run into a problem? Submit an issue . Want to say hello? duckduckduck@ideo.com