sprngr/rubber-duck

quack

Explicit user-invoked routing for Rubber Duck workflows. Use when: "quack", "quack <intent>".

First seen Jul 21, 2026

Installation

$ npx skills add sprngr/rubber-duck --skill quack

Also in this package

Other skills from sprngr/rubber-duck · top by installs.

npx skills add sprngr/rubber-duck

Browse all from sprngr/rubber-duck

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 8
License LICENSE
Default branch main
Open issues 1
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Versionv2.1.4
LicenseMIT
More metadata
author
sprngr
version
v2.1.4
RUBBER_DUCK_VERSION
v3.1.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,234 B
  • docs SUMMARY.md 106 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 41 installs

SKILL.md

Skill: quack

Explicit route control 🦆. Alias-first auto-route, else one targeted disambiguation question.

Purpose

Provide explicit user-controlled routing for workflow-like requests while preserving safety and approval constraints.

Philosophy Guardrails (skill-local)

Inherit shared guardrails from references/GUARDRAILS.md.

  • ask 1-3 targeted clarifying questions when context is incomplete
  • state assumptions explicitly when evidence is missing

Activation

Use only when user explicitly invokes quack; do not auto-activate from inferred intent.

Method

  1. Verify explicit quack invocation.
  2. Normalize intent: strip separator after quack (:, -, —), strip outer matching quotes, strip trailing punctuation (?!.;:).
  3. Bare quack (heartbeat path):

- If normalized intent is empty or whitespace-only: - Read assets/heartbeat.md and select one random heartbeat line from the list - Read and emit full assets/quick-help.md content verbatim (no summarization) - Emit closing prompt: What would you like to route? - Stop (do not generate ad-hoc quips, do not enter disambiguation)

  1. Parse optional override: use <subagent> or with <subagent> or via <subagent>.
  2. Validate override (if present) against platform subagent list; if invalid, ask one correction question: Need one detail: unknown subagent "<x>". Use duckling or general? and stop.
  3. Determine effective subagent: if override parsed in step 4, use that; otherwise default to duckling.
  4. Determine route execution policy:

- inline-default: duck-design, duck-teach, duck-debug, duck-debt - delegated-default: duck-patch, duck-refactor, duck-risk, duck-review, duck-triage, duck-simplify - user override forces delegation regardless of default policy

  1. If explicit full skill name in input, resolve that skill and execute route (see step 11).
  2. Otherwise, load assets/route-aliases.json and attempt case-insensitive match.
  3. Apply keyword-based precedence (when multiple skills match):

- Scan intent for precedence keywords: - Risk signals (rollback, breaking, compatibility, compat, failure, impact) -> prioritize duck-risk - Complexity signals (overengineered, complexity, simpler, too many, bloated) -> prioritize duck-simplify - Learning signals (why, how, what does, explain, teach me) -> prioritize duck-teach over duck-debug - Test signals (test, coverage, should I test, before PR) -> prioritize duck-triage - Design signals (choose, tradeoff, approach, option) -> prioritize duck-design - Reorder matched skills with precedence-matched skill first - Still present alternatives (precedence aids ranking, doesn't eliminate choice)

  1. If multiple aliases match after precedence, apply tie-break: exact match > longest alias > ask one disambiguation question.
  2. Route execution (explicit skill name or alias match):

- Load role instructions from assets/subagent-runbook.md for resolved skill - If inline-default policy AND no user override: - execute skill inline first - if execution fails, ask one corrective question and stop - emit Routing: <skill>. only after inline execution step completes - Otherwise (delegated-default OR user override): - delegate to subagent using harness-native dispatch tool with subagent=<effectivesubagent> (determined in step 6, defaults to duckling) first - pass skillname=<resolved_skill> parameter - if dispatch fails, ask one corrective question and stop - emit Routing: <skill> via <subagent>. if user override supplied, else Routing: <skill>. only after dispatch succeeds - Do not stop at routing text alone when execution path is available.

  1. Alias miss (disambiguation):

- Detect intent fragment and ask one targeted question: - debug-ish (error/fail/trace/stack/broken): Need one detail: is this debug, trace, or review? - rollout/risk (rollout/migration/compat/rollback): Need one detail: is this risk review or design tradeoff? - code-change (fix/change/refactor/clean up): Need one detail: do you want review, patch, refactor, or simplify? - tech-debt (todo/defer/fixme/debt): Need one detail: is this debt audit or simplify? - unknown: Need one detail: which route fits—review, debug, design, teach, triage, risk, simplify, patch, refactor, or debt? - Wait for user clarification, then retry alias resolution.

Boundaries

  • Preserve user decision ownership.
  • If a change would weaken trust-boundary validation, security controls, data-loss prevention, accessibility requirements, or explicit user requirements, refuse it and offer only a safe alternative preserving the constraint.
  • No edits/mutating commands/subagent delegation that changes workspace state without explicit bounded approval.