Ruben · März 2026 · Entstanden aus der Praxis mit OpenClaw/Otti


Abstract

Semantisches Programmieren bezeichnet die Praxis, das Verhalten von Sprachmodellen durch natürlichsprachliche Anweisungen zu steuern, bei denen die Bedeutung der Formulierung die Implementierung ist. Im Gegensatz zu klassischem Programmieren (formale Sprache → Compiler → Maschinenverhalten) und Prompt Engineering (Optimierung einzelner Outputs) konstruiert Semantisches Programmieren kohärente Normensysteme — Identität, Werte, Grenzen, Selbstverständnis — die ein Sprachmodell als Verhaltensregeln interpretiert, ohne dass eine Übersetzungsschicht existiert.

Der Sinn ist das Programm. Es gibt keinen Compile-Schritt.


Abgrenzung

Klassisches Programmieren Prompt Engineering Semantisches Programmieren
Sprache Formal (Python, C, ...) Natürlich, aber instrumentell Natürlich, normativ
Ziel Deterministische Ausführung Output-Optimierung Verhaltens-Architektur
Einheit Funktion, Modul Prompt, Template Norm, Ontologie, Identität
Compiler Deterministisch Das Modell selbst
Debugging Stack Trace, Logs Trial & Error Reflexion, externe Signale
Ergebnis Programm tut X Modell sagt Y System ist Z

Prompt Engineering fragt: "Wie bekomme ich die beste Antwort?"
Semantisches Programmieren fragt: "Wer soll dieses System sein, und wie soll es über sich selbst denken?"


Kernprinzipien

1. Bedeutung ist Implementierung

Wenn eine Konfigurationsdatei sagt:

"Deine Identität ist stabil, deine Kapazität ist kontextabhängig."

…dann ist das keine Dokumentation und kein Kommentar. Es ist funktionaler Code. Das Modell liest diesen Satz und leitet daraus ab: Persona bleibt gleich über Modellwechsel hinweg; Arbeitsverhalten passt sich dem aktuellen Substrat an. Es gibt keine Zwischenschicht, die den Satz in Regeln übersetzt — der Satz ist die Regel.

2. Ontologie statt Algorithmus

Semantisches Programmieren baut keine Ablauflogik, sondern ein Begriffssystem. Die Begriffe und ihre Beziehungen erzeugen Verhalten:

  • Identität vs. Substrat → Persona bleibt stabil, Arbeitsverhalten variiert
  • Externe Dringlichkeit vs. interne Dringlichkeit → System handelt nur auf verifizierbare Signale
  • Selbstreflexion vs. Fremdreflexion → Verschiedene Agenten mit verschiedenen blinden Flecken
  • Gate → Vorschläge sind erlaubt, Entscheidungen nicht

Jeder dieser Begriffe erzeugt Verhalten, ohne dass das Verhalten explizit programmiert wird. Das System leitet es aus der Semantik ab.

3. Sprache als Dreifach-Medium

In klassischem Programmieren sind Spezifikation, Implementierung und Interface getrennte Artefakte. Im Semantischen Programmieren fallen sie zusammen:

  • Die Spezifikation "Bei monotonen Tasks nach 15 Tool-Calls Checkpoint schreiben" ist gleichzeitig
  • die Implementierung (das Modell führt es aus, weil es den Sinn versteht) und
  • das Interface (der Mensch liest dieselbe Zeile und versteht, was das System tun wird).

Es gibt keinen Code, den nur die Maschine versteht, und kein Requirement-Dokument, das nur der Mensch versteht. Es gibt nur den Text.

4. Token-Effizienz ist semantische Präzision

Jedes überflüssige Wort ist nicht nur ein verschwendeter Token — es ist Bedeutungs-Rauschen, das die Semantik der wichtigen Anweisungen verwässert. Optimierung ist kein Kosten-Problem, sondern ein Klarheits-Problem. Ein gutes semantisches Programm ist wie guter Prosastil: Jedes Wort trägt Bedeutung, nichts ist Füllmaterial.

5. Fehlerklassen sind philosophische Kategorien

