Skip to main content

hypothesis-driven

Investigate an uncertain cause using testable hypotheses and discriminating evidence. Use for persistent bugs, flaky behavior, incident diagnosis, or conflicting research observations; skip routine edits with a known solution.

Source facts

Repository
AeonDave/malskill
Last source activity
September 20, 2026 at 19:46
Detected SKILL.md language
English
Stars
26
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
hypothesis-driven
description
Investigate an uncertain cause using testable hypotheses and discriminating evidence. Use for persistent bugs, flaky behavior, incident diagnosis, or conflicting research observations; skip routine edits with a known solution.
license
MIT
compatibility
AgentSkills-compatible investigation workflow for debugging, exploit research, CTF solving, incident response, reverse engineering, and data-backed technical research.
metadata
{"author":"AeonDave","version":"1.1"}
# Hypothesis-Driven Investigation ## When to activate - A bug, crash, regression, or flaky behavior resists two or more direct fixes. - A CTF, exploit, or reversing challenge has many possible paths and no obvious next step. - An incident, outage, or unexpected production behavior has unclear scope or cause. - Research, fuzzing, or scanner output points in multiple directions and must be triaged. - The symptom is far from the likely cause: heap corruption, async timing, protocol state, ABI mismatch, cache coherence, cryptographic oracle, side channel, supply chain. - The agent notices itself looping, repeating searches, or escalating tools without new evidence. Do not activate for trivial fixes, single-line typos, or tasks where the user already gave a step-by-step procedure. Prefer the smallest competent workflow. ## Core rules - **Hypotheses must be falsifiable.** If no observation could disprove it, it is not a hypothesis — it is a belief. - **Reduce before deep-diving.** Shrink noisy inputs, traces, repro steps, or artifact scope until the failure still occurs with minimal irrelevant detail. - **Make comparisons interpretable.** Control relevant variables and predict how competing explanations would differ. One experiment may distinguish several hypotheses; avoid unrelated simultaneous changes. - **Record consequential results.** Keep a compact working note when it prevents repeated investigation or supports a handoff; a separate log is unnecessary for a short diagnosis. - **Evidence wins over preference.** When data contradicts a favorite hypothesis, kill the hypothesis, not the data. - **Bound negative claims.** No observed failure is not proof of impossibility. A deductive proof can establish a claim within explicit assumptions; empirical results cover the tested conditions. Name which basis supports the conclusion and what remains outside it. - **Reassess repeated failure.** Recheck assumptions, measurements, and environment when attempts stop yielding information; a retry count alone does not identify the cause. ## Workflow 1. **Frame the problem** - Restate the symptom in one precise sentence: what is observed, where, when, under which conditions. - List what is known, what is assumed, and what is unknown. Separate facts from inference. - Preserve a reproducer or evidence baseline. If the input/artifact/log is large, reduce it first while keeping the same failure signal. - Define a falsification target: "this hypothesis is wrong if I see X." 2. **Generate hypotheses (breadth before depth)** - Enumerate plausible causes when evidence leaves a real ambiguity. Do not manufacture alternatives to meet a quota; causes may coexist. - Group candidates when the list becomes hard to compare, and retain assumptions that have not yet been tested. - Build a diagnostic "why" tree before jumping to a solution "how" tree; solution ideas are premature until the cause branch is supported. - For each candidate, note the mechanism: how would this cause produce the observed symptom? - Mark candidates that cannot currently be tested as unresolved; missing access or tooling does not refute them. 3. **Prioritize** - Score each hypothesis on three axes: prior likelihood, cost to test, and information gained if disproven. - Test cheapest-and-most-informative first. A fast experiment that eliminates a whole branch beats a slow one that only refines a narrow guess. - Prefer experiments that bisect the unknown space (binary search of the hypothesis tree). 4. **Design the experiment** - State the prediction: "if hypothesis H is true, then doing X will produce Y." - State the falsifier: "if I see Z instead, H is wrong." - Choose the smallest reliable observation: log, breakpoint, sanitizer, packet capture, syscall trace, oracle query, diff, replay, controlled input. - Prefer probes that expose structure: assertions/contracts for invariants, dependency tracing or slicing for value origins, and hypothesis-tagged instrumentation for runtime facts. - Add a negative control when possible: an input or condition where the hypothesis predicts no effect. 5. **Run and record** - Execute the experiment unchanged. Resist the urge to modify mid-run. - Capture raw evidence: command, input, output, timestamp/context, environment, version. Tag temporary logs or probes with the hypothesis ID so evidence stays attributable. - Record the verdict next to the hypothesis: supported, refuted, inconclusive, blocked. 6. **Update beliefs (Bayesian, not stubborn)** - If refuted: cross it out and move on. Do not resurrect without new evidence. - If supported: refine into a more specific sub-hypothesis. One supportive experiment is not proof. - If inconclusive: ask why the experiment was weak before designing the next one. Often the falsifier was not sharp enough. - Pause and re-frame whenever evidence contradicts a foundational assumption. 7. **Converge to a diagnosis** - A supported diagnosis accounts for the relevant observations and survives a discriminating check. Note unexplained evidence and competing contributors; a single correct prediction is not proof. - Before acting on it, write the causal chain end-to-end: defect → faulty state → mechanism → observed symptom. If a link is hand-waved, the diagnosis is incomplete. - Show both causality and incorrectness: why this state caused the failure, and why the state itself is wrong rather than merely surprising. 8. **Act, then verify** - Apply the smallest change that the diagnosis predicts will work. - Re-run the original reproducer and a relevant control when it distinguishes the proposed cause from alternatives. - When safe, run a counter-experiment: revert the fix or reintroduce the condition and confirm the original symptom returns. - If the symptom is resolved but the cause remains uncertain, distinguish verified recovery from a confirmed root cause. ## Hypothesis log format Keep it short. Update in place; do not let it grow into prose. ```text H1: <one-line hypothesis> Mechanism: <how it would cause the symptom> Predicts: <observation expected if H1 is true> Falsifier: <observation that would disprove H1> Test: <command / experiment> Evidence: <raw output, link, or summary> Verdict: supported | refuted | inconclusive | blocked ``` For a recurring reasoning failure, load [references/cognitive-biases.md](references/cognitive-biases.md). ## Domain-specific accents - **Debugging**: minimize the reproducer, isolate environment, then bisect the code/data path with the cheapest instrumentation. Add assertions around invariants and trace data/control dependencies when the bad value's origin is unclear. Pair with `systematic-debugging` and `test-driven-development`. - **CTF / exploit research**: enumerate attack surfaces before deep-diving one. Use oracles and probes that return distinguishable outputs (yes/no, timing, length). Bias toward experiments that eliminate whole categories (auth vs injection vs deserialization vs logic). - **Reverse engineering**: separate observations (what the binary does) from inferences (why). Confirm guessed semantics with a controlled input before generalizing. - **Incident response**: enumerate possible contributors before naming a root cause; distinguish root cause, trigger, contributing factors, impact, and mitigation. Correlate timelines, deploys, configs, and dependencies. Action items should be owned, measurable, and aimed at prevention or faster detection, not blame. - **Research and data analysis**: pre-register the prediction before running the query; otherwise the analysis silently fits the data to the favorite story. ## Stop conditions - The diagnosis is complete: the causal chain is explicit and reproduces the symptom on demand. - The next experiment requires access, authorization, or destructive action beyond approved scope — pause and escalate. - Repeated fixes add no evidence: stop patching and re-open assumptions. - Evidence contradicts a load-bearing assumption: re-frame before generating more hypotheses on a broken foundation. ## Output contract When reporting investigation results, include: - **Symptom**: the precise observable being explained. - **Diagnosis**: the supported causal chain, or "no diagnosis yet" with current best hypotheses. - **Evidence**: experiments that confirmed it and at least one that ruled out a credible alternative. - **Limits**: what was not tested, what assumptions remain. - **Next step**: smallest action to either act on the diagnosis or sharpen it. ## Resources Load on demand: - `references/hypothesis-patterns.md` — hypothesis templates and falsifier examples per domain (debugging, CTF/exploit, reversing, incident, research). - `references/cognitive-biases.md` — biases that derail investigation and counter-moves to apply during it. Pair with: - `systematic-debugging` for code-level reproduction, instrumentation, and patching once the hypothesis narrows to a code defect. - `loop-control-and-pivots` when three attempts have failed and the mental model likely needs re-framing before more work. - `evidence-before-claims` before reporting a cause, vulnerability, or fix as confirmed. - `verification-before-completion` before claiming the investigation is done. - `design-before-implementation` when the diagnosis triggers a non-trivial change. - `known-problem-hint-research` when local hypotheses are exhausted and an external clue is needed.
View on GitHub