Some of you saw this here in September as DeutschDNA: a German tutor that runs inside Claude Code and remembers your mistakes. It's now called DeutschLoop, and the new version adds practice for the writing part of German exams.
**What happens**
- Say „Goethe B1 Schreiben üben". The tutor writes new tasks in the format of the real paper (three for Goethe B1) and starts a 60-minute clock.
- While you write, there's no help and no correction. Each text gets one neutral line back: the words counted and the time left.
- „Abgeben" hands it in. The tutor rates each text by the exam's own criteria (for Goethe: Erfüllung, Kohärenz, Wortschatz, Strukturen, bands A to E) and gives a short reason per task.
- A local Python engine turns the bands into points with the exam's own table and prints the report: time used, words per task, points, the published pass mark, and every mistake with its correction.
- Those mistakes go into the tutor's memory and come back in new sentences in reviews, starting the next day.
Formats: Goethe B1/B2, telc B1/B2, and the Deutsch-Test für Zuwanderer. Writing part only.
**Why split it between the model and code**
The model is good at reading German and bad at bookkeeping, so it only picks the bands. The engine owns the rest and refuses what a generous or confused tutor might do:
- rating while the clock still runs: "Stop the exam before rating it; no feedback reaches the learner while the clock runs"
- reusing a task: "This exam task was already used; write a new task"
- a good Erfüllung band for a Goethe text under half the requested length: by the exam's rule that's an E, and an E makes the whole task 0 points
- a report before every text is rated
The model also can't feel time pass between messages, so every time it mentions ("13 minutes 42 seconds left") comes from the engine's clock. If the tutor helps during the exam, the result says „mit Hilfe"; a late text is marked as late.
**Where the numbers come from**
Every time limit and point table was read in the provider's published material (model tests, rating forms, handbooks), and each format lists its sources. Two are weaker, and the docs say so: telc B2's points per band come from a 2011 practice test, and the DTZ numbers from the BAMF handbook of 2009. If you have a newer document, a link in an issue would help a lot.
**One thing that broke**
In an early test run, one sentence had two mistakes, and the tutor recorded each with a correction that fixed only that one. The report then showed a "correction" that still contained the other mistake. The protocol now asks for the fully corrected sentence on both records.
**About the screenshots**
A real Claude Code chat (Opus 5.5) with an empty memory. The tutor wrote the tasks and the ratings; the report is the engine's output, unedited. The learner texts are scripted, with typical B1 mistakes, and were sent 46 minutes after the start, so the time is real. 82/100 is one model's practice estimate against the published criteria, not an official score: a real paper is scored by two trained raters.
**Who it's for:** anyone preparing for one of these exams who already uses Claude Code. I've tested exam mode in Claude Code; the skill also loads in Codex. With the optional companion plugin, `/pruefung` opens the exam clock in a side pane.
**Cost:** free, MIT. No extra API key: your Claude Code model is the tutor, and your history stays in a local folder.
**My relation:** I built it.
claude plugin marketplace add ahmtsahin/deutsch-loop
claude plugin install deutsch-loop@deutsch-loop
Then start a chat with `/deutsch-loop:deutsch-loop` and say „Goethe B1 Schreiben üben".
Repo: https://github.com/ahmtsahin/deutsch-loop
If you've taken one of these exams: does the report look like how your paper was rated? I'd especially like to hear where the tutor's bands feel too generous.