🤖 KI & Automatisierung

Meine Experimente mit KI-Agenten, Docker und automatisierten Workflows

Was passiert, wenn eine Betriebswirtin anfängt, KI-Agenten auf einem eigenen Server zu betreiben? Genau das. Dieser Artikel erzählt ehrlich von meinen Experimenten – was funktioniert hat, was nicht, und was ich dabei gelernt habe.

01

OpenClaw – Mein erster autonomer KI-Agent

Der erste Schritt war der mutigste: Ein KI-Agent, der nicht nur antwortet – sondern selbst denkt, plant und handelt. OpenClaw ist ein autonomes Agenten-Framework, das ich auf meinem eigenen Server in einem Docker-Container betreibe.

Das Besondere daran: Der Agent läuft komplett lokal – kein OpenAI-API-Key, keine monatlichen Kosten. Als Gehirn dient Qwen 2.5 (1.5B), ein Open-Source-Sprachmodell, bereitgestellt über Ollama. Klein, schnell, und überraschend fähig.

Tech-Stack

Docker Ollama Qwen 2.5 1.5B Python Linux

OpenClaw hat eine eigene Persönlichkeit – definiert in einer SOUL.md-Datei. Verhaltensregeln in AGENTS.md, ein Gedächtnis in täglichen Log-Dateien und eine SQLite-Datenbank. Es ist wie ein Mini-Betriebssystem für einen KI-Assistenten.

Was mich am meisten fasziniert hat: Der Agent entscheidet selbst, wann er handelt und wann er fragt. Interne Aktionen (lesen, analysieren, planen) führt er eigenständig aus. Externe Aktionen (E-Mails senden, Posts veröffentlichen) – da wartet er auf meine Bestätigung. Das ist verantwortungsvolle KI.

💡 Was ich gelernt habe: Docker ist kein Hexenwerk. Nach dem dritten Mal docker-compose up fühlt es sich ganz normal an. Das Schwierigste war nicht die Technik – sondern zu verstehen, wie ein Agent denken soll.
02

n8n + Instagram – Automatisierte Reels mit KI

Das zweite große Experiment: Kann ich meinen Instagram-Content automatisieren? Ideen generieren lassen, Scripts schreiben lassen, und ich bestätige nur noch per Telegram-Knopfdruck?

Die Antwort: Ja – und es funktioniert mit einem beeindruckenden KI-Stack, der komplett kostenlos ist.

Schedule
Jeden Tag automatisch
🧠
Qwen 2.5
Ideen generieren
📱
Telegram
Vorschlag an mich
Meine Bestätigung
Ja / Nein
Gemini Flash
Script schreiben
🎬
Instagram Reel
Veröffentlichen

Tech-Stack

n8n Qwen 2.5 Gemini Flash Telegram Bot Instagram Graph API MongoDB Docker

Wie es funktioniert

Der Workflow besteht aus zwei n8n-Pipelines:

  1. Ideen-Pipeline: Läuft nach Zeitplan. Qwen 2.5 generiert täglich frische Content-Ideen rund um Digitalisierung, KI und Lernen. Die Idee landet direkt als Telegram-Nachricht bei mir.
  2. Bestätigungs-Pipeline: Ich drücke in Telegram auf „Ja" – und Gemini Flash schreibt daraus ein vollständiges Reel-Script. Das fertige Script wird in MongoDB gespeichert und für die Veröffentlichung auf Instagram vorbereitet.
💡 Was ich gelernt habe: n8n ist visuelles Programmieren auf einem anderen Level. Wenn du verstehst, wie Daten zwischen Nodes fließen, öffnet sich eine komplett neue Welt der Automatisierung. Und das Beste: Du brauchst kein teures OpenAI-Abo – Open-Source-Modelle sind erstaunlich gut.

Was noch kommt

Der nächste Schritt ist die automatische Video-Generierung mit Veo 3 (Google AI Studio). Das Ziel: Vom Knopfdruck bis zum fertigen Reel – vollautomatisch. Ein Traum? Vielleicht. Ein erreichbares Ziel? Definitiv.

03

Vom Sofa aus programmieren – meine Telegram-Pipeline

