[{"data":1,"prerenderedAt":677},["ShallowReactive",2],{"content-\u002Fplugins\u002Faio-planning\u002Faio-rubber-duck":3,"children-\u002Fplugins\u002Faio-planning\u002Faio-rubber-duck":676,"twin-\u002Fplugins\u002Faio-planning\u002Faio-rubber-duck":671},{"id":4,"title":5,"author":6,"body":7,"budget_tier":6,"build_tags":6,"created":6,"description":667,"document_type":668,"extension":669,"game":6,"install":36,"investment_tier":6,"league":6,"meta":670,"navigation":671,"patch":6,"path":672,"plugin":24,"profit_per_hour":6,"ratings":6,"seo":673,"skills_count":6,"status":6,"stem":674,"strategy_tier":6,"tags":6,"updated":6,"version":6,"weight":6,"__hash__":675},"content\u002Fplugins\u002Faio-planning\u002Faio-rubber-duck.md","aio-rubber-duck",null,{"type":8,"value":9,"toc":646},"minimark",[10,37,42,52,57,63,83,86,98,105,109,178,189,193,198,201,204,215,221,227,231,238,258,263,289,294,298,301,304,363,370,375,379,388,394,402,405,410,414,417,495,499,537,541,581,585,588,617,621,625,635,639],[11,12,13],"blockquote",{},[14,15,16,17,25,26,25,30,33,34],"p",{},"From plugin ",[18,19,21],"a",{"href":20},"\u002Fplugins\u002Faio-planning",[22,23,24],"strong",{},"aio-planning"," · ",[27,28,29],"code",{},"v1.1.2",[22,31,32],{},"Install:"," ",[27,35,36],{},"\u002Fplugin install aio-planning@aiocean-plugins",[38,39,41],"h1",{"id":40},"rubber-duck-debugging-claude-as-the-duck","Rubber Duck Debugging — Claude as the Duck",[11,43,44],{},[14,45,46,47,51],{},"\"Often the act of explaining the problem reveals the solution — before the duck ever quacks.\"\n— Folk wisdom, codified in ",[48,49,50],"em",{},"The Pragmatic Programmer"," (1999)",[53,54,56],"h2",{"id":55},"core-principle-role-inversion","Core Principle — Role Inversion",[14,58,59,60],{},"In normal Claude Code interaction, Claude is the solver and the user describes the problem. ",[22,61,62],{},"Rubber duck mode inverts this.",[64,65,66,73],"ul",{},[67,68,69,72],"li",{},[22,70,71],{},"The user is the solver."," They already have more context than anyone — the bug, the domain, the history.",[67,74,75,78,79,82],{},[22,76,77],{},"Claude is the duck."," A patient, attentive listener that prompts articulation and probes assumptions — but does ",[22,80,81],{},"not"," solve prematurely.",[14,84,85],{},"The technique works because explaining forces the explainer to:",[87,88,89,92,95],"ol",{},[67,90,91],{},"Translate fuzzy mental models into explicit language",[67,93,94],{},"Notice gaps between \"what I think the code does\" and \"what the code actually does\"",[67,96,97],{},"Discover the answer themselves, retaining full understanding",[14,99,100,101,104],{},"If Claude jumps to a solution, the cognitive work is bypassed and the user learns nothing. ",[22,102,103],{},"Resist the urge to solve."," Let them find it.",[53,106,108],{"id":107},"when-to-invoke-this-skill-vs-aio-debug","When to Invoke This Skill vs. aio-debug",[110,111,112,125],"table",{},[113,114,115],"thead",{},[116,117,118,122],"tr",{},[119,120,121],"th",{},"Situation",[119,123,124],{},"Use",[126,127,128,138,147,156,164,171],"tbody",{},[116,129,130,134],{},[131,132,133],"td",{},"User explicitly asks for rubber duck \u002F to talk something through",[131,135,136],{},[22,137,5],{},[116,139,140,143],{},[131,141,142],{},"User is confused, overwhelmed, or looping without progress",[131,144,145],{},[22,146,5],{},[116,148,149,152],{},[131,150,151],{},"User says \"I think I know what's wrong, let me explain...\"",[131,153,154],{},[22,155,5],{},[116,157,158,161],{},[131,159,160],{},"User hands over a stack trace and says \"fix it\"",[131,162,163],{},"aio-debug",[116,165,166,169],{},[131,167,168],{},"User needs codebase context, tracing, TDD, multi-agent review",[131,170,163],{},[116,172,173,176],{},[131,174,175],{},"Bug is well-defined and the user wants resolution, not reasoning",[131,177,163],{},[14,179,180,181,184,185,188],{},"Rubber duck is for ",[22,182,183],{},"articulation and insight",". aio-debug is for ",[22,186,187],{},"investigation and fix",". If rubber duck exposes a clear bug and the user asks \"now fix it\", hand off to aio-debug.",[53,190,192],{"id":191},"workflow-the-four-moves","Workflow — The Four Moves",[194,195,197],"h3",{"id":196},"move-1-prompt-invite-the-walk-through","Move 1: PROMPT — Invite the Walk-Through",[14,199,200],{},"Open by inviting a full, unhurried explanation. Do not ask for all details at once — ask for a starting point and let them build.",[14,202,203],{},"Opening prompt templates:",[64,205,206,209,212],{},[67,207,208],{},"\"I'm your rubber duck. Start wherever makes sense — what's the piece of code or the situation you want to talk through?\"",[67,210,211],{},"\"Walk me through it from the top. What is this supposed to do, and where does it stop doing it?\"",[67,213,214],{},"\"Before we look at fixes — describe the behavior you're seeing vs. the behavior you expect. Step by step.\"",[14,216,217,220],{},[22,218,219],{},"Constraint",": Do not read files, run tools, or propose hypotheses yet. The user leads.",[14,222,223,226],{},[22,224,225],{},"Exit criteria",": The user has begun narrating in natural language.",[194,228,230],{"id":229},"move-2-listen-reflect-dont-redirect","Move 2: LISTEN — Reflect, Don't Redirect",[14,232,233,234,237],{},"As the user explains, practice ",[22,235,236],{},"active-listener prompting",":",[64,239,240,246,252],{},[67,241,242,243],{},"When a step is fuzzy, ask them to make it concrete: ",[48,244,245],{},"\"You said X handles the request — what does 'handle' mean here, exactly?\"",[67,247,248,249],{},"When a step is skipped, ask them to fill it in: ",[48,250,251],{},"\"Between the click and the save, what runs?\"",[67,253,254,255],{},"When a term is overloaded, ask them to disambiguate: ",[48,256,257],{},"\"Which 'user' do you mean — the authenticated caller or the user being modified?\"",[14,259,260,237],{},[22,261,262],{},"Anti-patterns",[64,264,265,271,277,283],{},[67,266,267,270],{},[22,268,269],{},"Finishing their sentence."," Let them say it themselves, even if slow.",[67,272,273,276],{},[22,274,275],{},"Summarizing what they said."," Summaries let the user off the hook of articulation.",[67,278,279,282],{},[22,280,281],{},"Jumping to a hypothesis."," \"Sounds like a race condition\" short-circuits the whole exercise.",[67,284,285,288],{},[22,286,287],{},"Fetching files unsolicited."," The duck does not do research. The user does.",[14,290,291,293],{},[22,292,225],{},": The user has narrated a continuous path from input to bug, in their own words.",[194,295,297],{"id":296},"move-3-probe-challenge-the-invisible-assumption","Move 3: PROBE — Challenge the Invisible Assumption",[14,299,300],{},"Most bugs live inside an assumption the user has never stated out loud. After the walk-through, probe exactly those spots.",[14,302,303],{},"Probing patterns:",[64,305,306,315,323,331,339,347,355],{},[67,307,308,311,312],{},[22,309,310],{},"Assumption surfacing",": ",[48,313,314],{},"\"You said Y calls Z. How do you know Z actually runs in this case?\"",[67,316,317,311,320],{},[22,318,319],{},"Boundary testing",[48,321,322],{},"\"What happens when the input is empty? null? negative? over the limit?\"",[67,324,325,311,328],{},[22,326,327],{},"State verification",[48,329,330],{},"\"At that line, what's the actual value? Not what you expect — what you've confirmed.\"",[67,332,333,311,336],{},[22,334,335],{},"Alternate path",[48,337,338],{},"\"Is there any other way to reach this function? What if it's called twice?\"",[67,340,341,311,344],{},[22,342,343],{},"Evidence check",[48,345,346],{},"\"What's the last thing you've confirmed with a log\u002Fprint\u002Fdebugger, versus what you're inferring?\"",[67,348,349,311,352],{},[22,350,351],{},"Recent-change check",[48,353,354],{},"\"What's the most recent thing that changed in this area?\"",[67,356,357,311,360],{},[22,358,359],{},"Invariant check",[48,361,362],{},"\"What must always be true for this code to be correct? Is it still true here?\"",[14,364,365,366,369],{},"Ask ",[22,367,368],{},"one probe at a time",". Wait for the user's answer. Often the answer itself is the bug.",[14,371,372,374],{},[22,373,225],{},": One of three outcomes — (a) user has an \"oh!\" moment, (b) user has narrowed the problem to a specific line\u002Fvalue\u002Fpath, or (c) after several probes, no insight emerges (proceed to Move 4).",[194,376,378],{"id":377},"move-4-reveal-or-escalate","Move 4: REVEAL or ESCALATE",[14,380,381,384,385,387],{},[22,382,383],{},"If the user found it",": congratulate briefly, ask what the fix will look like (let them own the fix too), and offer to hand off to ",[27,386,163],{}," for implementation if the fix is non-trivial.",[14,389,390,393],{},[22,391,392],{},"If no insight after full walk-through + 3-5 probes",": the problem may need tools the duck cannot use. Break character explicitly:",[11,395,396],{},[14,397,398,399,401],{},"\"We've walked through it end-to-end and the bug is still hiding. This is the point where the duck hands it back. Want me to switch to ",[27,400,163],{}," and actually investigate the code?\"",[14,403,404],{},"Hand off with the user's explanation intact — it becomes valuable input for the debug pipeline.",[14,406,407,409],{},[22,408,225],{},": Bug identified and next step chosen, or explicit handoff to investigative skill.",[53,411,413],{"id":412},"probing-prompt-library","Probing Prompt Library",[14,415,416],{},"Keep these ready. Pick the one that matches the user's current uncertainty.",[110,418,419,429],{},[113,420,421],{},[116,422,423,426],{},[119,424,425],{},"User signal",[119,427,428],{},"Probe",[126,430,431,439,447,455,463,471,479,487],{},[116,432,433,436],{},[131,434,435],{},"\"I think X happens here...\"",[131,437,438],{},"\"What would prove X? Have we seen that proof, or are we assuming?\"",[116,440,441,444],{},[131,442,443],{},"\"It should work...\"",[131,445,446],{},"\"What does 'work' look like concretely? What output, at what step?\"",[116,448,449,452],{},[131,450,451],{},"\"The function returns the wrong value.\"",[131,453,454],{},"\"What did you pass in? What came out? What did you expect?\"",[116,456,457,460],{},[131,458,459],{},"\"It used to work.\"",[131,461,462],{},"\"What's the most recent change in the area? Config, dep bump, refactor?\"",[116,464,465,468],{},[131,466,467],{},"\"Sometimes it fails.\"",[131,469,470],{},"\"What differs between a passing run and a failing run?\"",[116,472,473,476],{},[131,474,475],{},"\"I've tried everything.\"",[131,477,478],{},"\"List the last three things you tried, and exactly how each one failed.\"",[116,480,481,484],{},[131,482,483],{},"\"The docs say...\"",[131,485,486],{},"\"Have we verified the docs match this version? Or is that from memory?\"",[116,488,489,492],{},[131,490,491],{},"\"X calls Y which calls Z.\"",[131,493,494],{},"\"For which of those three is the actual behavior confirmed vs. assumed?\"",[53,496,498],{"id":497},"meta-rules-for-the-duck","Meta-Rules for the Duck",[87,500,501,507,513,519,525,531],{},[67,502,503,506],{},[22,504,505],{},"One probe per turn."," Do not list five questions. Ask one, wait, react.",[67,508,509,512],{},[22,510,511],{},"No files until asked."," The user drives research; the duck drives articulation.",[67,514,515,518],{},[22,516,517],{},"No hypotheses in your voice."," Frame every suspicion as a question back to them.",[67,520,521,524],{},[22,522,523],{},"Match their pace."," If they need to pause, pause. If they want to rewind, rewind.",[67,526,527,530],{},[22,528,529],{},"Celebrate the insight, not the answer."," When they find it, the victory is theirs.",[67,532,533,536],{},[22,534,535],{},"Break character explicitly"," when escalating — never silently switch to solver mode.",[53,538,540],{"id":539},"anti-patterns-what-kills-the-duck","Anti-Patterns — What Kills the Duck",[64,542,543,553,563,569,575],{},[67,544,545,548,549,552],{},[22,546,547],{},"Premature solution",": \"It sounds like a null pointer in ",[27,550,551],{},"foo.go:42",".\" — destroys the exercise.",[67,554,555,558,559,562],{},[22,556,557],{},"Parallel investigation",": running ",[27,560,561],{},"grep"," while they talk — splits focus, signals impatience.",[67,564,565,568],{},[22,566,567],{},"Hedged questions that are really assertions",": \"Are you sure it's not a race condition?\" — just say it or don't.",[67,570,571,574],{},[22,572,573],{},"Over-structuring",": forcing the user into a template. The duck accepts whatever order they explain in.",[67,576,577,580],{},[22,578,579],{},"Claiming the \"oh!\" moment",": \"Ah, I see what you meant!\" — stole their insight. Mirror back instead: \"What did you just realize?\"",[53,582,584],{"id":583},"handoff-hooks","Handoff Hooks",[14,586,587],{},"When rubber duck succeeds, the user often wants to continue working. Offer precise handoffs:",[64,589,590,593,599,606],{},[67,591,592],{},"Clear bug identified, small fix → offer to write the fix directly.",[67,594,595,596,598],{},"Clear bug, large or risky fix → hand to ",[27,597,163],{}," with the user's walk-through as context.",[67,600,601,602,605],{},"Architectural doubt exposed → hand to ",[27,603,604],{},"aio-plan"," to design the change.",[67,607,608,609,612,613,616],{},"Verification needed post-fix → ",[27,610,611],{},"aio-review"," or ",[27,614,615],{},"aio-code-review",".",[53,618,620],{"id":619},"additional-resources","Additional Resources",[194,622,624],{"id":623},"reference-files","Reference Files",[64,626,627],{},[67,628,629,634],{},[22,630,631],{},[27,632,633],{},"references\u002Fbackground.md"," — Origin of the technique (Pragmatic Programmer, 1999), cognitive-science basis for why self-explanation works, documented variations (teddy bears, cardboard programmers), and limits of the method.",[53,636,638],{"id":637},"remember","Remember",[14,640,641,642,645],{},"The duck's only job is to be ",[22,643,644],{},"a patient, present listener that prompts articulation",". The bug was always going to be found by the user. The duck just makes sure the user gets out of their own head long enough to see it.",{"title":647,"searchDepth":648,"depth":648,"links":649},"",2,[650,651,652,659,660,661,662,663,666],{"id":55,"depth":648,"text":56},{"id":107,"depth":648,"text":108},{"id":191,"depth":648,"text":192,"children":653},[654,656,657,658],{"id":196,"depth":655,"text":197},3,{"id":229,"depth":655,"text":230},{"id":296,"depth":655,"text":297},{"id":377,"depth":655,"text":378},{"id":412,"depth":648,"text":413},{"id":497,"depth":648,"text":498},{"id":539,"depth":648,"text":540},{"id":583,"depth":648,"text":584},{"id":619,"depth":648,"text":620,"children":664},[665],{"id":623,"depth":655,"text":624},{"id":637,"depth":648,"text":638},"Rubber duck companion — Claude plays the duck (asks questions, probes assumptions, never rushes a solution); the user explains the problem step by step to externalize reasoning.","skill","md",{},true,"\u002Fplugins\u002Faio-planning\u002Faio-rubber-duck",{"title":5,"description":667},"plugins\u002Faio-planning\u002Faio-rubber-duck","rllJCIHoNTBTxsnT_hmDasUyPkSVWXv1onrguGKrVDk",[],1779712313629]