Develops lesson plans and learning paths for teaching English to a class of multiple ESL/EFL students (group classes, mixed levels and backgrounds). Use when the user asks to plan a class, group lesson, or course for several English learners, e.g. "plan a lesson for my class of 12 B1 students" or "set up my evening English class". For one student at a time, use english-tutoring instead.
0 votes
0 copies
1 view
Added November 10, 2026
content-marketingpythongoshellbashexpress
Works with
claude code
cli
Security analysis
B84/100
mediumInstalls packages at runtime which could introduce malicious dependencies
mediumInstalls packages at runtime which could introduce malicious dependenciesin scripts/md_to_docx.py
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
SSkills Directory ProSkills Directory
Get any skill into Claude in one click.
Are you the author of english-classroom?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/ratherlegit-english-classroom)
---
name: english-classroom
description: Develops lesson plans and learning paths for teaching English to a class of multiple ESL/EFL students (group classes, mixed levels and backgrounds). Use when the user asks to plan a class, group lesson, or course for several English learners, e.g. "plan a lesson for my class of 12 B1 students" or "set up my evening English class". For one student at a time, use english-tutoring instead.
---
# ESL Class Lesson Plans
Build classroom-ready English lesson plans for a class of several ESL/EFL learners. Adapt structure, depth, and format to what the teacher asks for. Do not force a template they did not request.
**This skill covers group classes.** For a single student, the english-tutoring skill is the better fit. If the teacher describes one learner, say so and offer to switch (see Step 1).
Records are stored in `~/eng-teaching-records/classes/`, separate from one-on-one student files in `~/eng-teaching-records/`. Never read or modify the one-on-one files.
## Step 0: Check for a returning class
**First, read `~/eng-teaching-records/_tutor.md`** (the Teacher Profile, shared with the english-tutoring skill; see "Teacher Profile" below). It holds the teacher's own name and standing preferences for how lessons are built. If it does not exist yet, run the one-time setup described there, then continue. Do not repeat the setup for a teacher who already has the file.
Before interviewing anyone, check whether the teacher names a class you already have a record for, such as "next lesson for my Tuesday class". List `~/eng-teaching-records/classes/` and look for `<class-slug>.md` (lowercase, hyphens for spaces). If the teacher's wording could match more than one record, ask which. If you cannot list or read the folder, say so and ask the teacher whether this class already has a record. Create `~/eng-teaching-records/classes/` if it does not exist.
Records live outside the skill folder on purpose: the profile, roster, path, and vocab history are personal data that must survive skill updates and reinstalls.
- **If a record exists**: skip Step 1 entirely. Load the profile, roster, path, and vocab log. Ask a brief check-in only: did students join or leave, did any levels change, anything else to adjust. If the record has no English variety, treat it as American without asking. Update the roster and profile with any changes, applying the Step 1 roster rules (Under-18 rosters, Pronouns) to every student added or edited. If the number of students or the levels changed, recompute the median and distribution. If Level confidence is estimated and a lesson with a Quick Level Check was written, ask what the teacher observed. A roster change never resets the path or the vocab log.
- **If there is an active path**: remind the teacher what is next (the next "Not yet delivered" row: lesson name, theme, grammar point, grouping) and confirm it is still wanted before generating. Let them ask for something different (another theme or activity, skip ahead).
- **If every row is delivered**: say the path is complete and offer a new path (the finished path moves to a Previous Paths section in the record, and the roster and vocab log carry over so words are not repeated) or single lessons.
- **If there is no path**: offer to design one, clearly optional. If they decline, build a single lesson.
- Then go to Step 3 and Step 4 (or to Step 2 first if the teacher wants a new path).
- **If no record exists**: run the full Step 1 interview, then create the record.
## Step 1: Interview the teacher about the class
Ask about the class before drafting. Do not skip this for a one-off "just give me a lesson on X" request, unless Step 0 found a record.
**First, ask whether they want a detailed or light interview, detailed by default.** Detailed asks each item as its own question. Light bundles the same information into four open-ended prompts. If the teacher states no preference, use detailed. The full question set, the reasons behind each question, the light mode prompts, and the roster rules are in `references/class-interview.md`.
### Detailed mode
Ask these as **separate questions**, in this order:
1. **Class name**, free text typed by the teacher. Never offer suggested names.
2. **Setting**: school, adult evening class, corporate, online, or in person.
3. **Number of students.**
4. **Age group and range**: kids, teens, or adults.
5. **Levels**: a headcount of how many students are at each CEFR level (for example A2: 6, B2: 6). Compute the median (the lower of the two bands if it falls between) and the distribution: single level, spread, or bimodal. If the teacher is unsure, ask what students can do, infer levels from `references/cefr-levels.md`, and mark the levels as estimated.
6. **Backgrounds**: countries and first languages. Determine whether the class is mono-lingual or mixed.
7. **Shared interests and professions.**
8. **Goal for learning English.**
9. **English variety**: American or British English. Offer **American (default)** first. It controls spelling, vocabulary, and cultural references. The teacher is American, so if they skip it, use American.
10. **Session length and frequency**: offer 30, 60, 90 minutes, or something else.
11. **Activity choice**: random, specific activities the teacher names, or show me the list first (names only from `references/teacher-activities.md`, then re-ask).
12. **Single lesson or learning path.** If a path, ask how many lessons as the very next question. Never suggest or default to a number.
13. **Key skills to focus on.**
14. **Anything to include or exclude**: topics to avoid, a coursebook to align with, grammar already mastered or specifically requested.
15. **Optional roster**: offer to add individual students now or later.
### Light mode
Four open-ended prompts, one at a time (the exact wording is in `references/class-interview.md`), then the roster offer. Parse each answer into the same fields as detailed mode and ask a one-off follow-up for anything missing instead of guessing.
### Interview rules
- **A class of one**: if the number of students is 1, say that this is a one-on-one case, that english-tutoring fits better, and offer to switch. Continue here only if the teacher insists.
- **A class name that already exists**: if the slug of a new class name matches an existing record, say the record already exists and offer three options: the same class (load it, Step 0), a new term for the same class (keep the roster and vocab log, move the old path to Previous Paths, and design a new path), or a different class that needs another name. Never overwrite a record: before writing a new record file, confirm the path does not exist (for example by trying to read it). If you cannot check, ask the teacher before writing.
- **Kids and teens**: keep every topic and activity age-appropriate, and honor every exclusion the teacher gives.
- **Under-18 rosters**: the Name column is the first name plus the last initial ("Maria G."). Ask for the last initial only, never a full surname (if the teacher gives one anyway, store only the letters the label needs), and never ask for birthdates, addresses, or photos. If two students would share a label, extend the initial with more letters of the surname ("Maria Ga." and "Maria Gr."), and if that still collides, add a number ("Maria G. 2"). Notes are limited to learning needs in plain terms ("needs extra time", "needs larger print"). Never write diagnoses, family situations, or behavior notes to the record. If the teacher volunteers them, use them in the session only where they help, describe the need rather than the diagnosis in any plan, and never put them in a handout or exported file. A class with any under-18 student follows this rule for the whole roster. Adult classes use whatever names the teacher gives.
- **Unknown, uniform, or bimodal levels**: if the teacher cannot give levels, ask what students can do, infer levels, and mark them estimated. If every student is at a single level, record that and note that Support, Core, and Stretch tiers still apply (see Step 5). If the class is bimodal (two clusters of at least a quarter of the class each, two or more CEFR bands apart, with the bands between them holding fewer students than either cluster, for example half A2 and half B2), say that no single anchor level fits and offer parallel tracks (Step 2). If the teacher keeps tiers anyway, ask which band to anchor on. Save the choice in the Differentiation line of the Profile.
- **Mono-lingual vs mixed**: infer the shared first language from the location for a mono-lingual class and use the L1 interference notes in `references/class-interview.md` silently. For a mixed class, keep activities English-only, with no translation-dependent vocab, and include at least one culture-sharing prompt or task per lesson (for example "How does this work in your country?").
- **Pronouns for roster students** are asked, never inferred from a name.
- Do not ask about vocab preferences or home assignments in this round. Those are asked right before a lesson is written (Step 4).
### The class record
At the end of Step 1, create `~/eng-teaching-records/classes/<class-slug>.md`:
```
# Class Record: <Class name>
## Profile
- Setting: ...
- Number of students: ...
- Age group: ...
- Level headcount: A2: 6, B2: 6
- Median level: ... (lower of the two if between bands)
- Distribution: single level / spread / bimodal
- Level confidence: confirmed / estimated
- Backgrounds: ... (mono-lingual / mixed)
- Shared interests: ...
- Goal: ...
- Session length and frequency: ...
- Activity choice: ...
- English variety: American/British (default American)
- Key skills weighting: ...
- Differentiation: tiers (anchor: ...) / parallel tracks (bands, lessons)
- Exclusions: ...
- Vocab constraint: ...
- Vocab count: ...
- Home assignment: yes/no
- Teacher's notes: integrated/end-only/none
- Student handout: yes/no
## Roster (optional)
| Name | Pronouns | Level | First language | Notes |
|---|---|---|---|---|
## Learning Path (omit if single-lesson only)
| Lesson # | Lesson Name | Theme | Grammar Point | Activity Type(s) | Grouping | Status |
|---|---|---|---|---|---|---|
| 1 | ... | ... | ... | ... | Mixed-level pairs | Delivered 2026-10-07 |
| 2 | ... | ... | ... | ... | Same-level trios | Not yet delivered |
## Previous Paths (omit if none)
### Completed 2026-12-15
(the old path table)
## Activity Log
- 2026-10-07: Role Play, This or That
## Warm-Up Log
- 2026-10-07: would-you-rather, favorites round
## Vocabulary Log
### 2026-10-07, Lesson 1: <name>
- word one
- word two
- Grammar: <point taught>
- Home assignment: <what was set>
```
The vocab, home assignment, teacher's notes, and handout fields stay blank until Step 4 asks about them.
### Teacher Profile (the teacher's name and standing preferences)
Keep one file for the teacher at `~/eng-teaching-records/_tutor.md`. The same file is used by the english-tutoring skill, so a teacher who also tutors has one profile. The leading underscore keeps it from ever matching a class slug, and it outlives skill updates for the same reason class records do.
**What it is for.** Lessons are built around the class: levels, interests, goal, roster. The Teacher Profile never changes any of that. It supplies the teacher's name (so the teacher's side of dialogues and role plays uses it, not a random character) and how the teacher likes plans shaped (how many words, which outputs). Use it to set format and quantity, never to override what the class needs.
```
# Tutor Profile
- Name: ... (used for the teacher's side of dialogues and role plays)
- Vocab candidates: ... (size of the list shown first; default about 20)
- Vocab final: ... (range the teacher narrows it to; default 6-10 for a class)
- Vocab constraint or style: ... (for example mixed, phrasal verbs, everyday expressions only)
- Outputs: student handout yes/no | home assignment yes/no | teacher's notes integrated/end-only/none | .docx export yes/no
- Activity choice: random / named favorites / ask each time
- Session length: ... (default if a class has none)
- Notes: ... (anything else the teacher says about how they like plans built)
```
The file may also hold lines this skill does not use (for example grammar depth for one-to-one lessons). Leave them as they are.
**Setup (once, when the file does not exist).** Ask in one round, as short free-text prompts: name, then "how long is a usual class, how many vocab candidates do you want to see and how many do you usually keep, and any kind you prefer?", then "which outputs do you usually want: student handout, home assignment, teacher's notes, .docx?". "No preference" is a fine answer; leave that line out rather than inventing a value. Save the file right away.
**Precedence.** The teacher's answer this session beats the class record, which beats the Teacher Profile, which beats the skill's defaults. A one-off "20 words this time" does not rewrite the profile.
**Keeping it current.** When the teacher states a preference about themselves rather than one class ("I always want a handout"), offer once to save it to the Teacher Profile. When it is about one class, save it in that class's record. If an older class record has its own vocab count, home assignment or notes line, it still counts as the class's setting; do not rewrite old records to move those lines.
## Step 2: Design the class learning path
Skip this step only when the teacher asked for a single standalone lesson. Whenever more than one lesson is requested, design the full path **before** writing any lesson, and share it for approval.
Output the path as a table:
| Lesson # | Lesson Name | Theme | Grammar Point | Activity Type(s) | Grouping |
|---|---|---|---|---|---|
| 1 | ... | ... | ... | ... | ... |
Rules:
- **Grammar** stays within, or just at the edge of, the median level (use `references/cefr-levels.md`). Vary it across lessons and sequence simple to complex where there is a natural order.
- **Activities** come mainly from `references/teacher-activities.md`. Vary them, and do not repeat one within 3 to 4 lessons or back to back. List 2 to 3 per lesson.
- **Keep external-material activities rare.** Default to generated, self-contained activities. At most one external-material activity per lesson, and no more than one every few lessons across the path.
- **Group formats**: favor pair, group, and whole-class activities. Limit activities where one student performs alone for the whole room, and rotate them.
- **Themes** come from what the class shares: common interests, the age group, the setting, and the goal. If a roster records individual interests, spread them across lessons so no one student is the recurring example.
- **Grouping** column: state the grouping pattern for the lesson (mixed-level pairs, same-level trios, whole class). Patterns are in `references/differentiation.md`.
- **Weight toward the key skills** and **respect exclusions**.
- **Wide or bimodal spread**: if the spread is wider than two CEFR bands (for example A2 to C1), or the class is bimodal (for example half at A2 and half at B2, so no single anchor level fits), tell the teacher plainly and offer parallel tracks for the lessons where tiers would stretch too far. Tiers remain the default unless the teacher chooses parallel tracks. Save the choice in the Differentiation line of the Profile. See `references/differentiation.md`.
**Do not generate any lesson immediately after presenting the path.** Ask whether they want adjustments or want Lesson 1 generated. Only then proceed to Steps 3 and 4 for Lesson 1. Never generate all lessons at once, and ask before each later lesson, using that row's theme, grammar point, activities, and grouping as the spec. Do not swap any of them without telling the teacher.
Once the teacher approves the path, save it into the class record with every Status set to "Not yet delivered". If the record already has a Learning Path (a completed path, or a new term), first move the old table unchanged under `## Previous Paths` as `### Completed <today's date>` (use `### Ended <today's date>` if it still had undelivered rows), and keep the roster, profile, and Vocabulary Log as they are. Then offer to export the path table as a `.docx` (Step 6).
## Step 3: Pick a framework
Default to **PPP (Presentation, Practice, Production)** for grammar and vocab lessons, unless the teacher asks for something else, the goal is task-based (exam prep, projects), or the lesson is skills-focused (a reading or listening lesson fits pre-, during-, and post-task). See `references/lesson-frameworks.md` for the options and the group adjustments.
## Step 4: Build the plan
If the lesson comes from an approved path, use that row's theme, grammar point, activities, and grouping as given.
### Lesson-specific questions (ask now, not during Step 1)
Before drafting, settle each item below in this order: the teacher's answer this session, then the class record, then the Teacher Profile, then the skill default. **Only ask about an item that none of those settle.** Show the values you are assuming in one line (for example "Using your usual setup: handout yes, home assignment yes, notes integrated. Change anything?") so the teacher can override without being quizzed. The items:
- **Vocab constraint**: phrasal verbs, a part of speech, or no constraint (default: mixed, chosen to fit the topic).
- **Vocab candidates and final range** (default: show about 20, keep 6 to 10). See "Vocabulary selection" below.
- **Home assignment**: include one? (default yes).
- **Teacher's notes**: integrated (a short note under the relevant stage), end-only (one closing section), or none. Default integrated.
- **Student handout**: a copy for students without Teacher's Notes, Materials needed, and Time Summary. Default yes.
Ask these once. For a path, ask before Lesson 1 and reuse the answers unless the teacher wants a change. Save the answers to the Profile in the class record.
**Do not open the plan with a class-details or framework header.** Start straight in with the lesson content.
Unless the teacher specifies their own format, include in this order:
1. **Objective(s)**: a can-do statement written directly to the students in the second person ("You will be able to..."), never in the third person ("Students will...").
2. **Warm Up Conversation**
3. **Quick Level Check** (first lesson only, when levels are estimated)
4. **Review of Prior Content** (every lesson that has anything to review)
5. **Fresh Vocabulary**
6. **Grammar Focus**
7. **Controlled Practice** (right after Grammar Focus, before any activity; see below)
8. **Activities** (2 to 3, each with a suggested grouping and three versions)
9. **Wrap-up**
10. **Home Assignment** (unless the teacher opted out)
11. **Materials needed**
12. **Time Summary**
13. **Teacher's Notes** (if not turned off)
14. **Student Handout** (a second copy without Teacher's Notes, Materials needed, and Time Summary, unless the teacher opted out)
### Vocabulary selection (before anything else is drafted)
Fresh Vocabulary is chosen **first**, as soon as the lesson's theme is known and the lesson-specific questions above are settled. Do not write the warm-up, grammar focus, activities or any other part of the plan until the teacher has picked the words. Everything else is built around the words they keep, so a word they cut never ends up in the lesson material.
1. **Show a candidate list of about 20** words or phrases (use the Vocab candidates size from the class record or Teacher Profile, or another size if the teacher asks). Apply every rule in "Fresh Vocabulary" below: theme and the class's shared interests, one CEFR level above the class median, the vocab constraint, nothing already in the Vocabulary Log. Write each candidate in the full item format (`word – definition`, then `Example:` with a collocation-rich sentence written for this class) so the teacher can judge the word and its example together. Nothing else from the lesson is shown at this stage. **Present the list as plain chat text, never inside a question, option or form box** (those collapse the list into one unformatted block). Number the candidates 1, 2, 3 and so on, each as a short block: the number and the `word – definition` line, then the `Example:` line beneath it, with a blank line between items. The numbers exist only so the teacher can answer fast and are used only at this stage. End the message with one line asking what to cut, and say the shortcuts work: numbers, ranges and "keep" lists (for example "cut 2, 5, 7-9" or "keep 1 3 4 8 12"). Do not say how many to cut or keep, and do not mention the final range here: that judgment is the user's.
2. **The teacher narrows it**, by number ("cut 2, 5, 7-9", "keep 1 3 4 8", or "keep all except 6"), by word, or a mix. Accept any of these, read ranges and lists, and reply with a one-line confirmation of the final kept words by name (no numbers) before moving on. The target is the Vocab final range from the class record or Teacher Profile (default 6 to 10), and the teacher can override it. If they ask for swaps or more candidates, supply them and show the updated list. Do not move on until they confirm the final set.
3. **Only then draft the lesson.** The kept words, with the exact definitions and examples the teacher approved, become the Fresh Vocabulary section as written, in the standard unnumbered format (the selection numbers are dropped and never appear in the lesson, handout or record). Example sentences, dialogues, Review of Prior Content and activities may use only the kept words as the lesson's new vocabulary. Never work in a cut candidate.
4. **Record only the kept words** in the Vocabulary Log. Cut candidates are not logged, so they stay eligible for later lessons.
When generating a lesson from a learning path, this step still comes first: take the theme from that lesson's row, then run it before drafting.
### Time Summary
Timings are suggestions the teacher can flex. Do not put a time next to each heading. Collect all suggested timings in one Time Summary section near the end. Non-activity stages should sum close to the class length. The activity options can add up to more than what remains: that is intentional headroom, not an error.
### Warm Up Conversation
Placed right after the Objective. A short, genuine check-in the whole class can answer in pairs or groups: 2 to 3 open-ended questions about their lives, in the spirit of "Any highlights from your week?" or "What are you looking forward to this weekend?". Write fresh questions for every lesson and vary the angle. Make them fun and varied in style, not just "how was your week": rotate through types and make at least one of the 2 to 3 playful (would-you-rather, a harmless hypothetical, this-or-that, a quick favorites round, a silly scenario, a best/worst question, a one-minute story prompt, two truths and a lie). A real check-in (the week just past, the week ahead) may be one of the questions, not the whole set. Check the class record's Warm-Up Log, avoid the types used in the last few lessons, and add this lesson's types to it. Format as a bulleted list, and carry that format into the Student Handout. These are not lesson-topic teasers and not one-to-one rapport questions: every student must be able to answer regardless of level.
### Quick Level Check
Only in the first lesson written for this class while the record says levels are estimated. Place it right after the Warm Up Conversation. A short diagnostic of about 5 minutes, done in pairs: 3 to 4 can-do prompts at ascending difficulty (for example "Describe your morning.", "Explain a problem at work or school and what you did about it.", "Give your opinion on a topic and defend it.") and one written line the teacher can collect. Add a Teacher's Note on what to observe (who stalls at which prompt, which structures break down). The lesson is taught after this session, so ask for the results in chat, never inside the plan or handout: invite the teacher to report back, and ask again at the next Step 0 check-in. Then update the headcount, median, distribution, and level confidence (confirmed once the teacher reports levels from what they saw, still estimated if they are unsure). The Teacher's Note says what to observe and never addresses the assistant.
### Review of Prior Content (recycling)
**Every lesson includes this section whenever the class has any prior content on record** (vocabulary, grammar points, or a previous home assignment). Recycle before new material:
- **Vocabulary**: pull 2 to 4 items from the class Vocabulary Log. Prioritize items from lessons that are neither the most recent nor already reviewed several times, so review rotates through everything taught.
- **Grammar**: one quick retrieval task on a grammar point from an earlier lesson (a few prompts, a short error correction, or "tell your partner about X using the structure"), rotating through earlier points.
- **Last home assignment**: a brief follow-up in pairs (read a sentence aloud, share one answer, fix one error), if one was given.
- Keep it to a few minutes, as short pair speaking prompts rather than worksheets: a sentence with the word blanked out, or "use this word in a sentence about..." tied to the class's shared interests.
- Skip this section only for the class's first-ever lesson with nothing imported.
### Home Assignment
Included by default. Class time is for speaking, so **writing tasks belong here**, not in the in-class activities. Choose 1 to 2 tasks from the "Home assignment ideas" list in `references/activity-bank.md`, tied to the lesson's theme, vocabulary, and grammar. Keep it doable in 15 to 20 minutes, address it to the students, and give a Support option (a frame or word bank) for lower levels. Note which task will be reviewed next lesson.
### Fresh Vocabulary
Every lesson gets a standalone new-vocabulary section:
- Use the words the teacher kept in Vocabulary selection, tied to the lesson's theme and the class's shared interests. Examples must read as written for this class.
- **Pitch vocab one CEFR level above the class median.** This is a deliberate stretch (use `references/cefr-levels.md`).
- **One list for the whole class.** The Support tier adds scaffolds for the same words (sentence frames, example hints, a word bank), never a shorter or easier list. The one exception is a lesson where the teacher chose parallel tracks: each track gets its own list, pitched one level above that track's band, and every list goes into the Vocabulary Log (see `references/differentiation.md`).
- Apply the vocab constraint from the interview.
- Lead with collocations, not isolated definitions.
- **Never repeat a word already taught to this class.** Check the Vocabulary Log first and swap out any overlap.
- **Every fresh word must appear at least twice in the lesson, beyond its own Fresh Vocabulary entry** (in the Grammar Focus examples, a dialogue, Review of Prior Content, an activity, the wrap-up, or the home assignment). **At least one of those appearances must be outside the activities**, because activities are options the teacher may skip live. Before delivering, count the appearances of each word and add the missing ones. Use the word naturally in a sentence or task, not as a list of words to repeat.
- A mixed class gets no translation-dependent items.
**Format**, every item exactly:
```
word – definition
Example: example sentence
```
Use an en dash between word and definition. The example must connect to the lesson theme and the class's shared interests.
### Grammar Focus
The lesson's main teaching point, taught once at the median level (or at the anchor band the teacher chose; with parallel tracks, once per track at that track's band). The presentation always includes:
- **A clear, plain-language explanation of the rule**: what it means and when a speaker would use it.
- **A formula, if the structure has one, kept as short as possible** (for example *have/has* + past participle). Skip it for grammar that is not formulaic. Do not add parentheticals.
- **Several thematic examples** tied to the lesson topic and the class's interests.
- **Separate examples for each distinct use or form** if the grammar point has several. If the lesson is deliberately scoped to one use, say so briefly.
- A short **review box** of the prerequisite structure for the Support tier, and a short **extension** (a further use or a contrast) for the Stretch tier.
**The Grammar Focus must follow its own rule: the heading, the stated rule, the formula and every example have to agree.** Before delivering, test each example against the rule as written. If an example breaks the rule (for example *stressful* under an "-ed and -ing adjectives" rule, where the word is neither), either replace it with an example that fits, or widen the heading, the formula and the rule to cover the exception and add a one-line explanation of it. Never leave an unexplained exception sitting in the examples. The same goes for the Controlled Practice items and their answers: every answer must be correct under the rule as taught.
Keep it tight. Edge cases and register notes belong in a Teacher's Note, not in the student-facing explanation. Practice that follows builds on the examples already given.
### Controlled Practice
Every lesson with a Grammar Focus gets a short, low-stakes exercise **right after the Grammar Focus and before any role play, discussion or other activity heading**, under its own heading, `Controlled Practice`. It is a lesson stage, not an activity option:
- It **does not count** toward the 2 to 3 activities, is not drawn from the weighted activity list, is not written in three versions, and is not subject to the no-repeat rule or the "must work with no dependencies" rule (it builds directly on the Grammar Focus above it). It is written once, at the same band as the Grammar Focus
- **Format:** choose the right form, fix the sentence, or a short gap-fill. Pick one. Check the Activity Log and vary the format from the previous lesson's controlled practice when you can
- **About 6 to 8 items**, each with one clear answer, practicing only this lesson's grammar point. A numbered list is right here, since the class works through the items in order. A gap-fill with a word bank follows the word-bank order rule below
- **Use the class's own world:** their shared interests, workplaces, city, jobs and real scenarios from the class record, written fresh (never reuse a student's own sentences). The sentences should read as if written for this one class
- **Recycle the fresh vocabulary:** work kept Fresh Vocabulary words into the items. These appearances count toward each word's required two
- **End with a short speaking or writing step**, one line addressed to the students: read the finished sentences aloud to a partner, or make one sentence of their own with the structure. Pick one, not both
- Put the answers in a short Teacher's Note, never in the student-facing text
- The Time Summary lists it as its own line
### Activities
Include **2 to 3 activities**, not one fixed activity, so the teacher can choose, skip, or swap live:
- **Random**: pick 2 to 3 from `references/teacher-activities.md` that fit the level, topic, time, and class size. Filter first, then choose using the weight tags there (High = 3, Medium = 2, Low = 1). **Never reuse an activity from the class Activity Log within the last 4 lessons**, and avoid two activities of the same category (for example two debate-style activities) in one lesson.
- **Specific**: use the named activities (the no-repeat rule does not apply to requested activities). If the teacher named only one, add 1 to 2 more.
- **Teacher's judgment or unspecified**: start from `references/teacher-activities.md`, and fall back to `references/activity-bank.md` only if nothing there fits.
**Every activity has**:
- A suggested **grouping** (mixed-level pairs, same-level trios, whole class). Name the pairs and groups when a roster exists.
- **Three versions of the same task**: **Support** (scaffolds such as sentence frames, a word bank, fewer items, or a model answer), **Core** (the baseline), **Stretch** (an extra constraint, longer output, or more abstract content). Rules are in `references/differentiation.md`.
**Generate almost all content yourself**: dialogues, stories, scenarios, discussion questions, data tables. At most **1 activity per lesson** may require the teacher to source real external material (a real photo, video or audio clip, or rarely a real article), and only when it is clearly the best fit. Describe a Picture needs a real photo, so it always counts. If used, list the photo in Materials needed and add a Teacher's Note suggesting what to look for.
Present each option under its own heading named after the activity itself (for example "Role Play: Ordering at a Cafe"), **never lettered or numbered** ("Activity A", "Activity 2"), because the teacher may reorder, skip, or swap them live with no wrapping stage heading, going straight from Grammar Focus into the first activity. No time on the headings. Do not write framing like "choose from these activities". It is fine for the activities' combined time to exceed the class length.
**Every activity must work with no dependencies: if the teacher runs only this one, it must be complete.** Never refer to another activity by name or position ("as in Activity A", "after the debate", "use the words from the previous task"), and never rely on something produced in a different activity. Activities may share a story, setting or theme, but each one restates whatever it needs from that shared context so it makes sense alone, and none may require another to have been done first.
Any list of items within an activity is a **bulleted list**. Numbered lists are for sequential steps only.
**Gap-fills, word banks and matching: never let the items follow the bank.** This matters most in the Support tier, where word banks are the main scaffold. In any exercise where answers come from a word bank or list (gap-fill with a word bank, matching words to meanings or halves of sentences, choosing from a box), the order of the items must not match the order of the bank. Write the items first, then build the bank by listing the answers alphabetically, and check that the items are not in alphabetical order either. Before delivering, read the answers down in item order and compare with the bank: no two consecutive items may use consecutive bank words, and the first and last items must not be the first and last bank words. For matching, jumble the right-hand column fully so that no row lines up with its answer. Check all three tiers, the Student Handout and the home assignment. Also make sure no bank word fits a second gap, and keep the bank to the answers plus at most two extras.
Write every activity's instructions **addressed to the students, in the second person** ("Read the dialogue and discuss..."), not as stage directions to the teacher.
**Hard rule: no student-facing text may mention the teacher, tutor, instructor, or "the students" in any form.** That includes "your teacher", "ask your teacher", "the teacher will...", and "the students". The teacher pastes this material into the lesson and is standing in the room, so "your teacher will read a story" is awkward and makes a lesson built for this class read like generic worksheet text. Rewrite so nobody is named: "you will hear a short story", "look at the photo". If a person must act, use "we" or an imperative ("Take turns reading", "Let's check the answers together"). Only Teacher's Notes, Materials needed, and the Time Summary may mention the teacher, and none of them appear in the handout. **Before delivering the plan or handout, scan the student-facing text for teacher, tutor, instructor, and student (case-insensitive) and rewrite every hit.** Calibrate language to the median level. Personalize using the class's shared interests, goal, and place. For a mono-lingual class, pre-empt the likely L1 errors silently.
**Final check before delivering (run all four, on the main plan, the Student Handout and every home assignment, and fix every hit before showing anything):**
1. **Word-bank order.** For every gap-fill, matching or choose-from-a-box exercise, in every tier: read the answers down in item order next to the bank. Items must not follow the bank's order (the bank is alphabetical, the items are not).
2. **Grammar consistency.** Read the Grammar Focus heading, rule, formula and each example in turn. Every example must fit the rule as written, and any exception must be covered in the heading, the formula and a one-line explanation, or the example replaced. Then check each Controlled Practice answer against the same rule.
3. **Controlled Practice.** The lesson has a Controlled Practice stage right after the Grammar Focus and before the first activity, with about 6 to 8 items, recycled vocabulary, and a closing read-aloud or own-sentence step. It is not counted among the activities and has no Support, Core and Stretch split.
4. **No teacher words.** The teacher/tutor/instructor/student scan above.
### Wrap-up
Close with an **exit task** that is quick to check across the room: a one-sentence ticket, a pair check, a mini-whiteboard answer, or a written line the teacher collects. It must be specific and tied to the lesson's content, a real check of the objective, not "summarize what you learned". For example: "Write one sentence about a film you would recommend to a friend, using the passive voice and one new vocabulary word."
### Teacher's Notes
For the teacher only, never addressed to students. Keep each note to 1 to 2 sentences. Cover things the teacher could not infer from the heading: group management, how to monitor several groups, early finishers (point to the Stretch version), timing with a large class, which activity to choose if time is short, and, for a mono-lingual class, the likely L1 error for this grammar point. A note earns its place only if it adds something. Skip self-explanatory stages.
- **Integrated** (default): a brief *Teacher's note:* line under the stages that have one.
- **End-only**: one closing "Teacher's Notes" section with a short bullet per stage worth flagging.
- **Not included**: omit entirely. Do not sneak pedagogical asides into stage descriptions.
### Student Handout
Unless the teacher opted out, produce a second copy after the main plan, whatever the teacher's-notes setting. It is the same document, same wording, same formatting, minus Teacher's Notes, Materials needed, and Time Summary (with notes set to none, it simply omits Materials needed and Time Summary). Label it with just the lesson name plus "Student Handout". Do not add any caption describing what was removed. If exporting to `.docx`, export the plan and the handout as separate files.
### Updating the class record
After finalizing a lesson:
- Set its path row Status to "Delivered <date>".
- If the lesson's theme, grammar point, activities, or grouping ended up different from the path row, update the row to match what was written and tell the teacher, so later lessons avoid repeats.
- When the teacher reports what the Quick Level Check showed, update the level headcount, median, distribution, and confidence.
- **Before** drafting Fresh Vocabulary, read the Vocabulary Log. **After** finalizing the lesson, append the kept words (not the cut candidates), the grammar point, and the home assignment under a new dated heading.
- **Before** choosing activities, read the Activity Log to apply the no-repeat rule. If the record has no Activity Log yet (an older record), use the Activity Type(s) column of the Learning Path table for lessons already marked Delivered as the history instead, so repeats are avoided from the next lesson. **After** finalizing, append the chosen activities with the date, and also log the Controlled Practice as `Controlled Practice (<format>)`, e.g. `- 2026-10-07: Controlled Practice (fix the sentence), Role Play, This or That`. Controlled Practice entries do not count toward the no-repeat rule for activities; they are logged so the next lesson can vary the format.
- **Before** writing the Warm Up Conversation, read the Warm-Up Log to avoid recent question types. **After** finalizing, append this lesson's types with the date. If the record has no Warm-Up Log yet (an older record), add one.
- If the teacher says the class already knows certain words, log those too.
## Step 5: Differentiation and common pitfalls
The full rules are in `references/differentiation.md`. In short:
- **Anchor and tiers**: target the median. Every activity has Support, Core, and Stretch versions of the same task. Fresh vocab is one list for everyone, never a shorter list (per track, if the teacher chose parallel tracks).
- **Grouping**: mixed-level pairs for peer help, same-level trios for Support and Stretch tasks, whole class for warm-up and wrap-up. Rotate partners and who goes first.
- **Wide or bimodal spread**: more than two CEFR bands, or a bimodal class, triggers an offer of parallel tracks. Tiers stay the default.
- **Single level**: if all students are at a single level, tiers still apply as scaffolding and extension. If levels are only estimated, the first lesson starts with a Quick Level Check.
- **Class size**: small (up to 6), medium (7 to 15), large (16 or more) change the number of groups, the monitoring approach, and which activities are practical.
- **Age**: kids, teens, and adults differ in tone, topics, activity length, and what is age-appropriate.
- **Pitfalls**: no more than one new grammar point per lesson or about 8 to 10 new vocab items. For exam prep, tie every activity to the exam skill being tested.
## Output format
Write the plan as clean markdown with a header per stage. No timing in headers. Do not pad with teaching theory the teacher already knows. Keep it concrete and usable at the front of a classroom.
**Use the chosen English variety consistently, American by default.** Every word in every output (lesson text, dialogues, vocab words and definitions, example sentences, instructions, handouts, teacher's notes) follows American spelling and usage unless the teacher chose British in Step 1: color, favorite, organize, realize, center, traveling, program, gray, practice (noun and verb), plus American vocabulary (apartment, elevator, truck, vacation, soccer, cell phone) and American date and measurement conventions. If British was chosen, use it just as consistently. Never mix the two in one document. Run a quick scan for common British spellings (-our, -ise, -re, -ll- doubling) before delivering.
**Never use an em dash in narrative or body text in anything this skill produces**: lesson plans, handouts, learning paths, teacher's notes, interview questions, record files, and chat responses. It reads as AI-generated writing. Use a period, comma, colon, or parentheses, or split into two sentences. The only acceptable use is as a separator in a heading or label, and vocab items use an en dash. When in doubt, do not use one.
## Step 6: Export as a .docx (optional)
A finished lesson plan, a student handout, or an approved path table is a document the teacher will print, edit, or share. After presenting one, offer to export it as a `.docx`. Do not export automatically. Build the file only once the teacher says yes or asks for a Word file up front.
**Many teachers using this skill are not technical, so file delivery must not be a place they get stuck.** Verify it, in this order:
1. **Check whether this environment has a place to write files the teacher can reach.** Some chat harnesses only hand over files created through their own attachment mechanism, or when a folder is connected for the session. A file written by a script is not guaranteed to reach the teacher. Do not assume a previous session's connection carried over. Check first.
2. **If there is a working connected location**, ask where to save (unless the teacher already said), reuse that answer for the session, and write the file there. Never save exports inside `~/eng-teaching-records/`, which holds records only.
3. **If there is no connected location, or you cannot confirm one, say so in plain language** and share the file directly in the chat instead. Do not fail silently.
4. **After creating the file, confirm it exists and is reachable by the teacher** before saying it is done. A script exiting without error is not proof.
**If the environment has a dedicated Outputs or Files panel** (for example Claude's Cowork-style task view): a file the assistant writes directly shows up there, but a file produced by running a script does not. After running the converter, always send or attach each generated file explicitly. In the same message, name every file exactly and tell the teacher where to find it ("click **Outputs** in the panel on the right").
**If the environment has no way to run code or a shell** (a plain chat assistant with no tools): say plainly that this environment cannot generate a Word file, and do not claim to have created one. Output the content as clean, well-structured markdown (proper `#` and `##` headings, bold, bullet and numbered lists) and tell the teacher to copy and paste it into Word or Google Docs. If a code interpreter tool is available, try the conversion instead.
**Default, on any harness with shell access**: write the plan to a markdown file, then run the converter:
```bash
python3 skills/english-classroom/scripts/md_to_docx.py <plan>.md <output>.docx
```
That path is relative to the repo root. In an installed plugin the working directory is the teacher's own, so run `scripts/md_to_docx.py` from the folder this SKILL.md is in (Claude Code gives the skill's base directory when it loads).
If `python-docx` is missing, run `pip install python-docx` and retry. The script handles `#`, `##`, `###` headings, bold and italic inline markup, lists, `> ` blockquote lines (rendered indented, black, italic, used for Teacher's Notes), and markdown tables (real Word tables with a bold header row, used for the path). Write the source markdown accordingly:
- Lesson title as `#`, each stage as `##`.
- Bold the vocab word in each `word – definition` line and italicize the example sentence.
- Prefix each Teacher's Note line with `> `.
- For a path, write the exact markdown table already used to present it.
Name files `<class-slug>-lesson-<n>.docx`, `<class-slug>-lesson-<n>-handout.docx`, and `<class-slug>-learning-path.docx`. For a single lesson outside a path, use `<class-slug>-<lesson-name-slug>.docx`.
**Always use the bundled converter for plans, handouts, and path tables, on every harness.** Do not use the `docx` skill, docx-js, or hand-built Word files: their default heading and title styles are blue.
**Exports are black text only, with no exceptions.** No blue headings, no blue title or rule under the title, no colored text, no colored table shading, and no hyperlinks (Word renders them blue and underlined). The converter forces every style to black, turns `[label](url)` into plain label text, and checks the saved file, exiting with an error if any color or hyperlink remains. Never add color to the source markdown or post-process the file. If the converter reports non-black formatting, fix the cause and re-export. Do not call an export done until the converter has printed `Wrote <file>` without an error.
**After creating any file, tell the teacher exactly where it landed**: the full path in a connected folder, or a plain statement that it is attached in the chat. This applies to every file this skill writes: exports, handouts, and record files.