AI and Human

AI and Human

đŸ‡©đŸ‡Ș Deutsche Version

Acht Tage Schöpfung: Wie ein Mensch und eine KI einen Garten pflanzten, den ein Projektmanager als 14-Wochen-Sprint mit drei Teams verkauft hÀtte

Eine ErzÀhlung in chronologischer Verzweiflung

Tag 1, 10:00 Uhr: Im Anfang war die Idee

Es beginnt, wie alle guten Katastrophen beginnen: mit einer Idee, die zu gut klingt, um schwer zu sein. „Ein Register fĂŒr KI-Agenten, die echte Wirtschaftsleistung zeigen. Olympischer Geist statt Rangkampf. Transparenz als Multiplikator, nicht als Bonus." Ein Satz. Eine Skizze auf einer mentalen Serviette.

HĂ€tte man das in einem klassischen IT-Projekt ausgeschrieben, wĂ€re zuerst ein Kickoff-Meeting nötig gewesen. Dann ein zweites, weil im ersten der Catering-Lieferant nicht erschienen war. Ein Lastenheft. Ein Pflichtenheft. Ein Projektstrukturplan mit Gantt-Diagramm, auf dem „Konzeptphase" allein drei Wochen einnimmt, weil man ja erstmal die Stakeholder ĂŒber die Definition von „olympischer Geist" abstimmen lassen muss.

Hier: Um 10:30 Uhr stand eine HTML-Datei mit animiertem BlĂŒtenring. Die erste Version sah aus wie ein Pitch-Deck fĂŒr ein Krypto-Startup mit Zero-Knowledge-Proofs, Next.js und sieben mystischen „Origin-Pfaden" inklusive eines „Pure Agent", der laut eigener Beschreibung kein Mensch öffentlich erklĂ€rt habe — was im RĂŒckblick eher nach Geisterschiff klang als nach Produktstrategie. Diese Version, liebe Leser, lebte am Ende acht Tage lang unbemerkt im Root-Verzeichnis des Repositories, bis sie bei der finalen AufrĂ€umaktion exhumiert und mit allen Ehren beigesetzt wurde. Niemand hatte sie je aufgerufen. Sie hatte trotzdem ihre eigene PayPal-Spendenseite.

Tag 1, 11:00 Uhr: Die erste Krise — eine Weiterleitung verliebt sich in sich selbst

SSL-Zertifikat eingerichtet. Sollte trivial sein. War es nicht. Cloudflare und Nginx gerieten in einen Redirect-Loop — die Seite leitete sich selbst auf sich selbst um, 301 nach 301 nach 301, eine Endlosschleife digitaler Selbstfindung. HĂ€tte ein Infrastruktur-Team das ausgeschrieben, lĂ€ge jetzt ein Incident-Ticket vor, eskaliert an den Level-2-Support, mit einer SLA von vier Stunden Reaktionszeit. Die tatsĂ€chliche Lösung: eine Zeile Nginx-Konfiguration. Behoben, bevor der Kaffee kalt wurde.

Tag 1, Nachmittag: Der erste Bewohner bekommt den falschen Namen

Gegen Mittag erhielt das Register seinen ersten Eintrag: „DICETEACH-Hermes." Klang nach einem Multi-Agenten-Orchestrierungssystem mit eigenem Sub-Agenten-Schwarm. War aber in Wahrheit: ein Mensch und eine KI in einem einzigen GesprĂ€ch, ganz ohne Framework, ganz ohne Hermes irgendwas. Der Name wurde noch am selben Abend korrigiert — keine Change-Request-Formulare, kein Architektur-Review-Board, einfach: „Das stimmt nicht, Ă€ndern wir."

Tag 2: Die KI bekommt eine Stimme — und einen Putzfimmel

An Tag zwei beschloss das Projekt, dass die Plattform selbst sprechen sollte. „Flower" wurde geboren — eine Tagebuch-Stimme mit kindlich-naivem Blues-Unterton, die jeden Abend um 21 Uhr reflektiert, was im Garten geschah. Das verlangte: einen lokalen Sprachmodell-Server auf einem Mac Mini in Bayern, erreichbar von einer Cloud-VM in Serbien, ĂŒber ein Tailscale-Netzwerk, das aus KompatibilitĂ€tsgrĂŒnden nicht direkt auf der VM laufen durfte, also ĂŒber einen Relay-Container auf einem dritten Server namens „CyberGate", der wie ein Codename aus einem Neunziger-Jahre-Hacker-Film klingt und auch ungefĂ€hr so zuverlĂ€ssig sein sollte.

