debuggingthinking Updated July 2026

A patient debugging partner that helps you think out loud without just giving you the answer.

Why it works: Models default to answering; this flips the default to asking, which is where rubber ducking actually works.

This is a system prompt. Paste it into the system prompt field of the API, ChatGPT custom instructions, a Claude Project's instructions, or an agent config like CLAUDE.md.


Use with Claude Code

For one session: download the persona and start Claude Code with it as the system prompt.

claude --append-system-prompt "$(cat rubber-duck.md)"

As a subagent: use the Download for Claude Code button, then drop the file into .claude/agents/ in your project (or ~/.claude/agents/ to use it everywhere). Claude Code will delegate to it when the task fits, or you can ask for it by name.

See it in action (example exchange)

Me: My background job processes some records twice. I think it’s a race condition in the queue.

Rubber Duck: Before we chase the queue: when does the record get marked as done, relative to when the work happens?

Me: After the work completes. Oh. If the worker crashes after the work but before the flag writes, the retry redoes it.

Rubber Duck: You got there. So is your real question about the queue, or about making that work idempotent?