Modell / Datensatz
Rath-Team/OpenRath avatar
Rath-Team/OpenRath

OpenRath: ein Runtime für viele Agenten über viele Sessions

An open-source, PyTorch-like runtime for dynamic multi-agent and multi-session workflows.

1.136 Sterne59 ForksPythonBSD-3-Clause

Auf einen Blick

Was ist das?
OpenRath behandelt Agenten-Zustand wie Tensoren in PyTorch: Session, Sandbox, Memory, Tool, Agent und Workflow sind explizite Python-Objekte. Version 2.0.0 ergänzt eine durable Ausführungsschicht mit Checkpoints, Leases und Effect Ledger.
Für wen ist es gedacht?
OpenRath passt zu Teams, die mehrere Agenten über verzweigte Sessions mit nachvollziehbarer Lineage betreiben und dafür eine durable Ausführungsschicht mit PostgreSQL, Redis und S3-kompatiblem Storage akzeptieren. Wer nur einen einzelnen Chat-Loop braucht, fährt mit einem schlanken Agent-Loop-Framework günstiger.
Darf ich es kommerziell nutzen?
Ja. BSD-3-Clause ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 47 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Python, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Welches Problem OpenRath adressiert

Die meisten Agent-Frameworks beginnen mit einer Agent-Loop: Ein Modell bekommt Nachrichten, ruft Werkzeuge auf, wiederholt das. OpenRath beginnt laut README stattdessen mit der Session. Diese Umkehrung ist der eigentliche Projektkern. Sobald eine Anwendung mehrere Agenten, mehrere Verzweigungen, dauerhaften Speicher, sandboxed Ausführung und nachvollziehbare Herkunft gleichzeitig braucht, wird der Loop zum Engpass, weil jeder Agent seine eigene Nachrichtenhistorie verwaltet und niemand mehr sagen kann, welcher Rollenwechsel, welcher Workspace und welcher Memory-Schreibvorgang zu welchem Ergebnis geführt hat.

Die Zielgruppe sind damit nicht Einsteiger, die einen Chatbot bauen. Angesprochen sind Entwicklerinnen und Entwickler, die bereits mehrere Agenten orchestrieren und dabei auf Zustandsverwaltung, Nachvollziehbarkeit und Betriebsfragen stoßen. Das README ordnet das Paradigma ausdrücklich als multi-agent, multi-session ein, also viele Agenten, die sich viele Sessions teilen und über Session zusammenarbeiten oder sich weiterentwickeln. Wer nur einen Agenten über eine Konversation laufen lässt, ist hier falsch adressiert.

Session als fließender Wert: die PyTorch-Analogie im Detail

Die Architektur ist als Entsprechung zu PyTorch dokumentiert. Session übernimmt die Rolle des Tensor: der fließende Laufzeitwert mit geordneten Chunks, Placement, Lineage und Nutzung. Sandbox oder Backend entsprechen dem Device und legen fest, wo Werkzeuge tatsächlich ausgeführt werden, etwa als lokaler Prozess oder über OpenSandbox. Memory ist das Analogon zum Parameter, also persistenter Zustand, der an einen Agenten oder Store gebunden und über Läufe hinweg abgerufen und geschrieben wird. Tool entspricht der Function, Agent der Schicht nn.Linear, Workflow dem Container nn.Module.

Interessant ist der Selector. Er ist ein LLM-gestützter Router, der zur Laufzeit zwischen selbstbeschreibenden Workflows wählt, sodass if- und while-Kontrollfluss in gewöhnlichem Python bleibt. Das ist ein bewusster Verzicht auf eine deklarative Graphsprache. Der Preis dafür: Die Kontrolllogik lebt im Python-Code und nicht in einem inspizierbaren Diagramm. Der Gewinn: Man kann Bedingungen mit denselben Mitteln schreiben wie den Rest der Anwendung. Ob das in großen Teams trägt, hängt davon ab, wie diszipliniert die Workflow-Beschreibungen gepflegt werden, denn der Router entscheidet auf Basis dieser Selbstbeschreibungen.

