Anforderungsdefinition: Vollautomatischer Artikel-Workflow

Spezifikation für Cody · 23. Juni 2026 · Stand: final

1. Ziel

Eine Pipeline, die aus einem beliebigen Input (Thema, PDF, URL, Stichwort) einen QC-geprüften, publikationsfertigen HTML-Artikel produziert. Basti gibt den Auftrag — der Rest läuft autonom.

2. Eingabe-Schnittstelle

Input: {
  topic: string,            // "Gamegenic wird Partner von Tolarian Community College"
  sources: string[],         // ["/pfad/pm.pdf", "https://icv2.com/...", "https://gamegenic.com"]
  category_id: number,      // Joomla-Rubrik (default: 61 = Korrektur)
  rubric: string,           // "Neuerscheinungen" | "Crowdfunding" | "Nachrichten" | ...
  image_urls: string[],     // optionale Bild-URLs aus PM
  deadline: string | null   // optional: ISO-Timestamp für zeitkritische Artikel
}

Input-Quellen-Erkennung (automatisch)

InputQuelle
PDFPfad aus ~/.hermes/cache/documents/
URLDirekt übernehmen
Nur ThemaSub-Agent recherchiert selbstständig Quellen

3. Pipeline-Stufen

STAGE 0
Input Prep
STAGE 1
Research
STAGE 2
Write
STAGE 3
QC
STAGE 4
Deliver

Dauer: ~10–15 Minuten von Input bis fertigem Artikel

STAGE 0: Input Preparation

Basti (nicht Sub-Agent)

  1. PDFs OCRen: python3 -c "import pymupdf; doc=pymupdf.open('…'); [print(page.get_text()) …]"
  2. Prompt bauen aus Input + OCR-Text + Quellen-URLs
  3. Skills-Array: ["journalistic-article-writing", "korrekturschleife", "article-management"]
  4. Toolsets: ["web", "terminal", "file", "search", "skills"]

Output: Fertiger Prompt für Stage 1

STAGE 1: Research

Sub-Agent #1 (Leaf, delegate_task)

FeldWert
Skillsjournalistic-article-writing
Toolsetsweb, terminal, file, search, skills
  1. Alle Quellen abrufen (web_extract, curl, web_search)
  2. Jede Quelle bewerten: AAA (Primär) / AA (Sekundär) / A (schwach)
  3. Fehlende Fakten ergänzen:
    • BGG-Eintrag suchen: web_search site:boardgamegeek.com SPIELNAME
    • Autor/Illustrator/Verlag verifizieren
    • Preise, Daten, Awards gegenprüfen

Output: research_brief.md

# Research Brief: THEMA
## Quellenbewertung
| Quelle  | Stufe   | URL                   |
|---------|---------|-----------------------|
| PM      | AAA     | https://gamegenic.com |

## Fakten
- Fakt 1 (Quelle: URL, AAA)
- Fakt 2 (Quelle: URL, AA)

## Offene Punkte
- Punkt X konnte nicht verifiziert werden → STREICHEN

Exit-Codes: 0 = vollständig · 1 = unvollständig (Abbruch, an Basti melden)

STAGE 2: Write

Sub-Agent #2 (Leaf, delegate_task)

FeldWert
Skillsjournalistic-article-writing, korrekturschleife, article-management
Toolsetsweb, terminal, file, search, skills
ContextResearch Brief + Original-Prompt
KEINE "XML API v2" → klickbare BGG-Links
KEIN "Betriebsgeheimnis"
Quellen = <a href="…" target="_blank">
<span><strong>Quellen</strong></span>
KEINE Emojis/Icons
Datei endet mit </html>

Output: /home/hermes/workspace/artikel_NAME_DATUM.html

Pflicht-Elemente im HTML:

<head>
  <meta charset="UTF-8">
  <title>TITEL</title>
  <meta name="description" content="…">
  <meta name="keywords" content="…">
</head>
<body>
  <article>
    <h1>TITEL</h1>
    <p class="meta">DATUM · Lesezeit: ca. N Minuten</p>
    <!-- Inhalt -->
    <hr id="system-readmore" />
    <span style="…"><strong>Quellen</strong></span>
    <ol>
      <li><a href="URL" target="_blank">Name</a> — Beschreibung</li>
    </ol>
    <p class="qc"><!-- QC: Quelle1=AAA|URL, … --></p>
  </article>
</body>
</html>

Exit-Codes: 0 = Artikel geschrieben · 1 = Fehler

STAGE 3: Quality Control

Sub-Agent #2 (gleicher Agent, nach dem Schreiben)

bash /home/hermes/workspace/verify_article.sh artikel_NAME.html

13 Checks (Stand 23.06.2026)

