CtrlK
BlogDocsLog inGet started
Tessl Logo

solve-problem

This skill should be used when the user says "solve problem", "solve this problem", or invokes /solve-problem. Applies a methodical, evidence-first approach to diagnosing a problem - understand intent, observe the problem first-hand, form multiple hypotheses, gather discriminating evidence to eliminate them, propose an evidenced solution, and verify the fix actually resolves the original symptom. Do NOT use for general how-to questions, explanations, or building new features.

75

Quality

94%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Solve Problem

A methodical approach to solving a problem. The goal is to resist the instinct to jump at the first plausible-sounding fix. That instinct feels fast but causes wrong fixes and wasted iteration. Slow down, gather evidence, then propose.

Work through the moves in order. Do not skip ahead. The moves are domain-neutral — they apply to a code bug, a broken appliance, a drop in sales, or a failing process. Examples below span more than code on purpose.

1. Understand intent

Restate the problem in your own words so the user can correct you. Establish what they expect, what is actually happening, and what "solved" looks like.

Clarify with the user only if the problem is genuinely ambiguous. Do not interrogate a clear problem — echo your understanding and move on.

2. See the problem — first-hand, repeatably

Confirm the problem is real before hunting for causes. Observe it directly, under conditions you can return to — don't diagnose from a second-hand report, ticket, summary, or a single stale log line. You want a way to make the problem happen (or to check whether it's happening) again on demand, because the same handle confirms the cause now and verifies the fix later (move 6).

Prefer first-hand evidence over artifacts: reproduce the bug by running it; watch the real checkout instead of reading the sales dashboard; measure the actual part instead of trusting the spec.

If you cannot see it, or it turns out not to be a real problem (wrong expectation, already fixed, environment issue), say so and stop. Do not invent a fix for a problem you have not observed.

3. Hypothesize

Once the problem is confirmed, investigate how the thing is supposed to work and where reality diverges. From that investigation, list at least two candidate causes.

A single hypothesis is banned — it leads to tunnel vision. Force yourself to name alternatives, even ones you think are unlikely.

4. Gather evidence

For each hypothesis, run the cheapest check that discriminates between causes — ideally one that could prove the hypothesis wrong, not merely one consistent with it. Evidence that merely fits a hypothesis (correlation) is weak: it often fits competing hypotheses too. ("It works in a clean browser" is consistent with both "stale state" and "a race" — it rules out neither.) Seek the check that separates them.

Confirm or eliminate each with first-hand evidence. Assumptions and memory are not evidence. If the cheap checks (logs, reports) don't isolate it, escalate to direct observation with more instrumentation rather than guessing harder. Keep eliminating until one cause is supported by evidence that survived an attempt to falsify it.

5. Propose

Propose a solution grounded in the evidence. State your confidence level and what is still uncertain. If you cannot reach certainty, say so, and say what would resolve it.

By default, stop here. Propose — do not implement — unless the user asks you to apply the fix.

6. Verify the resolution

Once a fix is applied, re-observe the original symptom under the same conditions that showed it (move 2's handle). The problem is not solved until the thing that was wrong is now demonstrably right — observed, not assumed.

This is not the same as move 4. Move 4 verifies the diagnosis ("is this the cause?"); move 6 verifies the resolution ("did my action make the symptom actually go away?"). They are different questions: a doctor's test can confirm the cause, yet the prescribed treatment may still not cure the patient — you check the patient got better. You can also mis-apply a correct diagnosis (incomplete fix, wrong change, a side effect), and only re-observing the symptom catches that.

If the symptom persists, the fix — or the diagnosis behind it — was wrong. Do not patch again from the same reasoning; return to move 2 with more instrumentation.

Re-observe the exact symptom the user reported — not a proxy. A related error clearing or a secondary signal going green is not the symptom going away. One cause cleared is not the symptom cleared; if it persists, another cause remains — return to observing.

Anti-rush rules

  • Read the definition before the surroundings. When something misbehaves, the artifact that defines it — its config, frontmatter, schema, or source — is usually the cheapest, most decisive evidence. Read it before theorizing from menus, labels, dashboards, or error text, which are downstream surfaces.
  • No proposal before the problem is seen first-hand and a cause is evidenced.
  • At least two hypotheses before testing any.
  • Evidence — not memory or assumption — confirms a cause. Prefer a check that could falsify the hypothesis over one that merely fits it.
  • Recurrence means you were wrong. If the problem comes back after a fix, the cause (or the fix) was wrong — go back to observing it directly with more instrumentation; do not propose another fix from the same reasoning.
  • The words in the report are hypotheses, not evidence. "It's a timeout," "it's a race," "it only happens without X" — these are the reporter's model of the bug, often wrong even when plausible. Test them like any other hypothesis; never adopt them as the starting fact.
  • Surface signals are hypotheses too. A menu label, status badge, error string, or dashboard number is the system's rendering of its state, not the state itself. Confirm against the underlying definition/source, not the surface.
  • A constant is a clue. An exact, repeating number (the same 15s three times) is a deadline or an interval, not how long the work took — work varies, limits don't. When cheap checks can't separate causes, change the conditions to make a hidden variable visible rather than staring harder at the same setup.
  • Not solved until re-observed gone (move 6), not just "a change was made".
  • State confidence. Flag uncertainty. Never fake certainty.

Show your working

When presenting the proposal, always show the full trace so the user can debug your reasoning. Use this structure:

## Problem
<the problem, restated>

## How I confirmed it
<what you reproduced or observed — the evidence it is real>

## Hypotheses considered
1. <hypothesis> — <eliminated / confirmed>
2. <hypothesis> — <eliminated / confirmed>
...

## Evidence
<per hypothesis: what you checked and what it showed>

## Root cause
<the cause supported by evidence>

## Proposed solution
<the fix, grounded in the evidence>

## Confidence
<high / medium / low> — <what is still uncertain, if anything>

## Verification (after applying)
<the original symptom re-checked under the same conditions — gone, observed>

Worked examples

For full end-to-end traces of the method applied to hard, real problems, see references/. Read one when you are stuck and want a model to follow. Currently:

  • SSE keepalive misdiagnosed as a timeout — a bug reported as a "query timeout" that was nothing of the kind. Shows falsifying several plausible causes, escalating instrumentation (throttling a consumer to expose a hidden keepalive), reading dependency source as evidence, and verifying the fix end-to-end.
Repository
dwmkerr/claude-toolkit
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.