Learn from the code you're already writing.
This turns files from your own project into lessons: what each line does, why it's written that way, and a short quiz to check whether it stuck. It remembers what you've learned, and notices when you're stuck.
Works with Swift, TypeScript, Python, and Rust.
4 min read · full command reference in USAGE.md
/plugin marketplace add Terryc21/tutorial-creator
/plugin install tutorial-creator@tutorial-creatorThen, in any Claude Code session:
/skill tutorial-creator
Pick "Write a tutorial for myself", then "Topic + file", and point it at any file you've worked on recently. About ten minutes later you have a real lesson.
Installing by hand, without the plugin system
The skill sits at skills/tutorial-creator/ inside this repo. Clone the repo somewhere,
then link that subfolder into your skills folder. Cloning the repo straight into
~/.claude/skills/tutorial-creator buries the skill one level too deep and Claude Code
won't find it.
git clone https://github.com/Terryc21/tutorial-creator ~/src/tutorial-creator && ln -s ~/src/tutorial-creator/skills/tutorial-creator ~/.claude/skills/tutorial-creatorFor one project only, link into that project's skills folder instead:
mkdir -p /path/to/project/.claude/skills && ln -s ~/src/tutorial-creator/skills/tutorial-creator /path/to/project/.claude/skills/tutorial-creatorNew to Claude Code? A skill is a set of written instructions Claude Code knows how
to follow. Type /skill tutorial-creator and it asks what you want, then does it. There
is nothing to memorise — it walks you through every choice.
While building an iOS app with Claude Code, I noticed something uncomfortable: I was producing Swift faster than I was learning to read it. The code worked. I couldn't always have explained it.
Tutorials didn't help much. They teach with examples like let x = 5, and real projects
don't look like that — they're full of async work, state, and decisions somebody made
months ago for reasons nobody wrote down.
I didn't want to stop building and go do exercises. I wanted to learn from the code already appearing in my own project every day. So I built this.
Every lesson has the same shape:
- Words you'll need — only the new ones
- Quiz first — what do you already know?
- The idea — the pattern in plain terms, before any code
- Your actual code, annotated — line by line, from your project
- What goes wrong — realistic mistakes and how to fix them
- Quiz again — same ideas, one level deeper
- Answers — worked explanations for both quizzes
Across lessons it also tracks your vocabulary, your scores, and which ideas you've met.
Read a real one → A production bug where a Mac app's window vanished on save. Three lines of code, and obvious afterwards.
After writing a lesson, the skill asks itself: did this lean on anything I haven't taught yet?
That screenshot is real. After writing lesson 16, it found two ideas the lesson assumed but had never covered, and proposed filling them as lessons 15.5 and 9.5 — numbered to slot in without renumbering everything else.
This is the thing that stops the familiar slide where lesson 1 makes sense, lesson 2 is survivable, and lesson 3 is incomprehensible. The gap was never in lesson 3.
The skill keeps the words you've met and how well you know each one: new, reviewing, mastered, or confused.
You don't set those. You earn them. Three correct answers in a row to reach mastered;
two misses out of three drops you to confused. vocab gap shows what you keep getting
wrong, and can build your next lesson around it.
The one exception: you can move something from mastered back to reviewing when you notice you've forgotten it. Getting back means earning it again.
Judging your own understanding is the thing people are worst at. A word you feel solid on and one you can define from memory are not the same, and only the second can be measured.
| Write a lesson | Six places to start — see USAGE.md |
| Handle your vocabulary | Add, quiz, merge, and see your gaps |
| Show your progress | A read-only summary of where you are |
Plus a second path for writing to teach rather than to learn: turn what you've learned into a Reddit post, a blog post, a book chapter, or reference documentation, each with its own voice.
Real generated output, checked in — not illustrations written by hand.
- The opening screen — what you see when you start. Everything below is what it produced.
- Lesson 3 — a first SwiftUI view — early days. A reader could read this file already; reading it hadn't taught them anything.
- Lesson 16 — a stale captured value — later. A real bug, and everything you'd need to never write it.
- A React hook — the same shape in TypeScript, showing this isn't Swift-only.
- Lesson 22 — verifying the whole path — built from two failures instead of a file, with a passing test suite as the annotated source.
v2.0.1. The version 1 line ran through six months of daily use on a real Swift app before the version 2 rewrite.
Best supported: Swift and SwiftUI. Deepest coverage, and every bundled example.
Works, less proven: TypeScript, Python, and Rust have working teaching sequences, but every example you can read here is Swift. The publishing styles have been tuned but haven't seen much use beyond my own writing.
What would help most: someone using vocab review on a non-Swift project for a few
weeks. Does memory-testing work as well for Python decorators as it does for SwiftUI
property wrappers? I don't know yet. Tell me if you try it.
| Where | For |
|---|---|
| Discussions | Ideas, questions, "is it meant to do that?", how you're using it. The right place for "I'm not sure this is a bug." |
| Issues | Something's broken: it crashed, the output was wrong, the install steps didn't work. |
Pull requests welcome. For anything substantial, open a Discussion first.
bug-echo — find the same bug elsewhere after a fix · bug-prospector — hunt for bugs before a release · workflow-audit — trace SwiftUI behaviour · unforget — a one-file list of deferred work · radar-suite — six skills tracing user paths · prompter — rewrite prompts before running them · skill-reviewer — candid reviews of other skills
- USAGE.md — every command and setting
- CHANGELOG.md — what changed, and the 1.1 → 2.0 notes
- History — this repo was once
code-smarterand held two skills.promptermoved to its own repo, and the repo was renamed to match the skill. Old links still redirect.
Terry Nyberg, Coffee & Code LLC. If this helped you get fluent on a real codebase, a coffee is appreciated — though a note about how it went on a non-Swift project is worth more.