#CheckKriterium
1Read-MoreGenau 1 × <hr id="system-readmore">
2br nach Read-MoreKein <br> direkt danach
3p.meta<p class="meta"> (nicht <div>)
4EmojisKeine im Body
5DateiendeEndet mit </html>
6Meta im BodyKeine doppelte Datum·Lesezeit-Zeile
7Quellen-ÜberschriftKein <h2>Quellen</h2>
8Links targetAlle mit target="_blank"
9Meta-DescriptionVorhanden und nicht leer
10QC-ZeileIn <p class="qc">
11BGG-AutorencheckDesigner gegen BGG verifizieren
12XML-API-ReferenzenKeine "XML API" / "Betriebsgeheimnis"
13Quellen verlinktQuellen-Block hat <a href> Links

Fehlerbehandlung:

STAGE 4: Deliver

Basti

  1. Git-Commit: git add artikel_NAME.html && git commit -m "artikel: THEMA"
  2. Article-Server prüfen: Direkt-URL testen
    curl "http://185.162.249.159:8890/artikel_NAME.html?key=…" | head -3
  3. Meldung:
✅ Artikel THEMA fertig
📄 /home/hermes/workspace/artikel_NAME.html
🔗 http://185.162.249.159:8890/artikel_NAME.html?key=…
📊 verify: 0 Fehler

4. Fehlermodi & Recovery

FehlerErkennungRecovery
PDF nicht OCR-bar pymupdf wirft Exception Basti manuell OCRen, Text in Prompt geben
Quelle nicht erreichbar curl/web_extract Timeout/404 5-Stufen-Eskalation:
curl → wget+UA → Wayback → Tavily → Google Cache
Keine AAA-Quelle für Kern-Fakt Research-Gap Fakt streichen → "unvollständig" an Basti
verify_article.sh fail Exit ≠ 0 3 Korrekturversuche → Abbruch
BGG-Autorencheck uneindeutig check_authors.py Warnung Dokumentieren, Basti entscheidet
Article-Server down curl auf :8890 Timeout Server neu starten via python3 article_server.py &

5. Cronjob-Integration

Der Workflow läuft als One-Shot-Cronjob mit deliver="local":

cronjob(
  action="create",
  schedule="1m",
  repeat=1,
  deliver="local",
  skills=["journalistic-article-writing", "korrekturschleife", "article-management"],
  enabled_toolsets=["web", "terminal", "file", "search", "skills", "delegation"],
  prompt="…"  // Stage-0-Output
)

Wichtig: deliver="local" — der Cronjob meldet sich NICHT bei Daniel. Basti pollt das Ergebnis.

6. Batch-Modus

Für mehrere Artikel: Parallele Cronjobs (max 3 gleichzeitig via delegation.max_concurrent_children). Jeder Cronjob bekommt denselben Prompt-Aufbau, nur mit anderem Input.

7. Was Cody bauen muss

7.1 article_pipeline.py — Orchestrator-Script

7.2 Integration

7.3 Config

ElementPfad / Wert
Workspace/home/hermes/workspace/
verify_article.sh/home/hermes/workspace/verify_article.sh
article_server.py/home/hermes/workspace/article_server.py
PDF-Cache~/.hermes/cache/documents/
Skillsjournalistic-article-writing, korrekturschleife, article-management

8. Aufruf-Beispiele

# Variante A: Thema + PDF
python3 article_pipeline.py \
  --topic "Gamegenic wird Partner von Tolarian Community College" \
  --pdf "/home/hermes/.hermes/cache/documents/GG_Press_release.pdf" \
  --rubric "Nachrichten" \
  --category-id 9

# Variante B: Nur Thema (autonome Recherche)
python3 article_pipeline.py \
  --topic "Neue Kennerspiel-Nominierungen 2026" \
  --rubric "Nachrichten"

# Variante C: Batch
python3 article_pipeline.py --batch topics.json

9. Erfolgskriterium

🎯 Basti gibt ein Thema ein → nach ~10 Minuten liegt ein Artikel im Workspace mit

verify_article.sh: 0 Fehler

Kein manuelles Eingreifen. Kein Nachbessern. Kein "XML API v2".


Anhang: Skills-Dokumentation

Folgende Skills werden im Workflow verwendet. Cody muss ihre Schnittstellen kennen:

SkillTypFunktion
journalistic-article-writing Writing HTML-Template, Quellenregeln, Sprachregeln, Formatvorgaben
korrekturschleife QC Zweistufiger Workflow (Write + Fact-Check), Writer-Fehler-Tabelle, Quellenbewertung AAA/AA/A
article-management Deploy Article-Server (Port 8890), Joomla-API, verify_article.sh, VG-Wort