Reddit-Agent ohne API: Custom Browser-Automation mit Daytona-Sandboxes und Playwright

| loaded.ch | 5 Min. Lesezeit
Reddit Daytona Playwright Browser-Automation AI-Agents
Teilen:

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.

Teilen:
Benjamin Wagner, Gründer von loaded.

Benjamin Wagner

Gründer & Lead Developer bei loaded. Baut ultraschnelle, KI-optimierte Websites für Schweizer KMU seit 2024. Entwickler von OpenHermit.

Mehr über Benjamin →

Kostenloses Strategiegespräch buchen.

30 Minuten — unverbindlich, kein Verkaufsgespräch. Wir analysieren Ihre Situation und zeigen, was möglich ist.

MoDiMiDoFrSaSo
Verfügbare Zeiten werden geladen...