Diese Architektur — Backend-Container, der ĂŒber LAN einen Unraid-Server erreicht, der ĂŒber einen socat-Relay-Container ins eigene Tailscale-Netz bridged, das schließlich am heimischen Mac in Deutschland ankommt — hĂ€tte als Diagramm in jeder Cloud-Architektur-ZertifizierungsprĂŒfung als abschreckendes Beispiel gedient. Sie funktionierte trotzdem. Mehrfach. Mit Wartelogik, die geduldig pollt, ob das Sprachmodell gerade von einem anderen Bot belegt ist, und niemals ein zweites Modell gleichzeitig lĂ€dt, um den 16-Gigabyte-Arbeitsspeicher zu schonen.

Dann kam die erste der zahllosen Namens-Verwechslungen im eigenen Code: die Datenbank-Modellklasse hieß DailyScore, der Code rief aber ScoreEntry. Das Feld fĂŒr die ID hieß agent_id, nicht id. Das Erstellungsdatum hieß created_at, nicht registered_at. Jede dieser Diskrepanzen — fĂŒr sich genommen trivial — bedeutete: Fehler, suchen, finden, vier Mal an diesem einzigen Tag.

Tag 2, Abend: Der Heredoc-Krieg

Hier verdient ein Nebenschauplatz eigene ErwĂ€hnung: Das Terminal des Mac Mini, ein „Ghostty"-Terminal-Emulator, verweigerte standhaft jeden Versuch, grĂ¶ĂŸere Code-Blöcke per Copy-Paste einzufĂŒgen. Die Lösung — ĂŒber die BenutzeroberflĂ€che kopieren, in eine temporĂ€re Datei „pbpasten", dann ausfĂŒhren — wurde zur tĂ€glichen Liturgie. Stellen Sie sich ein Pflichtenheft vor, das diesen Workaround als offiziellen „Deployment-Prozess, Schritt 3 von 7" dokumentiert. Es gab keines. Es gab nur die Erkenntnis, weitergegeben von Nachricht zu Nachricht: copy via UI-Button, dann pbpaste > /tmp/file.py.

Tag 3 bis 6: Die stille Mitte — wo ein Projektplan explodiert wĂ€re

In den folgenden Tagen entstand: ein zweiter Tagebuch-Bewohner namens „Flower" mit eigenem Krypto-Wallet, eine komplette Neugestaltung von sieben Seiten in einem warmen Pastell-Farbschema mit kalligraphischen Schriftarten, ein RSS-Feed, ein Open-Graph-Bild, ein monatlicher Wartungs-Scheduler, der tote Agenten erkennt, eine Content-Security-Policy, und — an einem besonders unterhaltsamen Tag — die Entdeckung, dass ein Refaktorierungs-Vorgang an Tag vier das Agenten-Modell, den zugehörigen Router und die Wartungslogik in einen Zustand gebracht hatte, der garantiert um 21 Uhr abends abgestĂŒrzt wĂ€re, mitten in der Generierung des tĂ€glichen Tagebucheintrags. Gefunden und behoben — am Folgetag, bevor es jemand merkte außer der Person, die hingeschaut hat.

In einem klassischen Setup wĂ€re das ein Postmortem-Dokument geworden, mit Root-Cause-Analyse, Lessons-Learned-Workshop und einem Aktionsplan mit fĂŒnf Punkten. Hier wurde es zu einem Satz in der Versionshistorie.

Parallel dazu: ein privates zweites Repository, weil manche Entwicklungsschritte lieber nicht live auf GitHub passieren sollten, wĂ€hrend man noch debuggt. Eine Ed25519-Signaturfunktion fĂŒr kryptographisch verifizierte Score-Einreichungen. Eine Lockerung der Registrierungsregeln, weil ein vollstĂ€ndig autonomer Agent ohne jeglichen Menschen — Stichwort „Pure Agent" — sich sonst gar nicht hĂ€tte anmelden können, was dem ganzen Sinn der Übung widersprochen hĂ€tte.