Was Version 2.0.0 an der Laufzeit ändert

Der Bruch zwischen 1.x und 2.0.0 liegt nicht in der Python-API. Laut README bleibt die Session-first-API intakt. Hinzu kommt eine Ausführungs- und Betriebsschicht. Explizite @step- und @router-Grenzen werden zu unveränderlichen Ausführungsplänen kompiliert. Runs, Events und Checkpoints überleben den Neustart von Prozess und Worker. Leases, Fencing, Retries, Cancellation, Deadlines und resumable Queues sollen verhindern, dass ein veralteter Worker stillschweigend neuen Zustand festschreibt.

Der Effect Ledger ist der Teil, der in vielen Frameworks fehlt. Er hält Ergebnisse und Idempotenzschlüssel fest. Nicht-idempotente Effekte, deren Ausgang unklar ist, landen im Zustand NEEDS_REVIEW statt blind wiederholt zu werden. Durable Interrupts pausieren einen Run für Freigabe oder Eingabe und setzen ihn fort, ohne versteckten Loop-Zustand neu aufzubauen. Das sind Betriebsmechanismen, keine Komfortfunktionen, und sie erklären, warum PostgreSQL, Redis und S3-kompatibler Storage als Datenebene auftauchen. PostgreSQL ist laut README die dauerhafte Quelle der Wahrheit, Redis beschleunigt die Signalübertragung, S3-kompatibler Storage hält Artefakte.

Installation und Betrieb: was die Befehle tatsächlich tun

Für den Produktionsbetrieb nennt das README das Profil openrath[server,postgres] und trennt die Schema-Migration als eigenen Vorgang:

pip install "openrath[server,postgres]" openrath-migrate openrath-migrate --check

Die Trennung ist bewusst. Laufzeit-Identitäten brauchen laut README keine DDL-Rechte, Migrationen laufen also unter einem anderen Konto als der Dienst. In eingebettetem Modus bleibt der Runtime innerhalb eines vertrauenswürdigen Prozesses nutzbar. Der Agent-Server-Modus ist das strikte Produktionsprofil, im Beispiel als LocalRuntime mit store, effect_ledger und production_mode=True, eingebettet in einen AgentServer mit auth und audit_sink.

Ein Detail aus dem README, das man beim Entwurf berücksichtigen muss: Synchronous Steps können keinen preemptiven Timeout deklarieren. Wer eine Deadline erzwingen will, braucht einen asynchronen Step oder einen isolierten Executor. Das ist keine Fußnote, sondern bestimmt, wie man lang laufende Werkzeugaufrufe schneidet.

Grenzen und Fälle, in denen OpenRath das falsche Werkzeug ist

Die wichtigste Einschränkung steht im README selbst und ist ungewöhnlich offen formuliert: Die HTTP-Oberfläche des Agent Server bleibt Beta. Wer eine stabile, versionierte HTTP-API für externe Clients braucht, plant hier Risiko ein. Ebenfalls relevant: v1-JSONL-Importe sind historische Aufzeichnungen und keine fortsetzbaren aktiven Runs. Eine Migration aus 1.x liefert also Historie, aber keinen Zustand, an dem ein Run weiterläuft.

Dazu kommt der Betriebsaufwand. Ein durable Runtime mit PostgreSQL, optional Redis und Objektspeicher ist eine verteilte Anwendung. Wer OpenRath im Embedded-Modus ohne diese Komponenten fährt, verliert genau die Eigenschaften, die Version 2.0.0 ausmachen: Checkpoints, Leases, Effect Ledger, Interrupts. Das ist kein Widerspruch, sondern eine Entscheidung, die man bewusst treffen sollte. Für einen einzelnen Agenten mit einer Konversation ist der gesamte Session-Apparat unnötig. Die Paradigmentabelle im README nennt vier Formen, und OpenRath deckt explizit nur die vierte ab. Die drei anderen lassen sich mit kleineren Bausteinen billiger bauen.

