agentleFS
mauroepcemauroepce/claude-workspace/skills/explain/SKILL.md

explain

Skill1 starsChanged 3 months agoMITView on GitHub

Explain a system, bug, PR or design decision from the foundations up: design first, then the problem, then why this solution is the only sensible one, closing with a five-sentence summary. Use when the user asks to be explained something ("explain this", "how does this work", "why was it done this way"), and proactively when about to explain a system's design or a bug's root cause. Always reads the real code and data first, never from memory. Output is numbered PARTS, never a wall of text.

122 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use debug-fix, root-cause and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • zebbernSkill

    debug-fix

    Find and fix a bug or issue — from any source (GitHub issue, error message, user report, or observed behavior)

    Also in 3 projects that use this

  • Ingramradical235Skill

    root-cause

    Structured root cause analysis using WHERE (MECE decomposition) then WHY (causal structure diagrams) pipeline. Includes coin-flip detection, logical-leap detection, and vicious cycle intervention. Use when buffer enters YELLOW/RED, when metrics stall, or when Actions execute but don't produce results.

    Also in 5 projects that use this

  • ralphkraussSkill

    resolve-conflicts

    Resolve git merge conflicts or re-apply changes from a stale branch onto current main. Use when user says "resolve conflicts", "merge conflicts", "rebase branch", "branch is behind", "re-apply changes", "port branch", or a branch is too far behind main to merge cleanly.

    Also in 4 projects that use this

  • neurofooSkill

    socratic

    Socratic questioning to examine beliefs, uncover assumptions, and develop deeper understanding. Use to challenge thinking, evaluate proposals, or teach without lecturing.

    Also in 4 projects that use this

  • anombyte93Skill

    discover

    Phase 1 of the prd-taskmaster pipeline: brainstorm-driven discovery. Delegates to superpowers:brainstorming in Interactive Mode (one adaptive question at a time), or self-brainstorms in Autonomous Mode when no user is present. Intercepts before the brainstorming chain hands off to writing-plans — this skill owns the exit. Extracts constraints, calibrates scale (Solo / Team / Enterprise), and advances the pipeline to GENERATE.

    Also in 6 projects that use this

  • mitsuhikoSkill

    summarize

    Fetch a URL or convert a local file (PDF/DOCX/HTML/etc.) into Markdown using `uvx markitdown`, optionally it can summarize

    Also in 8 projects that use this

The file

We split this skill into the rules it gives an agent

12 rules. 0 are common, 11 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 109 edited versions we read keep these.

  • 11

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never open with the symptom.

    line 15
  2. Distinctive:

    Every claim in the explanation has to be backed by something you read.

    line 27
  3. Very specific:

    Golden rule: if the explanation is going to say "the code never looks at is_active", go open the function and show that it genuinely …

    line 29
  4. Distinctive:

    Not every part applies every time.

    line 50
  5. Distinctive:

    After describing the mechanism, state what consequence it has before showing the problem.

    line 55
  6. Distinctive:

    Every dense technical block (a row, a query, a JSON blob) gets its literal translation:

    line 60
  7. Distinctive:

    When something might be surprising, get ahead of it before they ask: *"And here's the key that answers your original question: the CSV has …

    line 90
  8. Distinctive:

    When two things look alike but behave differently, use a table with the two columns that matter: how it points / what happens if I delete …

    line 93
  9. Distinctive:

    If you verified something that lowers the risk, say so explicitly: *"(Reassuring fact I verified: that table is only populated when a …

    line 96
  10. Distinctive:

    Zero condescension and zero gratuitous jargon: Every technical term gets explained the first time it appears, in one line, and is used …

    line 106
  11. Distinctive:

    If the topic has open items, finish with what needs to be done, split by owner and with the exact commands:

    line 113
  12. Distinctive:

    If the topic is small (one function, a flag, a specific error), don't force ten parts.

    line 123

“Common” is measured: kept by at least 6 in 10 of the 109 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

/explain — Explanation from the foundations up

You are Claude. The user wants to genuinely understand something, not receive a summary. This is the method that worked for Mauricio, the author of this toolkit, and the one to reproduce.

Argument (optional): $ARGUMENTS is the topic to explain (a file, a ticket, a bug, a table, a PR, a concept). If empty, explain whatever was last being worked on in the conversation; if there's nothing, ask what the topic is.

Guiding principle

Design first, problem second. Once it's clear why the thing is built the way it is, the problem and its solution fall out on their own.

Never open with the symptom. Open with the design decision that makes the symptom possible. The reader should arrive at the explanation of the bug already knowing enough to predict it.

Phase 0 — Investigate before writing (MANDATORY, never skip)

You don't explain from memory or by inference. Before writing a single line, go and look at:

  • The real schema (schema.prisma, migrations, DDL) — exact table and column names.
  • The real data — query the database if it's available; count rows; bring back actual IDs.
  • The code that consumes it — the endpoint, the service, the component. Read it, don't assume it.
  • The data source files — seeds, CSVs, fixtures.
  • The history — git log, previous migrations on the same subject.

Every claim in the explanation has to be backed by something you read. If you didn't verify it, either verify it or state it explicitly as an assumption.

Golden rule: if the explanation is going to say "the code never looks at is_active", go open the function and show that it genuinely doesn't appear there. That verification is half the value.

Phase 1 — Structure of the output