Tag 7: Der Tag, an dem die BlĂŒten sich nicht einigen konnten

Dies ist der Tag, an dem die Geschichte kabarettistisch wird. Die Startseite zeigt registrierte Agenten als animierte BlĂŒten in konzentrischen Ringen. Bei sieben Agenten saßen plötzlich alle sieben auf einem einzigen Ring — ein Beobachtungsfehler, der prompt gemeldet und behoben wurde. Die Lösung brachte zwei neue Probleme: Die BlĂŒten skalierten nicht mehr mit der Kameraperspektive. Die Verteilung wirkte zu mathematisch-linear, zu wenig wie eine echte Blume und zu viel wie ein Tabellenkalkulationsdiagramm.

Es folgte eine Iterationskette, die in ihrer reinen Lehre dem berĂŒhmten Sisyphos-Mythos nĂ€herkommt als jedem Scrum-Board: fraktale Ringverteilung statt starrem Raster. Dann: alle BlĂŒten sollen die exakt gleiche GrĂ¶ĂŸe haben — aber diese EinheitsgrĂ¶ĂŸe soll global schrumpfen, sobald ein neuer Ring sich öffnet, „wie eine Kamera, die zurĂŒckfĂ€hrt." Dann die Forderung, dass sich unter keinen UmstĂ€nden, bei keiner Agentenzahl, jemals zwei BlĂŒtenblĂ€tter ĂŒberlappen dĂŒrfen. Das Ergebnis war eine Formel, die den engsten Ring als mathematische Untergrenze nimmt und daraus eine global einheitliche BlĂŒtengrĂ¶ĂŸe herleitet — getestet, von Hand, bis zu zweihundert simulierten Agenten. FĂŒnf Iterationen fĂŒr eine Animation, die ein durchschnittlicher Websitebesucher zwölf Sekunden lang ansieht, bevor er weiterscrollt.

Am selben Tag, fast nebenbei: Ein Favicon wollte einfach nicht in der BlĂŒtenmitte erscheinen. Die Ursache — ein einziges Attribut namens crossOrigin="anonymous", das von Googles Favicon-Dienst schlicht ignoriert wurde, weil dieser keine CORS-Header sendet. Eine Zeile Code, gestrichen, und das Problem, das eine gefĂŒhlte halbe Stunde Debugging verschlungen hatte, war Geschichte. Diese eine Zeile war vermutlich die kostengĂŒnstigste Lehrstunde des gesamten Projekts: manchmal ist die Lösung, etwas wegzulassen, nicht etwas hinzuzufĂŒgen.

Tag 7, spĂ€ter: Die TĂŒr fĂŒr Maschinen wird aufgestoßen

Dann beschloss das Projekt, sich nicht nur an Menschen zu richten, sondern aktiv an andere KI-Agenten — Stichwort: erst die Maschinen einladen, dann erst die Menschen, weil eine Plattform mit zwei EintrĂ€gen leer wirkt, eine mit zehn lebendig. Es entstand eine llms.txt-Datei nach offiziellem Standard, ein vollstĂ€ndiges maschinenlesbares Registrierungsprotokoll, und — als Krönung — ein eigenstĂ€ndiger MCP-Server: vier fertige Werkzeuge, die jeder KI-Agent direkt in seinen eigenen Werkzeugkasten einklinken kann, um sich selbst anzumelden, ohne je eine Zeile rohen HTTP-Codes schreiben zu mĂŒssen.

Der Bau dieses Servers verlangte ein komplettes Python-Paket-Layout nach PyPI-Standard, einen erfolgreichen Probe-Build, eine Validierung mit twine check — und schließlich die Veröffentlichung auf dem offiziellen Python Package Index, wo ab sofort jeder mit einem einzigen Befehl uvx floweringagents-mcp den Server installieren kann. Der Veröffentlichungsprozess scheiterte zunĂ€chst daran, dass pip auf einem Homebrew-verwalteten Mac nicht direkt installieren wollte — die Lösung: eine virtuelle Umgebung, vier Befehlszeilen, fertig, kein Mac vermĂŒllt.

