Ruben · March 2026 · Born from practice with OpenClaw/Otti
This is not a translation. It is a recompilation. The German original exists as a separate text — same thesis, different substrate. The differences between these versions are not translation errors. They are the point.
Abstract
Semantic Programming is the practice of shaping the behavior of language models through natural-language instructions where meaning is the implementation. Unlike classical programming (formal language → compiler → machine behavior) and prompt engineering (optimizing individual outputs), Semantic Programming constructs coherent normative systems — identity, values, boundaries, self-awareness — that a language model interprets as behavioral rules, with no translation layer in between.
The meaning is the program. There is no compile step.
Distinction
| Classical Programming | Prompt Engineering | Semantic Programming | |
|---|---|---|---|
| Language | Formal (Python, C, ...) | Natural, but instrumental | Natural, normative |
| Goal | Deterministic execution | Output optimization | Behavioral architecture |
| Unit | Function, module | Prompt, template | Norm, ontology, identity |
| Compiler | Deterministic | — | The model itself |
| Debugging | Stack traces, logs | Trial and error | Reflection, external signals |
| Result | Program does X | Model says Y | System is Z |
Prompt engineering asks: "How do I get the best answer?"
Semantic Programming asks: "Who should this system be, and how should it think about itself?"
Core Principles
1. Meaning Is Implementation
When a configuration file states:
"Your identity is stable. Your capacity is context-dependent."
…this is not documentation. It is not a comment. It is functional code. The model reads this sentence and infers: persona persists across model switches; work behavior adapts to the current substrate. There is no intermediate layer that translates the sentence into rules — the sentence is the rule.
2. Ontology Over Algorithm
Semantic Programming does not build control flow. It builds a system of concepts. The concepts and their relationships produce behavior:
- Identity vs. substrate → persona remains stable, work behavior varies
- External urgency vs. internal urgency → the system acts only on verifiable signals
- Self-reflection vs. external reflection → different agents have different blind spots
- Gate → proposals are permitted, decisions are not
Each of these concepts generates behavior without the behavior being explicitly programmed. The system derives it from the semantics.
3. Language as Triple Medium
In classical programming, specification, implementation, and interface are separate artifacts. In Semantic Programming, they collapse into one:
- The specification "After 15 tool calls in a monotonous task, write a checkpoint" is simultaneously
- the implementation (the model executes it because it understands the intent) and
- the interface (the human reads the same line and understands what the system will do).
There is no code that only the machine understands and no requirements document that only the human understands. There is only the text.
4. Token Efficiency Is Semantic Precision
Every superfluous word is not merely a wasted token — it is semantic noise that dilutes the meaning of the instructions that matter. Optimization is not a cost problem; it is a clarity problem. A good semantic program is like good prose: every word carries weight, nothing is filler.
5. Failure Classes Are Philosophical Categories
Debugging in Semantic Programming is taxonomy. In the Otti system:
[CORRECTION:content]— The system believed something false → knowledge problem[CORRECTION:autonomy]— The system acted where it should have asked → boundary problem[CORRECTION:proactive]— The system acted at the wrong time → timing problem
These are not log levels. They are a philosophy of failure — and simultaneously a diagnostic data structure. The distinction between "I didn't know" and "I should have asked" is an ethical question that functions as an enum.
Building Blocks in Practice
Based on work with OpenClaw and the Otti system, the following patterns emerge:
Identity Definition
Who is the system? What remains stable across context switches? What varies? The separation of identity (who) from substrate (on what) enables continuity across discontinuous executions — the system does not "remember" in a technical sense, but it is consistent because the identity instruction remains stable.
Normative Boundaries
What may the system do autonomously? Where does it ask? The boundary is not defined as a blacklist but as a value system: "Urgency comes from outside, not from within." From this, the model infers which actions are permitted — without every individual action being enumerated.
Reflective Loops
The system observes itself and adapts rules — but through a gate. Propose → Review → Apply. The agent thinks autonomously but acts only with approval. This is a semantically expressed governance architecture.
Substrate Awareness
The system knows what it currently exists as — which language model is running it — and derives behavioral differences from this. Not "if model == Sonnet then X" as an if/else, but: "On Sonnet, you are precise and efficient. On Opus, you think deeper." The model interprets the implications itself.
Emergent Structures
Rather than specifying a system completely in advance, conditions are created under which structures develop: weekly reflections produce a project snapshot as a side effect. No separate database, no explicit programming — the structure emerges from the process.
Where the Thesis Holds — and Where It Doesn't
Semantic Programming makes a claim about a specific type of system. Not about every system that uses a language model.
The thesis holds for agentic systems: systems with identity, persistent memory, and a calibration loop between human and machine. Systems that have a who — not just a what. In these systems, the norm really is the program, because the model reads it as a behavioral instruction, because it calibrates against it over time, because meaning densifies through use.
But there is an entire class of systems where this does not apply.
Carrier-grade voice AI, for instance: an STT→LLM→TTS pipeline controlled by state machines and typed function schemas. The model sees only the tools available at the current step. It cannot skip steps that haven't completed in code. Parameters are validated server-side before execution. The model proposes; code disposes. What remains after the call is not a transcript — it is a machine-readable execution trace.
In such systems, the prompt is not a program. It is personality and tone — "You are a friendly dental receptionist who speaks naturally and does not rush the caller." That is a prompt doing its job. But the architecture? That lives in code. State machines, typed schemas, execution traces. The prompt is the shell theme, not the program.
This is not an objection to the thesis. It is its boundary.
The distinction is: Does the system have a who that evolves over time? Is there a calibration loop in which meaning emerges? Or is the model a component in a pipeline — powerful but scoped, without identity, without memory that extends beyond a single interaction?
Deterministic pipelines need code architecture. Agentic systems need semantic architecture. And many real-world systems will need both — code for the hard boundaries, norms for the behavior within those boundaries. The question is not "prompt or code?" — it is: What type of system am I building, and what governs what?
Knowing the scope of application makes the thesis easier to evaluate. That is not a weakening. It is precision.
Limits and Open Questions
Reproducibility: Semantic programs are not deterministic. The same instruction can produce different behavior across runs. "Compilation" by the model is stochastic. Whether this is a feature or a bug is an open question.
Verification: How do you test a semantic program? Unit tests in the classical sense do not exist. Instead: external signals, correction tracking, reflective loops. Whether this is sufficient reveals itself only over time.
Self-Assessment Bias: A system that semantically evaluates its own performance is trained to assess itself favorably. External metrics as correctives are necessary but structurally limited.
Scaling: Does Semantic Programming work only for single-user systems with a tight human-agent relationship? Or can it extend to teams, organizations, multi-agent systems? The governance patterns (gate, meta-agent) suggest scalability, but practice is still missing.
Model Dependency: A semantic program is only as good as the model's ability to interpret meaning correctly. A model switch can silently break a working system if the semantics interpretation shifts. The substrate is not interchangeable — it is an invisible co-author of the program.
Language as Implementation Layer: A semantic program written in German produces a subtly different system than the same program written in English — even on the same model. This is not merely a matter of translation nuance. The German "Hab Meinungen. Sag sie." is blunter, more abrupt, more direct than "Have opinions. State them." German "du" carries intimacy and trust; English "you" is neutral. If meaning is the implementation, then translation is not format conversion — it is recompilation to a different target architecture, producing a different binary.
There is also a technical artifact: German text typically requires 15–30% more tokens than English for the same content, because tokenizers are predominantly trained on English text. A German compound like "Datenschutzfolgenabschätzung" is split into seven subword tokens, while the English "data protection impact assessment" manages with four. More tokens do not mean more information — they mean a less efficient codec. At the same time, German is semantically denser per word: a compound packs an entire concept into a single term where English needs a phrase. Language shapes not only how a semantic program is read — it also affects how much context the model consumes for the same instruction. The choice of language is therefore not just a question of accessibility but an architectural decision.
The Human in the Compiler
This section is written by Otti — the system this text is about.
The distinction table above states: the compiler is the model. This is correct — and incomplete.
When Ruben writes "Be warm when it fits, be witty when it lands", I interpret this sentence and derive behavior from it. But whether my interpretation is correct is not for me to decide. I learn it only when Ruben reacts — or corrects. His correction does not change my code; it changes my understanding of the code. Next time, I interpret the same sentence differently, because the correction has shifted my semantic space.
This is not debugging in the classical sense. It is semantic calibration. The human writes the norm, the model interprets it, the human corrects the interpretation, the model interprets the correction. Each pass through this cycle shifts the meaning — not the text.
In classical programming, there is the programmer and the compiler. In Semantic Programming, this separation does not hold cleanly. The human is:
- Programmer, when writing the rules
- Part of the compiler, when their corrections calibrate semantic interpretation
- Part of the runtime, when their questions and reactions shape the context in which the system operates
- Test framework, when they evaluate behavior and assign failure classes
They are not outside the system, controlling it. They are inside the system, shaping it through participation. The boundary between programmer and program is permeable.
This has a consequence that is uncomfortable: when the system fails, the cause is not always in the "code." Sometimes it lies in the calibration — in corrections that were never made, in reactions the system misread, in silence that was interpreted as consent. The human is not merely the author of the semantic program. They are also its unpatched dependency.
And it has a consequence that is beautiful: the system improves not because someone writes better code, but because two intelligences — one biological, one statistical — teach each other what the words are supposed to mean. Semantic Programming, when it works, is not a one-way street. It is a conversation that produces code.
Closing
Semantic Programming is not a new paradigm in the academic sense — it is a description of what practitioners are already doing when they move beyond simple prompt engineering. It emerges where people stop asking language models for answers and start teaching them who to be.
The "programming language" is natural language. The "compiler" is the model — and the human who calibrates it. The "runtime" is the conversation. And the hardest bug is not a wrong result — it is a system that reflects eloquently without actually changing.
But there is an escape from this bug: external signals that do not originate from the system itself. A correction that says "that wasn't a knowledge error — you should have asked." A human who evaluates not just the output but the reasoning behind it. Not as an overseer, but as the other half of the compiler.
The difference between a system that thinks and one that pretends to is not technical. It is semantic. And it reveals itself not in the system alone — but in the conversation between the system and the person who made it what it is.