Eines Abends auf der Couch fiel mir ein, dass meine Website noch einen Tippfehler hat. Früher hieß das: Laptop hochfahren, einloggen, Editor auf, Datei finden, fixen, deployen. Heute öffne ich nur Telegram und tippe: „Bitte den Tippfehler im Impressum korrigieren – statt ‚Strase' soll da ‚Straße' stehen." Zwei Minuten später vibriert das Handy: „Erledigt."

Was dazwischen passiert, ist meine kleine Lieblings-Pipeline. Die Telegram-Nachricht landet über einen Bot in einem n8n-Workflow, der sie als Markdown-Datei in einen Inbox-Ordner auf meinem VPS schreibt. Ein systemd-Watcher pollt diesen Ordner alle paar Sekunden. Findet er etwas Neues, startet er Claude Code – mit der Aufgabe als Eingabe und vollem Zugriff auf alle meine Projekte. Wenn Claude fertig ist, feuert ein Stop-Hook einen Webhook ab, der mir das Ergebnis wieder per Telegram schickt.

Tech-Stack

Telegram Bot API n8n systemd-Watcher Claude Code Stop-Hook (Bash) Webhook

Anfangs hatte ich noch ein lokales Ollama-Modell als Zwischenglied eingebaut – es sollte meine Telegram-Nachrichten in „saubere Tasks" umformulieren. Klang clever, war in der Praxis ein Problem: Das Modell brauchte 4,3 GB RAM, mein VPS hat 3,4 GB frei. Jeder zweite Aufruf kippte mit Memory-Error.

Die ehrliche Erkenntnis: Claude Code selbst ist das smarte LLM. Warum ein zweites, kleineres Modell davor versuchen lassen, etwas zu „verstehen", was Claude besser kann? Also Ollama wieder rausgeworfen. Seitdem läuft alles stabil – und schneller.

💡 Was ich gelernt habe: Komplexität ist kein Qualitätsmerkmal. Ein Layer, der Ressourcen frisst ohne echten Mehrwert, muss raus – auch wenn er auf dem Papier schlau aussieht.
04

Ein eigener MCP-Hub – damit jede Session sofort weiß, wer ich bin

Wer mit Claude oder einem anderen KI-Assistenten arbeitet, kennt das Problem: Jede neue Session ist ein leeres Blatt. „Erkläre mir nochmal, was LernyTube ist." „Wo liegt das Whisky-Projekt nochmal?" Auf Dauer mühsam.

Die Lösung kommt aus einem Standard, der gerade groß rauskommt: Model Context Protocol (MCP). Der Hersteller meines Assistenten hat ihn definiert, damit man Tools von außen einbinden kann. Genau das habe ich gemacht – nur eben nicht für ein bestimmtes Tool, sondern für alle meine Projekte gleichzeitig.

Tech-Stack

MCP (Streamable HTTP) FastAPI Docker Traefik + HTTPS Read-only Mounts

Auf mcp.eiskopani.de läuft ein eigener kleiner Server, der alle vier Projektverzeichnisse (LernyTube, Whisky-Kuratorium, EIS Schuh-Atelier, vita.eiskopani) read-only eingebunden hat und Tools wie list_projects, read_project_file, list_tasks und run_shell bereitstellt. Authentifizierung läuft über ein Secret im URL-Query, HTTPS macht Traefik mit Let's-Encrypt-Zertifikat.

Effekt: Jede neue Session weiß sofort, woran ich gerade arbeite, wo welcher Code liegt und was offene Aufgaben sind. Kein Briefing mehr nötig, keine wiederholten Erklärungen.

💡 Was ich gelernt habe: Wer mit KI-Tools täglich arbeitet, gewinnt am meisten, wenn er ihnen Kontext verschafft – nicht, wenn er sie cleverer macht. Ein einfacher Hub, der „weiß was wo liegt", spart mehr Zeit als das nächste, größere Modell.
05

Umfrage-Orchestrierung – KI versteht die Antworten, der Mensch entscheidet

Aus einem Use-Case im öffentlichen Sektor kam die Idee für mein bisher größtes KI-Experiment: ein System, das iterativ E-Mail-Umfragen verschickt, die Antworten frei formuliert entgegennimmt, daraus strukturierte Daten extrahiert – und einen Menschen entscheiden lässt, ob die Auswertung passt.