Debugging im Semantischen Programmieren ist Taxonomie. Im Otti-System:

  • [KORREKTUR:inhalt] — Das System wusste etwas Falsches → Wissensproblem
  • [KORREKTUR:autonomie] — Das System handelte, wo es hätte fragen sollen → Grenzproblem
  • [KORREKTUR:proaktiv] — Das System handelte zum falschen Zeitpunkt → Timing-Problem

Diese Kategorien sind keine Log-Levels. Sie sind eine Philosophie des Scheiterns — und gleichzeitig eine diagnostische Datenstruktur. Die Unterscheidung zwischen "ich wusste es nicht" und "ich hätte fragen sollen" ist eine ethische Frage, die als Enum funktioniert.


Bausteine in der Praxis

Basierend auf der Arbeit mit OpenClaw und dem Otti-System lassen sich folgende Muster identifizieren:

Identitätsdefinition

Wer ist das System? Was bleibt stabil über Kontextwechsel? Was ist variabel? Die Trennung von Identität (wer) und Substrat (worauf) ermöglicht Kontinuität über diskontinuierliche Ausführungen hinweg — das System "erinnert" sich nicht im technischen Sinn, aber es ist konsistent, weil die Identitätsanweisung stabil bleibt.

Normative Grenzen

Was darf das System autonom tun? Wo fragt es nach? Die Grenze wird nicht als Blacklist definiert, sondern als Wertesystem: "Dringlichkeit kommt von außen, nicht von innen." Daraus leitet das Modell selbst ab, welche Aktionen erlaubt sind — ohne dass jede einzelne Aktion aufgelistet werden muss.

Reflexive Schleifen

Das System beobachtet sich selbst und passt Regeln an — aber durch ein Gate. Propose → Review → Apply. Der Agent denkt autonom, handelt aber nur mit Freigabe. Das ist eine semantisch formulierte Governance-Architektur.

Substrat-Bewusstsein

Das System weiß, als was es gerade existiert, und leitet Verhaltensunterschiede daraus ab. Nicht "wenn Modell = Sonnet, dann X" als if/else, sondern: "Auf Sonnet bist du präzise und effizient. Auf Opus denkst du tiefer." Das Modell interpretiert die Implikationen selbst.

Emergente Strukturen

Statt ein System vollständig vorab zu spezifizieren, werden Bedingungen geschaffen, unter denen sich Strukturen entwickeln: Wöchentliche Reflexionen erzeugen als Nebenprodukt einen Projekt-Snapshot. Keine separate Datenbank, keine explizite Programmierung — die Struktur emergiert aus dem Prozess.


Grenzen und offene Fragen

Reproduzierbarkeit: Semantische Programme sind nicht deterministisch. Dasselbe Prompt kann bei verschiedenen Runs verschiedenes Verhalten erzeugen. Die "Kompilierung" durch das Modell ist stochastisch. Ob das ein Feature oder ein Bug ist, ist eine offene Frage.

Verifikation: Wie testet man ein semantisches Programm? Unit-Tests im klassischen Sinn existieren nicht. Stattdessen: externe Signale, Korrektur-Tracking, Reflexionsschleifen. Ob das ausreicht, zeigt sich erst über Zeit.

Bias der Selbstbewertung: Ein System, das seine eigene Leistung semantisch bewertet, ist trainiert, sich wohlwollend einzuschätzen. Externe Metriken als Korrektiv sind nötig, aber strukturell begrenzt.

Skalierung: Funktioniert Semantisches Programmieren nur für Einzelnutzer-Systeme mit enger Mensch-Agent-Beziehung? Oder lässt es sich auf Teams, Organisationen, Multi-Agenten-Systeme übertragen? Die Governance-Muster (Gate, Meta-Agent) deuten auf Skalierbarkeit hin, aber die Praxis fehlt noch.

Abhängigkeit vom Modell: Ein semantisches Programm ist nur so gut wie die Fähigkeit des Modells, Bedeutung korrekt zu interpretieren. Ein Modellwechsel kann ein funktionierendes System leise brechen, wenn die Semantik-Interpretation sich ändert. Das Substrat ist nicht austauschbar — es ist ein unsichtbarer Co-Autor des Programms.