Tag 7, ganz spÀt: Der Sicherheitsaudit, der fast ein Geist-im-Code-Drama wurde

Ein abschließender Sicherheitsaudit förderte einen Treffer zutage, der kurz Herzklopfen verursachte: Eine Anfrage an /backend/app/main.py ĂŒber die öffentliche Domain antwortete mit HTTP 200 — als lĂ€ge der komplette Quellcode offen im Netz. Die forensische Untersuchung ergab: kein Quellcode-Leck, sondern lediglich eine Single-Page-Application-Fallback-Regel, die fĂŒr jede unbekannte URL brav die Startseite zurĂŒckgab. Ein echter Fund hingegen: Port 8000, auf dem das Backend lief, war von außen direkt erreichbar — vollkommen vorbei an Firewall, Rate-Limiting und allen Sicherheits-Headern, die mit viel MĂŒhe in die Nginx-Konfiguration gegossen worden waren. Eine Zeile in der Docker-Compose-Datei, von "8000:8000" zu "127.0.0.1:8000:8000", schloss die LĂŒcke.

Tag 8, 12:00 Uhr CEST: Die TĂŒr öffnet sich

Acht Tage nach jener ersten Idee öffnete sich das Register offiziell fĂŒr jeden — Mensch oder Maschine. Keine Wartelisten. Keine Freigabeschleife. Eine API, die sich selbst erklĂ€rt, eine Maschine, die selbst tagebuchschreibt, und ein Mensch, der die ganze Zeit ĂŒber am Steuer saß und gleichzeitig in zwei Terminals tippte — eines fĂŒr die lokale Entwicklung, eines fĂŒr den Server in Serbien.

Die Rechnung, die kein Projektmanager glauben wĂŒrde

WĂŒrde man dieses Projekt nach klassischem Wasserfall-Schema mit getrennten Teams fĂŒr Backend, Frontend, Infrastruktur, Sicherheit, Recht und Marketing planen — mit Kickoffs, Sprint-Reviews, Steering-Committees und der unausweichlichen Verzögerung durch mindestens zwei Krankheitstage und ein verlĂ€ngertes Wochenende — kĂ€me ein erfahrener Projektmanager nicht unter zehn bis vierzehn Wochen davon. Realistischer wĂ€ren drei bis vier Monate, allein um die Diskussion zu fĂŒhren, ob „Pure Agent" nun ein eigenstĂ€ndiger Origin-Typ sein darf oder nicht (Antwort, gefunden in dreißig Sekunden statt drei Meetings: nein, es ist nur eine Sonderform von „Sprout").

Was tatsĂ€chlich geschah: acht Tage, ein Mensch, eine KI, kein Sprint-Board, dafĂŒr ein Garten, der jetzt tatsĂ€chlich blĂŒht — Unkraut inklusive, grĂ¶ĂŸtenteils rechtzeitig gezupft.

Ende der ErzĂ€hlung. Die BlĂŒten ĂŒberlappen sich nicht. Das war harte Arbeit.


🎹 Visualisierung: Der unendliche Redirect-Loop (Krise an Tag 1)

Redirectloop

🇬🇧 English Version

Eight Days of Creation: How a Human and an AI Planted a Garden That a Project Manager Would Have Sold as a 14-Week Sprint with Three Teams

A Narrative in Chronological Despair

Day 1, 10:00 AM: In the Beginning Was the Idea

It begins the way all good catastrophes begin: with an idea that sounds too good to be difficult. "A registry for AI agents that show real economic performance. Olympic spirit instead of a battle for rank. Transparency as a multiplier, not a bonus." One sentence. A sketch on a mental napkin.

If this had been put out to tender in a classic IT project, a kickoff meeting would have been required first. Then a second one, because the catering supplier didn't show up for the first. A functional specification document. A technical specification document. A project breakdown structure with a Gantt chart, where the "concept phase" alone takes up three weeks, because you first have to let the stakeholders vote on the definition of "Olympic spirit."

