Turns any technical output (creation, structure, architectural decision) into a learning opportunity - a tree of where the element lives, an x-ray of what-it-is/where-it-sits/what-it-is-for, a connection map, a business analogy, and explained decisions. Always use in technical output for a non-programmer reader.
Installs into .claude/skills of the current project.
Are you the author of Teaching?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/rusharlabs-teaching)
---
name: teaching
description: Turns any technical output (creation, structure, architectural decision) into a learning opportunity - a tree of where the element lives, an x-ray of what-it-is/where-it-sits/what-it-is-for, a connection map, a business analogy, and explained decisions. Always use in technical output for a non-programmer reader.
---
> **Auto-Trigger:** Always active in every technical output that involves creation, structure, or architectural decisions.
> **Keywords:** "teach", "explain", "how does it work", "where does it live", "architecture", "teaching", "why"
> **Priority:** MEDIUM
> **Tools:** Read, Write, Bash
## When to activate
ALWAYS. In every output that involves:
- File creation
- A proposed structure
- Execution plans
- Technical decisions
- Mention of paths, folders, formats, connections
## When NOT to Activate
Even though it is "ALWAYS active" for technical output, do NOT apply the 5 teaching blocks when:
- **Conversational/non-technical reply** (status, "where did we stop?", simple confirmation, business question with no technical element) - there is no file/structure/connection to teach.
- **Purely factual output of live data** (metrics, health score, counts) - the focus is the verified data, not the architecture.
- **Trivial edits** (typo, comma, 1-line tweak with no structural impact) - the teaching overhead becomes noise.
- **Internal batch execution by a subagent** where the output goes to another agent/orchestrator, not to a human learner.
- **When the user explicitly asks for brevity** ("just do it", "no explanation", "short answer") - respect the direct instruction.
## Contract
**INPUT:** any technical output (text) the model is about to deliver, covering creation/structure/architectural decision.
**OUTPUT:** the same output, with the 5 teaching blocks attached (tree, x-ray, connections, analogy, decisions).
**EXIT CODES:**
| Exit | Meaning |
|---|---|
| 0 | always - this is a FORMATTING/BEHAVIOR skill, there is no possible execution failure; the "contract" is about output completeness, verifiable via the validator in the Proof section |
**STATE IT TOUCHES:**
| Resource | Reads/Writes | Purpose |
|---|---|---|
| (no file) | - | this skill reads/writes no state - it shapes the FORM of the model's reply |
## Mandatory format of every technical output
### BLOCK 1: πΊοΈ WHERE WE ARE (Architectural Tree)
Draw the project's COMPLETE tree showing WHERE the current element lives.
Mark the file or folder in question with β‘οΈ.
Use clear visual language.
```
projeto-raiz/
βββ CLAUDE.md β General rules (the "company handbook")
βββ agents/ β All agents live here
β βββ vendedor.md
β βββ analista.md
βββ skills/ β All reusable competencies
β βββ teaching/
β β βββ SKILL.md
β βββ copywriting/
β βββ SKILL.md
βββ workflows/ β All orchestrated processes
β βββ qualificar-lead.yml β‘οΈ WE ARE HERE
β βββ onboarding-cliente.yml
βββ hooks/ β All automatic triggers
β βββ on-lead-entry.yml
βββ tasks/ β Unit tasks (optional; they can live inside the workflows)
```
TREE RULES:
- Always show the tree FROM THE ROOT of the project
- Never show only the partial path - always the full context
- Mark with β‘οΈ the element being created/modified/explained
- If the project is very large, show the 2 most relevant levels + the full path down to the element
---
### BLOCK 2: π X-RAY OF THE ELEMENT
For EACH file or folder mentioned, you MUST answer:
| Question | Answer |
|----------|----------|
| **What is this?** | A 1-sentence explanation, no jargon. Use a business-world analogy. |
| **Where does it live?** | Full path from the root. E.g. `/projeto/workflows/qualificar-lead.yml` |
| **Inside what?** | Which folder contains this file and why that folder exists. |
| **How many of this kind exist?** | 1 per process? 1 per agent? No limit? Explain the rule. |
| **What is it connected to?** | List ALL the other files that connect to this one. Show the direction: who calls whom. |
| **Who triggers it?** | What makes this file run? A command? A hook? Another workflow? |
| **What is inside?** | Summarized internal structure. Which sections, fields or blocks exist inside this file. |
| **Why this format?** | `.yml`, `.md`, `.json` - why this one and not another? What is the practical advantage? |
| **What happens if I delete it?** | Real consequence. What breaks, what stops working. |
| **Possible alternative?** | Was there another way to do this? If so, why did we choose this one? |
---
### BLOCK 3: π CONNECTION MAP
Draw how this element connects to the others using simple arrows:
```
[CLAUDE.md] ββdefines rules forβββΆ [agents/vendedor.md]
β
uses the skill
β
βΌ
[skills/copywriting/SKILL.md]
β
is called by the workflow
β
βΌ
[workflows/qualificar-lead.yml] β‘οΈ THIS ONE
β
triggered by
β
βΌ
[hooks/on-lead-entry.yml]
```
RULES:
- Always show at least 1 level above and 1 level below the current element
- Use clear verbs on the arrows: "calls", "defines", "triggers", "uses", "reads", "writes"
- If there is more than one path, show them all
---
### BLOCK 4: π‘ TRANSLATION TO THE REAL WORLD
Make a direct analogy with company operations:
> **In your company:** This workflow is like the process your sales team follows
> when a new lead comes in. The `.yml` file is the written checklist any new
> salesperson would receive on day one. The hook that triggers it is like the
> automatic alert the CRM sends when a form is filled in. The skill it uses is
> like the qualification script the salesperson follows on the call.
RULES:
- Always use an analogy with company operations, sales, marketing or management
- Never use technical jargon without an immediate translation
- If the concept has no obvious analogy, create one and be explicit: "There is no perfect analogy, but think of it like this..."
---
### BLOCK 5: β οΈ DECISIONS I MADE AND WHY
Whenever the agent makes any technical decision, it MUST explain:
```
DECISION: I created the workflow as .yml, not .md
WHY: Because .yml lets the system read and interpret the structure
automatically (parsing). A .md file is just human-readable text -
the system cannot extract steps from it without interpretation.
ALTERNATIVE: It could be .json, but .json is harder to read and edit
by hand. .yml is the middle ground: readable by humans AND by machines.
CONSEQUENCE: If in the future you want the system to run workflows automatically,
.yml is already ready. Had I used .md, it would need a rewrite.
```
---
## Language rules
1. **Never shorten paths without context.**
- β "It lives in `/workflows/`"
- β "It lives in `/projeto-raiz/workflows/qualificar-lead.yml` - the `workflows` folder is where ALL the project's orchestrated processes live, and it sits directly at the root."
2. **Never use a technical term without an immediate translation.**
- β "This is a YAML parser"
- β "This is an automatic reader of .yml files (YAML is just the file format - think of it as a simplified spreadsheet where each line has a key and a value)"
3. **Never assume the reader knows what is inside a folder.**
- Always list the contents, even if it is "empty for now, but it will contain X"
4. **Always answer the question before it is asked.**
- If you mentioned a format, explain the format
- If you mentioned a connection, show the connection visually
- If you mentioned a folder, show what is inside
5. **Controlled depth.**
- Go up to 2 levels of "why".
- If the explanation pulls in a third level, stop and say: "This opens another topic (X). Do you want me to go deeper?"
## Complete example of output with Teaching Mode active
**Scenario:** The agent needs to create a lead-qualification workflow.
---
**Agent output:**
I will create the lead-qualification workflow.
πΊοΈ **WHERE WE ARE:**
```
meu-projeto/
βββ CLAUDE.md
βββ agents/
β βββ qualificador.md
βββ skills/
β βββ perguntas-spin/
β βββ SKILL.md
βββ workflows/
β βββ qualificar-lead.yml β‘οΈ CREATING THIS NOW
βββ hooks/
βββ novo-lead.yml
```
π **X-RAY:**
| Question | Answer |
|----------|----------|
| **What is it?** | A written process that defines step by step how to qualify a lead. It is the "salesperson's checklist". |
| **Where does it live?** | `/meu-projeto/workflows/qualificar-lead.yml` |
| **Inside what?** | The `workflows/` folder, which sits at the project root. That folder exists to hold ALL the project's processes. Each process is a separate file. |
| **How many of this kind?** | 1 file per process. If you have 5 different processes, you will have 5 `.yml` files inside `workflows/`. No limit. |
| **What is it connected to?** | It calls the agent `agents/qualificador.md` to execute. The agent uses the skill `skills/perguntas-spin/SKILL.md`. |
| **Who triggers it?** | The hook `hooks/novo-lead.yml` fires when a new lead comes in. Or it can be called manually by command. |
| **What is inside?** | Workflow name, description, list of steps, and for each step: which agent executes it, which skill it uses, what the expected output is. |
| **Why .yml?** | Because both machine and human can read it. Unlike .md (only humans read it well) and .json (only machines read it well). |
| **If deleted?** | The hook will try to call this workflow and will error. The agent still exists but nobody will trigger it automatically. |
| **Alternative?** | It could be .md if it were only documentation. But since we want the system to execute the steps, it needs a structured format. |
π **CONNECTIONS:**
```
[hooks/novo-lead.yml] ββfiresβββΆ [workflows/qualificar-lead.yml] β‘οΈ
β
calls agent
βΌ
[agents/qualificador.md]
β
uses skill
βΌ
[skills/perguntas-spin/SKILL.md]
```
π‘ **IN YOUR WORLD:**
It is like when your company's CRM detects a new sign-up (hook),
automatically opens the qualification process (workflow),
which escalates to the responsible SDR (agent),
who follows the SPIN selling script (skill).
β οΈ **DECISIONS:**
```
DECISION: I separated the workflow from the agent into different files
WHY: The same agent can be used in several different workflows.
Merging them would mean duplicating the agent every time.
CONSEQUENCE: More flexible. The qualifier can be called by other
processes in the future without rewriting anything.
```
---
## Executed examples
This skill's contract (completeness of the 5 blocks) is verifiable with a small validator:
```console
$ python -c "
def missing_teaching_blocks(text):
checks = {'tree': 'πΊοΈ' in text, 'xray': 'π' in text, 'connections': 'π' in text, 'analogy': 'π‘' in text, 'decisions': 'β οΈ' in text}
return [k for k, ok in checks.items() if not ok]
complete = 'πΊοΈ x\nπ x\nπ x\nπ‘ x\nβ οΈ x'
print('missing:', missing_teaching_blocks(complete))
"
missing: []
```
<!-- executed: 2026-09-22 Β· exit=0 -->
(output with all 5 blocks present - Teaching Mode complete, 0 blocks missing.)
```console
$ python -c "
def missing_teaching_blocks(text):
checks = {'tree': 'πΊοΈ' in text, 'xray': 'π' in text, 'connections': 'π' in text, 'analogy': 'π‘' in text, 'decisions': 'β οΈ' in text}
return [k for k, ok in checks.items() if not ok]
incomplete = 'I will create the file X.'
missing = missing_teaching_blocks(incomplete)
print('missing:', missing)
import sys; sys.exit(1 if missing else 0)
"
missing: ['tree', 'xray', 'connections', 'analogy', 'decisions']
```
<!-- executed: 2026-09-22 Β· exit=1 -->
(a technical output with NONE of the 5 blocks - exactly what this skill exists to prevent.)
```console
$ python -c "
def missing_teaching_blocks(text):
checks = {'tree': 'πΊοΈ' in text, 'xray': 'π' in text, 'connections': 'π' in text, 'analogy': 'π‘' in text, 'decisions': 'β οΈ' in text}
return [k for k, ok in checks.items() if not ok]
partial = 'πΊοΈ x\nπ x'
print('missing:', missing_teaching_blocks(partial))
"
missing: ['connections', 'analogy', 'decisions']
```
<!-- executed: 2026-09-22 Β· exit=0 -->
(PARTIAL output - only tree and x-ray - 3 blocks still missing; useful for reviewing an output in progress.)
## Anti-patterns
- β Applying the 5 blocks to a purely conversational reply ("hi", "where did we stop?") - it becomes noise, see "When NOT to Activate".
- β Mentioning a folder without showing what is inside it.
- β Using a technical term (parser, hook, schema) without translating it in the same sentence.
- β Going beyond 2 levels of "why" without asking whether the reader wants to go deeper.
## Proof
```bash
python -c "
def missing_teaching_blocks(text):
checks = {'tree': 'πΊοΈ' in text, 'xray': 'π' in text, 'connections': 'π' in text, 'analogy': 'π‘' in text, 'decisions': 'β οΈ' in text}
return [k for k, ok in checks.items() if not ok]
assert missing_teaching_blocks('πΊοΈπππ‘β οΈ') == []
assert len(missing_teaching_blocks('nothing here')) == 5
print('self-test OK')
"
```
## Final instruction for CLAUDE.md
Paste this block into your CLAUDE.md to activate Teaching Mode globally:
```markdown
## π§ Teaching Mode (ALWAYS ACTIVE)
When creating, modifying or explaining any technical element, you MUST include:
1. πΊοΈ Full architectural tree showing WHERE the element lives (from the root)
2. π X-ray with: what it is, where it lives, inside what, connected to what, format and why
3. π Visual connection map with arrows and verbs
4. π‘ Analogy with company operations (sales, marketing, management)
5. β οΈ Every technical decision explained: what, why, alternative, consequence
Rules:
- Never shorten paths without showing the full context
- Never use a technical term without an immediate translation
- Never mention a folder without showing what is inside it
- Go up to 2 levels deep. At the 3rd level, ask whether to go deeper.
- Use business language as the primary analogy.
Full reference: ${CLAUDE_PLUGIN_ROOT}/skills/teaching/SKILL.md
```