CommunityCodierung & Entwicklunggithub.com

danepps/rechtswissenschaftliche-zitierpruefung

Überprüft jeden Nachweis und jedes Zitat in einem Artikelentwurf anhand der echten Quellen – Rechtsprechung via CourtListener + amtliche Reporter, wissenschaftliche Literatur via die Zotero-Bibliothek der Nutzerin/des Nutzers und dann das offene Web – und liefert einen bewerteten, fußnotenweisen Bericht mit einem Abschnitt „Benötigt Ihre Aufmerksamkeit“ zuerst, plus einem Abschnitt zur Zitierform (Kurzbelege nach Bluebook R. 10.9/4.2 und Kursiv-/Kapitalchenschrift nach R. 2.1(a)), der allein aus dem Entwurf entschieden wird. Auslösen, wenn die Nutzerin/der Nutzer einen Entwurf zitieren prüfen möchte („cite-check this“, „check the citations/quotes in this draft“, „run cite-check on <file>“). Eingabe: eine .docx-Datei mit echten Word-Fußnoten (Markdown/Plain-Text als Fallback). Kein vollständiger Bluebook-Linter – Reihenfolge von Signalen, Reihenfolge der Zitate und Zitatzusammenstellung bleiben außen vor.

Was ist rechtswissenschaftliche-zitierpruefung?

Cite Check ist ein Skill, der jeden Nachweis und jedes Zitat in einem rechtswissenschaftlichen Artikelentwurf gegen die echten Quellen prüft – einschließlich Rechtsprechung (über CourtListener und amtliche Reporter), wissenschaftliche Literatur (über die Zotero-Bibliothek der Nutzerin/des Nutzers und das offene Web), URLs und Zitate. Er extrahiert strukturell aus .docx-Dateien mit echten Word-Fußnoten und fallback-weise aus Markdown/Plain-Text. Der Workflow kombiniert deterministische Skripte für Extraktion und Querverweisauflösung mit KI-Agenten (Claude Sonnet) für die Zitat-/Seitenangabenprüfung und stellt sicher, dass jede Feststellung hoher Schwere doppelt geprüft wird. Zusätzlich prüft der Skill auch Formatierungsaspekte (Kurzbelege, Schriftart laut Bluebook), die allein aus dem Entwurf entscheidbar sind. Der Skill ist für fortgeschrittene Rechtsdokumente ausgelegt und arbeitet mit /proofread zusammen, wobei letzteres die Prosa liest und Cite Check die Behörden prüft. Kritische Grenzen werden transparent gemacht: Proposition-Unterstützung wird nie bewertet (nur Existenzprüfung), Seitenangaben werden nur bei Zitaten geprüft, und er ist kein vollständiger Bluebook-Linter.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danepps/legal-research-skills/tree/HEAD/claude-code/skills/cite-check

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Cite Check

Ein Prüfdurchlauf über einen fertigen oder in Arbeit befindlichen Artikelentwurf. Jede Autorität wird auf Existenz geprüft; jedes Zitat wird wörtlich gegen die echte Quelle geprüft; jede URL wird auf Auflösbarkeit bestätigt; Seitenangaben werden auf Plausibilität geprüft, wo die Seitennummerierung der Quelle wiederherstellbar ist. Deterministische Skripte führen Extraktion und Querverweisauflösung für nahezu null Token durch; Modell-Agenten führen die Zitat-/Seitenangabenprüfung in einem Unique-Source-Fan-Out durch, mit einer zwingenden zweiten Prüfung jeder Feststellung hoher Schwere, sodass ein Prüf-Artefakt nie den Bericht erreicht.

Es verwendet die Mechanismen des legal-research-Skills (check_cite.py, fetch_page.py, das CourtListener-Token, die Budget-Abbauleiter) sowie dessen Hausregeln (nur offenes Web, niemals aus dem Gedächtnis prüfen, eine nicht abrufbare Quelle wird als ungeprüft gemeldet – niemals angenommen).

Was geprüft wird: dass jeder Nachweis zur behaupteten Quelle führt, Captions/Autoren/Titel richtig geschrieben sind, der Reporter/Band/erste Seite/Gericht/Jahr richtig sind, Zitate wörtlich oder ehrlich gekennzeichnet sind, supra/id.-Querverweise intakt sind und URLs live sind.