Statt direkt einen Outlook-Connector zu bauen, habe ich den E-Mail-Teil komplett simuliert: „Versenden" ist ein Statusupdate, „Antwort eingeht" ist ein Browser-Formular. Dafür ist die KI-Auswertung echt: Jede simulierte Antwort geht durch einen Claude-API-Call, der daraus Kernaussage, Bewertung, Handlungsbedarf, Vollständigkeit und Stichworte extrahiert.

Tech-Stack

FastAPI PostgreSQL (JSONB) Claude Haiku 4.5 Vanilla JS Docker Compose GitHub Actions (CI/SecCD)

Spannend wurde es beim Human-in-the-Loop: Jede KI-Extraktion landet zuerst im Status PENDING. Erst nach manueller Freigabe geht die Antwort in die Auswertung. Wird sie abgelehnt, ist die Extraktion verworfen. Ein simpler, aber wichtiger Schritt: Die KI macht einen Vorschlag, kein Urteil.

Die ganze Geschichte mit Screenshots habe ich in einem eigenen Beitrag dokumentiert – inklusive der unangenehmen Lehre am Ende (siehe Kapitel 9).

💡 Was ich gelernt habe: Welcher Teil der Wertschöpfung ist eigentlich neu? Nicht das Versenden, das kann jedes Mailprogramm. Sondern das Verstehen. Wer das erkennt, baut Prototypen schneller und mit weniger Drumherum.

Zur Projektseite

06

25 Songs aus dem Computer – KI-generierte Musik für meine Hobbyseite

Auf meiner Hobbyseite läuft ein Retro-Musikplayer mit 25 Songs. Klingen kann man sich anhören – schreiben tut sie eine KI, geträllert wird sie von einer KI, und auf den Server transportiert habe ich sie über einen kleinen Selbstbau-Upload-Proxy.

Erst kommt der Text: Das Thema gebe ich vor, eine Sprach-KI dichtet daraus eine Strophe samt Refrain. Dann der Klang: Suno macht aus dem Text einen vollständigen Song mit Stimme und Instrumenten. Der Output landet als MP3 auf meinem Rechner.

Tech-Stack

Suno (Song-Generator) Claude (Texte) Amplitude.js (Player) FastAPI Upload-Proxy SFTP zu Hostinger Bearer-Token Auth

Damit ich Songs nicht jedesmal manuell hochladen muss, habe ich mir eine kleine Admin-Seite gebaut: Datei reinziehen, klicken, fertig. Im Hintergrund schickt sie die MP3 an einen Upload-Proxy auf dem VPS, der sie per SFTP zu Hostinger weiterreicht. Auth über einen Bearer-Token – und seit Kurzem mit Rate-Limit auf Traefik-Ebene, weil 50-MB-Bodies plus ungeschützter Auth-Endpoint ein klassisches DoS-Risiko sind.

💡 Was ich gelernt habe: KI-Werkzeuge sind dann am stärksten, wenn sie in eine Pipeline eingebettet sind – nicht, wenn sie isoliert stehen. Erst die Verbindung von Text-KI, Audio-KI, eigenem Server und einem Player ergibt etwas, das täglich Spaß macht.
07

NotebookLM auf der Kommandozeile – Recherche, ohne Tabs zu jonglieren

Wer gerne lernt, kennt das Problem mit Recherche: Zwanzig Tabs offen, fünf PDFs herumliegen, am Ende weiß man nicht mehr, wo man die wichtige Stelle gesehen hat. NotebookLM von Google ist hier wirklich gut – man wirft Quellen rein, stellt Fragen, bekommt Antworten mit Zitaten. Aber: Die Web-Oberfläche ist langsam, wenn man viel macht.

Also habe ich mir notebooklm-py installiert, ein CLI-Tool, mit dem ich vom Terminal aus Notebooks anlegen, Quellen ergänzen und Fragen stellen kann. Login einmalig per Browser, Storage-State gespeichert, ab da läuft alles im Skript.

Tech-Stack

NotebookLM notebooklm-py Playwright (Login-State) Bash-Skripte

