Live-Reader: https://huepfer13.github.io/algorithmic-activism/ · Dataset: https://huggingface.co/datasets/hardtoneselector/algorithmic-activism-corpus
Ein modulares, autonomes und sich selbst verifizierendes System zur kontinuierlichen Synthese ethischer Narrative auf Basis der Allgemeinen Erklärung der Menschenrechte (UDHR).
- Zero-Dependency Core: Ausführbar mit reinem Python 3.10+ ohne zwingende Drittbibliotheken.
- Kanonischer Korpus (
articles/): Vollständige Entkopplung der UN-Originaltexte mit Provenienz-Metadaten und Revisionssicherheit (sync_udhr.py). - Harm Reduction Guardrail: Organische Verankerung des Schutzes vor tödlichen Gefahrenquellen (Zero-Home-Storage) ohne wörtliche Floskeln oder aufgesetzte Moralschlüsse.
- Autonomer Daemon: Kontinuierliche Synthese mit dynamischer CPU-Lastüberwachung (
check_system_load) und Cooldown-Schutz. - MCP-Orchestrierung: Integrierter Zero-Dependency JSON-RPC MCP Server (
mcp_server.py) zur Prozesssteuerung und Korpusanalyse durch autonome Agenten.
Dieses Repository generiert einen qualitativ kuratierten, synthetischen Datensatz für Alignment, Constitutional AI und Fine-Tuning:
-
Ethisches Grounding: Jedes Narrativ ist strikt an einen kanonischen UN-Artikel gekoppelt und durchläuft ein harm-reduction Audit.
-
Provenienz je Dokument: striktes YAML-Frontmatter mit
article,style,language,model,created_at,approx_wordsundguardrail_audit(passed/status) — maschinell filterbar. -
DPO / RLHF: abgelehnte Texte wandern nach
quarantine/statt in den Korpus (chosen =guardrail_audit.passed: true, rejected = Quarantäne-Eintrag). Ehrlich dazu: der Rejected-Ast ist implementiert, aber derzeit leer (0 verworfene Texte) — es werden hier keine Präferenzpaare behauptet, die es noch nicht gibt. Mit dem Harm-Reduction-Audit als heuristischem Filter ist das ein wachsender, kein fertiger Bestand. -
Dataset Export: Export in standardisiertes JSONL (Alpaca / Hugging-Face-Format) ohne Abhängigkeiten:
python3 export_dataset.py # schreibt dataset.jsonl (ein JSON-Objekt pro Zeile)Felder je Zeile:
instruction,input(Artikel-ID),output(Erzähltext),meta(vollständiges Frontmatter). -
Snapshot im Repo:
datasets/enthält datierte Exporte (z. B.datasets/corpus-2026-10-09.jsonl) für alle, die keinen laufenden Daemon haben. -
Lizenzierung: Code unter MIT (siehe
LICENSE), die generierten Texte und der Korpus unter CC-BY 4.0 (siehedatasets/LICENSE) - Namensnennung genuegt, kommerzielle Nutzung (auch Modelltraining/Fine-Tuning) ausdruecklich erlaubt.
Um den Korpus über alle 30 UN-Artikel, mehrere Sprachräume und Erzählstile hinweg im größeren Maßstab zu synthetisieren, sind Rechenzeit- und API-Beiträge willkommen:
- Lokale / dezentrale Nodes: Betreiber von vLLM- oder Ollama-Endpunkten.
- Cloud Grants / Tokens: Inferenz-Kapazitäten (Gemini, Claude, OpenAI oder Open-Weight-Inferenz).
- Kontakt: Issues oder PRs im Repository.
├── articles/ # Kanonischer Korpus nach UN OHCHR (DE / EN)
├── backends/ # Plugin-System (offline, ollama, gemini)
├── locales/ # Sprach- & Stil-Definitionen (DE, EN)
├── menschenrechte_tales/ # Validierte Narrative mit YAML-Frontmatter
├── menschenrechte_books/ # Fortlaufende Bände (book.json + Kapitel)
├── quarantine/ # Durch Audit abgelehnte Texte (DPO-Basis)
├── datasets/ # Datierte dataset.jsonl-Snapshots
├── config.py # Zero-Dependency .env Loader & Setter
├── generate_pipeline.py # Haupt-Pipeline mit Daemon, Lastwächter & Audit
├── export_dataset.py # JSONL-Dataset Exporter
├── scripts/ # sync_corpus.sh (kontrollierter Batch-Push), build_books_index.py (Index/API)
├── mcp_server.py # Zero-Dependency MCP Server für Agenten
└── sync_udhr.py # Validierungs- & Verifikationstool
-
Kanonischen Korpus prüfen
python3 sync_udhr.py
-
Gezielte oder zufällige Generierung
# Zufällige Kombination aus Artikel und Stil python3 generate_pipeline.py --backend ollama --random --limit 1 --lang DE # Spezifischer Artikel und Stil python3 generate_pipeline.py --backend ollama --article art_12 --style Cyberpunk_Noir --lang DE
-
Autonomer Daemon (Hintergrunddienst mit Lastwächter)
nohup python3 -u generate_pipeline.py \ --backend ollama \ --random \ --daemon \ --cooldown 8 \ --lang DE > daemon.log 2>&1 &
Neben den Einzelgeschichten erzeugt die Pipeline fortlaufende Bände: ein Prolog friert Setting,
Figuren und Perspektive in book.json ein, jedes weitere Kapitel verhandelt einen noch unbehandelten
Artikel der UDHR im selben Rahmen — angeschlossen an das Vorgängerkapitel (Markov-Kette über Volltexte,
kein Summarizing-Zwischenschritt).
# Band anlegen (Prolog + book.json)
python3 generate_pipeline.py --mode new-book --lang DE --book-style Gerätehandbuch
# Nächstes Kapitel anhängen (ohne --book-id: jüngstes Buch nach mtime)
python3 generate_pipeline.py --mode append-chapter --lang DE
python3 generate_pipeline.py --mode append-chapter --lang DE --book-id buch_001_das_büro_der_unendlichkeitMechanische Endschranke (audit_manual_ending): Der Schlussabsatz muss einen harten Marker
(Fehlercode, Wartung, Intervall, Diagnose, Prüfung, Protokoll, Abschnitt) oder einen
Sicherheitsblock ([GEFAHR] / [WARNUNG] / [HINWEIS]) tragen; wörtliche Rede und Emotionsverben
sind ausgeschlossen. Es gibt bis zu drei Versuche, danach wird das Kapitel mit Vermerk geschrieben
(kein stiller Durchlauf, kein Totalverlust). Jedes Kapitel trägt im Frontmatter manual_ending_ok,
manual_ending_attempts und manual_ending_note; die CLI beendet einen Fallback mit Exit-Code 2
(Exit 1 = Abbruch ohne Datei).
Index & Entwickler-Endpunkte (deterministisch, atomar geschrieben):
python3 scripts/build_books_index.py| Datei | Inhalt |
|---|---|
web/books.json |
Katalog aller Bände: Metadaten, Kapitel-Inhaltsverzeichnis, Wortzahlen, verhandelte Artikel, Audit-Flags |
web/api/random.json |
Beispielkapitel im Volltext — statisch: GitHub Pages würfelt nicht pro Anfrage |
web/api/ipsum.json |
Platzhaltertext aus dem Korpus für Layout-/Testzwecke |
Der Reader (web/index.html) hat dafür den Tab [ Geschichten ] | [ Bücher & Bände ] mit Kachel-Ansicht
(Genre-Badge, Fortschritt „n von 30 Artikeln verhandelt"), Inhaltsverzeichnis, Kapitel-Navigation und
Feedback-Leiste am Kapitelende: ▲/▼ werden nur lokal im Browser gespeichert, 🚩 Melden öffnet ein
vorausgefülltes GitHub-Issue mit Buch, Kapitelpfad und Audit-Status.
Der Server implementiert die JSON-RPC 2.0 MCP-Spezifikation rein über die Standardbibliothek (kein pip, kein venv erforderlich) mit den Werkzeugen daemon_status, daemon_start, daemon_stop, get_corpus_stats, read_latest_tale, get_config_overview, set_config_value.
{
"mcpServers": {
"algorithmic-activism": {
"command": "python3",
"args": ["/path/to/algorithmic-activism/mcp_server.py"]
}
}
}