plugins/agent-teams/skills/parallel-debugging/SKILL.md
Debug complex issues using competing hypotheses with parallel investigation, evidence collection, and root cause arbitration. Use this skill when debugging bugs with multiple potential causes, performing root cause analysis, or organizing parallel investigation workflows.
npx skillsauth add acaprino/anvil-toolset parallel-debuggingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Framework for debugging complex issues using the Analysis of Competing Hypotheses (ACH) methodology with parallel agent investigation.
Generate hypotheses across 6 failure mode categories:
| Evidence Type | Strength | Example |
| ----------------- | -------- | --------------------------------------------------------------- |
| Direct | Strong | Code at file.ts:42 shows if (x > 0) should be if (x >= 0) |
| Correlational | Medium | Error rate increased after commit abc123 |
| Testimonial | Weak | "It works on my machine" |
| Absence | Variable | No null check found in the code path |
Always cite evidence with file:line references:
**Evidence**: The validation function at `src/validators/user.ts:87`
does not check for empty strings, only null/undefined. This allows
empty email addresses to pass validation.
| Level | Criteria | | ------------------- | ----------------------------------------------------------------------------------- | | High (>80%) | Multiple direct evidence pieces, clear causal chain, no contradicting evidence | | Medium (50-80%) | Some direct evidence, plausible causal chain, minor ambiguities | | Low (<50%) | Mostly correlational evidence, incomplete causal chain, some contradicting evidence |
After all investigators report:
If multiple hypotheses are confirmed, rank by:
Before declaring the bug fixed:
When arbitration leaves hypotheses Plausible or Inconclusive and static evidence is exhausted, inject targeted runtime logs to disambiguate. The pattern is designed so cleanup is mechanical (grep + delete) and the logs never leak into production.
Every injected log MUST follow this format:
[DEBUG] [{file}:{line}] {short description} { {relevant vars} }
Concrete examples per language:
// JS/TS
console.log("[DEBUG] [auth.ts:42] before token verify", { tokenLen: token.length, hasUser: !!user })
# Python
print(f"[DEBUG] [auth.py:42] before token verify", {"token_len": len(token), "has_user": user is not None})
# or
logger.debug("[DEBUG] [auth.py:42] before token verify token_len=%d has_user=%s", len(token), user is not None)
// Rust
eprintln!("[DEBUG] [auth.rs:42] before token verify token_len={} has_user={}", token.len(), user.is_some());
// Go
fmt.Fprintf(os.Stderr, "[DEBUG] [auth.go:42] before token verify token_len=%d has_user=%v\n", len(token), user != nil)
The [DEBUG] prefix is non-negotiable. It is the cleanup anchor.
Pick 3-5 points, not more. Flooding logs makes signal harder to extract.
| Location | Captures | | ----------------- | ----------------------------------- | | Function entry | Confirms execution path, args | | Before async call | State just before the operation | | After async call | Result, error, timing | | Conditional | Which branch was taken | | Catch block | Error name, message, partial state |
present/absent markers instead)After the bug is verified fixed, remove every [DEBUG] log. The grep is the source of truth — if grep returns zero matches, cleanup is complete.
# JS/TS
grep -rn '\[DEBUG\]' . --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx'
# Python
grep -rn '\[DEBUG\]' . --include='*.py'
# Rust
grep -rn '\[DEBUG\]' . --include='*.rs'
# Go
grep -rn '\[DEBUG\]' . --include='*.go'
Multi-line console statements that span more than the matched line must be removed in full. Verify the file still parses after deletion.
A debug session should perform at most 2 rounds of log injection. If after the second round the hypotheses are still Inconclusive, escalate to the user with a written summary of what has been ruled out and what additional context (MCP access, production logs, a minimal reproduction) would be needed.
When a hypothesis falls into one of the 6 failure mode categories above, prefer a specialized investigator over a generic team-debugger. The specialized agent loads the right knowledge base automatically and produces higher-precision findings.
| Failure mode category | Preferred specialized agent | Notes |
|---|---|---|
| Logic Error | senior-review:code-auditor | Failure-flow tracing + pattern consistency |
| Data Issue | senior-review:code-auditor or senior-review:security-auditor | The latter when the data crosses a trust boundary |
| State Problem (concurrency, cache, mutation) | senior-review:ui-race-auditor for UI; senior-review:distributed-flow-auditor for cross-service | |
| Integration Failure | senior-review:distributed-flow-auditor | Both sides of the contract |
| Resource Issue | senior-review:code-auditor + react-development:react-performance-optimizer (if frontend) | |
| Environment | senior-review:chicken-egg-detector | Startup cycles, init order, config bootstrap |
team-debugger remains the fallback when no specialized agent matches the hypothesis cleanly, or when the investigation is too cross-cutting for a single specialist.
When a team-debugger spawns a specialized sub-agent via the Agent tool (e.g. to deepen one of the 6 categories), that sub-agent itself cannot spawn further sub-agents (Claude Agent SDK restriction: one-level subagent nesting). If a hypothesis requires deeper delegation, the debugger reports this to the team lead rather than chaining indirectly; the lead has the team-level view to decide whether to re-spawn at the top level or escalate to the user.
The team-debugger agent and the specialized investigators all accept a spawner-provided output file path. When the orchestrator spawns an investigator and wants the structured report on disk (the default in /team-review and similar pipelines), the spawn prompt must include Write your final report to <path>. Investigators write directly with the Write tool rather than returning the report only as message text.
Reference: docs/references/agent-teams-best-practices.md § Operational do's and don'ts.
development
Quality gates for multi-reviewer code review pipelines: adversarial verification panel, completeness critic, reviewer pipeline conventions, and the context sharing pattern for parallel reviewers. TRIGGER WHEN: running /senior-review:team-review quality gates; running /senior-review:code-review Steps 4b/4c (adversarial verification and completeness check); consolidating or deduplicating findings from multiple parallel reviewers. DO NOT TRIGGER WHEN: single-reviewer style review without a consolidation phase, or generic team coordination (the upstream agent-teams skills cover that).
development
Knowledge base for pure-architecture decisions on when to unify duplicated logic into a shared abstraction versus leave it duplicated. Covers the canonical theory (Rule of Three, DRY/WET/AHA, Wrong Abstraction, Locality of Behaviour, Bounded Contexts, Tidy First options framing, CUPID vs SOLID), 12 essential-duplication patterns that justify unification, 12 wrong-abstraction patterns that justify inlining or decomposition, an operational decision frame, and a verified reading list. TRIGGER WHEN: the user is making an architectural decision about whether to centralize, extract, or remove a layer; reviewing an abstraction for premature generality; auditing scattered cross-cutting concerns; spawned by the abstraction-architect agent during /abstraction-architect:audit or as the Abstraction dimension of /senior-review:team-review or /senior-review:code-review; the user asks "should I extract this into a service" / "is this DRY enough" / "is this wrong abstraction". DO NOT TRIGGER WHEN: the task is code formatting and readability cleanup (use clean-code:clean-code), Python-specific refactoring with metrics (use python-development:python-refactor), generic dead-code removal (use senior-review:cleanup-dead-code), security review (use senior-review:security-auditor), or pure pattern-consistency review without an architecture lens (use senior-review:code-auditor).
development
Unified web frontend knowledge base covering CSS architecture, UX psychology, UI components, distinctive aesthetics, and interface design generation. TRIGGER WHEN: working on web styling, design systems, component decisions, responsive strategy, distinctive frontend aesthetics, or exploring multiple interface designs. DO NOT TRIGGER WHEN: the task is purely backend or unrelated to web frontend.
development
Stripe payments knowledge base - API patterns, checkout optimization, subscription lifecycle, pricing strategies, webhook reliability, Firebase integration, cost analysis, and revenue modeling. Loaded by stripe-integrator and revenue-optimizer agents; also consumable directly when the user asks for Stripe-specific patterns without needing an agent. TRIGGER WHEN: working with Stripe API (Payment Intents, Customers, Subscriptions, Checkout Sessions, Connect, webhooks, tax, usage-based billing), pricing strategy, or revenue modeling. DO NOT TRIGGER WHEN: payment work is non-Stripe (PayPal, Square, crypto) or the task is generic e-commerce unrelated to payments.