[{"data":1,"prerenderedAt":715},["ShallowReactive",2],{"tool-llamaindex-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":29,"cover":56,"og":57,"expertise":58,"locales":59,"lang":61,"title":63,"description":64,"coverAlt":65,"url":66,"pricing":67,"kind":9,"metaTitle":68,"takeaways":69,"faq":75,"toc":88,"blocks":113,"others":482},"llamaindex","2026-07-14",10,"agents",[9,10,11,12,13],"Agent framework","RAG","Python","Document parsing","Workflows",[4,15,16,17,18,19,20,21],"llamaindex vs langgraph","llamaindex workflows","llama index agent framework","llamaparse pricing","rag framework python","durable workflows python","document agent framework",[23,26],{"name":24,"url":25},"LlamaIndex","https:\u002F\u002Fgithub.com\u002Frun-llama\u002Fllama_index",{"name":27,"url":28},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[30,32,35,38,41,44,47,50,53],{"title":31,"url":25},"LlamaIndex repository README and focus note",{"title":33,"url":34},"Agent Workflows: introduction","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002F",{"title":36,"url":37},"Agent Workflows: writing durable workflows","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002Fdurable_workflows\u002F",{"title":39,"url":40},"Agent Workflows: observability","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002Fobservability\u002F",{"title":42,"url":43},"LlamaAgents overview","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Foverview\u002F",{"title":45,"url":46},"llama-index-core on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fllama-index-core\u002F",{"title":48,"url":49},"LlamaIndex and LlamaParse pricing","https:\u002F\u002Fwww.llamaindex.ai\u002Fpricing",{"title":51,"url":52},"LiteParse documentation","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fliteparse\u002F",{"title":54,"url":55},"LangGraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph","\u002Fimages\u002Fblog\u002Fllamaindex\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllamaindex\u002Fog.jpg","ai-engineer",[60,61,62],"en","de","hu","LlamaIndex im Test: das breiteste Daten-Toolkit, dessen Schwerpunkt schon gewandert ist","LlamaIndex 2026: ein MIT-lizenziertes Python-Framework für Daten und Agenten, mit über 300 Integrationen, ereignisgetriebenen Workflows und einem Unternehmen, dessen Fokus auf LlamaParse liegt.","Diagramm: ein ereignisgetriebener Workflow mit typisierten Schritten, parallelen Workern, einem Sammelschritt und einem Checkpoint nach einem Neustart.","https:\u002F\u002Fwww.llamaindex.ai","MIT · hosted platform paid","LlamaIndex: breites Toolkit, wandernder Fokus · Balázs Csorba",[70,71,72,73,74],"LlamaIndex ist weiterhin das breiteste Open-Source-Daten-Toolkit für LLM-Anwendungen: über 300 Integrationspakete, jeweils ein dünner Adapter, auf einem kleinen Satz Kernabstraktionen.","Workflows, die Orchestrierungsschicht, ist ereignisgetrieben: Ein Schritt nimmt ein Ereignis entgegen und gibt ein Ereignis zurück, der Graph wird aus Typannotationen abgeleitet und vor dem Lauf validiert.","Persistenz ist optional und handgeschrieben. Ein Lauf ist standardmäßig efemer, Schnappschüsse entstehen aus `Context.to_dict()` plus einer Schleife, die das Team schreibt, und das Fortsetzen ist at-least-once, Schritte müssen also wiederholbar sein.","Das README des Unternehmens nennt inzwischen Dokumentenparsing und Extraktion als Fokus. LlamaParse ist das kostenpflichtige Produkt, in Credits abgerechnet, LiteParse der lokale Open-Source-Parser.","Das Urteil: den Open-Source-Kern nutzen, Workflows als kleine Bibliothek, den Wirkungsradius des Frameworks aber klein halten, weil die Wartungsrichtung sichtbar woanders liegt.",[76,79,82,85],{"q":77,"a":78},"Lohnt sich LlamaIndex 2026 noch?","Ja, mit eingegrenztem Anwendungsbereich. Der MIT-lizenzierte Kern wird gepflegt, `llama-index-core` stand am 21. September 2026 bei Version 0.14.25, und die Orchestrierungsschicht Workflows ist wirklich gut durchdacht für verzweigende und schleifende Logik. Geändert hat sich der erklärte Fokus des Unternehmens, den das README auf Dokumentenparsing und Extraktion statt auf das Framework legt.",{"q":80,"a":81},"Was sind LlamaIndex Workflows und wie funktionieren sie?","Ein Workflow ist eine Unterklasse von `Workflow` mit Methoden, die mit `@step` dekoriert sind. Jeder Schritt nimmt einen Ereignistyp entgegen und gibt einen anderen zurück, und das Framework routet nach Typannotation, sodass Verzweigungen gewöhnliche `if`-Anweisungen sind und Schleifen Schritte, die ein früher behandeltes Ereignis zurückgeben. Nebenläufigkeit ist ein Schritt, der `list[Event]` zurückgibt, gepaart mit einem Schritt, der `list[Event]` entgegennimmt. Der Ereignisgraph wird vor dem Lauf validiert.",{"q":83,"a":84},"Wie geht LlamaIndex mit Persistenz und Retries um?","Standardmäßig gar nicht. Sobald `run()` zurückkehrt, ist der Zustand weg. Der dokumentierte Mechanismus ist ein Checkpoint-Loop: den Kontext mit `Context.to_dict()` serialisieren, wenn ein `StepStateChanged`-Ereignis einen Schritt als beendet markiert, dann mit `Context.from_dict()` wieder aufbauen und `run(ctx=...)` aufrufen. Das Fortsetzen ist at-least-once, ein beim Speichern noch laufender Schritt läuft erneut. Das DBOS-Laufzeit-Plugin ist die Alternative, die die Schleife überflüssig macht.",{"q":86,"a":87},"Was kostet LlamaParse?","Die Preisseite verkauft Credits statt Sitze: 1.000 Credits für 1,25 $, 10.000 Credits kostenlos, 40.000 im Starter-Tarif für 50 $ und 400.000 im Pro-Tarif für 500 $, dazu Pay-as-you-go-Grenzen von 500 $ und 5.000 $ pro Monat. Gleichzeitige Parse-Jobs: 5 in Free und Starter, 20 in Pro, 100 in Enterprise. Parse, Extraktion, Klassifizierung und Indexierung ziehen alle vom selben Guthaben ab.",[89,92,95,98,101,104,107,110],{"id":90,"title":91},"what-it-is","Was es ist",{"id":93,"title":94},"how-it-works","Wie Workflows funktioniert",{"id":96,"title":97},"getting-started","Erste Schritte",{"id":99,"title":100},"durability","Persistenz und Retries",{"id":102,"title":103},"where-it-falls-short","Wo es schwächelt",{"id":105,"title":106},"the-pivot","Die Kehrtwende zur Dokumentenverarbeitung",{"id":108,"title":109},"verdict","Urteil",{"id":111,"title":112},"sources","Quellen",[114,118,121,124,144,167,168,194,203,230,240,241,244,246,268,287,288,309,311,326,327,330,387,390,397,398,401,416,419,425,426,429,444,448,451,452],{"type":115,"content":116},"paragraph",[117],"LlamaIndex ist ein MIT-lizenziertes Python-Framework, das LLM-Anwendungen mit Daten verbindet. Es begann als Sammlung von Konnektoren und Index-Abstraktionen für Retrieval und ist bis heute das breiteste solche Toolkit: Das Repository veröffentlicht über 300 Integrationspakete für Modellprovider, Embedding-Modelle, Vektorspeicher, Dokumenten-Loader und Reranker. Diese Breite ist der Grund, warum die meisten Teams dem Projekt zuerst begegnen, und der Grund, warum es nützlich bleibt, obwohl die Aufmerksamkeit des Unternehmens längst woanders liegt. Die Position dieses Textes ist einfach: den Open-Source-Kern nutzen und bewusst entscheiden, welche gehosteten Teile dazukommen.",{"type":115,"content":119},[120],"Es sitzt zwischen dem Modellprovider und der Anwendung. Nichts im Kern spricht direkt mit einem Modellprovider; jedes Modell, jeder Embedder und jeder Vektortär kommt über ein Integrationspaket herein, das eine abstrakte Klasse aus dem Kern implementiert. Das ist eine saubere Grenze und zugleich die Quelle des Hauptkritikpunkts: Dieselbe Abstraktion muss OpenAI, einen lokalen Ollama-Prozess und ein Dutzend Embedding-Modelle abdecken, der gemeinsame Nenner ist also kleiner, als die Oberfläche vermuten lässt. Gegen LangGraph konkurriert es um dieselbe Orchestrierungsrolle, gegen LangChain um den Umgang mit Daten und gegen eine von Hand zusammengesetzte Kombination aus Vektorspeicher und Reranker um Bequemlichkeit statt um Fähigkeiten.",{"type":122,"level":123,"id":90,"text":91},"heading",2,{"type":115,"content":125},[126,127,131,132,135,136,139,140,143],"Das Paketlayout ist das Erste, was man prüfen sollte, und dort fängt die meiste Verwirrung an. ",{"tag":128,"children":129},"code",[130],"llama-index-core"," enthält die Abstraktionen und liefert Workflows mit aus. ",{"tag":128,"children":133},[134],"llama-index"," ist das Starter-Paket, das den Kern plus eine Auswahl an Integrationen installiert. Workflows gibt es zusätzlich eigenständig als ",{"tag":128,"children":137},[138],"llama-index-workflows",", und kommt es über den Kern herein, wird es als ",{"tag":128,"children":141},[142],"llama_index.core.workflow"," importiert. Alles andere ist eine eigene Installation, und nur deshalb bleibt der Abhängigkeitsbaum handhabbar.",{"type":145,"ordered":146,"items":147},"list",false,[148,153,155,157,159,165],[149,150,152],"MIT-Lizenz. Die aktuelle Version von ",{"tag":128,"children":151},[130]," ist 0.14.25, veröffentlicht am 21. September 2026.",[154],"Über 300 Integrationspakete auf PyPI, jedes ein dünner Adapter über einer abstrakten Klasse des Kerns.",[156],"Workflows, die Orchestrierungsschicht, ist ereignisgetrieben: Ein Schritt nimmt ein Ereignis entgegen und gibt ein anderes zurück, und das Framework routet nach Typannotation, nicht nach einer deklarierten Kante.",[158],"Der Ereignisgraph wird vor dem Start eines Laufs validiert. Workflows, in denen ein Ereignis keinen Produzenten, ein erzeugtes Ereignis keinen Konsumenten hat oder kein Endereignis erreichbar ist, werden abgelehnt.",[160,161,164],"Läufe sind standardmäßig efemer. Persistenz ist optional über ",{"tag":128,"children":162},[163],"Context.to_dict()","-Snapshots oder über ein Laufzeit-Plugin wie DBOS, das Schrittübergänge in eine Datenbank protokolliert.",[166],"Python ist das praktische Ziel des Frameworks. Nur LiteParse, der neue lokale Parser des Unternehmens, liefert Bindings über Python hinaus.",{"type":122,"level":123,"id":93,"text":94},{"type":115,"content":169},[170,171,174,175,178,179,182,183,186,187,190,191,193],"Workflows ist der Teil, den man verstehen sollte, weil er zugleich der Teil ist, der die RAG-Vergangenheit des Frameworks überdauert. Ein Workflow ist eine Unterklasse von ",{"tag":128,"children":172},[173],"Workflow",", deren Methoden mit ",{"tag":128,"children":176},[177],"@step"," dekoriert sind. Jeder Schritt nimmt einen Ereignistyp entgegen und gibt einen anderen zurück; die Rückgabe des Startereignis-Typs beginnt einen Lauf, die Rückgabe von ",{"tag":128,"children":180},[181],"StopEvent"," beendet ihn. Verzweigungen sind gewöhnliche ",{"tag":128,"children":184},[185],"if","-Anweisungen, die unterschiedliche Ereignistypen zurückgeben, und eine Schleife ist ein Schritt, der einen Ereignistyp zurückgibt, der früher im Graph behandelt wird. Nebenläufigkeit ist ein Schritt, der ",{"tag":128,"children":188},[189],"list[Event]"," zurückgibt, zusammen mit einem zweiten Schritt, der ",{"tag":128,"children":192},[189]," entgegennimmt und als Sammelschritt fungiert.",{"type":195,"attrs":196,"inner":200,"caption":201},"diagram",{"viewBox":197,"role":198,"aria-labelledby":199},"0 0 720 350","img","li-flow-t li-flow-d","\u003Ctitle id=\"li-flow-t\">Workflows: typisierte Ereignisse treiben den Lauf voran\u003C\u002Ftitle>\u003Cdesc id=\"li-flow-d\">Ein Startereignis löst einen Retrieval-Schritt aus, der auf acht parallele Worker ausfächert, gefolgt von einem Reranking-Schritt und einem abschließenden StopEvent. Darunter serialisiert ein Checkpoint-Schritt den Kontext nach jedem beendeten Schritt als JSON, und ein Resume-Pfad wiederholt nur die unfertige Arbeit.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">Workflows: Ereignisse treiben den Lauf voran\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">llama-index-workflows\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"56\" class=\"d-label\">EIN LAUF\u003C\u002Ftext>\u003Crect x=\"20\" y=\"70\" width=\"130\" height=\"60\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"85\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">Frage\u003C\u002Ftext>\u003Ctext x=\"85\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">StartEvent\u003C\u002Ftext>\u003Cpath d=\"M150 100 H182\" class=\"d-line\" \u002F>\u003Cpath d=\"M190 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"190\" y=\"70\" width=\"170\" height=\"60\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"275\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">retrieve\u003C\u002Ftext>\u003Ctext x=\"275\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">top_k = 8\u003C\u002Ftext>\u003Cpath d=\"M360 100 H392\" class=\"d-line\" \u002F>\u003Cpath d=\"M400 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"400\" y=\"70\" width=\"150\" height=\"60\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"475\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">rerank\u003C\u002Ftext>\u003Ctext x=\"475\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">Cross-Encoder\u003C\u002Ftext>\u003Cpath d=\"M550 100 H582\" class=\"d-line\" \u002F>\u003Cpath d=\"M590 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"590\" y=\"70\" width=\"110\" height=\"60\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"645\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">Antwort\u003C\u002Ftext>\u003Ctext x=\"645\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">StopEvent\u003C\u002Ftext>\u003Cpath d=\"M275 130 V172\" class=\"d-line\" \u002F>\u003Cpath d=\"M275 182 l-5 -9 h10 z\" class=\"d-head\" \u002F>\u003Ctext x=\"20\" y=\"168\" class=\"d-label\">EIN SCHRITT, N WORKER\u003C\u002Ftext>\u003Crect x=\"20\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"100\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #1\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">WorkItem\u003C\u002Ftext>\u003Cpath d=\"M180 214 H192\" class=\"d-line\" \u002F>\u003Cpath d=\"M200 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"200\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"280\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #2\u003C\u002Ftext>\u003Ctext x=\"280\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">WorkItem\u003C\u002Ftext>\u003Cpath d=\"M360 214 H372\" class=\"d-line\" \u002F>\u003Cpath d=\"M380 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"380\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"460\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #n\u003C\u002Ftext>\u003Ctext x=\"460\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">8 in Arbeit\u003C\u002Ftext>\u003Cpath d=\"M540 214 H552\" class=\"d-line\" \u002F>\u003Cpath d=\"M560 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"560\" y=\"186\" width=\"140\" height=\"56\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"630\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">sammeln\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">list[Done]\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"274\" class=\"d-label\">NACH EINEM NEUSTART\u003C\u002Ftext>\u003Crect x=\"20\" y=\"288\" width=\"260\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"150\" y=\"312\" text-anchor=\"middle\" class=\"d-text\">Checkpoint\u003C\u002Ftext>\u003Ctext x=\"150\" y=\"331\" text-anchor=\"middle\" class=\"d-small\">ctx.to_dict() JSON\u003C\u002Ftext>\u003Cpath d=\"M630 242 V314 H332\" class=\"d-line\" \u002F>\u003Cpath d=\"M320 314 l9 -5 v10 z\" class=\"d-head\" \u002F>\u003Cpath d=\"M280 314 H302\" class=\"d-line\" \u002F>\u003Cpath d=\"M310 314 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"340\" y=\"288\" width=\"360\" height=\"52\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"520\" y=\"312\" text-anchor=\"middle\" class=\"d-text\">Fortsetzen aus dem Snapshot\u003C\u002Ftext>\u003Ctext x=\"520\" y=\"331\" text-anchor=\"middle\" class=\"d-small\">fertige Schritte übersprungen, at-least-once\u003C\u002Ftext>",[202],"Der Graph wird aus den Schritt-Signaturen abgeleitet und validiert, bevor das erste Ereignis abgeschickt wird. Persistenz gehört nicht zur Laufzeitumgebung: Sie ist eine Schleife, die das Team drumherum schreibt.",{"type":145,"ordered":146,"items":204},[205,210,215,221],[206,207,209],"Zurückgeben von ",{"tag":128,"children":208},[189],", wenn ein Schritt eine endliche Menge hat und alle Arbeitspakete erzeugen kann, bevor die nachgelagerten Worker starten.",[211,212,214],"Entgegennehmen von ",{"tag":128,"children":213},[189],", wenn der Schritt die gesamte Ergebnismenge braucht, bevor er fortfahren kann.",[216,217,220],"",{"tag":128,"children":218},[219],"ctx.send_event(...)"," verwenden, wenn die Anzahl der Ereignisse vorab unbekannt ist oder ein Ereignis von außerhalb eines Schritts abgeschickt werden muss.",[216,222,225,226,229],{"tag":128,"children":223},[224],"ctx.store"," für gemeinsamen Zustand pro Lauf und ",{"tag":128,"children":227},[228],"Resource(...)"," für Clients, Modelle und Konfiguration, die nicht in einen Snapshot serialisiert werden dürfen.",{"type":115,"content":231},[232,233,235,236,239],"Die Typannotationen sind nicht dekorativ, sondern tragend. Vor der Ausführung leitet das Framework den Ereignisgraphen aus den Schritt-Signaturen ab und verweigert den Start, wenn ein Ereignis nicht erzeugt, ein erzeugtes Ereignis nicht konsumiert wird oder kein ",{"tag":128,"children":234},[181]," erreichbar ist. Damit fängt es eine Klasse von Verdrahtungsfehlern, die eine von Hand geschriebene Funktionskomposition überhaupt nicht fängt, und das ist das stärkste Argument für das Design. Der Preis ist, dass ein absichtlich dynamischer Workflow auf ",{"tag":128,"children":237},[238],"ctx.send_event"," ausweichen und angeben muss, welche statischen Prüfungen übersprungen werden, was praktisch bedeutet: Je fähiger ein Workflow wird, desto weniger lässt er sich statisch prüfen.",{"type":122,"level":123,"id":96,"text":97},{"type":115,"content":242},[243],"Der kleinste sinnvolle Workflow umfasst rund zwanzig Zeilen. Zwei Installationsformen werden unterstützt, und sie unterscheiden sich im Importpfad, woran es häufig scheitert:",{"type":128,"code":245},"import asyncio\n\nfrom llama_index.core import VectorStoreIndex\nfrom workflows import Workflow, step\nfrom workflows.events import Event, StartEvent, StopEvent\n\n\nclass Answered(Event):\n    question: str\n    answer: str\n\n\nclass TriageFlow(Workflow):\n    index: VectorStoreIndex\n\n    @step\n    async def retrieve(self, ev: StartEvent) -> Answered:\n        retriever = self.index.as_retriever(similarity_top_k=8)\n        nodes = await retriever.aretrieve(ev.question)\n        best = max(nodes, key=lambda n: n.score or 0.0)\n        return Answered(question=ev.question, answer=best.node.get_content())\n\n    @step\n    async def answer(self, ev: Answered) -> StopEvent:\n        return StopEvent(result=ev.answer)\n\n\nasync def main():\n    flow = TriageFlow(index=VectorStoreIndex.from_documents(documents), timeout=60)\n    result = await flow.run(question=\"What is the refund window?\")\n    print(result.result)\n\nasyncio.run(main())",{"type":115,"content":247},[248,251,252,255,256,259,260,263,264,267],{"tag":128,"children":249},[250],"run()"," liefert einen ",{"tag":128,"children":253},[254],"WorkflowHandler",". Er ist awaitable, und wer das Handler-Objekt behält statt direkt zu awaiten, erhält zugleich Zugriff auf ",{"tag":128,"children":257},[258],"stream_events()"," für Fortschrittsmeldungen. Das Argument ",{"tag":128,"children":261},[262],"timeout"," wird in Sekunden angegeben und im Konstruktor gesetzt. Jeder Schritt ist bewusst asynchron, ein eigenständiges Skript braucht also einen einzigen ",{"tag":128,"children":265},[266],"asyncio.run","-Einstiegspunkt; in FastAPI oder im Notebook ist das nicht nötig.",{"type":269,"variant":270,"title":271,"body":272},"callout","tip","Installationsform bewusst wählen",[273],[274,275,277,278,280,281,283,284,286],"Wer nur die Orchestrierung braucht, installiert ",{"tag":128,"children":276},[138]," allein; wer auch die Retrieval-Komponenten braucht, installiert ",{"tag":128,"children":279},[130],", weil dieses Paket Workflows unter ",{"tag":128,"children":282},[142]," erneut exportiert. Das Starter-Paket ",{"tag":128,"children":285},[134]," zieht eine Vorauswahl an Integrationen nach, die die meisten Anwendungen ohnehin am ersten Tag ersetzen.",{"type":122,"level":123,"id":99,"text":100},{"type":115,"content":289},[290,291,293,294,296,297,300,301,304,305,308],"Workflows sind standardmäßig efemer: Sobald ",{"tag":128,"children":292},[250]," zurückkehrt, ist der Zustand weg, und der nächste Lauf beginnt bei null. Für eine Ausspielung über hunderte Dokumente, die nicht wieder bei null beginnen soll, sieht die Dokumentation einen Checkpoint-Loop vor. ",{"tag":128,"children":295},[163]," serialisiert die noch laufenden Ereignisse und den Zustandsspeicher, ",{"tag":128,"children":298},[299],"Context.from_dict()"," baut sie wieder auf, und ",{"tag":128,"children":302},[303],"run(ctx=...)"," setzt in einem anderen Prozess fort. Ein eingebauter Checkpointer gibt es nicht: Der Lauf emittiert bei jedem beendeten Schritt ein internes ",{"tag":128,"children":306},[307],"StepStateChanged","-Ereignis, und genau das ist das Signal zum Speichern.",{"type":128,"code":310},"import json\n\nfrom workflows.events import StepState, StepStateChanged\n\nhandler = flow.run(question=q)\n\nasync for ev in handler.stream_events(expose_internal=True):\n    if isinstance(ev, StepStateChanged) and ev.step_state == StepState.NOT_RUNNING:\n        json.dump(handler.ctx.to_dict(), open(\"run.json\", \"w\"))\n\nresult = await handler\n\n# after a restart: resume from the last snapshot\nctx = Context.from_dict(flow, json.load(open(\"run.json\")))\nresult = await flow.run(ctx=ctx)",{"type":115,"content":312},[313,314,317,318,321,322,325],"Zwei Eigenschaften dieses Designs zeigen sich im Betrieb. Das Fortsetzen ist at-least-once: Ein Schritt, der beim Speichern noch lief, wird zurückgesetzt und erneut ausgeführt, es werden also bis zu ",{"tag":128,"children":315},[316],"num_workers"," Elemente doppelt verarbeitet. Und der Snapshot ist JSON; ein Wert, den der Serialisierer nicht kodieren kann, lässt ",{"tag":128,"children":319},[320],"to_dict()"," scheitern und damit den gesamten Snapshot, nicht nur das betroffene Feld. Schwere Eingaben gehören deshalb in eine ",{"tag":128,"children":323},[324],"Resource",", die beim Fortsetzen neu erzeugt wird, statt serialisiert zu werden. Wer den Loop nicht selbst verwalten will, nutzt das DBOS-Laufzeit-Plugin, das Schrittübergänge in eine Datenbank protokolliert und keinen Checkpoint-Code braucht.",{"type":122,"level":123,"id":102,"text":103},{"type":115,"content":328},[329],"Die Schwächen sind strukturell und keine Fehler. Breite ist eine Wartungsfläche: Bei Hunderten Integrationen kann ein Upgrade die Modell-Wrapper verschieben, die man gar nicht anfassen wollte, und eine Integration festzupinnen bedeutet oft, den Kern festzupinnen. Die High-Level-API versteht genug, dass ein Prototyp in die Produktion kommen kann, ohne dass jemand festhält, welche Chunkgröße, welches top-k und welche Prompt-Vorlage die Antwort erzeugt haben; die Voreinstellungen sind bequem und nicht als Voreinstellungen dokumentiert. Persistenz ist optional und handgeschrieben, also das Gegenteil dessen, was ein langlebiger Batch-Job braucht. Und das Unternehmen hinter dem Framework hat seinen Fokus öffentlich verengt, was 2026 unangenehm zu bewerten ist.",{"type":331,"head":332,"rows":341},"table",[333,335,337,339],[334],"Framework",[336],"Orchestrierungsmodell",[338],"Persistenz und Zustand",[340],"Wo es gewinnt",[342,354,365,376],[343,348,350,352],[344],{"tag":345,"children":346},"strong",[347],"LlamaIndex Workflows",[349],"Ereignisgetriebene Schritte, Kontrollfluss in normalem Python",[351],"Kein eingebauter Checkpointer; Kontext-Snapshots vom Team oder das DBOS-Laufzeit-Plugin",[353],"Retrieval- und Dokumentenkomponenten liegen in derselben Bibliothek",[355,359,361,363],[356],{"tag":345,"children":357},[358],"LangGraph",[360],"Expliziter Zustandsgraph mit bedingten Kanten",[362],"Dauerhafte Ausführung und Checkpointer sind Standard",[364],"Zustandsübergänge sind das Artefakt und bleiben als Graph einsehbar",[366,370,372,374],[367],{"tag":345,"children":368},[369],"Haystack",[371],"Pipelines typisierter Komponenten",[373],"Fehlerzweige und Retries pro Komponente",[375],"Ein stabiler Komponentenkatalog für retrieval-lastige Anwendungen",[377,381,383,385],[378],{"tag":345,"children":379},[380],"DSPy",[382],"Deklarative Module, offline gegen eine Metrik optimiert",[384],"Keine; das ist keine Orchestrierungs-Laufzeitumgebung",[386],"Tuning von Prompts und Modulen, noch bevor es Servercode gibt",{"type":115,"content":388},[389],"Liest man die Spalte zur Persistenz durch, wird der praktische Zuschnitt lesbar. LangGraph macht Checkpointing zum Standard und bezahlt das mit einem expliziten Graphen, was Denkarbeit kostet und Lesbarkeit einkauft. Workflows behält die Kontrolle im normalen Python, das liest sich besser und lässt sich schlechter untersuchen: Ein Workflow, der über 500 Dokumente ausspielt, sind 500 parallele Aufrufe, deren Reihenfolge kein Werkzeug sichtbar macht. Für ein Team, dessen Arbeit das Nachdenken über Zustandsübergänge ist, ist das der falsche Handel. Für ein Team, das normales Python schreiben und sich darauf verlassen will, dass es sich vorhersehbar verhält, ist es der richtige.",{"type":115,"content":391},[392,393,396],"Ein zweiter Vorbehalt gehört hierher. Ein dynamischer Workflow verliert die statische Analyse, und die Dokumentation sagt ausdrücklich, dass unerreichbare Schritte und einmalige Ereignisse genau das sind, was diese Prüfungen nicht sehen können. Wer einen von Hand gezeichneten Graphen in Workflows überführt, greift früh zu ",{"tag":128,"children":394},[395],"skip_graph_checks"," und schaltet damit genau die Prüfung still ab, die tote Zweige fände, also dieselbe Prüfung, die zuerst den Verdrahtungsfehler gefunden hätte.",{"type":122,"level":123,"id":105,"text":106},{"type":115,"content":399},[400],"Das README des Repositorys trägt inzwischen einen nicht zu übersehenden Hinweis: Der aktuelle Fokus von LlamaIndex liegt auf Dokumentenparsing und Extraktion, und LlamaParse ist die Unternehmensplattform dafür. Das ändert, was ein Wartungsbudget finanziert. Die Integrationspakete werden weiterhin ausgeliefert und funktionieren weiterhin; was nicht mehr garantiert ist, dass jedes einzelne erweitert wird, wenn ein neuer Anbieter erscheint.",{"type":145,"ordered":146,"items":402},[403,405,407,409,414],[404],"LlamaParse ist das kostenpflichtige Produkt: agentisches OCR, Parsing, Extraktion und Indexierung, verkauft in Credits statt in Sitzen.",[406],"LiteParse ist das offene Gegenstück: ein Rust-Parser, der lokal ohne LLM, ohne Cloud-Abhängigkeit und ohne API-Schlüssel läuft, mit Bindings für TypeScript, Python, Rust und Browser-WASM.",[408],"ParseBench und ExtractBench sind die eigenen öffentlichen Benchmarks des Unternehmens für Parsing und Extraktion.",[410,411,413],"Das Framework bleibt MIT-lizenziert und auf PyPI veröffentlicht, mit ",{"tag":128,"children":412},[130]," in Version 0.14.25 vom 21. September 2026.",[415],"Das Ergebnis ist eine geteilte Strategie: offene Werkzeuge für lokales Parsing, eine gehostete Plattform für schwierige Dokumente und dazwischen das Agent-Framework als Integrationsfläche.",{"type":115,"content":417},[418],"Das ist eine vertretbare Geschäftsentscheidung und eine leichte Warnung für alle, die jetzt ein Framework wählen. Die Teile des Stacks, die am ehesten gepflegt werden, sind die Teile hinter der Bezahlschranke, und der MIT-Kern ist das, was als Bibliothek nützlich bleibt. Das liest sich als Plädoyer für einen kleinen Wirkungsradius des Frameworks: Workflows für die Orchestrierung nutzen, Laden und Parsing im eigenen Haus lassen, wo das möglich ist, und explizit sein, welche Aufrufe die eigene Infrastruktur verlassen.",{"type":269,"variant":420,"title":421,"body":422},"note","LlamaParse-Preise in Zahlen",[423],[424],"Die Preisseite verkauft Credits, keine Sitze: 1.000 Credits für 1,25 $, 10.000 Credits im kostenlosen Tarif, 40.000 im Starter-Tarif für 50 $ und 400.000 im Pro-Tarif für 500 $, dazu Pay-as-you-go-Grenzen von 500 $ beziehungsweise 5.000 $ pro Monat. Gleichzeitige Parse-Jobs: 5 in Free und Starter, 20 in Pro, 100 in Enterprise. Parse, Extraktion, Klassifizierung und Indexierung ziehen alle vom selben Guthaben ab, und dieselbe Tabelle listet intelligentes Ergebnis-Caching mit einem Reparse für 0 Credits, was man für eine konkrete Parse-Konfiguration prüfen sollte, statt es anzunehmen.",{"type":122,"level":123,"id":108,"text":109},{"type":115,"content":427},[428],"Das Urteil lautet: LlamaIndex bleibt die vollständigste Antwort auf eine enge Frage, nämlich wie Dokumente ohne selbst geschriebene Integrationsschicht in eine LLM-Anwendung gelangen, und eine mittelmäßige Antwort auf die breitere Frage, wie ein Agent orchestriert wird. Workflows ist wirklich gut darin, verzweigte Logik in typisiertes, validiertes Python zu übersetzen, und sein at-least-once-Checkpoint-Modell ist ehrlich über seine eigenen Fehlersemantiken. Was das Framework nicht liefert, ist eine Laufzeitumgebung, auf die man zeigen und schauen kann: kein Zustandsgraph zum Inspizieren, keine Persistenz als Standard und eine Wartungsrichtung, die sichtbar woanders liegt.",{"type":145,"ordered":430,"items":431},true,[432,434,436,438,440,442],[433],"Nimm es, wenn die meisten Daten Dokumente sind und die Abstraktionen für Konnektoren, Chunker, Embedder und Reranker bereits geschrieben vorliegen. Das ist eine echte Ersparnis und war der ursprüngliche Zweck.",[435],"Nimm Workflows einzeln als kleine Bibliothek, wenn die Orchestrierung verzweigendes, schleifendes Python ist, das derzeit in asyncio verknotet steckt. Der typisierte Ereignisgraph und die Vorabvalidierung sind der Grund.",[437],"Wähle es nicht für einen Graphen, über den man nachdenken muss. Wenn die Zustandsübergänge das Artefakt sind, das geprüft wird, schlägt ein expliziter Graph die Python-Kontrollstruktur.",[439],"Wähle es nicht wegen der gehosteten Plattform. LlamaParse, Extract und der Index-Dienst sind ein separates kostenpflichtiges Produkt mit Credit-Preisen, und die eigene Ingest-Rechnung an ein Framework zu binden ist eine Entscheidung, keine Voreinstellung.",[441],"Vermeide es für einen TypeScript- oder Go-Stack. Der Kern ist Python; nur der neue LiteParse-Parser liefert breitere Bindings.",[443],"Bewerte in einem Jahr neu, wenn die Integrationsbreise tragend ist. Bei des Unternehmens Fokus auf Parsing und Extraktion ist der lange Riegel der Vektorspeicher- und Embedder-Integrationen der Teil, der am ehesten von langsamer Wartung betroffen ist.",{"type":445,"content":446},"quote",[447],"The current focus of LlamaIndex is to build the best AI-powered engine for document parsing and extraction.",{"type":115,"content":449},[450],"Dieser Satz steht im README des Projekts und nicht in einem Blogbeitrag, was ungewöhnlich ist und Beachtung verdient: Die Maintainer des Frameworks selbst benennen, wohin die Roadmap führt. Als technische Aussage gelesen heißt das: Die Orchestrierungsschicht wird gepflegt, ist aber nicht das Ziel, die kostenpflichtige Dokumentenpipeline schon.",{"type":122,"level":123,"id":111,"text":112},{"type":145,"ordered":430,"items":453},[454,458,461,464,467,470,473,476,479],[455],{"tag":456,"href":25,"children":457},"a",[31],[459],{"tag":456,"href":34,"children":460},[33],[462],{"tag":456,"href":37,"children":463},[36],[465],{"tag":456,"href":40,"children":466},[39],[468],{"tag":456,"href":43,"children":469},[42],[471],{"tag":456,"href":46,"children":472},[45],[474],{"tag":456,"href":49,"children":475},[48],[477],{"tag":456,"href":52,"children":478},[51],[480],{"tag":456,"href":55,"children":481},[54],[483,548,597,661],{"slug":484,"published":485,"minutes":486,"category":7,"tags":487,"keywords":492,"about":499,"sources":503,"cover":540,"og":541,"expertise":58,"locales":542,"lang":61,"title":543,"description":544,"coverAlt":545,"url":506,"pricing":546,"kind":547},"mcp-reference-servers","2026-09-25",9,[488,489,490,491],"MCP","Reference servers","Tool protocol","Server SDKs",[493,494,495,496,497,498],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[500],{"name":501,"url":502},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[504,507,510,513,516,519,522,525,528,531,534,537],{"title":505,"url":506},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":508,"url":509},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":511,"url":512},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":514,"url":515},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":517,"url":518},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":520,"url":521},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":523,"url":524},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":526,"url":527},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":529,"url":530},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":532,"url":533},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":535,"url":536},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":538,"url":539},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg",[60,61,62],"MCP-Referenzserver: was sie zeigen und was sie auslassen","Ein Review von modelcontextprotocol\u002Fservers: sieben Referenzserver, was jeder einzelne lehrt, die SDK-Versionen dahinter und warum keiner in die Produktion gehört.","Sieben Referenzserver, die von einem einzigen MCP-Client über Stdio ausgefächert werden","MIT","Protocol tooling",{"slug":549,"published":550,"minutes":6,"category":7,"tags":551,"keywords":557,"about":565,"sources":572,"cover":589,"og":590,"expertise":58,"locales":591,"lang":61,"title":592,"description":593,"coverAlt":594,"url":595,"pricing":596,"kind":552},"aider","2026-09-23",[552,553,554,555,556],"Coding agent","Terminal","Git workflow","BYO key","Open source",[549,558,559,560,561,562,563,564],"aider vs claude code","aider polyglot benchmark","ai pair programming terminal","aider leaderboard","open source coding agent","aider architect mode","aider install",[566,569],{"name":567,"url":568},"Aider","https:\u002F\u002Faider.chat\u002F",{"name":570,"url":571},"Aider on GitHub","https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider",[573,575,578,581,584,586],{"title":574,"url":568},"Aider website",{"title":576,"url":577},"Aider LLM leaderboards","https:\u002F\u002Faider.chat\u002Fdocs\u002Fleaderboards\u002F",{"title":579,"url":580},"Aider linting and testing","https:\u002F\u002Faider.chat\u002Fdocs\u002Fusage\u002Flint-test.html",{"title":582,"url":583},"Aider token limits","https:\u002F\u002Faider.chat\u002Fdocs\u002Ftroubleshooting\u002Ftoken-limits.html",{"title":585,"url":571},"Aider repository on GitHub",{"title":587,"url":588},"aider-chat on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Faider-chat\u002F","\u002Fimages\u002Fblog\u002Faider\u002Fcover.webp","\u002Fimages\u002Fblog\u002Faider\u002Fog.jpg",[60,61,62],"Aider im Test: Pair Programming im Terminal, git zuerst","Ein Test von Aider 0.86.2, ein Apache-2.0-Terminal-Pair-Programmierer mit ehrlichem Benchmark — und ohne Release seit acht Monaten.","Coverbild für den Aider-Test: eine Terminalsitzung, die aus einer einzigen Anfrage eine Reihe von git Commits macht","https:\u002F\u002Faider.chat","Free · BYO API key",{"slug":598,"published":599,"minutes":6,"category":7,"tags":600,"keywords":604,"about":613,"sources":623,"cover":654,"og":655,"expertise":58,"locales":656,"lang":61,"title":657,"description":658,"coverAlt":659,"url":626,"pricing":660,"kind":9},"openai-agents-sdk","2026-09-11",[601,602,603,488,11],"Agent runtime","Tracing","Guardrails",[605,606,607,608,609,610,611,612],"openai agents sdk","openai agents sdk vs langgraph","python agent framework comparison","openai agents sdk guardrails","agent run tracing tool calls","openai agents sdk human in the loop","openai-agents pypi","agents sdk vs responses api",[614,617,620],{"name":615,"url":616},"Model context protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_context_protocol",{"name":618,"url":619},"Software framework","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_framework",{"name":621,"url":622},"Agentic AI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_AI",[624,627,630,633,636,639,642,645,648,651],{"title":625,"url":626},"OpenAI Agents SDK documentation: Intro, and Agents SDK or Responses API","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":628,"url":629},"OpenAI Agents SDK documentation: Running agents","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Frunning_agents\u002F",{"title":631,"url":632},"OpenAI Agents SDK documentation: Guardrails","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fguardrails\u002F",{"title":634,"url":635},"OpenAI Agents SDK documentation: Human-in-the-loop","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fhuman_in_the_loop\u002F",{"title":637,"url":638},"OpenAI Agents SDK documentation: Tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":640,"url":641},"OpenAI Agents SDK documentation: Configuration","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fconfig\u002F",{"title":643,"url":644},"openai-agents 0.23.1 on PyPI, release history and licence","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":646,"url":647},"OpenAI: The next evolution of the Agents SDK (15 April 2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fthe-next-evolution-of-the-agents-sdk\u002F",{"title":649,"url":650},"OpenAI API documentation: Agents, comparison of the three runtimes","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents",{"title":652,"url":653},"Arize: AI agent frameworks compared (1 October 2026)","https:\u002F\u002Farize.com\u002Fai-agents\u002Fagent-frameworks\u002F","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fog.jpg",[60,61,62],"OpenAI Agents SDK: eine schlanke Agent-Runtime mit scharfen Kanten","Eine Bewertung des OpenAI Agents SDK: Runner-Schleife, Tracing, Guardrails und Approvals, plus was Release-Tempo und die Responses-only-Funktionen kosten.","Diagramm der Runner-Schleife im Agents SDK: Eingabe, Agent, Modellaufruf, Endausgabe, Guardrails und Tool-Aufrufe, die zurück in die Eingabe laufen","MIT · API pay per token",{"slug":662,"published":663,"minutes":486,"category":7,"tags":664,"keywords":669,"about":676,"sources":686,"cover":707,"og":708,"expertise":58,"locales":709,"lang":61,"title":710,"description":711,"coverAlt":712,"url":713,"pricing":714,"kind":552},"openhands","2026-09-09",[552,665,666,667,668],"Sandboxed execution","Automations","Self-hosted","MIT licence",[662,670,671,672,673,674,562,675],"openhands self-host","open hands coding agent","openhands vs claude code","agent canvas","openhands docker sandbox","openhands cloud pricing",[677,680,683],{"name":678,"url":679},"OpenHands","https:\u002F\u002Fwww.openhands.dev",{"name":681,"url":682},"OpenHands on GitHub","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands",{"name":684,"url":685},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[687,689,692,695,698,701,704],{"title":688,"url":682},"OpenHands README",{"title":690,"url":691},"OpenHands licence (MIT)","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands\u002Fblob\u002Fmain\u002FLICENSE",{"title":693,"url":694},"Agent Canvas 1.25.0 release notes","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fagent-canvas\u002Frelease-notes\u002Fv1.25.0.md",{"title":696,"url":697},"OpenHands sandbox overview","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fsandboxes\u002Foverview.md",{"title":699,"url":700},"OpenHands quick start","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Finstallation",{"title":702,"url":703},"OpenHands pricing","https:\u002F\u002Fwww.openhands.dev\u002Fpricing",{"title":705,"url":706},"Introducing the OpenHands Index","https:\u002F\u002Fwww.openhands.dev\u002Fblog\u002Fintroducing-the-openhands-index","\u002Fimages\u002Fblog\u002Fopenhands\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenhands\u002Fog.jpg",[60,61,62],"OpenHands: der Open-Source-Coding-Agent im Eigenbetrieb","OpenHands 1.25.0 ist eine MIT-lizenzierte Coding-Agent-Plattform mit Web-Canvas, CLI, sandboxierter Ausführung und geplanten Automatisierungen. Ein Review der Stärken und der Betriebskosten.","Covermotiv zum OpenHands-Review: eine Schleife von Aufgabe über Agent und Sandbox zurück","https:\u002F\u002Fgithub.com\u002FAll-Hands-AI\u002FOpenHands","Free · self-host",1791383550701]