Install
$ agentstack add skill-eliasreiche-legal-ops-germany-zitat-pruefer ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
zitat-pruefer
> Status: Work-in-progress — bewusst zurückgestuft am 2026-07-16. Der > Skill ist vom Maintainer geparkt und nicht für den Einsatz freigegeben; > die description ist neutralisiert, damit er nicht automatisch triggert. > Das ist eine Hold-Entscheidung, kein Reifegrad-Befund: die automatisierten > Tests laufen weiter grün in CI (tests/test_executor.py und > tests/test_zitat_pruefer_encoding_und_registries.py, 73 Fälle), und die > CI-interne Nutzung des Executors (Zitiermarker-Konsistenzprüfung der > statischen Belehrungen anderer Skills) bleibt unberührt. Reaktivierung > setzt die frühere description und status: beta wieder ein (siehe > CONVENTIONS.md, > Reifegrad-Leiter).
Zweck
Extrahiert jede Norm-, Urteils- und Fundstellen-Angabe aus einem Text- oder Markdown-Dokument und markiert sie mit dem 3-Zustands-Marker aus CONVENTIONS.md:
- ✅ verifiziert — gegen eine mitgelieferte Quellen-Registry geprüft und bestätigt
- ⚠️ nicht prüfbar — keine Registry-Angabe zu diesem Zitat vorhanden
- ❌ abweichend — Registry-Angabe widerspricht dem Zitat, mit Begründung
Dies ist ein Querschnitts-Skill (plugin: querschnitt): Er wird nicht nur eigenständig aufgerufen, sondern soll von anderen Skills, die Texte mit Zitaten erzeugen (Voten, Schreiben-Entwürfe, Zusammenfassungen), am Ende des Ablaufs mitgenutzt werden, damit generierte Texte nie unmarkierte Zitate enthalten.
Eingaben (Datei-Kontrakt, P2)
| Eingabe | Pflicht | Format | Beschreibung | |---|---|---|---| | Quelldokument | ja | .md / .txt, UTF-8 | Text mit den zu prüfenden Zitaten. Fließtext und Fußnotenzeilen werden gleich behandelt. | | Quellen-Registry | nein | .json | Liste bekannter Normen, Entscheidungen, Fundstellen — siehe [schema/README.md](schema/README.md) für das genaue Schema und [schema/beispiel-registry.json](schema/beispiel-registry.json) als Beispiel. |
Ohne Registry bleibt jedes inhaltlich zu prüfende Zitat nicht_pruefbar — nur die quellenfreien Formatprüfungen (bekanntes Gesetzeskürzel aus [schema/gesetzeskuerzel.json](schema/gesetzeskuerzel.json), plausible Abs./Satz/Nr.-Syntax, §/§§-Konsistenz) laufen trotzdem.
Vollständige Format-Spezifikation: [schema/README.md](schema/README.md).
> ⚠️ Wichtiger Hinweis zur Registry-Vollständigkeit: Eine unvollständige > Normen-Registry (ein Gesetzeskürzel ist gelistet, aber nicht alle seine > tatsächlich existierenden Paragraphen sind enthalten) erzeugt systematisch > falsche ❌ abweichend auf Normen, die in Wirklichkeit gültig sind — die > Prämisse des Executors ist: die mitgelieferte Normliste je Gesetz ist für den > übergebenen Ausschnitt vollständig (Details: [schema/README.md](schema/README.md) > unter „Bewusst asymmetrisch"). Wer nur einen Teil der Paragraphen eines Gesetzes > in die Registry aufnimmt, muss mit falschen ❌ auf den fehlenden Paragraphen > rechnen. Vor Nutzung: Registry je Gesetz möglichst vollständig aus einer > verlässlichen Quelle (Gesetzesdatenbank, Kommentar) ziehen — kein bloßer Auszug > der im Dokument ohnehin schon zitierten Normen.
Voraussetzungen & PDF-Praxis
Zwei Punkte aus der händischen Real-World-Abnahme (LG-Berlin-Urteil, 2026-07-15):
1. Encoding-Falle bei Gerichts-PDFs
Manche Gerichts-PDFs tragen ein Custom-Font-Encoding, bei dem die Textebene das Paragraphenzeichen verfälscht: § erscheint als $, §§ als SS (real beobachtet: „auf $ 826 BGB gestützt", „(SS 37, 37b Abs. 1 StBerG)"). Ohne Reparatur erkennt der Executor solche Zitate gar nicht als Normzitate.
Der optionale Reparatur-Schritt --repariere-encoding ersetzt kontextsensitiv $→§ und SS→§§ — nur dort, wo ein echtes Normzitat vorliegt (Marker + Ziffernblock + bekanntes Gesetzeskürzel dahinter). Geldangaben wie $ 50 Euro oder Wörter wie PASSAU bleiben unangetastet. Jede Ersetzung wird im Report unter meta.encoding_reparaturen mit Position, Zeile, Original, Ersetzung und Kontext dokumentiert, damit die Kanzlei die Reparatur zweitkontrollieren kann. Der Schritt ist standardmäßig aus — er ändert Zeichen im Dokument und wird deshalb nur bei Bedarf explizit zugeschaltet.
> Kein OCR. Dies repariert ausschließlich eine bekannte Encoding-Falle in der > bereits vorhandenen Textebene. Ein OCR-Fallback für gescannte Bild-PDFs (ohne > brauchbare Textebene) ist nicht Teil dieses Skills — er kommt separat mit > Skill #11 [posteingang-ocr-verteilung](../posteingang-ocr-verteilung/SKILL.md) > (Welle 4).
2. Standard-Registries (BGB, ZPO, StGB)
Ohne Registry bleibt jedes Norm-Zitat ⚠️ nicht_pruefbar — nur die Formatprüfung läuft. Für die drei am häufigsten zitierten Gesetze liegen fertige Registries bei:
schema/standard-registries/bgb.json
schema/standard-registries/zpo.json
schema/standard-registries/stgb.json
Sie sind maschinell aus der amtlichen Gesetzes-XML von gesetze-im-internet.de erzeugt (Generator: [schema/standard-registries/generiere_registries.py](schema/standard-registries/generiere_registries.py), Provenienz-Felder quelle_url / abgerufen_am je Datei). Aufgehobene/weggefallene Paragraphen sind mit "aufgehoben": true aufgenommen, damit ein Zitat auf eine historische Nummer nicht fälschlich als ❌ abweichend gemeldet wird. Übergabe an den Executor über --registry:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/zitat-pruefer/executor.py \
--input \
--registry ${CLAUDE_PLUGIN_ROOT}/skills/zitat-pruefer/schema/standard-registries/bgb.json \
--repariere-encoding
> Frische: Gesetze ändern sich laufend. Die Registries sind Momentaufnahmen > zum abgerufen_am-Datum (Muster analog zum Frische-Gate des gwg-risiko-check, > D19) und vor produktiver Nutzung gegen den aktuellen Stand abzugleichen — > Neu-Erzeugung per generiere_registries.py (nur der Generator geht ins Netz; > der Executor selbst bleibt strikt offline, P3). Der Executor bezieht immer nur > genau eine Registry-Datei je Lauf; ein Zitat gegen ein anderes Gesetz (z. B. > § 37b StBerG bei übergebener BGB-Registry) bleibt korrekt ⚠️ nicht_pruefbar.
Ablauf
- Claude ruft den Executor auf (kein eigenes Zitat-Parsing durch das Modell):
``bash python3 ${CLAUDE_PLUGIN_ROOT}/skills/zitat-pruefer/executor.py \ --input \ [--registry ] \ --output ``
- Der Executor entscheidet den Zustand jedes Zitats deterministisch (P3,
Deterministik-Grenze). Claude liest ausschließlich den erzeugten JSON-Report — Claude vergibt selbst nie verifiziert/nicht_pruefbar/abweichend, sondern übernimmt den vom Executor gesetzten Wert unverändert.
- Claude stellt den Report in Markdown dar: jedes Zitat mit seinem Marker
(✅/⚠️/❌) und — bei ⚠️ oder ❌ — der begruendung aus dem Report. Format- warnungen werden zusätzlich als Hinweis angezeigt, unabhängig vom Zustand.
- Bei ❌
abweichend-Treffern weist Claude explizit auf Zweitkontrolle-Bedarf
hin (Berufsrechts-Gate, haftung-Feld oben).
Output-Format
JSON-Report nach [schema/README.md](schema/README.md), Beispiel: [schema/beispiel-report.json](schema/beispiel-report.json) (erzeugt aus [schema/beispiel-eingabe.md](schema/beispiel-eingabe.md) + [schema/beispiel-registry.json](schema/beispiel-registry.json)).
Jeder Zahlen-/Datums-/Statuswert im Report stammt aus executor.py, nie vom Modell generiert (P3).
Beispiele
Beispiel 1 — mit Quellen-Registry (drei Zustände gemischt)
Eingabe (schema/beispiel-eingabe.md, Auszug):
Der Anwalt ist nach § 203 StGB und § 43a Abs. 2 BRAO zur Verschwiegenheit
verpflichtet. [...] Zeugnisverweigerungsrechte folgen aus §§ 53, 97 StPO.
Vgl. BGH, Urt. v. 12.01.2023 – IX ZR 15/22; siehe auch BVerfG NJW 2020, 300.
Aufruf:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/zitat-pruefer/executor.py \
--input schema/beispiel-eingabe.md \
--registry schema/beispiel-registry.json
Von Claude präsentiertes Ergebnis (Markdown, aus dem Report übernommen):
| Zitat | Zustand | Begründung | |---|---|---| | § 203 StGB | ✅ verifiziert | in Quellen-Registry gefunden | | § 43a Abs. 2 BRAO | ✅ verifiziert | in Quellen-Registry gefunden | | Art. 44 DSGVO | ⚠️ nicht prüfbar | keine Registry-Angabe zu DSGVO | | §§ 53, 97 StPO | ❌ abweichend | § 97 StPO nicht in der Normliste für StPO enthalten (nur § 53 mitgeliefert) | | BGH, Urt. v. 12.01.2023 – IX ZR 15/22 | ✅ verifiziert | Aktenzeichen + Datum stimmen mit Registry überein | | BVerfG NJW 2020, 300 | ✅ verifiziert | Fundstelle in Registry gefunden |
Beispiel 2 — ohne Quellen-Registry (nur Formatprüfung)
python3 ${CLAUDE_PLUGIN_ROOT}/skills/zitat-pruefer/executor.py --input entwurf.md
Bei §§ 5 StGB (Plural-Zeichen, aber nur eine Paragraphennummer) liefert der Report zustand: nicht_pruefbar (keine Registry vorhanden) und zusätzlich formatwarnungen: ["§§ (Plural) mit nur einer Paragraphennummer angegeben — vermutlich '§' gemeint"]. Claude zeigt beides an: den Marker ⚠️ für den Zitierzustand sowie separat den Formathinweis.
Erkannte Zitatformen und Grenzen
Details, Randfälle (§§-Ketten, Abs./Satz/Nr./lit., Klammerzusätze, Fließtext vs. Fußnotenstil) und bewusste Nicht-Erkennungen: siehe [schema/README.md](schema/README.md#erkannte-zitatformen) und [schema/README.md](schema/README.md#bewusst-nicht-erkannt-grenzen).
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: eliasreiche
- Source: eliasreiche/legal-ops-germany
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.