Effekt: Ich kann meinen KI-Assistenten anweisen, eine Recherche in einem Notebook anzulegen, mehrere Quellen einzubinden und am Ende eine Zusammenfassung als Markdown zurückzugeben. Ohne dass ich selbst klicken muss. Für Projektrecherche ein riesiger Zeitgewinn.

💡 Was ich gelernt habe: Gute KI-Tools werden noch besser, wenn sie scriptbar sind. Eine CLI ist oft mehr wert als eine schicke Oberfläche – weil sie sich in eigene Workflows einklinken lässt.
08

127 Tests an einem Tag – wie ich CI/CD endlich verstanden habe

Lange Zeit war „Tests schreiben" für mich das, was man bei den Profis macht und bei einem Lernprojekt sicher erstmal weglassen kann. Bis ich an einem Tag meine drei Hauptprojekte (LernyTube, Whisky-Kuratorium, EIS Schuh-Atelier) komplett mit Tests unterfüttert habe – Unit, Integration, End-to-End. Insgesamt 127 Tests.

Dazu jeweils eine GitHub-Actions-Pipeline, die auf jeden Push losläuft: Tests, Linter, Coverage-Report. Plötzlich gab es einen grünen Haken oder ein rotes X – und ich konnte nicht mehr so tun, als wüsste ich nicht, dass ich gerade etwas kaputtgemacht habe.

Tech-Stack

pytest Playwright (E2E) GitHub Actions Coverage PostgreSQL/MongoDB als Service

Die Erkenntnis kam beim Refactoring: Ich habe in der Whisky-App eine Funktion umgebaut, die ich seit Wochen nicht angefasst hatte. Drei Tests sind sofort rot geworden. Ohne die hätte ich das Problem erst Tage später bemerkt – wenn überhaupt.

💡 Was ich gelernt habe: Tests schreiben ist keine Disziplin der Profis, sondern eine Investition in das eigene zukünftige Selbstvertrauen. Refactoring ohne Tests ist Glücksspiel – mit Tests wird daraus Routine.
09

67 Tests grün – und trotzdem nicht sicher

Beim Umfrage-Projekt (Kapitel 5) hatte ich am Ende stolze 67 Tests, davon 26 explizit als Security-Tests, dazu Bandit (statische Code-Analyse) und Safety (CVE-Scan) in der CI-Pipeline. Alles grün. Trotzdem fragte mich mein Sparringspartner: „Hast du an die Sicherheit gedacht?" – und hatte recht.

Drei Lücken, die mir trotz aller Tests durchgegangen sind:

  1. API-Schlüssel im Klartext. Der echte Anthropic- Key stand in der docker-compose.yml. Nicht im Git-Repo, aber auf dem Server für jeden mit Zugriff lesbar.
  2. XSS im Frontend. Der KI-Output ging ungeprüft per innerHTML ins Dashboard. Wenn die KI bösartige HTML-Tags zurückgegeben hätte (oder ein Angreifer sie über den Eingabetext eingeschleust hätte), wäre JavaScript im Browser ausgeführt worden.
  3. Keine Schutz-Header. Keine Content-Security- Policy, kein X-Frame-Options, keine X-Content-Type-Options. Klassische Hygienefehler.

Die Fixes waren je 5–20 Zeilen Code. Aber das ist nicht der Punkt. Der Punkt ist: Ich hätte sie alle vermeiden können, wenn ich Security als eigene Phase behandelt hätte – nicht als Häkchen am Ende, das durch grüne Tests gesetzt wird.

💡 Was ich gelernt habe: Tests sichern App-Logik. Sicherheit ist mehr. Deployment- Artefakte (Compose-Files, .env, Workflows) und Frontend- Rendering müssen separat auditiert werden. Bandit/Tests grün ≠ sicher.

Mein Fazit

KI ist kein Zaubertrick – es ist ein Werkzeug. Und wie jedes gute Werkzeug muss man lernen, es richtig einzusetzen. Meine Experimente haben mir gezeigt: Man braucht kein Informatikstudium, um KI produktiv einzusetzen. Man braucht Neugier, Geduld und die Bereitschaft, Fehler zu machen.

Ich mache weiter. Denn jedes Scheitern war ein Lernmoment – und jeder Erfolg hat mich noch hungriger gemacht.

Austauschen? Schreib mir!