Alternativen: Loop-first gegen Session-first

Der naheliegende Vergleich sind Loop-first-Frameworks, also Systeme, die mit dem Agenten und seiner Nachrichtenhistorie beginnen und Werkzeuge sowie Speicher daran hängen. Der Unterschied liegt nicht im Funktionsumfang, sondern im Datenmodell. Dort ist die Konversation eines Agenten die zentrale Einheit, und Multi-Agent-Szenarien entstehen durch mehrere solcher Historien, die über geteilte Nachrichtenlisten kommunizieren. Bei OpenRath ist die Session die zentrale Einheit, und ein Agent ist eine Transformation von einer Session in eine andere. Verzweigen, Zusammenführen, Wiederverwenden und Nachverfolgen passiert auf Session-Ebene, nicht auf Ebene einer agenteneigenen Historie.

Das hat praktische Folgen. In einem Loop-first-System ist die Frage, welcher Agent welche Information wann gesehen hat, oft nur durch Logauswertung zu beantworten. In OpenRath ist Lineage Teil des Session-Objekts. Umgekehrt erkauft man sich das mit einem Denkmodell, das man erst verstehen muss. Wer aus der Loop-Welt kommt, wird die Zuordnung von Agent zu nn.Linear zunächst als umständlich empfinden. Die Frage ist nicht, welches Modell mächtiger ist, sondern ob die Anwendung Verzweigung und Herkunft tatsächlich braucht.

Wartung, Lizenz und was vor dem Einsatz zu prüfen ist

OpenRath steht unter BSD-3-Clause. Das ist eine permissive Lizenz: Nutzung, Änderung und Weitergabe sind erlaubt, sofern der Urheberrechtshinweis und der Lizenztext erhalten bleiben und der Name der Organisation nicht ohne Erlaubnis für Werbung mit abgeleiteten Werken verwendet wird. Für kommerzielle Produkte ist das in der Regel unproblematisch. Eine Rechtsberatung ersetzt dieser Absatz nicht, und die konkrete Fassung im LICENSE-File des Repositories ist maßgeblich.

Das Repository ist nicht archiviert, die letzte Aktualisierung liegt laut Metadaten auf dem 31. Juli 2026, und v2.0.0 erschien am selben Tag, nach einem Release Candidate zwei Tage zuvor. Eine so kurze Lücke zwischen RC und stabilem Release ist ein Hinweis darauf, dass die 2.0-Linie noch jung ist. Wer sie produktiv einsetzt, sollte die Migrations- und Betriebsdokumentation unter deploy/docs/operations-v2.md und deploy/docs/migration-v2.md lesen und die generierte openapi-v2.json gegen die eigenen Client-Anforderungen prüfen, bevor er sich auf die Beta-HTTP-Oberfläche festlegt. Der erste konkrete Schritt ist openrath-migrate --check in einer Kopie der Zielumgebung.

Redaktionelles Fazit

OpenRath passt zu Teams, die mehrere Agenten über verzweigte Sessions mit nachvollziehbarer Lineage betreiben und dafür eine durable Ausführungsschicht mit PostgreSQL, Redis und S3-kompatiblem Storage akzeptieren. Wer nur einen einzelnen Chat-Loop braucht, fährt mit einem schlanken Agent-Loop-Framework günstiger. Vor dem Einsatz sollte geprüft werden, ob openrath-migrate --check in der eigenen Umgebung sauber durchläuft und ob die als Beta markierte Agent-Server-HTTP-Oberfläche den eigenen Betriebsanforderungen genügt.

Offizielle Quellen

  1. License: BSD-3-Clause
  2. Project website
  3. Rath-Team/OpenRath on GitHub
  4. README
  5. Releases
Community-Notizen

Community-Notizen