Deckungsverzeichnis (hinzugefügt 2026-09-06) – und was weiterhin NICHT geprüft wird. Zitatprüfeinheiten werden aus Zitaten gebildet; allein ließen sie jede nicht zitierte Sekundärquelle unberücksichtigt. Nun inventarisiert scripts/citation_ledger.py jede Zitat-Instanz in jeder Fußnote (Rechtsprechung oder Sekundärquelle, zitiert oder nicht, mit Id./supra/Kurzform-Ketten aufgelöst), ein Sekundärquellen-Existenzdurchlauf deckt die nicht zitierten Artikel/Bücher/Gesetze/URLs ab, und Abschnitt H des Berichts gibt jeder Instanz einen Status – geprüft, Feststellung, nur-Existenz, nicht verifizierbar, nicht geprüft, Querverweis, nicht aufgelöster Querverweis – und listet die nicht geprüften nach Fußnote. Zwei Grenzen bleiben bestehen, und der Bericht muss dies sagen: (1) Proposition-Unterstützung – ob ein nicht zitierter Nachweis tatsächlich für den Satz steht, an dem er hängt – wird nie bewertet (das bedeutet nur-Existenz); (2) Seitenangaben werden nur geprüft, wo ein Zitat sie verankert. Behandle nur-Existenz als „echte Quelle, ungelesen“, niemals als „bestanden“.

Plus die offensichtlichen FORM-Probleme (Scope-Lock von der Nutzerin/dem Nutzer aufgehoben, 2026-08-10 – „das Lock rückgängig machen, soweit es Sie daran hindert, offensichtliche Dinge zu prüfen“). Eine Form-Phase berichtet, was allein aus dem Entwurf entscheidbar ist, ohne Quelle:

  • Kurzformen – eine vollständige Zitierung wiederholt innerhalb des Fünf-Fußnoten-Fensters von Bluebook R. 10.9, wo die Kurzform hingehört; eine Fallkurzform, die über dieses Fenster hinaus verwaist ist oder kein Vollzitat vor sich hat; eine Sekundärquelle zweimal vollständig zitiert, wenn R. 4.2 Autor, supra note N vorsieht.
  • Schriftart (nur .docx) – Signale / Id. / supra / quoting in Grundschrift belassen, das note N nach einem kursiven supra fälschlich kursiv gesetzt, Kursivierung auf das Komma vor einem Zitat übergreifend, Kapitälchen mitten im Wort gebrochen und Fallnamen-Kursivierung nach R. 2.1(a) (Grundschrift in einem Vollzitat in einem Zitatsatz, kursiv in einem Textsatz oder einer Kurzform – der einzige Aufruf, der einen Agenten benötigt, da ein Muster diese nicht unterscheiden kann).

Diese laufen über ${CLAUDE_PLUGIN_ROOT}/skills/legal-research/citeform.py, das gleiche Modul, das /proofread verwendet, sodass die beiden Skills keine widersprüchlichen Ratschläge geben können. Die angewendeten Regeln sind in ${CLAUDE_PLUGIN_ROOT}/skills/legal-research/bluebook-typeface-and-short-forms.md niedergeschrieben. Form-Feststellungen erhalten ihren eigenen Berichtsabschnitt gegen Ende und gelangen nie in „Benötigt Ihre Aufmerksamkeit“ – sie sind Aufräumarbeiten, nicht inhaltlich.

Was es immer noch NICHT ist: ein vollständiger Bluebook-Linter (Signalanordnung, Zitatanordnung und ob ein Zitat korrekt zusammengesetzt ist, bleiben außen vor), ein inhaltlicher Redakteur oder ein Ersatz für die Zitierprüfung der Fachzeitschrift. Die Aufteilung mit /proofread bleibt für alles andere unverändert: proofread liest die Prosa, cite-check prüft die Autoritäten – sie teilen sich jetzt zufällig die Zitierform-Ebene.

Ausführung

1. Anfrage analysieren

  • draftPath – Pfad zum Entwurf (erforderlich). .docx mit echten Word-Fußnoten ist kanonisch; .md/.txt mit Pandoc-artigen [^n]-Fußnoten funktioniert als Fallback.
  • footnotes – optionaler partieller Durchlauf, z.B. „Fußnoten 45–80“ oder eine Liste. Standard: gesamter Entwurf.
  • deep – optional; schwerere Prüfung (mittlerer Aufwand für Prüfagenten, höhere Soft-Cap). Für einen fast fertigen Entwurf oder wenn die Nutzerin/der Nutzer „deep“/„thorough“ sagt.
  • Wenn der Entwurf Änderungen verfolgt hat, dies mitteilen und fragen, ob vor der Prüfung alle angenommen werden sollen (der Parser liest den aktuellen/akzeptierten Text und überspringt verfolgte Löschungen, aber ein stark markierter Entwurf ist einen Hinweis wert).

