{
  "markdown": "<!--\n  Copyright (c) 2026 Moin Khan\n  MIT License\n\n  https://github.com/mo-inkhan/rubber-duck\n-->\n\n# 🦆 rubber-duck\n\n> *A Claude Code plugin that helps you think - not by giving answers, but by asking the right questions.*\n\nMost AI tools race to give you the answer. `rubber-duck` does something different: it slows down, asks one question at a time, and helps you reason through the problem yourself.\n\nThis is the Socratic method, packaged as a Claude Code plugin.\n\n---\n\n## Why this exists\n\nThere's a well-known debugging technique where you explain your problem out loud to a rubber duck. Just the act of articulating it — slowly, carefully — often surfaces the answer before the duck says a word.\n\nThe problem: a rubber duck can't ask follow-up questions.\n\n`rubber-duck` gives the duck a voice. When you're stuck, confused, or just want to understand something deeply instead of copy-pasting a fix, this plugin shifts Claude into a guided thinking partner that holds the line even when you beg for the answer.\n\n**For developers who want to actually learn. For seniors mentoring juniors. For anyone building intuition, not just shipping code.**\n\n---\n\n## Install\n\n**Via Claude Code marketplace (recommended):**\n\n```\n/plugin marketplace add https://github.com/mo-inkhan/rubber-duck\n/plugin install rubber-duck@duck\n```\n\n**Via git:**\n\n```bash\ngit clone https://github.com/mo-inkhan/rubber-duck\ncd rubber-duck/plugin\nbash install.sh\n```\n\n---\n\n## Commands\n\n| Command | What it does |\n|---|---|\n| `/duck [problem]` | Enter Rubber Duck mode. Describe your problem or just start talking. |\n| `/duck:design [topic]` | Design mode — think through architecture and tradeoffs. |\n| `/duck:status` | See a structured summary of what you've figured out so far. |\n| `/duck:reveal` | Break glass. Exit Rubber Duck mode and get the full answer. |\n| `/duck:sessions` | View past session history — streaks, peek log, and recent activity. |\n\n---\n\n## Usage\n\n### Basic debugging session\n\n```\n> /duck My API returns a 500 but only when the user has a free plan\n\n🦆 Okay, I'm in Rubber Duck mode — I'll ask questions instead of solving things for you.\n   Use /duck:reveal whenever you want me to step out of this.\n\n   Let's start here: what do you know about what's different between a free plan\n   user and a paid plan user at the point this request hits your controller?\n```\n\n### Architecture thinking\n\n```\n> /duck:design I need to add real-time notifications to my Laravel app\n\n🦆 Good problem to think through carefully. First question:\n   When you say \"real-time\" — what's the actual tolerance here? Would\n   a 2-second delay be acceptable, or does this need to feel instant?\n```\n\n### Checking progress\n\n```\n> /duck:status\n\n## 🦆 Duck Session Summary\n\nProblem: API returning 500 only for free plan users\n\nWhat you've figured out:\n- The error is in the billing middleware, not the controller\n- Free plan users have a null subscription_id\n\nStill open:\n- Whether the middleware is checking for null or just falsy\n\nYou're currently: one step away from identifying the exact null check\n```\n\n### When you're truly stuck\n\n```\n> /duck:reveal\n\nYou got pretty far on your own — you correctly identified the billing\nmiddleware and traced it to the subscription_id field. The key thing\nyou were one step from: the check on line 47 uses `!$sub` which treats\nboth null and an expired subscription the same way...\n```\n\n---\n\n## Streak tracking\n\nAfter every session, `rubber-duck` logs whether you used `/duck:reveal` and maintains a running streak of sessions where you solved the problem without peeking.\n\n```\n🦆✅  Rubber Duck session complete.\n   You solved it without peeking!\n   No-peek streak: 7 sessions 🔥\n   All-time: 14/17 solved without peeking\n```\n\nSession logs are stored locally at `~/.rubber-duck/sessions/`.\n\n---\n\n## The philosophy\n\nThe rubber duck technique works because **articulation forces clarity**. When you have to explain something, you expose your own assumptions.\n\nThis plugin doesn't try to make Claude smarter. It tries to make *you* think harder — by making Claude ask better questions instead of giving faster answers.\n\nThe escape hatch (`/duck:reveal`) exists because sometimes you genuinely need the answer. But it's there when *you* choose it, not when Claude gives up on you.\n\n---\n\n## Contributing\n\nPRs welcome. Especially interested in:\n\n- New question toolkits for specific problem types (SQL debugging, regex, async/await confusion)\n- A `/duck:learn` mode that teaches concepts after you've reasoned to them yourself\n- Export session logs to markdown for personal knowledge bases\n\n---\n\n## Updating\n\n**Via git:**\n```bash\ncd rubber-duck/plugin\ngit pull\nbash install.sh\n```\n\nRe-running the installer is safe — it overwrites plugin files and skips hook registration if already present.\n\n---\n\n## License\n\nMIT\n",
  "bytes": 4807,
  "sha": "c846df922863a187bf5af02e7adb9718d57c571e2f30964120cafec0569e460d",
  "repo_slug": "mo-inkhan/rubber-duck",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_mo_inkhan_rubber_duck_rubber_duck_443ae190/readme"
}