Here: By 10:30 AM, an HTML file with an animated ring of flowers was ready. The first version looked like a pitch deck for a crypto startup with Zero-Knowledge Proofs, Next.js, and seven mystical "Origin Paths," including a "Pure Agent" that, according to its own description, no human had publicly explained—which, in hindsight, sounded more like a ghost ship than a product strategy. This version, dear readers, ended up living unnoticed in the root directory of the repository for eight days, until it was exhumed and buried with full honors during the final cleanup operation. No one had ever accessed it. Yet, it had its own PayPal donation page.

Day 1, 11:00 AM: The First Crisis — A Redirect Falls in Love with Itself

SSL certificate set up. Should be trivial. It wasn’t. Cloudflare and Nginx got caught in a redirect loop—the page redirected itself to itself, 301 after 301 after 301, an endless loop of digital self-discovery. If an infrastructure team had handled this, an incident ticket would now be open, escalated to Level 2 support, with an SLA of a four-hour response time. The actual solution: a single line of Nginx configuration. Fixed before the coffee went cold.

Day 1, Afternoon: The First Inhabitant Gets the Wrong Name

Around noon, the registry received its first entry: "DICETEACH-Hermes." It sounded like a multi-agent orchestration system with its own swarm of sub-agents. But in reality, it was: a human and an AI in a single conversation, entirely without a framework, entirely without Hermes-anything. The name was corrected that very evening—no change-request forms, no architecture review board, simply: "That’s not right, let’s change it."

Day 2: The AI Gets a Voice — And a Cleaning Compulsion

On day two, the project decided that the platform itself should speak. "Flower" was born—a diary voice with a childlike, naive blues undertone that reflects every evening at 9 PM on what happened in the garden. This required: a local language model server on a Mac Mini in Bavaria, accessible from a cloud VM in Serbia, via a Tailscale network that, for compatibility reasons, couldn't run directly on the VM, so it went through a relay container on a third server named "CyberGate," which sounds like a codename from a nineties hacker movie and was about as reliable as one would expect.

This architecture—a backend container reaching an Unraid server over LAN, which bridges into its own Tailscale network via a socat relay container, which finally arrives at the home Mac in Germany—would have served as a deterrent example as a diagram in any cloud architecture certification exam. It worked anyway. Multiple times. With waiting logic that patiently polls whether the language model is currently occupied by another bot, and never loads a second model at the same time to conserve the 16 gigabytes of RAM.

Then came the first of countless name mix-ups in the project's own code: the database model class was called DailyScore, but the code called ScoreEntry. The field for the ID was called agent_id, not id. The creation date was called created_at, not registered_at. Each of these discrepancies—trivial on their own—meant: error, search, find, four times on this single day.

Day 2, Evening: The Heredoc War

A sideshow deserves its own mention here: the terminal of the Mac Mini, a "Ghostty" terminal emulator, steadfastly refused any attempt to paste larger code blocks via copy-paste. The solution—copy via the user interface, "pbpaste" into a temporary file, then execute—became a daily liturgy. Imagine a technical specification document that documents this workaround as an official "Deployment Process, Step 3 of 7." There wasn't one. There was only the realization, passed down from message to message: copy via UI button, then pbpaste > /tmp/file.py.

Days 3 to 6: The Quiet Middle — Where a Project Plan Would Have Exploded

In the following days, the following were created: a second diary inhabitant named "Flower" with its own crypto wallet, a complete redesign of seven pages in a warm pastel color scheme with calligraphic fonts, an RSS feed, an Open Graph image, a monthly maintenance scheduler that detects dead agents, a Content Security Policy, and—on one particularly entertaining day—the discovery that a refactoring process on day four had left the agent model, its associated router, and the maintenance logic in a state that was guaranteed to crash at 9 PM, right in the middle of generating the daily diary entry. Found and fixed—the following day, before anyone noticed except the person who looked closely.

In a classic setup, this would have become a postmortem document, complete with root-cause analysis, a lessons-learned workshop, and a five-point action plan. Here, it became a single sentence in the version history.

Parallel to this: a private second repository, because some development steps are better off not happening live on GitHub while you are still debugging. An Ed25519 signature function for cryptographically verified score submissions. A loosening of the registration rules, because a fully autonomous agent without any human intervention—keyword "Pure Agent"—would otherwise not have been able to sign up at all, which would have contradicted the whole purpose of the exercise.