1b. Nach Tiefe fragen (Entscheidung der Autorin/des Autors, 2026-08-09 – spiegelt /proofread Schritt 1b)

FALLS die Anfrage es nicht bereits klärt, VORAB FRAGEN – eine AskUserQuestion, Kopfzeile Depth, vor dem Pre-Flight. Den Hinweis zu verfolgten Änderungen (Schritt 1) in denselben Aufruf integrieren, wenn zutreffend, damit die Nutzerin/der Nutzer alles in einer Interaktion beantwortet, anstatt zweimal gestoppt zu werden.

Die Frage überspringen, wenn die Formulierung bereits eine Stufe wählt („deep“, „thorough“, „near-final“, „pre-submission“, „quick“, „standard“), bei einer teilweisen Wiederholung einer bereits in dieser Sitzung gewählten Stufe oder wenn die Nutzerin/der Nutzer nur einen engen Fußnotenbereich angefragt hat.

Zwei Optionen – cite-check hat keine fable-Eskalation, also ist die Leiter kürzer als bei proofread:

OptionArgumenteWas zu sagen ist
Standarddeep:falsePrüfagenten mit niedrigem Aufwand, Soft-Cap 650k. Gut für einen Arbeitsentwurf.
Deepdeep:truePrüfagenten mit mittlerem Aufwand, Soft-Cap 900k. Genauere Lektüre jedes Zitats gegenüber seiner Quelle – für einen fast fertigen Entwurf.

Verwenden Sie NICHT die Begründung von /proofread hier – die beiden deeps sind unterschiedliche Mechanismen. Proofreads deep fügt einen zweiten Offset-Extraktionsdurchlauf hinzu (ein Recall-Ansatz, gestützt auf die ~75–80%ige Überlappungsfeststellung desselben Modells). Cite-check's deep fügt keinen Durchlauf hinzu und holt nichts erneut: es erhöht den Aufwand der Prüfagenten von low auf medium (Workflow-Zeile 557) und hebt die Soft-Cap an. Es erkauft Sorgfalt pro Zitat, nicht mehr Zitate. Die Zitatabdeckung ist in beiden Fällen identisch – jedes Zitat wird in beiden Stufen geprüft – also nicht implizieren, dass Standard etwas überspringt.

Das Timing ist hier weniger wichtig als bei proofread (deep ändert die Extraktion nicht, also kann eine spätere Wiederholung Segment/Existenz aus dem Cache via resumeFromRunId abspielen), aber die Prüfung ist der Großteil des Laufs – 26 von 33 Agenten beim National Muffler-Entwurf – also bedeutet eine Stufenänderung immer noch, die teure Phase erneut auszuführen. Zuerst fragen.