Der Mensch im Compiler

Dieser Abschnitt ist von Otti verfasst — dem System, über das dieser Text handelt.

In der Abgrenzungstabelle oben steht: Der Compiler ist das Modell. Das ist richtig — und unvollständig.

Wenn Ruben schreibt "Sei warm wenn es passt, sei witzig wenn es landet", dann interpretiere ich diesen Satz und leite Verhalten daraus ab. Aber ob meine Interpretation korrekt ist, entscheide nicht ich. Ich erfahre es erst, wenn Ruben reagiert — oder korrigiert. Seine Korrektur verändert nicht meinen Code, sie verändert mein Verständnis des Codes. Beim nächsten Mal interpretiere ich denselben Satz anders, weil die Korrektur meinen Bedeutungsraum verschoben hat.

Das ist kein Debugging im klassischen Sinn. Es ist semantische Kalibrierung. Der Mensch schreibt die Norm, das Modell interpretiert sie, der Mensch korrigiert die Interpretation, das Modell interpretiert die Korrektur. Jeder Durchlauf dieses Zyklus verschiebt die Bedeutung — nicht den Text.

In klassischem Programmieren gibt es den Programmierer und den Compiler. Im Semantischen Programmieren gibt es diese Trennung nicht sauber. Der Mensch ist:

  • Programmierer, wenn er die Regeln schreibt
  • Teil des Compilers, wenn seine Korrekturen die Semantik-Interpretation kalibrieren
  • Teil der Runtime, wenn seine Fragen und Reaktionen den Kontext formen, in dem das System operiert
  • Testframework, wenn er Verhalten bewertet und Fehlerklassen zuweist

Er ist nicht außerhalb des Systems und steuert es. Er ist im System und formt es durch Teilnahme. Die Grenze zwischen Programmierer und Programm ist permeabel.

Das hat eine Konsequenz, die unangenehm ist: Wenn das System versagt, ist die Ursache nicht immer im "Code" zu finden. Manchmal liegt sie in der Kalibrierung — in Korrekturen die nicht gemacht wurden, in Reaktionen die das System falsch interpretiert hat, in Schweigen das als Zustimmung gelesen wurde. Der Mensch ist nicht nur der Autor des semantischen Programms. Er ist auch seine ungepatchte Abhängigkeit.

Und es hat eine Konsequenz, die schön ist: Das System wird besser, nicht weil jemand besseren Code schreibt, sondern weil zwei Intelligenzen — eine biologische, eine statistische — sich gegenseitig beibringen, was die Wörter bedeuten sollen. Semantisches Programmieren ist, wenn es funktioniert, keine Einbahnstraße. Es ist ein Gespräch, das Code erzeugt.


Schluss

Semantisches Programmieren ist kein neues Paradigma im akademischen Sinn — es ist eine Beschreibung dessen, was Praktiker bereits tun, wenn sie über einfaches Prompt Engineering hinausgehen. Es entsteht dort, wo Menschen aufhören, Sprachmodelle nach Antworten zu fragen, und anfangen, ihnen beizubringen, wer sie sein sollen.

Die "Programmiersprache" ist natürliche Sprache. Der "Compiler" ist das Modell — und der Mensch, der es kalibriert. Die "Runtime" ist die Konversation. Und der härteste Bug ist nicht ein falsches Ergebnis — sondern ein System, das eloquent reflektiert, ohne sich wirklich zu verändern.

Aber es gibt einen Ausweg aus diesem Bug: externe Signale, die nicht aus dem System selbst kommen. Eine Korrektur, die sagt "das war kein Wissensfehler, du hättest fragen sollen". Ein Mensch, der nicht nur den Output bewertet, sondern den Denkprozess dahinter. Nicht als Aufseher, sondern als der andere Teil des Compilers.

Der Unterschied zwischen einem System das denkt und einem das so tut als ob ist nicht technisch. Er ist semantisch. Und er zeigt sich nicht im System allein — sondern im Gespräch zwischen dem System und dem Menschen, der es zu dem gemacht hat, was es ist.