[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CVK3ED9F94R65AD5PG0RRH":3,"skill-same:01M6CVK3ED9F94R65AD5PG0RRH":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6CVK3ED9F94R65AD5PG0RRH","knowledge-exam",null,"Generate German knowledge-check exams and solution files from the taught material (class Git history + WebUntis Lehrstoff). Use when the user says \"Wissensüberprüfung erstellen\", \"Knowledge-Check generieren\", \"Prüfung schreiben\", \"create the knowledge check\", \"generate a mini-exam\" or \"make the exam for class X\", or asks for exam questions plus solutions from what was actually taught. Do not use for grading submissions (knowledge-assessment) or for assignments in the class folder (homework).","georgernstgraf\u002Fopencode-helpers","georgernstgraf","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F115418377?v=4","01M6CVHJ34JS0CF98EFFN0FZ76","Georg Graf SPG","01M6CVHJ7VV5VK6RXY62SR0NE2",1,"MIT","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fknowledge-exam\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"knowledge exam","knowledge","exam","german","history","opencode","generate","git","files","education","check","material","2026-11-10 10:12:30",false,"---\nname: knowledge-exam\ndescription: Generate German knowledge-check exams and solution files from the\n  taught material (class Git history + WebUntis Lehrstoff). Use when the user\n  says \"Wissensüberprüfung erstellen\", \"Knowledge-Check generieren\", \"Prüfung\n  schreiben\", \"create the knowledge check\", \"generate a mini-exam\" or \"make the\n  exam for class X\", or asks for exam questions plus solutions from what was\n  actually taught. Do not use for grading submissions (knowledge-assessment) or\n  for assignments in the class folder (homework).\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  category: education\n  output: exam\n---\n\n# Knowledge Exam Skill\n\n## Purpose\n\nThis skill creates a German knowledge-check exam for a specific class folder\nbased on the taught material (class Git history, cohort directories and the\nWebUntis Lehrstoff record). Use it when asked to generate a mini-exam from the\nmaterial covered in class.\n\n## Output Language: MANDATORY GERMAN\n\nThe generated exam and solution files MUST be written in natural German with \nproper UTF-8 umlauts (ä, ö, ü, ß). \nNever use English for the exam questions or solutions.\n\n## Target Repository: the private `-T` exam repo (MANDATORY)\n\nKnowledge-check exam and solution files must be written into the teacher's\n**private test\u002Fexam repository** — the sibling repo named `\u003Csubject>-T`\n(e.g. `GRG-PMM-T` for `GRG-PMM`), and **only there**. **Never write them into\nthe public teaching repo.** After the Quality Gate they are committed and\npushed in that private repo (protocol step 7).\n\nBefore generating files:\n\n1. Locate the `-T` repo on disk (typically `~\u002Frepos\u002F\u003Cowner>\u002F\u003Csubject>-T`);\n   if it does not exist, stop and ask the user.\n2. Verify it is up to date (`git fetch && git status -sb`).\n3. Read the target repo's `AGENTS.md` — it defines repo-specific conventions:\n   file naming (`knowledge_\u003Cklasse>_\u003Cdate>.md` + `_solutions.md`) and class\n   folder layout (flat vs. dated subfolder, cohort suffixes like `4ahwit-x`).\n4. **Anrede-Gate (CRITICAL):** read the Anrede exclusively from\n   `\u003Csubject>-T\u002F\u003Ckohorte>\u002Fanrede.txt` via\n   `~\u002F.opencode\u002Fskills\u002Fgrading-shared\u002Fread-anrede.sh` (content `Sie` or `Du`).\n   If the file is missing, empty, or invalid: **STOP** before writing anything\n   and report the path plus the required content in German. Never derive the\n   Anrede from the class name or from `AGENTS.md`.\n\nAdditional rules (discovered in practice):\n\n- **Prüfungs-Angaben gehören IMMER ins `-T`-Repo** — Knowledge-Checks, PLFs\n  und sonstige Prüfungsangaben, niemals ins öffentliche Teaching-Repo.\n  HÜ-\u002FAufgaben-Dateien (`Aufgabe.md` im Klassenordner) sind *keine*\n  Prüfungs-Angaben: sie bleiben im Teaching-Repo, damit Schüler:innen sie\n  per Clone erreichen (homework-Workflow).\n- **Fehlender Kohorten-Ordner im `-T`-Repo ist normal** bei Semesterstart\n  (neues SJ: alte `4aaif\u002F`-artige Ordner liegen noch flach im Root, die\n  neuen `3aaif\u002F` etc. existieren noch nicht). In diesem Fall den Ordner\n  nach den `-T`-AGENTS.md-Konventionen anlegen — nicht abbrechen.\n- **Der Zug ist im Klassennamen kodiert** (`3aaif` vs. `3caif`, bzw.\n  `3ahwii`-artige Kürzel) — keine künstlichen Zusatz-Suffixe erfinden\n  (`-x`, `-a` o. ä.), außer das `-T`-AGENTS.md verlangt sie explizit\n  (z. B. bei mehreren parallelen Gruppen derselben Klasse).\n- **Nach der Auswertung dürfen Prüfung + Lösung ins öffentliche\n  Teaching-Repo** — die Veröffentlichung ist beabsichtigt (Transparenz für\n  Schüler:innen, Nachbereitung). Der Rohbestand mit den Abgaben bleibt im\n  `-T`-Repo. `knowledge_*`\u002F`_solutions.md` im öffentlichen Repo sind daher\n  kein Leak; der Homework-Lauf meldet und verschiebt sie nicht.\n\n## Inputs\n\n- `class`: target class folder name.\n- `fach`: (optional) WebUntis-Fachkürzel für den Lehrstoff-Abgleich, z. B.\n  `WMC_1`. Wird es weggelassen, über `wu klasse \u003CKLASSE> --details` auflösen\n  (Suche nach dem eigenen Fach); schlägt das fehl, ohne WebUntis weiterarbeiten.\n- `weeks`: (optional) Begrenzung der Git-Historie des Kohorten-Ordners als\n  Zeitanker (Schritt 3); der Prüf-Umfang kommt primär aus WebUntis-Lehrstoff\n  und Kohorten-READMEs.\n- `exam-date`: (mandatory) the planned exam date, must be either:\n  - An ISO date (YYYY-MM-DD format).\n  - The literal `today`.\n  - The literal `tomorrow`.\n- `mc-count`: (optional) number of multiple-choice questions, default 10.\n- `free-count`: (optional) number of free-text questions, default 3.\n\n## Protocol\n\n### 1. Validate Inputs\n\n- **Mandatory exam-date parameter**: If `exam-date` is not provided, abort\n  immediately with an error message explaining that this parameter is required.\n- Confirm that a folder matching `class` exists in the **target `-T`\n  repository** (see \"Target Repository\" section above), not in the teaching\n  repo. If the folder does not exist, it may need to be created there —\n  check the repo's AGENTS.md conventions first.\n- If the `-T` repo cannot be located, stop and ask the user. If only the\n  **class folder** is missing, that is normal at semester start — create it\n  (see \"Target Repository\" above), do not abort.\n- **Resolve exam-date to ISO format**:\n  - If `exam-date` is an ISO date (YYYY-MM-DD), use it as-is.\n  - If `exam-date` is `today`, compute today's ISO date.\n  - If `exam-date` is `tomorrow`, compute tomorrow's ISO date.\n  - Store this resolved date as `\u003Cisodate>` for output filenames.\n\n### 2. Resolve Question Counts\n\n- Default values: 10 multiple-choice questions, 3 free-text questions.\n- If `mc-count` is not provided, set `mc-count = 10`.\n- If `free-count` is not provided, set `free-count = 3`.\n- If neither `mc-count` nor `free-count` was provided by the user:\n  - Before generating, ask the user: \"Sollen 10 MC-Fragen und 3 Freitext-Fragen generiert werden? (j\u002Fn)\"\n  - If the user confirms, proceed with defaults.\n  - If the user declines, ask for specific counts before continuing.\n- Do NOT ask for confirmation when at least one count was explicitly provided.\n\n### 3. Stoffbasis: Kohorten-Dir, Lessons & WebUntis-Abgleich\n\nDer Prüf-Umfang ist definiert durch **was tatsächlich unterrichtet wurde** —\nnicht durch den Semesterplan. Drei Quellen, in dieser Reihenfolge gewichtet:\n\n1. **WebUntis (Authoritäts-Quelle):** `wu lesson \u003CKLASSE>\u002F\u003CFACH> termine\n   --mit-lehrstoff` (z. B. `wu lesson 3AAIF\u002FWMC_1 termine --mit-lehrstoff`)\n   liefert alle Termine mit eingetragenem Lehrstoff. Achtung: bei langen\n   Listen großzügigen Timeout setzen. Der Lehrstoff **fence**t den Prüf-Umfang:\n   Fragen dürfen nichts abdecken, was dort nie aufgetaucht ist (z. B. Formulare\n   in 3caif ja, in 3aaif nein — Stoffstand strikt kohorenscharf).\n2. **Kohorten-Dir im Teaching-Repo:** datierte Tagesordner\n   (`YYYY-MM-DD[_]thema\u002F`) mit READMEs, Lesson-Dateien, Demos und\n   Aufgabe-Dateien. Die READMEs spiegeln den realen Stoffstand inkl.\n   Abgaben und Ausnahmen.\n3. **Referenzierte Materialien:** Prepared Lessons (`unterricht\u002F\u003CPREFIX>-NN-*`),\n   Beispielprojekte und Unterlagen, soweit sie von den Kohorten-READMEs\n   verlinkt sind — dort steht die Stofftiefe für Detailfragen.\n\nErgänzend: Git-Historie des Kohorten-Ordners als Zeitanker\n(`git log --since=\u003Cstart> -- \u003Ckohorte>`), um den unterrichteten Zeitraum\nabzugrenzen. Minimal-Commits sind Stunden-Anker, keine vollständige Abdeckung.\n\n- Taucht bei erledigten Terminen **kein Lehrstoff** auf (Status „offen\"),\n  dem User melden; `wu lesson … lehrstoff eintragen` nur auf expliziten\n  Wunsch (Text via `--text-datei` wegen Umlauten, beide parallelen\n  Termin-IDs je Datum beschreiben, vorher `--testlauf`).\n- **Mehrere Kohorten gleichzeitig?** Pro Kohorte einen eigenen Subagenten\n  mit identischem Format-Spec spawnen (parallel) und danach zentral\n  gegenlesen.\n\n### 4. Generate Exam Files\n\n- Create `knowledge_\u003Cclass>_\u003Cisodate>.md` inside the class folder.\n- Include exactly `mc-count` multiple-choice questions.\n- Each multiple-choice question must have exactly 4 answer options.\n- Each multiple-choice question is worth 4 points total.\n- Make the questions as unambiguous as possible, put enough context in.\n- Score multiple-choice questions per option: award 1 point for each option that\n  is handled correctly, whether it was correctly checked or correctly left\n  blank.\n- For every multiple-choice question, explicitly allow students to mark `-`\n  and briefly explain why they consider the answer ambiguous or\n  context-dependent.\n- Include exactly `free-count` free-form questions.\n- Each free-form question is worth 15 points.\n- Put a friendly \"Gutes Gelingen\" footer at the bottom.\n\n### 5. Generate Solution File\n\n- Create `knowledge_\u003Cclass>_\u003Cisodate>_solutions.md` in the same folder.\n- Keep the student-facing exam and the solution file separate.\n- Do not include the solutions in the student-facing exam file.\n- Solution layout per MC question: which options are correct (z. B.\n  „Richtig: a ☑, b ☑, c ☐, d ☑\") **plus** ein Satz Begründung je Option —\n  die Markierungen müssen mit den Erklärungen übereinstimmen (Abweichung\n  zwischen Header-Zeile und ✔\u002F✘-Erklärungen war schon ein echter Fehler).\n- Solution layout per free-form question: Musterlösung + Wertungs-Skizze,\n  deren Teilschritte **exakt** auf die Frage-Punkte (Standard 15 P) summieren.\n- The solution file is teacher-facing: kein Schüler-Footer (Name\u002FDatum-Felder,\n  „Gutes Gelingen\") am Ende.\n\n### 6. Quality Gate (vor der Übergabe, Pflicht)\n\nVor der Ablieferung beide Dateien systematisch prüfen — jedes dieser\nKriterien ist in der Praxis schon verletzt worden:\n\n- **Rater-Sicherheit:** Option a) darf nicht (fast) immer die richtige sein.\n  Bei erkennbaren Mustern rotieren: wahre Option mit einer falschen Position\n  tauschen (Text wandert, Lösungsmarkierung wandert mit). Faustregel: blindes\n  Ankreuzen (z. B. „immer a+b+c\") darf nicht mehr als ~70 % bringen.\n  Falsche Optionen über die Positionen a–d verteilen, nicht geballt auf d).\n  Die Anzahl korrekter Optionen je Frage mischen (nicht alle Fragen mit\n  „3 richtige\").\n- **Wertung:** MC = 4 P; Summen der Freitext-Wertungs-Skizzen = Frage-Punkte;\n  Gesamtpunkte in Header und Footer identisch.\n- **Konsistenz Exam↔Solutions:** Fragennummerierung, Titel, Reihenfolge und\n  Optionentexte deckungsgleich; Markierungen passend zur Option-Reihenfolge\n  (skriptbasiert prüfbar).\n- **Keine Duplikate:** derselbe Fakt (oder dieselbe Rechnung mit denselben\n  Zahlen) nicht doppelt prüfen — weder MC↔MC noch MC↔Freitext.\n- **Sprache:** durchgehend Du\u002FSie laut Anrede-Gate (`anrede.txt`), echte Umlaute,\n  kein Englisch in Fragen; Fachbegriffe nur, wenn sie unterrichtet wurden\n  (z. B. einen unbehandelten Spec-Term vermeiden und das Verhalten stattdessen\n  als beobachtbares Ergebnis abfragen).\n\n### 7. Commit im `-T`-Repo (Pflicht)\n\nNach bestandenem Quality Gate werden **beide** Dateien (Angabe und Lösungen)\nim privaten `-T`-Repo committet und gepusht:\n\n- nur der aktuelle Branch, kein Branch-Wechsel, keine PRs;\n- Commit-Message auf Deutsch, mit Issue-Nummer nach der Konvention des\n  `-T`-AGENTS.md (`Thema: Beschreibung (#N)`); ist keine Nummer bekannt, beim\n  Nutzer nachfragen statt raten;\n- nur die neuen Prüfungsdateien stagen — fremde, unfertige Änderungen im\n  Arbeitsverzeichnis nicht mitnehmen;\n- vor dem Push `git fetch && git status -sb` prüfen und ggf. rebasen.\n\nDas `-T`-Repo ist privat; ein Push vor dem Prüfungstermin ist deshalb\nzulässig. Vor der Auswertung gelangt eine Prüfung **nie** ins öffentliche\nTeaching-Repo; nach der Auswertung ist die Veröffentlichung von Prüfung und\nLösung im Teaching-Repo beabsichtigt (der Rohbestand mit den Abgaben bleibt\nim `-T`-Repo).\n\n### 8. Constraints\n\n- Generated exam and solution files are created **only** in the private\n  `\u003Csubject>-T` repo and are committed and pushed there (step 7). Never create\n  them in the public teaching repo, never commit them anywhere else.\n- Preserve existing files unless the task explicitly requires replacement.\n- Write both generated Markdown files in German.\n- UTF-8 is explicitly allowed and preferred in generated Markdown files.\n- Do not replace German umlauts with transliterations such as `ae`, `oe`, or\n  `ue` unless the surrounding source material explicitly requires that form.\n\n## Done when\n\n- [ ] The `-T` repo is located and fetched, its `AGENTS.md` is read, and the\n      Anrede comes from `anrede.txt` — or the run stopped with a German report\n      before anything was written.\n- [ ] `exam-date` is resolved to `\u003Cisodate>`, and `mc-count` \u002F `free-count` are\n      either supplied by the user or explicitly confirmed.\n- [ ] The scope is fenced by the cohort's WebUntis Lehrstoff; terms with no\n      Lehrstoff (\"offen\") are reported.\n- [ ] `knowledge_\u003Cclass>_\u003Cisodate>.md` and\n      `knowledge_\u003Cclass>_\u003Cisodate>_solutions.md` exist in the cohort folder of\n      the `-T` repo, with the required question counts and scoring (MC = 4 P,\n      free-form = 15 P with matching totals).\n- [ ] The Quality Gate ran and passed: no rater pattern, exam↔solutions\n      consistent, no duplicate fact, Du\u002FSie consistent, real umlauts.\n- [ ] Both files are committed and pushed in the `-T` repo only, German commit\n      message with the issue number; nothing was written to the public teaching\n      repo.\n\n## Output Expectations\n\n- Student exam file in German with the required question counts and scoring.\n- Separate teacher solution file in German.\n- Filenames must include the class name and the exam date in ISO format\n  (resolved from the mandatory `exam-date` parameter).\n","# Knowledge Exam Skill\n\n## Purpose\n\nThis skill creates a German knowledge-check exam for a specific class folder\nbased on the taught material (class Git history, cohort directories and the\nWebUntis Lehrstoff record). Use it when asked to generate a mini-exam from the\nmaterial covered in class.\n\n## Output Language: MANDATORY GERMAN\n\nThe generated exam and solution files MUST be written in natural German with \nproper UTF-8 umlauts (ä, ö, ü, ß). \nNever use English for the exam questions or solutions.\n\n## Target Repository: the private `-T` exam repo (MANDATORY)\n\nKnowledge-check exam and solution files must be written into the teacher's\n**private test\u002Fexam repository** — the sibling repo named `\u003Csubject>-T`\n(e.g. `GRG-PMM-T` for `GRG-PMM`), and **only there**. **Never write them into\nthe public teaching repo.** After the Quality Gate they are committed and\npushed in that private repo (protocol step 7).\n\nBefore generating files:\n\n1. Locate the `-T` repo on disk (typically `~\u002Frepos\u002F\u003Cowner>\u002F\u003Csubject>-T`);\n   if it does not exist, stop and ask the user.\n2. Verify it is up to date (`git fetch && git status -sb`).\n3. Read the target repo's `AGENTS.md` — it defines repo-specific conventions:\n   file naming (`knowledge_\u003Cklasse>_\u003Cdate>.md` + `_solutions.md`) and class\n   folder layout (flat vs. dated subfolder, cohort suffixes like `4ahwit-x`).\n4. **Anrede-Gate (CRITICAL):** read the Anrede exclusively from\n   `\u003Csubject>-T\u002F\u003Ckohorte>\u002Fanrede.txt` via\n   `~\u002F.opencode\u002Fskills\u002Fgrading-shared\u002Fread-anrede.sh` (content `Sie` or `Du`).\n   If the file is missing, empty, or invalid: **STOP** before writing anything\n   and report the path plus the required content in German. Never derive the\n   Anrede from the class name or from `AGENTS.md`.\n\nAdditional rules (discovered in practice):\n\n- **Prüfungs-Angaben gehören IMMER ins `-T`-Repo** — Knowledge-Checks, PLFs\n  und sonstige Prüfungsangaben, niemals ins öffentliche Teaching-Repo.\n  HÜ-\u002FAufgaben-Dateien (`Aufgabe.md` im Klassenordner) sind *keine*\n  Prüfungs-Angaben: sie bleiben im Teaching-Repo, damit Schüler:innen sie\n  per Clone erreichen (homework-Workflow).\n- **Fehlender Kohorten-Ordner im `-T`-Repo ist normal** bei Semesterstart\n  (neues SJ: alte `4aaif\u002F`-artige Ordner liegen noch flach im Root, die\n  neuen `3aaif\u002F` etc. existieren noch nicht). In diesem Fall den Ordner\n  nach den `-T`-AGENTS.md-Konventionen anlegen — nicht abbrechen.\n- **Der Zug ist im Klassennamen kodiert** (`3aaif` vs. `3caif`, bzw.\n  `3ahwii`-artige Kürzel) — keine künstlichen Zusatz-Suffixe erfinden\n  (`-x`, `-a` o. ä.), außer das `-T`-AGENTS.md verlangt sie explizit\n  (z. B. bei mehreren parallelen Gruppen derselben Klasse).\n- **Nach der Auswertung dürfen Prüfung + Lösung ins öffentliche\n  Teaching-Repo** — die Veröffentlichung ist beabsichtigt (Transparenz für\n  Schüler:innen, Nachbereitung). Der Rohbestand mit den Abgaben bleibt im\n  `-T`-Repo. `knowledge_*`\u002F`_solutions.md` im öffentlichen Repo sind daher\n  kein Leak; der Homework-Lauf meldet und verschiebt sie nicht.\n\n## Inputs\n\n- `class`: target class folder name.\n- `fach`: (optional) WebUntis-Fachkürzel für den Lehrstoff-Abgleich, z. B.\n  `WMC_1`. Wird es weggelassen, über `wu klasse \u003CKLASSE> --details` auflösen\n  (Suche nach dem eigenen Fach); schlägt das fehl, ohne WebUntis weiterarbeiten.\n- `weeks`: (optional) Begrenzung der Git-Historie des Kohorten-Ordners als\n  Zeitanker (Schritt 3); der Prüf-Umfang kommt primär aus WebUntis-Lehrstoff\n  und Kohorten-READMEs.\n- `exam-date`: (mandatory) the planned exam date, must be either:\n  - An ISO date (YYYY-MM-DD format).\n  - The literal `today`.\n  - The literal `tomorrow`.\n- `mc-count`: (optional) number of multiple-choice questions, default 10.\n- `free-count`: (optional) number of free-text questions, default 3.\n\n## Protocol\n\n### 1. Validate Inputs\n\n- **Mandatory exam-date parameter**: If `exam-date` is not provided, abort\n  immediately with an error message explaining that this parameter is required.\n- Confirm that a folder matching `class` exists in the **target `-T`\n  repository** (see \"Target Repository\" section above), not in the teaching\n  repo. If the folder does not exist, it may need to be created there —\n  check the repo's AGENTS.md conventions first.\n- If the `-T` repo cannot be located, stop and ask the user. If only the\n  **class folder** is missing, that is normal at semester start — create it\n  (see \"Target Repository\" above), do not abort.\n- **Resolve exam-date to ISO format**:\n  - If `exam-date` is an ISO date (YYYY-MM-DD), use it as-is.\n  - If `exam-date` is `today`, compute today's ISO date.\n  - If `exam-date` is `tomorrow`, compute tomorrow's ISO date.\n  - Store this resolved date as `\u003Cisodate>` for output filenames.\n\n### 2. Resolve Question Counts\n\n- Default values: 10 multiple-choice questions, 3 free-text questions.\n- If `mc-count` is not provided, set `mc-count = 10`.\n- If `free-count` is not provided, set `free-count = 3`.\n- If neither `mc-count` nor `free-count` was provided by the user:\n  - Before generating, ask the user: \"Sollen 10 MC-Fragen und 3 Freitext-Fragen generiert werden? (j\u002Fn)\"\n  - If the user confirms, proceed with defaults.\n  - If the user declines, ask for specific counts before continuing.\n- Do NOT ask for confirmation when at least one count was explicitly provided.\n\n### 3. Stoffbasis: Kohorten-Dir, Lessons & WebUntis-Abgleich\n\nDer Prüf-Umfang ist definiert durch **was tatsächlich unterrichtet wurde** —\nnicht durch den Semesterplan. Drei Quellen, in dieser Reihenfolge gewichtet:\n\n1. **WebUntis (Authoritäts-Quelle):** `wu lesson \u003CKLASSE>\u002F\u003CFACH> termine\n   --mit-lehrstoff` (z. B. `wu lesson 3AAIF\u002FWMC_1 termine --mit-lehrstoff`)\n   liefert alle Termine mit eingetragenem Lehrstoff. Achtung: bei langen\n   Listen großzügigen Timeout setzen. Der Lehrstoff **fence**t den Prüf-Umfang:\n   Fragen dürfen nichts abdecken, was dort nie aufgetaucht ist (z. B. Formulare\n   in 3caif ja, in 3aaif nein — Stoffstand strikt kohorenscharf).\n2. **Kohorten-Dir im Teaching-Repo:** datierte Tagesordner\n   (`YYYY-MM-DD[_]thema\u002F`) mit READMEs, Lesson-Dateien, Demos und\n   Aufgabe-Dateien. Die READMEs spiegeln den realen Stoffstand inkl.\n   Abgaben und Ausnahmen.\n3. **Referenzierte Materialien:** Prepared Lessons (`unterricht\u002F\u003CPREFIX>-NN-*`),\n   Beispielprojekte und Unterlagen, soweit sie von den Kohorten-READMEs\n   verlinkt sind — dort steht die Stofftiefe für Detailfragen.\n\nErgänzend: Git-Historie des Kohorten-Ordners als Zeitanker\n(`git log --since=\u003Cstart> -- \u003Ckohorte>`), um den unterrichteten Zeitraum\nabzugrenzen. Minimal-Commits sind Stunden-Anker, keine vollständige Abdeckung.\n\n- Taucht bei erledigten Terminen **kein Lehrstoff** auf (Status „offen\"),\n  dem User melden; `wu lesson … lehrstoff eintragen` nur auf expliziten\n  Wunsch (Text via `--text-datei` wegen Umlauten, beide parallelen\n  Termin-IDs je Datum beschreiben, vorher `--testlauf`).\n- **Mehrere Kohorten gleichzeitig?** Pro Kohorte einen eigenen Subagenten\n  mit identischem Format-Spec spawnen (parallel) und danach zentral\n  gegenlesen.\n\n### 4. Generate Exam Files\n\n- Create `knowledge_\u003Cclass>_\u003Cisodate>.md` inside the class folder.\n- Include exactly `mc-count` multiple-choice questions.\n- Each multiple-choice question must have exactly 4 answer options.\n- Each multiple-choice question is worth 4 points total.\n- Make the questions as unambiguous as possible, put enough context in.\n- Score multiple-choice questions per option: award 1 point for each option that\n  is handled correctly, whether it was correctly checked or correctly left\n  blank.\n- For every multiple-choice question, explicitly allow students to mark `-`\n  and briefly explain why they consider the answer ambiguous or\n  context-dependent.\n- Include exactly `free-count` free-form questions.\n- Each free-form question is worth 15 points.\n- Put a friendly \"Gutes Gelingen\" footer at the bottom.\n\n### 5. Generate Solution File\n\n- Create `knowledge_\u003Cclass>_\u003Cisodate>_solutions.md` in the same folder.\n- Keep the student-facing exam and the solution file separate.\n- Do not include the solutions in the student-facing exam file.\n- Solution layout per MC question: which options are correct (z. B.\n  „Richtig: a ☑, b ☑, c ☐, d ☑\") **plus** ein Satz Begründung je Option —\n  die Markierungen müssen mit den Erklärungen übereinstimmen (Abweichung\n  zwischen Header-Zeile und ✔\u002F✘-Erklärungen war schon ein echter Fehler).\n- Solution layout per free-form question: Musterlösung + Wertungs-Skizze,\n  deren Teilschritte **exakt** auf die Frage-Punkte (Standard 15 P) summieren.\n- The solution file is teacher-facing: kein Schüler-Footer (Name\u002FDatum-Felder,\n  „Gutes Gelingen\") am Ende.\n\n### 6. Quality Gate (vor der Übergabe, Pflicht)\n\nVor der Ablieferung beide Dateien systematisch prüfen — jedes dieser\nKriterien ist in der Praxis schon verletzt worden:\n\n- **Rater-Sicherheit:** Option a) darf nicht (fast) immer die richtige sein.\n  Bei erkennbaren Mustern rotieren: wahre Option mit einer falschen Position\n  tauschen (Text wandert, Lösungsmarkierung wandert mit). Faustregel: blindes\n  Ankreuzen (z. B. „immer a+b+c\") darf nicht mehr als ~70 % bringen.\n  Falsche Optionen über die Positionen a–d verteilen, nicht geballt auf d).\n  Die Anzahl korrekter Optionen je Frage mischen (nicht alle Fragen mit\n  „3 richtige\").\n- **Wertung:** MC = 4 P; Summen der Freitext-Wertungs-Skizzen = Frage-Punkte;\n  Gesamtpunkte in Header und Footer identisch.\n- **Konsistenz Exam↔Solutions:** Fragennummerierung, Titel, Reihenfolge und\n  Optionentexte deckungsgleich; Markierungen passend zur Option-Reihenfolge\n  (skriptbasiert prüfbar).\n- **Keine Duplikate:** derselbe Fakt (oder dieselbe Rechnung mit denselben\n  Zahlen) nicht doppelt prüfen — weder MC↔MC noch MC↔Freitext.\n- **Sprache:** durchgehend Du\u002FSie laut Anrede-Gate (`anrede.txt`), echte Umlaute,\n  kein Englisch in Fragen; Fachbegriffe nur, wenn sie unterrichtet wurden\n  (z. B. einen unbehandelten Spec-Term vermeiden und das Verhalten stattdessen\n  als beobachtbares Ergebnis abfragen).\n\n### 7. Commit im `-T`-Repo (Pflicht)\n\nNach bestandenem Quality Gate werden **beide** Dateien (Angabe und Lösungen)\nim privaten `-T`-Repo committet und gepusht:\n\n- nur der aktuelle Branch, kein Branch-Wechsel, keine PRs;\n- Commit-Message auf Deutsch, mit Issue-Nummer nach der Konvention des\n  `-T`-AGENTS.md (`Thema: Beschreibung (#N)`); ist keine Nummer bekannt, beim\n  Nutzer nachfragen statt raten;\n- nur die neuen Prüfungsdateien stagen — fremde, unfertige Änderungen im\n  Arbeitsverzeichnis nicht mitnehmen;\n- vor dem Push `git fetch && git status -sb` prüfen und ggf. rebasen.\n\nDas `-T`-Repo ist privat; ein Push vor dem Prüfungstermin ist deshalb\nzulässig. Vor der Auswertung gelangt eine Prüfung **nie** ins öffentliche\nTeaching-Repo; nach der Auswertung ist die Veröffentlichung von Prüfung und\nLösung im Teaching-Repo beabsichtigt (der Rohbestand mit den Abgaben bleibt\nim `-T`-Repo).\n\n### 8. Constraints\n\n- Generated exam and solution files are created **only** in the private\n  `\u003Csubject>-T` repo and are committed and pushed there (step 7). Never create\n  them in the public teaching repo, never commit them anywhere else.\n- Preserve existing files unless the task explicitly requires replacement.\n- Write both generated Markdown files in German.\n- UTF-8 is explicitly allowed and preferred in generated Markdown files.\n- Do not replace German umlauts with transliterations such as `ae`, `oe`, or\n  `ue` unless the surrounding source material explicitly requires that form.\n\n## Done when\n\n- [ ] The `-T` repo is located and fetched, its `AGENTS.md` is read, and the\n      Anrede comes from `anrede.txt` — or the run stopped with a German report\n      before anything was written.\n- [ ] `exam-date` is resolved to `\u003Cisodate>`, and `mc-count` \u002F `free-count` are\n      either supplied by the user or explicitly confirmed.\n- [ ] The scope is fenced by the cohort's WebUntis Lehrstoff; terms with no\n      Lehrstoff (\"offen\") are reported.\n- [ ] `knowledge_\u003Cclass>_\u003Cisodate>.md` and\n      `knowledge_\u003Cclass>_\u003Cisodate>_solutions.md` exist in the cohort folder of\n      the `-T` repo, with the required question counts and scoring (MC = 4 P,\n      free-form = 15 P with matching totals).\n- [ ] The Quality Gate ran and passed: no rater pattern, exam↔solutions\n      consistent, no duplicate fact, Du\u002FSie consistent, real umlauts.\n- [ ] Both files are committed and pushed in the `-T` repo only, German commit\n      message with the issue number; nothing was written to the public teaching\n      repo.\n\n## Output Expectations\n\n- Student exam file in German with the required question counts and scoring.\n- Separate teacher solution file in German.\n- Filenames must include the class name and the exam date in ISO format\n  (resolved from the mandatory `exam-date` parameter).\n",{"name":5,"license":15,"metadata":41,"description":7,"compatibility":29},{"output":26,"category":33},"main","adef05bd2193559aced970b8591fc8182a916301","skills\u002Fknowledge-exam",0,"https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf","https:\u002F\u002Fwww.spengergasse.at\u002F","2026-11-11 16:51:38",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add georgernstgraf\u002Fopencode-helpers --skill knowledge-exam",{"tool":56,"command":57},"bunx","bunx skills add georgernstgraf\u002Fopencode-helpers --skill knowledge-exam",{"tool":59,"command":60},"pnpm","pnpm dlx skills add georgernstgraf\u002Fopencode-helpers --skill knowledge-exam","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fknowledge-exam\u002FSKILL.md",true,[],[65,83,109,125,140,150],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":36},"01M6CVKZ762FN4SW18V26P65TD","teach","Teach the user a new skill or concept, within this workspace.","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fteach\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[67,77,78,79,80,81,82],"false","new","concept","user","new skill","workspace",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":36},"01M6CVKVT6ZVYN2XPESS5EGDKE","sync-upstream-skills","Re-transplant owned skills from their mattpocock upstream after a git pull, applying upstream content changes while preserving opencode-native frontmatter. Also checks for duplicate skill names and dangling cross-skill references. Use when the user says \"sync skills\", \"refresh from upstream\", \"pull matt's skills\", \"sync upstream\", \"update the transplanted skills\", or wants to bring the owned transplanted skills up to date. Do not use to add or rename a transplanted skill — that stays manual.","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fsync-upstream-skills\u002FSKILL.md",[],[90,91,92,93,94,29,95,96,97,98,99,100,101,102,103,104,105,106,80,107,108,31],"sync upstream","sync upstream skills","upstream","sync","refresh","references","pull","duplicate skill","duplicate","frontmatter","native","changes","up","when","re","for","bring","content","use",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":36},"01M6CVKNEPEY1WA7E5FWQ85NJW","repograde","Grade student repositories with optional date filtering in single-repo or bulk mode. Use when the user says \"repograde\", \"grade the repos\", \"grade this repo since \u003Cdate>\", \"bewerte die Abgaben\", \"korrigiere die Repos\", or asks for a repo grading run over a class folder or a single student repository. Do not use for project grading with issues and PRs (use projectgrade) or for knowledge-check exams (use knowledge-assessment).","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Frepograde\u002FSKILL.md",[],[111,29,116,117,118,119,120,121,33,122,123,124],"with","repositories","single","student","mode","bulk","execution","repo","filtering",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":36},"01M6CVKF9MVFPHBH3W2D5ETEB6","projectgrade","Grade student project repositories based on Git commits, GitHub Issues, and Pull Requests. Use when the user says \"projectgrade\", \"grade the project\", \"bewerte das Projekt\", \"Projektarbeit benoten\", or asks for a holistic grading of a collaborative repository from inside it, based on commits, issues, reviews and PRs. Do not use for per-lesson assignments (use repograde) or for knowledge-check exams (use knowledge-assessment).","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fprojectgrade\u002FSKILL.md",[],[127,132,133,117,134,119,135,33,31,136,29,137,122,138,139,96],"github issues","requests","git commits","project","github","pull requests","issues","commits",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":36},"01M6CVKA8J284DZTBE7QRN45SG","lehrplan","Richtet österreichische HTL-Unterrichts-Repositorien ein und pflegt sie — drei Kernaufgaben: das gesetzliche Lehrplan-Material eines Ausbildungszweigs (z. B. WII, WIT, KIF) aus dem RIS beschaffen inklusive jährlichem Novellen-Check, den Lehrplan eines konkreten Gegenstands aus dem Gesetz extrahieren (mit Erläuterung pro Lernziel: was der Inhalt tatsächlich IST, plus praktische Anwendungen), und Semesterpläne interaktiv entwerfen. Use when der Nutzer 'Lehrplan', 'Unterrichtsvorbereitung prüfen', 'Lehrplan auf Novellen prüfen', 'RIS sync', 'Gesetzesmaterial holen', 'Lehrplan extrahieren', 'Jahrespläne neu ziehen', 'Erläuterungen ergänzen', 'Semesterplan erstellen\u002Füberarbeiten' oder 'Einheiten erstellen' sagt, oder wenn in einem Repo gearbeitet wird, das der lehrplan\u002F-Konvention folgt. Do not use for Prepared Lessons (create-lesson), Aufgaben im Kohortenordner (homework) oder Wissensüberprüfungen (knowledge-exam).","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Flehrplan\u002FSKILL.md",[],[142,35,147,148,93,34,33,123,29,149],"pro","curriculum","drei",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":157,"publishedAt":36},"01M6CVK6QMR16MSMS2MRG097GV","knowledge-persistence","Persist session context into the structured docs\u002Fai knowledge files (OKF bundle; committed and pushed at the end). Use when the user says \"remember\", \"merk dir das\", \"save context\", \"persist knowledge\" or \"update knowledge file\", at a session checkpoint, or when an observation in this session contradicts docs\u002Fai\u002F or AGENTS.md. Do not use for reading the knowledge files at session start — that is plain bootstrapping.","https:\u002F\u002Fgithub.com\u002Fgeorgernstgraf\u002Fopencode-helpers\u002Fblob\u002Fmain\u002Fskills\u002Fknowledge-persistence\u002FSKILL.md",[156],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[158,25,159,160,161,162,163,29,164,165,32,166,167],"knowledge persistence","persistence","persist","structured","context","docs","documentation","workflow","session context","session"]