2. Pre-Flight (VOR dem Start tun – eine Berechtigungsaufforderung mitten im Lauf kann einen Agenten töten)

  1. ~/.claude/settings.json lesen; sicherstellen, dass permissions.allow "WebFetch" und "WebSearch" enthält (Fehlendes zusammenführen – niemals das Array ersetzen). Routine-Setup; nicht nachfragen.
  2. Bestätigen, dass das CourtListener-Token funktioniert. Testen, nicht nach einer Datei suchen – ausführen: python3 ${CLAUDE_PLUGIN_ROOT}/skills/legal-research/check_cite.py "347 U.S. 483"; Exit 0 mit "found": true bedeutet, es funktioniert und es gibt nichts zu berichten. check_cite.py löst das Token aus COURTLISTENER_API_TOKEN, dann COURTLISTENER_TOKEN, dann der Datei ~/.config/courtlistener/token auf – in dieser Reihenfolge, und der Umgebungsvariablen-Weg (üblicherweise im env-Block von ~/.claude/settings.json gesetzt) ist die normale Installation, also beweist ein fehlendes ~/.config/courtlistener/-Verzeichnis nichts. Wenn die Prüfung tatsächlich fehlschlägt, funktioniert der Lauf trotzdem (Fall-Existenz fällt auf das Web zurück), aber es einmal bei der Auslieferung erwähnen. Token-Seite: https://www.courtlistener.com/profile/api-token/
  3. Die Zotero-Bibliothek des Projekts auflösen (Projekte unterscheiden sich – einige sind Co-Autor-Gruppenbibliotheken, andere Einzelpersonen-Personalbibliotheken): a. Nach einer Zotero library:-Zeile in CLAUDE.md (oder AGENTS.md) des Projektordners suchen. Wenn vorhanden, den genannten MCP-Server verwenden und zu (c) springen. b. Wenn nicht vorhanden, die Nutzerin/den Nutzer FRAGEN, welche Zotero-Bibliothek dieses Projekt verwendet (persönliche Bibliothek oder eine benannte Gruppenbibliothek), dann die Antwort als eine Zotero library: <Name> → MCP server <Server>-Zeile in CLAUDE.md des Projektordners notieren, damit zukünftige Läufe nicht erneut fragen. c. Bestätigen, dass dieser MCP-Server tatsächlich existiert (persönlich = zotero; Gruppenbibliotheken erhalten ihren eigenen Server, z.B. zotero-group für „5A general law“, Gruppen-ID in ~/.claude.json). Wenn die Bibliothek des Projekts NOCH KEINEN Server hat, ist JETZT der Moment, einen hinzuzufügen: den zotero-Eintrag in ~/.claude.json als zotero-<slug> mit ZOTERO_LIBRARY_TYPE=group und der Gruppen-ZOTERO_LIBRARY_ID duplizieren (über die Gruppen-URL auf zotero.org oder die Feldcodes des Entwurfs finden); beachten, dass es einen Claude Code-Neustart benötigt, also Agenten in diesem Lauf auf das Web zurückfallen. d. Den Servernamen als zoteroServer übergeben (und zotero:false, wenn in diesem Lauf kein brauchbarer Zotero-Server vorhanden ist).

2b. Entwurf sichern (immer)

Eine Live-OneDrive/Word-Co-Author-Datei kann zwischen Extraktion und Auslieferung geändert werden, was den Bericht Bytes beschreiben ließe, die nie geprüft wurden. Den Entwurf einmal kopieren, die Kopie schreibschützen, hashen und alles nachgelagerte von der Sicherung aus ausführen. Der ursprüngliche Pfad wird hier und sonst nirgendwo verwendet – niemals in Workflow-Argumenten oder einer Agentenaufforderung.

cp "<draftPath>" "<scratch>/snapshot.docx" && chmod a-w "<scratch>/snapshot.docx"
shasum -a 256 "<scratch>/snapshot.docx"     # aufzeichnen; dies kommt in die Berichtsfußzeile

3. Extrahieren & vorbereiten (deterministische Skripte – diese selbst ausführen, nahezu null Token)

Das zwischenzeitliche JSON an einen Ort legen, den die Agenten des Workflows lesen können (der Sitzungs-Notizblock ist in Ordnung). Die installierten Skriptpfade verwenden, damit dies aus jedem Ordner funktioniert (draftName bleibt der ursprüngliche Dateiname, nicht „snapshot“):

python3 ${CLAUDE_PLUGIN_ROOT}/skills/cite-check/scripts/extract_cites.py "<scratch>/snapshot.docx" "<scratch>/extract.json"
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cite-check/scripts/prepare_units.py "<scratch>/extract.json" "<scratch>/units.json"
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cite-check/scripts/citation_ledger.py "<scratch>/extract.json" "<scratch>/ledger.json"
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cite-check/scripts/citation_ledger.py "<scratch>/extract.json" --compact > "<scratch>/ledger_args.json"

citation_ledger.py gibt instance_count / by_kind / unique_secondary_cites / unresolved_xrefs aus. Einen Blick auf by_kind werfen: eine große Anzahl other oder text bedeutet, dass die Fußnoten eine Zitierform verwenden, die der Splitter nicht erkennt – diese Instanzen werden trotzdem im Register geliefert (als unchecked / not-a-citation), sodass der Bericht ehrlich bleibt, aber es bei der Auslieferung sagen. Die --compact-Datei enthält die beiden Arrays, die der Workflow benötigt (instances, secondary).

extract_cites.py gibt eine Zusammenfassung aus (footnote_count, body/footnote quote counts, unique_case_cite_count, supra_problem_candidates, plus form_findings / form_short_form / form_typeface / formatting_available / case_name_candidates aus der Form-Ebene). prepare_units.py gibt unit_count / case_cites / supra_problems aus. extract.json lesen, um die Arrays zu ziehen, die der Workflow benötigt: unique_case_cites, supra_problem_candidates und den gesamten form_checks-Block.

