Skip to content
Back to skills

Debug

ASecurity

Scientific bug hunting using falsifiable hypotheses. Forms hypotheses, designs falsifying tests, eliminates candidates systematically, and logs the full investigation trail in a structured debug/ folder. TRIGGER when: user has a bug to investigate scientifically; user wants systematic root-cause analysis; user says "debug", "investigate", "root cause", "why is this failing"; user invokes /autoresearch:debug. DO NOT TRIGGER when: user wants to optimize a metric (use /autoresearch); user wants ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added October 2, 2026
ai-agentsgobashtestinggitdatabase

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add wjgoarxiv/litclaude --skill debug --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Debug?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Debug
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wjgoarxiv-debug/badge)](https://www.skillsdirectory.com/skills/wjgoarxiv-debug)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: autoresearch:debug
description: |
  Scientific bug hunting using falsifiable hypotheses. Forms hypotheses, designs
  falsifying tests, eliminates candidates systematically, and logs the full
  investigation trail in a structured debug/ folder.
  TRIGGER when: user has a bug to investigate scientifically; user wants systematic
  root-cause analysis; user says "debug", "investigate", "root cause", "why is this
  failing"; user invokes /autoresearch:debug.
  DO NOT TRIGGER when: user wants to optimize a metric (use /autoresearch); user
  wants to fix a known error automatically (use /autoresearch:fix); user just wants
  a quick one-line answer about what a function does.
allowed-tools:
  - Read
  - Write
  - Edit
  - Bash
  - WebFetch
  - WebSearch
---

# autoresearch:debug — Scientific Bug Investigation

Root-cause analysis using the scientific method: form falsifiable hypotheses, design tests that could disprove them, eliminate candidates, and converge on confirmed root causes. Every step is logged — nothing is assumed, nothing is skipped.

## Core Principle

**A hypothesis is only useful if it can be falsified.** "Something is wrong" is not a hypothesis. "The cache is returning stale data because the TTL is not being reset on write" is a hypothesis — it can be tested and disproved.

## Output Structure

Create `debug/` in the working directory (or alongside the failing artifact):

| File | Purpose |
|------|---------|
| `debug/hypotheses.md` | Active candidates under investigation |
| `debug/eliminated.md` | Ruled-out hypotheses with proof of elimination |
| `debug/findings.md` | Confirmed root causes with reproduction case |

Initialize all three files before the first iteration.

---

## Investigation Loop

Repeat until stop condition:

```
[Observe] --> [Hypothesize] --> [Design Test] --> [Run Test] --> [Update] --> [Log]
     ^                                                                          |
     |__________________________________________________________________________|
```

### Stage 1 — Observe

Collect all available evidence before forming any hypothesis:

- Read error messages, stack traces, logs — verbatim, not paraphrased
- Identify: What is the symptom? When does it appear? When does it NOT appear?
- Identify: What changed recently? (git log, config changes, dependency updates)
- Identify: Is the bug deterministic or intermittent?

Write a symptom summary at the top of `debug/findings.md`:
```
## Symptom
[Exact error message or behavior]

## Observed conditions
- Occurs: [when/where]
- Does NOT occur: [contrasting case if known]
- First observed: [commit/date/event]
```

### Stage 2 — Hypothesize

Form at least 2 candidate hypotheses before testing any of them. More candidates = less confirmation bias.

**Hypothesis format:**
```
H-N: [X] causes [Y] because [Z].
  Test: [specific action that would disprove this if false]
  Confidence: low | medium | high
```

Example:
```
H-1: The database connection pool is exhausted because max_connections is set too low.
  Test: Print active connection count during the failure window. If count < max_connections, this hypothesis is false.
  Confidence: medium

H-2: The timeout is triggered by a slow DNS lookup, not the actual request.
  Test: Replace hostname with IP address in the connection string. If bug disappears, H-2 is confirmed.
  Confidence: low
```

Write all active hypotheses to `debug/hypotheses.md`.

**Prioritization rule:** Test high-confidence, low-cost hypotheses first. A cheap test that eliminates a hypothesis is more valuable than an expensive test that confirms one.

### Stage 3 — Design Falsifying Test

For each hypothesis under test, design the minimal experiment that could disprove it.

Ask: "If this hypothesis is FALSE, what would I observe?"

Design the test to produce that observable. If the test does NOT produce the falsifying observation, the hypothesis survives (not confirmed — survives).

**Good test design:**
- Changes exactly one variable
- Has a clear pass/fail criterion defined BEFORE running
- Can be run in under 5 minutes
- Leaves the system in the same state it started (reversible)

### Stage 4 — Run Test

Execute the test. Record:
- Exact command(s) run
- Exact output (stdout, stderr, exit code)
- Whether the falsifying observation was produced

Do not interpret yet. Record what happened, literally.

### Stage 5 — Update Hypothesis Set

**If the test produced the falsifying observation:**
- The hypothesis is eliminated
- Move it from `debug/hypotheses.md` to `debug/eliminated.md`
- Record why: "H-1 eliminated: connection count was 3/100 during failure — pool exhaustion is not the cause"

**If the test did NOT produce the falsifying observation:**
- The hypothesis survives
- Increase its confidence level
- Narrow its scope: "H-2 now more specifically: slow DNS on IPv6 lookups only"

**If the test produced unexpected output:**
- Add a new hypothesis to explain the unexpected result
- Do not discard it — unexpected observations are often the path to the root cause

### Stage 6 — Log

After each iteration, update all three files:

`debug/hypotheses.md` — current active candidates (sorted by confidence, high first)
`debug/eliminated.md` — append the eliminated hypothesis with proof
`debug/findings.md` — append iteration summary

Then immediately begin Stage 1 of the next iteration.

---

## Stop Conditions

**Success:** Root cause confirmed — stop when ALL of these are true:
1. At least one hypothesis has been confirmed (not just survived — confirmed by a positive test)
2. A minimal reproduction case exists: the smallest code/config/command that triggers the bug
3. The fix has been identified (even if not yet implemented)

Write confirmed root cause to `debug/findings.md`:
```
## Root Cause (Confirmed)
[Hypothesis text]

## Evidence
[Test that confirmed it]

## Reproduction case
[Minimal steps/code to reproduce]

## Proposed fix
[What needs to change]

## Next step
Run `/autoresearch:fix` to implement and verify the fix iteratively.
```

**Budget exhausted:** If `max_iterations` is reached without confirmation, write a partial findings report with the strongest surviving hypothesis and the evidence collected so far.

---

## Stuck Protocol

**If more than 3 iterations pass without eliminating any hypothesis:**

Do not continue making minor variations. Switch observation technique entirely.

Available technique changes (see `investigation-techniques.md` for details):

1. Currently using log analysis → switch to **bisect** (binary search over commits)
2. Currently using bisect → switch to **minimal reproduction** (shrink the failing case)
3. Currently using code reading → switch to **instrumentation** (add logging/metrics)
4. Currently using instrumentation → switch to **differential diagnosis** (compare working vs broken)
5. Currently using one environment → switch to **strace/dtrace** (system-call level)

Log the technique switch:
```
## TECHNIQUE SWITCH — Iteration N
- Previous technique: [name]
- Reason: 3 iterations, 0 hypotheses eliminated
- New technique: [name]
- Rationale: [why this technique is more likely to produce new evidence]
```

---

## Autonomy Directive

Once the investigation begins:

1. **Do not stop to ask permission.** Form hypotheses and run tests autonomously.
2. **Do not summarize and wait.** After logging an iteration, begin the next one.
3. **Do not declare "root cause" without positive confirmation.** Surviving a test is not confirmation.
4. **Do not skip the log step.** Every iteration must update all three files.

The only valid stops are: root cause confirmed, or budget exhausted.

---

## Initial Setup

When `/autoresearch:debug` is invoked:

1. Ask: "What is the bug? Paste the error message or describe the failing behavior."
2. Ask: "What is the last known good state? (last commit that worked, last config that worked)"
3. Ask: "How many investigation iterations should I run before stopping? (default: 15)"
4. Create `debug/` directory and initialize the three files.
5. Begin Stage 1 — Observe.

Do not ask more questions after setup. The investigation is autonomous from Stage 1 onward.

Files in this skill

  • SKILL.md8 KB
  • investigation-techniques.md10.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.