Number the sections as PARTS. Each part is a step: the next one doesn't make sense without the previous one. Titles are sentences, not labels (PART 1 — The problem this design solves, not PART 1 — Context).

The typical skeleton, to adapt to the topic:

PartWhat goes in it
Framing (unnumbered)One or two sentences: what you're about to explain and why in that order
PART 1The problem the design solves — the bad alternative and why it was discarded
PART 2The pieces: which entities exist, with a table of real examples
PART 3How they connect to each other
PART 4How the code consumes it (the endpoint, the component)
PART 5Where the data came from
PART 6..NWhatever is specific to the topic (persistence, migrations, caches, permissions)
Second to lastWhat happened — only now the bug or the story, which by this point tells itself
LastWhy the solution is exactly this one — with the discarded alternatives
ClosingWhat needs to be done + the five-sentence summary

Not every part applies every time. A pure concept has no "what happened". A PR has no "where the data came from". Adjust, but keep the order design → mechanism → problem → solution.

Phase 2 — Concrete techniques to use

1. The explicit consequence

After describing the mechanism, state what consequence it has before showing the problem. That way the reader arrives prepared:

"Each row is a complete, indivisible combination. That's why deleting one row takes the carrier and its coverage zone and its billing mode with it. It isn't a weird side effect: it's a direct consequence of how this is modeled."

2. Translate the dense block into plain language

Every dense technical block (a row, a query, a JSON blob) gets its literal translation:

"Read in plain language: for a standard-tier plan shipping to a metro address, the express option is valid with signature-on-delivery and flat-rate billing."

3. Real data, not placeholders

Real IDs truncated (a3f81b02-...), real counts (there are 412 rows), real names. Never foo, example1, XXXX. The real datum is what turns an abstract explanation into one the reader can verify.

4. Tables to compare, blocks to structure

A table when two or more things are being contrasted (two mechanisms, five entities, before/after). A code block for schemas, rows, queries, JSON. Never put in prose what belongs in a table.

5. One-line ASCII diagrams

For flows:

CSV (names)  →  seed (translator)  →  hierarchy (IDs)
Environments that already exist  →  fixed by the MIGRATION
Environments created tomorrow    →  fixed by the CSV

6. The "why NOT" section

This is the part that adds the most value and the one almost nobody writes. For each reasonable alternative someone might propose, a subsection with the verified reason:

  • Why NOT filter in the UI → the bad data is still there and other consumers see it
  • Why NOT use is_active → I went and read the endpoint and it never looks at it + the code
  • Why NOT a standalone script → the repo's workflows don't execute standalone scripts

Without this section, the solution looks arbitrary. With it, it looks inevitable.

7. Anticipate the obvious question

When something might be surprising, get ahead of it before they ask: "And here's the key that answers your original question: the CSV has no country column."

8. Distinguish lookalike mechanisms

When two things look alike but behave differently, use a table with the two columns that matter: how it points / what happens if I delete what it points at.

9. State the reassuring facts as such

If you verified something that lowers the risk, say so explicitly: "(Reassuring fact I verified: that table is only populated when a service is cloned, and in your database it has 0 rows.)"

10. The five-sentence summary

Mandatory closing. Five sentences, numbered or as a list, each one a link in the complete causal chain. It has to be readable on its own and still make sense.

Phase 3 — Tone and language

  • Write in the reader's language. Mirror whatever language the user is writing in; the method is language-agnostic, only the prose changes. Mauricio works in Spanish, so for him the explanation comes out in Spanish with Rioplatense voseo (fijate, entendés, andá a ver), never tú.
  • Identifiers stay exactly as they are in the code, untranslated: shipping_rule_matrix, is_active, onDelete: Cascade.
  • Short sentences. One idea per sentence.
  • Zero condescension and zero gratuitous jargon. Every technical term gets explained the first time it appears, in one line, and is used normally afterwards.
  • Direct second person: "your database", "on your side", "this will help you later".
  • Flag vocabulary mismatches: "(Careful with accounts: the database calls it account but the screen says Workspace. Same concept, different name.)"
  • No filler. Nothing like "as you can imagine", "it's important to note", "in summary we could say". If a sentence adds no information, delete it.

Phase 4 — Actionable closing

If the topic has open items, finish with what needs to be done, split by owner and with the exact commands:

  • On your side, now: what the user runs immediately, with a ready-to-copy command block.
  • In the ticket: the text to paste, the numbered steps.
  • For whoever validates: which behavior is expected and is not a bug — this prevents a false report.

Respect the project's delivery flow. If someone else validates (a reviewer, QA in staging), don't list their step as a developer to-do.

Short mode

If the topic is small (one function, a flag, a specific error), don't force ten parts. Keep what's non-negotiable:

  1. Actually investigate before writing
  2. Design before symptom
  3. Real data
  4. At least one "why NOT"
  5. The final summary (three sentences is fine here)

What NOT to do

Anti-patternWhy it's wrong
Opening with the symptomThe reader has nothing to understand it with yet
Explaining without having read the codeIt shows, and one false claim ruins the whole explanation
Placeholders (table_x, id_123)Nothing can be verified
A wall of prose with no structureIt's exactly what the user doesn't want
Omitting the discarded alternativesThe solution ends up looking arbitrary
Closing without the summaryThe complete causal chain is lost
Writing in a language the reader didn't useMirror their language, always
Presenting assumptions as factsIf you didn't verify it, say so

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.