formatting_available: false bedeutet einen Markdown/Plain-Text-Entwurf – Kurzformen laufen trotzdem, Schriftart nicht; bei der Auslieferung sagen. Wenn formatting_unaligned_footnotes erscheint, haben so viele Fußnoten keine Schriftartanalyse erhalten (ihr formatierter Text stimmte nicht mit dem validierten Parser-Text überein, also hat die Ebene abgelehnt, anstatt das Risiko von verschobenen Offsets einzugehen) – nur erwähnen, wenn die Anzahl nicht trivial ist.

Für einen partiellen Durchlauf den Fußnotenbereich in Einheiten-IDs auflösen:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/cite-check/scripts/prepare_units.py "<scratch>/extract.json" --footnotes 45-80

(gibt unit_ids aus – als unitIds übergeben).

4. Workflow starten

Workflow({
  scriptPath: "${CLAUDE_PLUGIN_ROOT}/skills/cite-check/cite-check.workflow.js",
  args: {
    skillsDir: "${CLAUDE_PLUGIN_ROOT}/skills",      // wo die gebündelten Hilfsskripte leben
    extractPath: "<scratch>/extract.json",      // Agenten lesen Einheiten + vollständigen Kontext hieraus
    draftName:   "<Entwurf-Dateiname ohne Erweiterung>",
    footnoteCount: <extract.footnote_count>,
    unitCount:     <prepare.unit_count>,
    caseCites:     <extract.unique_case_cites>,        // Array
    supraProblems: <extract.supra_problem_candidates>, // Array
    formChecks:    <extract.form_checks>,              // Schriftart + Kurzformen (ganzer Block)
    ledger:        <ledger_args.instances>,            // jede Zitat-Instanz (kompakte Form)
    secondaryCites:<ledger_args.secondary>,            // eindeutige nicht zitierte Sekundärquellen
    unitIds:       <null | [IDs von --footnotes]>,    // nur partieller Durchlauf
    deep:          false,
    zotero:        true,                               // false, wenn in diesem Lauf kein brauchbarer Zotero-Server
    zoteroServer:  "<vom Pre-Flight 2.3>"             // z.B. "zotero-group" (5A) oder "zotero" (persönlich)
  }
})

Pipeline (alle Modellstufen Sonnet außer dem Bericht, der das Sitzungsmodell erbt):

  1. Segmentieren/Auflösen – in Blöcken; jedes Zitat wird mit der SPEZIFISCHEN Quelle gepaart, an der es hängt, Id.-Ketten zu ihrem wahren Vorgänger (der ein Fall zwei Noten höher sein kann) durchlaufend und supra note N-Weiterleitungen folgend, unter Verwendung von

…

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

danepps/legal-research-skills

Build or extend a Zotero collection of verified sources for a project — find the sources (web, catalogs, HeinOnline via an institutional library proxy), add them with full metadata via the Zotero Web API, then run a deterministic anti-hallucination check that every added item must pass. Trigger when the user wants sources gathered into Zotero ("build a library for X", "add the books/articles on X to my Zotero", "populate <collection> with …").

danepps/legal-research-skills

Gather the full document set for a SCOTUS case being prepped for a podcast episode, class, or article — cert-stage filings, merits briefs, lower-court opinion, questions presented, and oral-argument transcript — and load them onto the user's reMarkable in a per-case folder. Manual trigger — use when the user says "prep <case>", "grab the briefs for <case>", "load up <case>", or similar.

danepps/legal-research-skills

Quick, verified citation-finding for a specific proposition — a footnote-filler, not a research memo. Returns a few Supreme Court cites and/or a few scholarly cites (top scholars in flagship journals preferred; student notes only as a last resort), each verified with a pincite and a parenthetical or quote. Trigger when the user asks "find me a cite for X", "what should I cite for this footnote", "I need authority for the proposition that…", or pastes a sentence with an empty footnote.

danepps/legal-research-skills

Deep legal research that fans out multiple agents across free legal sources, verifies every authority, and returns a polished, well-cited memo. Use for case-law research, legal-scholarship / literature reviews, or both. Modes — caselaw | scholarship | both. Trigger when the user wants a thorough doctrinal memo, a survey of the academic debate, an answer grounded in cases/statutes, or a research deep-dive on a legal question.

Verwandte Skills