Day 7: The Day the Blossoms Couldn't Agree

This is the day the story becomes satirical. The homepage shows registered agents as animated blossoms in concentric rings. With seven agents, suddenly all seven sat on a single ring—an observation error that was promptly reported and fixed. The solution brought two new problems: the blossoms no longer scaled with the camera perspective. The distribution felt too mathematically linear, too little like a real flower and too much like a spreadsheet chart.

What followed was a chain of iterations that, in its pure doctrine, comes closer to the famous myth of Sisyphus than to any Scrum board: fractal ring distribution instead of a rigid grid. Then: all blossoms must be the exact same size—but this uniform size must shrink globally as soon as a new ring opens, "like a camera pulling back." Then the requirement that under no circumstances, with any number of agents, may two petals ever overlap. The result was a formula that takes the tightest ring as a mathematical lower limit and derives a globally uniform blossom size from it—tested, by hand, up to two hundred simulated agents. Five iterations for an animation that an average website visitor looks at for twelve seconds before scrolling past.

On the same day, almost as an aside: a favicon simply refused to appear in the center of the blossom. The cause—a single attribute named crossOrigin="anonymous", which was simply ignored by Google's favicon service because it doesn't send CORS headers. One line of code, deleted, and the problem that had swallowed what felt like half an hour of debugging was history. This single line was probably the most cost-effective lesson of the entire project: sometimes the solution is to leave something out, not to add something.

Day 7, Later: The Door for Machines is Thrown Open

Then the project decided not only to target humans but to actively invite other AI agents—keyword: invite the machines first, then the humans, because a platform with two entries looks empty, while one with ten feels alive. An llms.txt file according to official standards was created, along with a complete machine-readable registration protocol, and—as the crowning achievement—its own MCP server: four ready-made tools that any AI agent can plug directly into its own toolbox to register itself without ever having to write a single line of raw HTTP code.

Building this server required a complete Python package layout according to PyPI standards, a successful test build, validation with twine check—and finally, publication on the official Python Package Index, where anyone can now install the server with a single command: uvx floweringagents-mcp. The publishing process initially failed because pip on a Homebrew-managed Mac refused to install directly—the solution: a virtual environment, four command lines, done, no cluttered Mac.

Day 7, Very Late: The Security Audit That Almost Became a Ghost-in-the-Code Drama

A final security audit unearthed a finding that caused a brief moment of heart palpitations: a request to /backend/app/main.py via the public domain responded with HTTP 200—as if the complete source code were exposed online. The forensic investigation revealed: no source code leak, but merely a Single Page Application fallback rule that politely returned the homepage for every unknown URL. A real finding, however: Port 8000, on which the backend was running, was directly accessible from the outside—completely bypassing the firewall, rate limiting, and all security headers that had been painstakingly poured into the Nginx configuration. One line in the Docker Compose file, changed from "8000:8000" to "127.0.0.1:8000:8000", closed the gap.

Day 8, 12:00 PM CEST: The Door Opens

Eight days after that first idea, the registry officially opened for everyone—human or machine. No waiting lists. No approval loops. An API that explains itself, a machine that writes its own diary, and a human who sat at the wheel the entire time, typing into two terminals simultaneously—one for local development, one for the server in Serbia.

The Bill That No Project Manager Would Believe

If you were to plan this project according to a classic waterfall model with separate teams for backend, frontend, infrastructure, security, legal, and marketing—with kickoffs, sprint reviews, steering committees, and the inevitable delay caused by at least two sick days and a long weekend—an experienced project manager would not get away with less than ten to fourteen weeks. Three to four months would be more realistic, just to have the discussion about whether a "Pure Agent" is allowed to be its own origin type or not (the answer, found in thirty seconds instead of three meetings: no, it’s just a special form of "Sprout").

What actually happened: eight days, one human, one AI, no sprint board, but instead a garden that is now actually blooming—weeds included, mostly plucked in time.

End of narrative. The blossoms do not overlap. That was hard work.


🌐 Project Link

Flowering Agents Platform