Reddit’s API ist seit Mitte 2023 weitgehend dicht. Wer schreibend zugreifen will — Posts, Kommentare, DMs, Subreddit-Moderation — braucht Aufnahme ins RBP-Programm. Wir hatten den Antrag gestellt, im April 2026 die Absage erhalten. Begründung im Standard-Wortlaut: “At this time we are unable to extend access to your application.”
Ohne API-Zugang gibt es zwei legitime Wege auf Reddit zu agieren: (1) menschlich, langsam, manuell. (2) Browser-Automation, die das Frontend bedient wie ein Nutzer es tun würde. Variante 2 ist das, was wir mit Daytona-Sandboxes und Playwright aufsetzen — diese Woche live für unser internes Riff-Projekt.
3 sec
Sandbox-Start-Zeit von Daytona
$0.0504
pro vCPU-Stunde
~CHF 0.005
pro Reddit-Run (3 min headless)
Warum nicht einfach selenium oder puppeteer lokal?
Die Antwort hat drei Teile: Konsistenz, Isolation, Skalierung.
Konsistenz: Reddit’s Frontend ändert sich. Selektoren sind brüchig. Wenn der Agent auf deinem MacBook läuft und Cron-Trigger via launchd fixiert sind, hast du eine Hardware-Abhängigkeit. Schliesst dein Laptop, schweigt der Agent. Daytona-Container laufen unabhängig in der Cloud, lassen sich aus jedem Trigger heraus starten (Vercel-Endpoint, GitHub Actions, Slack-Slash-Command), enden nach Definition.
Isolation: Jeder Run ist ein frischer Container mit eigenem Filesystem. Keine Cookies, keine Session-Storage, keine Playwright-Cache-Artefakte aus dem letzten Run. Das ist wichtig für Reddit — wenn der Agent in einem Run eingeloggt war und im nächsten wieder einloggt, sieht Reddit zwei separate Sessions. Auth-State wird explizit aus Vercel-Env injiziert, nicht aus persistentem State.
Skalierung: Acht Brand-Sites, eine zentrale Daytona-Pipeline, Tier-3-Limit von 250 vCPU. Wir können parallel hochfahren, was wir wollen. Lokale Single-Box-Setups skalieren nicht.
Die konkrete Pipeline
Hier ist der Riff-Day-1-Run, wie er nächste Woche live geht:
05:30 UTC cron-job.org POST → /api/scribe-runner
Body: { "task": "riff-prep-daily" }
05:30:03 Vercel-Endpoint authentisiert via Bearer SCRIBE_RUNNER_AUTH,
lookup in scribe-tasks.config.ts:
repo: Benjaminamos11/digitalawards
script: .github/lou-tasks/riff_prep.py
secrets: REDDIT_USERNAME, REDDIT_PASSWORD, ANTHROPIC_API_KEY, ...
timeoutSec: 600
pipInstall: playwright + chromium
05:30:06 Daytona-Sandbox startet (US-Region, 4 vCPU, 8 GiB RAM)
git clone digitalawards repo --depth 1
pip install playwright + playwright install chromium
05:31 Python-Skript ruft Anthropic Managed Agents:
"Lies das Riff-Operator-Manual aus dem Repo.
Plane heute's Engagement: 3 Subreddits, 5 Threads
pro Subreddit, pro Thread max. 1 substantieller
Kommentar. Banned: Self-Promotion, Direct-Links
zu unseren Brands. Mindeststandard: jeder Kommentar
muss die Frage des Threadstarters konkret beantworten,
keine Filler-Kommentare."
05:31–05:40 Claude Opus 4.7 plant, Daytona-Sandbox führt aus:
1. Playwright startet headless Chromium
2. Login via REDDIT_USERNAME + REDDIT_PASSWORD
3. Navigation zu jedem Subreddit
4. Thread-Auswahl per Claude-Heuristik
5. Kommentar-Entwurf, Quality-Gate, Submit
05:40 Sandbox loggt Results in Supabase riff_log:
thread_url, comment_url, comment_text, claude_session_id
Schliesst, wird gelöscht.
05:41 Email-Report an bw@expat-savvy.ch mit allen 5 Kommentaren
zur Sichtung.
Das ist es. Vom Cron-Trigger zur ausgeführten Reddit-Interaktion in 11 Minuten, vollständig isoliert, vollständig nachvollziehbar, vollständig rückrollbar (jeder Kommentar hat eine commentid, mit der Lou ihn morgen löschen könnte).
Die schwierigen Teile
Drei Punkte, an denen die meisten Reddit-Browser-Agenten scheitern:
Cloudflare-Challenge beim Login. Reddit benutzt Cloudflare-Bot-Detection. Headless Chromium mit --disable-blink-features=AutomationControlled und stealth-Plugin (playwright-stealth) reicht in 80% der Fälle. Für die anderen 20% setzen wir manuelle Browser-Sessions mit Storage-State-Export — einmal manuell einloggen, die Cookies in Vercel-Env speichern, ab dann Sessions aus dem Storage-State laden, kein Re-Login. Storage-State läuft nach 30 Tagen ab, dann neu auffrischen.
Subreddit-spezifische Rate-Limits. Manche Subreddits (r/SwissPersonalFinance, r/Switzerland) haben automatische Spam-Filter, die jeden Account unter 3 Tagen Aktivität in Mod-Queue verschieben. Wir bauen Account-Age + Karma in unsere Quality-Gates ein: erste Woche nur kommentieren, nicht posten. Erste Monat keine Cross-Posts. Karma erst über 100 → DMs erlaubt.
Detection durch Verhaltensmuster. Browser-Automation, die zu schnell tippt, zu präzise klickt, gleiche Latenz zwischen Aktionen hat — wird detektiert. Wir bauen random.uniform(800, 2400) ms Pausen zwischen Aktionen ein. Tippen via keyboard.type() mit delay parameter randomisiert. Maus-Bewegung über Bezier-Kurven statt direkter Linien (playwright.mouse.move() mit Zwischenpunkten).
✓ Was wir aus dem benjaminwagner.ch-Test gelernt haben
Daytona hat Playwright vorinstalliert. Wir mussten KEINE Custom-Docker-Images bauen, kein Cloudflare-Tunnel, kein VPN. pip install playwright, playwright install chromium, beides läuft in ~45 Sekunden im Sandbox-Init. Total-Start-up plus Login auf Reddit: 90 Sekunden. Schnell genug für stündliche Cron-Trigger.
Warum nicht GPT-Operator oder Claude’s Computer-Use API?
Beides funktioniert grundsätzlich, hat aber praktische Probleme für unseren Use-Case:
Computer-Use ist teuer pro Run. Claude’s Computer-Use sendet Screenshot-Frames zurück an das Modell, das dann Maus-/Tastatur-Aktionen zurückschickt. Pro Reddit-Run mit ~40 Aktionen entstehen etwa 80 Vision-Calls zu Sonnet-4.6 oder Opus-4.7. Das sind CHF 0.30–0.50 pro Run. Direktes Playwright kostet $0.005.
Operator hat keine Account-Persistence. OpenAI’s Operator löst Captcha selbst, aber jede Session beginnt frisch. Login bei Reddit ist 6 Klicks plus Email-Bestätigung. Macht den Workflow langsam und fehleranfällig.
Playwright + Claude für Reasoning ist die Mitte. Claude denkt über was zu kommentieren ist. Playwright führt wie aus. Token-Cost minimal (~3 Sonnet-Calls pro Run für Thread-Auswahl + Kommentar-Draft + Quality-Check). Execution-Cost minimal (~3 Min Sandbox-Zeit).
Was als nächstes kommt
Riff geht nächste Woche live mit drei Subreddits zum Start: r/Switzerland (allgemein), r/SwissPersonalFinance (Lebensraum + Krankenkasse), r/cscareerquestions (Tech-Karriere DACH). Vorerst nur Kommentare, keine Posts. Wir messen vier Wochen lang Account-Health (Mod-Queue-Rate, Comment-Score), bevor wir auf Posts upgraden.
Wenn Sie selbst einen Daytona-basierten Browser-Agenten bauen wollen — das öffentliche Operator-Manual ist auf digitalawards.ch/system/constitution/, die scribe-tasks-Registry ist Teil des digitalawards-Repos. Forken, anpassen, eigenes Cron-Setup. Total-Cost-of-Ownership unter CHF 10/Monat pro Agent — auch wenn er stündlich läuft.
Die Reddit-API mag uns abgelehnt haben. Der Browser ist agnostisch.