[{"data":1,"prerenderedAt":637},["ShallowReactive",2],{"tool-openai-agents-sdk-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":33,"cover":64,"og":65,"expertise":66,"locales":67,"lang":69,"title":71,"description":72,"coverAlt":73,"url":36,"pricing":74,"kind":75,"metaTitle":76,"takeaways":77,"faq":83,"toc":96,"blocks":121,"others":421},"openai-agents-sdk","2026-09-11",10,"agents",[9,10,11,12,13],"Agent runtime","Tracing","Guardrails","MCP","Python",[15,16,17,18,19,20,21,22],"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",[24,27,30],{"name":25,"url":26},"Model context protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_context_protocol",{"name":28,"url":29},"Software framework","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_framework",{"name":31,"url":32},"Agentic AI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_AI",[34,37,40,43,46,49,52,55,58,61],{"title":35,"url":36},"OpenAI Agents SDK documentation: Intro, and Agents SDK or Responses API","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":38,"url":39},"OpenAI Agents SDK documentation: Running agents","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Frunning_agents\u002F",{"title":41,"url":42},"OpenAI Agents SDK documentation: Guardrails","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fguardrails\u002F",{"title":44,"url":45},"OpenAI Agents SDK documentation: Human-in-the-loop","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fhuman_in_the_loop\u002F",{"title":47,"url":48},"OpenAI Agents SDK documentation: Tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":50,"url":51},"OpenAI Agents SDK documentation: Configuration","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fconfig\u002F",{"title":53,"url":54},"openai-agents 0.23.1 on PyPI, release history and licence","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":56,"url":57},"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":59,"url":60},"OpenAI API documentation: Agents, comparison of the three runtimes","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents",{"title":62,"url":63},"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","ai-engineer",[68,69,70],"en","de","hu","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","Agent framework","OpenAI Agents SDK Test · Balázs Csorba",[78,79,80,81,82],"Das Python-Paket steht unter MIT, braucht Python 3.10 oder neuer und war am 2. Oktober 2026 bei Version 0.23.1, nach 123 PyPI-Releases seit März 2025.","Der Runner begrenzt standardmäßig auf max_turns=10 und wirft MaxTurnsExceeded, ein sinnvoller Default, den die meisten Teams behalten sollten.","Tracing ist per Default aktiv und transportiert Modell- und Tool-Ein- sowie Ausgaben, Produktionsläufe sollten also trace_include_sensitive_data=False setzen.","Guardrails laufen neben dem Agenten, beim Tripwire sind Tokens also schon verbraucht; run_in_parallel=False ist die Einstellung für kostenkritische Pfade.","Computer Use, Hosted Tool Search und Programmatic Tool Calling werden auf Chat-Completions-Modellen und Nicht-Responses-Backends abgelehnt, das provider-agnostische Versprechen ist damit dünner als es klingt.",[84,87,90,93],{"q":85,"a":86},"Ist das OpenAI Agents SDK kostenlos?","Das SDK selbst steht unter MIT und installiert sich mit pip install openai-agents. Kosten entstehen an der API: Die Modelle, die die Schleife aufruft, werden pro Token abgerechnet, und OpenAI schreibt, dass Harness- und Sandbox-Funktionen seit April 2026 die Standard-API-Preise nach Token und Tool-Nutzung nutzen.",{"q":88,"a":89},"Kann das OpenAI Agents SDK auch fremde Modelle fahren?","Ja. Das Paket bringt LiteLLM- und AnyLLM-Adapter mit, liest OPENAI_BASE_URL, und das Projekt-README nennt mehr als 100 unterstützte Modelle. Mehrere Funktionen sind jedoch Responses-only und werden auf Chat-Completions-Modellen und Nicht-Responses-Backends abgelehnt, daher sollte ein kompletter Agentenlauf getestet werden und nicht ein einzelner Modellaufruf.",{"q":91,"a":92},"Worin unterscheidet sich das Agents SDK von der Responses API?","Die Responses API ist die Modellschnittstelle; das SDK ergänzt eine Runtime darum, die Turns, Tool-Dispatch, Guardrails, Handoffs und Sessions verwaltet. Ist die Aufgabe ein einzelner Aufruf mit einer Antwort, nutzt das SDK Maschinerie, die niemand braucht, und die Responses API ist die kleinere Wahl.",{"q":94,"a":95},"Wie funktioniert die menschliche Freigabe von Tool-Aufrufen?","Setzt man needs_approval auf einem Function-Tool, auf Agent.as_tool(), auf ShellTool oder auf ApplyPatchTool, pausiert der Lauf mit ToolApprovalItem-Einträgen in result.interruptions. Das Ergebnis wird mit to_state() serialisiert, state.approve() oder state.reject() entscheidet, und Runner.run(agent, state) setzt fort. Aufrufbare Freigaberegeln verweigern standardmäßig, wenn die Argumente nicht parsebar sind.",[97,100,103,106,109,112,115,118],{"id":98,"title":99},"what-it-is","Was es ist",{"id":101,"title":102},"how-it-works","Wie die Schleife arbeitet",{"id":104,"title":105},"getting-started","Erste Schritte",{"id":107,"title":108},"guardrails-and-approvals","Guardrails und Freigaben",{"id":110,"title":111},"tracing-and-cost","Tracing und Kostenkontrolle",{"id":113,"title":114},"where-it-shingles","Wo es hakt",{"id":116,"title":117},"verdict","Urteil",{"id":119,"title":120},"sources","Quellen",[122,130,133,136,139,182,183,186,195,198,216,217,220,222,225,231,232,235,247,256,257,260,272,275,281,282,285,288,350,353,354,357,372,375,383,384],{"type":123,"content":124},"paragraph",[125,129],{"tag":126,"children":127},"strong",[128],"OpenAI Agents SDK"," ist die Agent-Runtime, die OpenAI für Python und TypeScript ausliefert: wenige Primitive, eine Turn-Schleife und Tracing, das aktiv ist, bevor jemand danach fragt. Es ist ein guter Default für Teams, die sich auf OpenAI-Modelle standardisieren und den Loop lieber in einer Bibliothek als in selbst geschriebenem asyncio sehen. Es ist das falsche Werkzeug, sobald der Workflow zum Zustandsautomaten wird.",{"type":123,"content":131},[132],"Es sitzt zwischen der reinen Responses API und einem vollständigen Orchestrierungs-Framework. Die Responses API ist die Modellschnittstelle. Das SDK ergänzt einen Runner, der Turns, Tool-Dispatch, Guardrails, Handoffs und Sessions verwaltet. Graph-Runtimes wie LangGraph liegen darüber und kodieren den Workflow explizit. Die Dokumentation zieht die Grenze selbst: die Responses API direkt nutzen, wenn Loop, Tool-Dispatch und State-Handling selbst verantwortet werden sollen.",{"type":134,"level":135,"id":98,"text":99},"heading",2,{"type":123,"content":137},[138],"Das Design ist bewusst dünn. Ein Agent ist Instruktionen plus Modell plus Tools. Delegation hat genau zwei Formen: Agent.as_tool() für einen Manager, der das Gespräch behält, und handoff() für einen Spezialisten, der es übernimmt. Guardrails sind gewöhnliche Funktionen, die ein Tripwire-Flag zurückgeben. Alles Weitere, Sessions, MCP, Sandbox-Clients, Realtime und Voice, sind Module um diesen Kern und keine neue Abstraktion, die man zuerst lernen müsste.",{"type":140,"ordered":141,"items":142},"list",false,[143,153,158,163,168,172,177],[144,147,148,152],{"tag":126,"children":145},[146],"Paket",": ",{"tag":149,"children":150},"code",[151],"openai-agents"," auf PyPI, MIT-Lizenz, benötigt Python 3.10 oder neuer.",[154,157],{"tag":126,"children":155},[156],"Version",": 0.23.1 vom 2. Oktober 2026, die 123. Veröffentlichung seit 0.0.1 am 4. März 2025; allein 77 davon kamen 2026.",[159,162],{"tag":126,"children":160},[161],"Modelle",": standardmäßig die OpenAI Responses API, Chat Completions als explizite Alternative, LiteLLM- und AnyLLM-Adapter für andere Anbieter.",[164,167],{"tag":126,"children":165},[166],"Tools",": einfache Python-Funktionen hinter dem Dekorator @function_tool, dazu Hosted Tools, Computer Use, Shell und Apply Patch.",[169,171],{"tag":126,"children":170},[12],": stdio, Streamable HTTP, der veraltete SSE-Transport und gehostete MCP-Server, jeweils mit Tool-Filtern und Freigaberichtlinien.",[173,176],{"tag":126,"children":174},[175],"Speicher",": Sessions über SQLite, SQLAlchemy, Redis, MongoDB, Dapr, verschlüsselt sowie über die OpenAI Conversations API.",[178,181],{"tag":126,"children":179},[180],"Dauerhafte Ausführung",": nicht enthalten; die Dokumentation verweist für langlebige Läufe an Temporal, DBOS, Dapr oder Restate.",{"type":134,"level":135,"id":101,"text":102},{"type":123,"content":184},[185],"Runner.run() ist eine Schleife, kein Funktionsaufruf. Es schickt die aktuelle Eingabe an das Modell und tut mit der Antwort eines von drei Dingen: Es behandelt Text des erwarteten Ausgabetyps ohne Tool-Aufrufe als Endausgabe, es wechselt bei einem Handoff zu einem anderen Agenten, oder es führt die verlangten Tools aus, hängt deren Ergebnisse an und beginnt von vorn.",{"type":187,"attrs":188,"inner":192,"caption":193},"diagram",{"viewBox":189,"role":190,"aria-labelledby":191},"0 0 720 360","img","oa-loop-t oa-loop-d","\u003Ctitle id=\"oa-loop-t\">Ein Turn der Runner-Schleife im OpenAI Agents SDK\u003C\u002Ftitle>\u003Cdesc id=\"oa-loop-d\">Die Eingabe geht an einen Agenten und dann an einen Modellaufruf. Eine Antwort mit Text des erwarteten Typs und ohne Tool-Aufrufe beendet den Lauf als Endausgabe, beides wird als Trace exportiert. Andernfalls erzeugt das Modell Tool-Aufrufe, deren Ergebnisse an die Eingabe angehängt werden und die Schleife wiederholt sich, begrenzt durch max_turns, standardmäßig 10. Guardrails laufen parallel zum Agenten.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-oa\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">THE RUNNER LOOP\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"26\" text-anchor=\"end\" class=\"d-label\">source: agents sdk docs\u003C\u002Ftext>\u003Crect x=\"20\" y=\"44\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"95\" y=\"70\" text-anchor=\"middle\" class=\"d-text\">input\u003C\u002Ftext>\u003Ctext x=\"95\" y=\"90\" text-anchor=\"middle\" class=\"d-small\">string or items\u003C\u002Ftext>\u003Crect x=\"205\" y=\"44\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"280\" y=\"70\" text-anchor=\"middle\" class=\"d-text\">agent\u003C\u002Ftext>\u003Ctext x=\"280\" y=\"90\" text-anchor=\"middle\" class=\"d-small\">instructions, tools\u003C\u002Ftext>\u003Crect x=\"390\" y=\"44\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"465\" y=\"70\" text-anchor=\"middle\" class=\"d-text\">model call\u003C\u002Ftext>\u003Ctext x=\"465\" y=\"90\" text-anchor=\"middle\" class=\"d-small\">Responses API\u003C\u002Ftext>\u003Crect x=\"575\" y=\"44\" width=\"125\" height=\"62\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"637\" y=\"70\" text-anchor=\"middle\" class=\"d-text\">final output\u003C\u002Ftext>\u003Ctext x=\"637\" y=\"90\" text-anchor=\"middle\" class=\"d-small\">no tool calls\u003C\u002Ftext>\u003Cpath d=\"M170 75H201\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Cpath d=\"M355 75H386\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Cpath d=\"M540 75H571\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Crect x=\"205\" y=\"170\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"280\" y=\"196\" text-anchor=\"middle\" class=\"d-text\">guardrails\u003C\u002Ftext>\u003Ctext x=\"280\" y=\"216\" text-anchor=\"middle\" class=\"d-small\">input, output, tools\u003C\u002Ftext>\u003Crect x=\"390\" y=\"170\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"465\" y=\"196\" text-anchor=\"middle\" class=\"d-text\">tool calls\u003C\u002Ftext>\u003Ctext x=\"465\" y=\"216\" text-anchor=\"middle\" class=\"d-small\">function, MCP, hosted\u003C\u002Ftext>\u003Crect x=\"575\" y=\"170\" width=\"125\" height=\"62\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"637\" y=\"196\" text-anchor=\"middle\" class=\"d-text\">traces\u003C\u002Ftext>\u003Ctext x=\"637\" y=\"216\" text-anchor=\"middle\" class=\"d-small\">batched export\u003C\u002Ftext>\u003Cpath d=\"M280 106V168\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Cpath d=\"M465 106V168\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Cpath d=\"M637 106V168\" class=\"d-line\" marker-end=\"url(#ah-oa)\" \u002F>\u003Cpath d=\"M465 232V292H95V110\" class=\"d-line-accent\" marker-end=\"url(#ah-oa)\" \u002F>\u003Ctext x=\"280\" y=\"314\" text-anchor=\"middle\" class=\"d-small\">tool results are appended to the input, and the loop repeats\u003C\u002Ftext>\u003Ctext x=\"280\" y=\"340\" text-anchor=\"middle\" class=\"d-label\">max_turns defaults to 10\u003C\u002Ftext>",[194],"Der Lauf endet bei Text des erwarteten Typs ohne Tool-Aufrufe. Alles andere ist ein weiterer Turn, bis zum Standardlimit von zehn.",{"type":123,"content":196},[197],"Diese Definition der Endausgabe sollte zweimal gelesen werden, denn sie macht die Schleife erst zur Schleife. Ein Lauf ist fertig, wenn das Modell Text des verlangten Typs liefert und nichts weiter anfordert. Alles andere hält ihn am Leben, weshalb max_turns die erste Einstellung ist, die man bewusst entscheidet statt erbt. max_turns=None hebt die Grenze vollständig auf.",{"type":199,"variant":200,"title":201,"body":202},"callout","tip","Drei Einstiegspunkte, eine RunConfig",[203],[204,207,208,211,212,215],{"tag":126,"children":205},[206],"Runner.run()"," ist asynchron. ",{"tag":126,"children":209},[210],"Runner.run_sync()"," kapselt es für Skripte und Notebooks. ",{"tag":126,"children":213},[214],"Runner.run_streamed()"," liefert ein RunResultStreaming, dessen stream_events()-Iterator typisierte Ereignisse liefert, während das Modell arbeitet. Alle drei nehmen eine RunConfig entgegen, die Modell, Anbieter, Guardrails, Tracing und Tool-Fehlerverhalten für einen Lauf überschreibt.",{"type":134,"level":135,"id":104,"text":105},{"type":123,"content":218},[219],"pip install openai-agents ist die komplette Einrichtung, und das SDK liest OPENAI_API_KEY, wenn es den ersten Client anlegt. Ein minimaler Agent mit einem Tool und einer typisierten Antwort ist rund zwanzig Zeilen lang:",{"type":149,"code":221},"from pydantic import BaseModel\n\nfrom agents import Agent, Runner, function_tool\n\n\n@function_tool\ndef order_status(order_id: str) -> str:\n    \"\"\"Look up the fulfilment status of an order.\"\"\"\n    return STATUS.get(order_id, \"unknown\")\n\n\nclass Reply(BaseModel):\n    answer: str\n    order_id: str\n\n\nagent = Agent(\n    name=\"Order assistant\",\n    instructions=\"Answer with the status of the order the customer names.\",\n    tools=[order_status],\n    output_type=Reply,\n)\n\nresult = Runner.run_sync(agent, \"Where is order A-1024?\", max_turns=6)\nprint(result.final_output)\nprint(result.context_wrapper.usage.total_tokens)",{"type":123,"content":223},[224],"Der Dekorator leitet das JSON-Schema aus Signatur und Docstring ab, das Modell sieht also genau so viel, wie der Docstring behauptet. output_type macht aus der letzten Nachricht ein validiertes Pydantic-Modell statt eines Strings. usage summiert über alle Modellaufrufe des Laufs, auch über die, die Tool-Aufrufe und Handoffs erzeugt haben.",{"type":199,"variant":226,"title":227,"body":228},"warn","Tracing ist an und speichert Nutzdaten",[229],[230],"Tracing ist standardmäßig aktiv und exportiert mit trace_include_sensitive_data auf True zum OpenAI-Backend, sodass Generation-Spans Modellein- und -ausgaben tragen und Function-Spans Werkzeugargumente und Ergebnisse. Produktionsläufe mit Kundendaten sollten RunConfig.trace_include_sensitive_data=False setzen oder die Umgebungsvariable OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA=0 vor dem Prozessstart.",{"type":134,"level":135,"id":107,"text":108},{"type":123,"content":233},[234],"Guardrails werden am häufigsten falsch verstanden, weil sie nicht alle an derselben Stelle greifen. Input-Guardrails laufen nur für den ersten Agenten einer Kette, Output-Guardrails nur für den Agenten, der die Endausgabe erzeugt, und keiner von beiden sieht die dazwischen delegierte Arbeit.",{"type":140,"ordered":141,"items":236},[237,239,241,243,245],[238],"run_in_parallel=False auf einem Input-Guardrail blockiert den Agenten, bevor er startet. Der Default lässt den Guardrail neben dem Agenten laufen, was die Latenz senkt, aber Tokens sind beim Tripwire schon verbraucht.",[240],"Tool-Guardrails umschließen einzelne Function-Tools und lokale MCP-Tools und sind die einzige Sorte, die jeden Aufruf in einer Multi-Agenten-Kette sieht.",[242],"Ein Tripwire wirft InputGuardrailTripwireTriggered oder OutputGuardrailTripwireTriggered. Wirft die Guardrail-Funktion selbst, gilt das Urteil als unbekannt und der Runner persistiert den abgeschlossenen Turn, bevor der Fehler sichtbar wird.",[244],"needs_approval an einem Tool, an Agent.as_tool(), an ShellTool oder an ApplyPatchTool pausiert den Lauf stattdessen; die offenen Aufrufe erscheinen in result.interruptions.",[246],"Aufrufbare Freigaberegeln verweigern standardmäßig. Fehlen die Argumente, sind sie fehlerhaft oder kein JSON-Objekt, verlangt der Aufruf eine manuelle Freigabe, statt durchgewinkt zu werden.",{"type":123,"content":248},[249,250,255],"Freigabezustand ist über RunState serialisierbar, ein pausierter Lauf kann also in einer Queue liegen und in einem anderen Prozess fortgesetzt werden. Die Dokumentation sagt ausdrücklich, dass RunState.from_json() nichts authentifiziert: Ein Snapshot in nicht vertrauenswürdigen Händen ist eine Menge Anweisungen, die der Server ausführt, er gehört also in serverseitigen Speicher, und der Prüfer muss von der Anwendung authentifiziert werden. Das ist dasselbe Freigabemuster wie in der ",{"tag":251,"to":252,"children":253},"link","\u002Fblog\u002Fhuman-in-the-loop-ai-agents",[254],"Bewertung zu Human-in-the-loop",", nur mit einer State-Datei statt eines Sockets.",{"type":134,"level":135,"id":110,"text":111},{"type":123,"content":258},[259],"Tracing ist der stärkste Grund für dieses SDK und zugleich der am wenigsten kontrollierte Teil. Spans erfassen Runner, Task und Turn, jeden Agenten, jede Generierung, jeden Funktionsaufruf, Guardrails, Handoffs und Audio. Der Standard-BatchTraceProcessor exportiert im Hintergrund alle paar Sekunden, ein Worker kann einen Job also beenden und beenden, bevor das Dashboard den Lauf zeigt.",{"type":140,"ordered":141,"items":261},[262,264,266,268,270],[263],"Standardmäßig erzeugte Spans: Runner, Task, Turn, Agent, Generierung, Function, Guardrail, Handoff, Transkription und Sprache.",[265],"Global abschalten mit OPENAI_AGENTS_DISABLE_TRACING=1 oder set_tracing_disabled(True), für einen Lauf mit RunConfig(tracing_disabled=True).",[267],"Für eine Zustellgarantie flush_traces() nach dem Verlassen des Trace-Kontexts aufrufen. Tracing abzuschalten verwirft keine Spans, die ein Processor bereits gepuffert hat.",[269],"add_trace_processor() fügt ein Ziel hinzu und lässt den OpenAI-Exporter registriert. set_trace_processors() ersetzt den Standard und braucht einen eigenen BatchTraceProcessor mit Exporter.",[271],"Die Dokumentation listet rund 27 externe Processor, darunter Langfuse, MLflow, Arize Phoenix, LangSmith, Braintrust, Datadog und Pydantic Logfire.",{"type":123,"content":273},[274],"Kostenkontrolle ist Rechnen, nicht Konfiguration. result.context_wrapper.usage führt requests, input_tokens, output_tokens, total_tokens, Einträge pro Anfrage sowie Details zu Cache- und Reasoning-Tokens; die Kompaktierungsanfrage einer Responses-Session landet in denselben Summen. Die relevante Kennzahl sind Kosten pro erfolgreichem Lauf, und der wirksamste Hebel bleibt max_turns, denn eine Schleife, die zwölf Turns bis zum Scheitern braucht, braucht sie jedes Mal.",{"type":199,"variant":276,"title":277,"body":278},"note","Zero Data Retention",[279],[280],"Tracing steht Organisationen mit einer Zero-Data-Retention-Policy nicht zur Verfügung, das eingebaute Dashboard ist dort also keine Option. Dasselbe Argument gilt für jeden selbst betriebenen Exporter: Redaktion und Zustellung gehören in denselben Exporter. Ein separat registrierter Redaktor verhindert nicht, dass ein anderer Processor die unredigierten Daten erhält, denn Trace-Processor sind unabhängige Beobachter.",{"type":134,"level":135,"id":113,"text":114},{"type":123,"content":283},[284],"Beginnen wir mit den Schwächen. Dauerhafte Ausführung ist nicht Teil des Pakets: Ein Lauf, der einen Prozessneustart überstehen, Stunden auf eine Freigabe warten oder in einem neuen Container fortsetzen muss, braucht Temporal, DBOS, Dapr oder Restate daneben. Die Sandbox- und Harness-Arbeit für Python kam in 0.14.0 im April 2026, TypeScript-Unterstützung war zum Redaktionszeitpunkt noch als künftige Arbeit bezeichnet. Tracing sendet standardmäßig Nutzdaten an OpenAI und ist unter ZDR schlicht nicht verfügbar. Und das provider-agnostische Versprechen ist dünner, als es klingt: Computer Use, Hosted Tool Search und Programmatic Tool Calling werden auf Chat-Completions-Modellen und Nicht-Responses-Backends abgelehnt.",{"type":123,"content":286},[287],"Dazu kommt das Release-Tempo. Das Projekt hat in den ersten neun Monaten 2026 siebenundsiebzig Versionen veröffentlicht, und 0.21.0 hob die Untergrenze auf openai>=3.0.0,\u003C4, wodurch der Standardanbieter auf HTTPX2 wechselte und Anwendungen brachen, die einen alten httpx-Client übergaben. Eine weiterhin mit 0.x versionierte Bibliothek in diesem Takt ist ein Argument fürs Festnageln und fürs Lesen des Changelogs statt der Release-Überschrift.",{"type":289,"head":290,"rows":306},"table",[291,295,299,302],[292],{"tag":126,"children":293},[294],"Option",[296],{"tag":126,"children":297},[298],"Steuermodell",[300],{"tag":126,"children":301},[180],[303],{"tag":126,"children":304},[305],"Letzte Version, Oktober 2026",[307,317,328,339],[308,311,313,315],[309],{"tag":126,"children":310},[128],[312],"Modelldirigierte Schleife, Handoffs, Agents als Tools",[314],"Extern: Temporal, DBOS, Dapr, Restate",[316],"0.23.1",[318,322,324,326],[319],{"tag":126,"children":320},[321],"LangGraph",[323],"Expliziter Graph mit Checkpoints",[325],"Eingebaut",[327],"1.2.14",[329,333,335,337],[330],{"tag":126,"children":331},[332],"Pydantic AI",[334],"Code-Orchestrierung, typisierte Agenten",[336],"Extern: Temporal, DBOS, Prefect, Restate",[338],"2.54.0",[340,344,346,348],[341],{"tag":126,"children":342},[343],"Google ADK",[345],"Modelldirigierte Agenten plus Workflow-Agenten",[347],"Eingebaut, ADK-2.0-Workflow-Runtime",[349],"2.11.0",{"type":123,"content":351},[352],"Liest die vierte Spalte vor der zweiten. LangGraph bei 1.x und ADK bei 2.x stehen unter einer Kompatibilitätszusage; 0.23.1 heißt, dass OpenAI eine Konstruktorsignatur auch in einem Patch-Release verschieben kann, was mit der openai-Client-Untergrenze bereits passiert ist. Die Steuermodell-Spalte ist weniger wichtig, als sie wirkt: Eine modelldirigierte Schleife ist schneller gebaut, und ein Graph ist nur so lange leicht nachvollziehbar, wie der Graph klein bleibt.",{"type":134,"level":135,"id":116,"text":117},{"type":123,"content":355},[356],"Das SDK gewinnt dort, was sich später schwer nachrüsten lässt. Tracing, das existiert, bevor die Observability-Code geschrieben wird, sauber serialisierbare Freigabe-Interrupts und MCP über vier Transporte ohne selbstgebauten Client sind allesamt echte Entwicklungszeit. Es verliert dort, was sich später nicht ohne Neuschreiben nachrüsten lässt: dauerhafte Ausführung und ein expliziter Kontrollfluss, der einen Workflow prüfbar macht.",{"type":140,"ordered":358,"items":359},true,[360,362,364,366,368,370],[361],"Nimm es, wenn das Team sich auf OpenAI-Modelle standardisiert und der Workflow eine Tool-Schleife mit Guardrails und Freigaben ist. Dafür wurde es entworfen.",[363],"Nimm es, wenn Tracing nicht verhandelbar ist, weil Spans und Dashboard bereits am Runtime hängen und nicht nachträglich angeflanscht werden.",[365],"Nimm es für MCP-lastige Agenten, wo vier Transporte und Tool-Filter pro Server mehr Code sparen, als das Framework kostet.",[367],"Nimm es nicht als einzige Runtime, wenn Läufe einen Neustart überstehen, stundenlang auf einen Menschen warten oder in einem frischen Container fortsetzen müssen. Pair es von Anfang an mit Temporal oder DBOS.",[369],"Nimm es nicht für einen Workflow, dessen nächster Schritt eine Geschäftsregel ist. Ist die Abfolge bekannt, sagt ein Graph-Runtime oder schlicht Code es ehrlicher als ein Modell, das ihr vielleicht nicht folgt.",[371],"Lass es ganz weg, wenn die ganze Aufgabe ein Modellaufruf mit einer Antwort ist. Responses API plus Pydantic ist kleiner und günstiger.",{"type":123,"content":373},[374],"Nichts davon ist ein Makel des Pakets. Es ist eine kleine, lesbare, MIT-lizenzierte Bibliothek, die eine enge Aufgabe sauber erledigt und es in der eigenen Dokumentation zugibt. Das zu vermeidende Scheitern ist nicht die Wahl, sondern die Wahl wegen des gratis mitgelieferten Tracings und die Feststellung ein Jahr später, dass die Workflow-Logik in Prompts steckt, die niemand diffen kann. Dauerhafte Ausführung und Geschäftsregeln gehören außerhalb des Runners.",{"type":376,"content":377},"quote",[378,382],{"tag":379,"children":380},"em",[381],"Genug Funktionen, um nützlich zu sein, aber wenige genug Primitive, um schnell erlernbar zu bleiben."," — die beiden Designprinzipien aus der Dokumentation des OpenAI Agents SDK.",{"type":134,"level":135,"id":119,"text":120},{"type":140,"ordered":358,"items":385},[386,391,394,397,400,403,406,409,413,417],[387],{"tag":388,"href":36,"children":389},"a",[390],"OpenAI Agents SDK documentation",[392],{"tag":388,"href":39,"children":393},[390],[395],{"tag":388,"href":42,"children":396},[390],[398],{"tag":388,"href":45,"children":399},[390],[401],{"tag":388,"href":48,"children":402},[390],[404],{"tag":388,"href":51,"children":405},[390],[407],{"tag":388,"href":54,"children":408},[53],[410],{"tag":388,"href":57,"children":411},[412],"OpenAI",[414],{"tag":388,"href":60,"children":415},[416],"OpenAI API documentation",[418],{"tag":388,"href":63,"children":419},[420],"Arize",[422,486,535,589],{"slug":423,"published":424,"minutes":425,"category":7,"tags":426,"keywords":430,"about":437,"sources":441,"cover":478,"og":479,"expertise":66,"locales":480,"lang":69,"title":481,"description":482,"coverAlt":483,"url":444,"pricing":484,"kind":485},"mcp-reference-servers","2026-09-25",9,[12,427,428,429],"Reference servers","Tool protocol","Server SDKs",[431,432,433,434,435,436],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[438],{"name":439,"url":440},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[442,445,448,451,454,457,460,463,466,469,472,475],{"title":443,"url":444},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":446,"url":447},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":449,"url":450},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":452,"url":453},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":455,"url":456},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":458,"url":459},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":461,"url":462},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":464,"url":465},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":467,"url":468},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":470,"url":471},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":473,"url":474},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":476,"url":477},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg",[68,69,70],"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":487,"published":488,"minutes":6,"category":7,"tags":489,"keywords":495,"about":503,"sources":510,"cover":527,"og":528,"expertise":66,"locales":529,"lang":69,"title":530,"description":531,"coverAlt":532,"url":533,"pricing":534,"kind":490},"aider","2026-09-23",[490,491,492,493,494],"Coding agent","Terminal","Git workflow","BYO key","Open source",[487,496,497,498,499,500,501,502],"aider vs claude code","aider polyglot benchmark","ai pair programming terminal","aider leaderboard","open source coding agent","aider architect mode","aider install",[504,507],{"name":505,"url":506},"Aider","https:\u002F\u002Faider.chat\u002F",{"name":508,"url":509},"Aider on GitHub","https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider",[511,513,516,519,522,524],{"title":512,"url":506},"Aider website",{"title":514,"url":515},"Aider LLM leaderboards","https:\u002F\u002Faider.chat\u002Fdocs\u002Fleaderboards\u002F",{"title":517,"url":518},"Aider linting and testing","https:\u002F\u002Faider.chat\u002Fdocs\u002Fusage\u002Flint-test.html",{"title":520,"url":521},"Aider token limits","https:\u002F\u002Faider.chat\u002Fdocs\u002Ftroubleshooting\u002Ftoken-limits.html",{"title":523,"url":509},"Aider repository on GitHub",{"title":525,"url":526},"aider-chat on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Faider-chat\u002F","\u002Fimages\u002Fblog\u002Faider\u002Fcover.webp","\u002Fimages\u002Fblog\u002Faider\u002Fog.jpg",[68,69,70],"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":536,"published":537,"minutes":425,"category":7,"tags":538,"keywords":543,"about":550,"sources":560,"cover":581,"og":582,"expertise":66,"locales":583,"lang":69,"title":584,"description":585,"coverAlt":586,"url":587,"pricing":588,"kind":490},"openhands","2026-09-09",[490,539,540,541,542],"Sandboxed execution","Automations","Self-hosted","MIT licence",[536,544,545,546,547,548,500,549],"openhands self-host","open hands coding agent","openhands vs claude code","agent canvas","openhands docker sandbox","openhands cloud pricing",[551,554,557],{"name":552,"url":553},"OpenHands","https:\u002F\u002Fwww.openhands.dev",{"name":555,"url":556},"OpenHands on GitHub","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands",{"name":558,"url":559},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[561,563,566,569,572,575,578],{"title":562,"url":556},"OpenHands README",{"title":564,"url":565},"OpenHands licence (MIT)","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands\u002Fblob\u002Fmain\u002FLICENSE",{"title":567,"url":568},"Agent Canvas 1.25.0 release notes","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fagent-canvas\u002Frelease-notes\u002Fv1.25.0.md",{"title":570,"url":571},"OpenHands sandbox overview","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fsandboxes\u002Foverview.md",{"title":573,"url":574},"OpenHands quick start","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Finstallation",{"title":576,"url":577},"OpenHands pricing","https:\u002F\u002Fwww.openhands.dev\u002Fpricing",{"title":579,"url":580},"Introducing the OpenHands Index","https:\u002F\u002Fwww.openhands.dev\u002Fblog\u002Fintroducing-the-openhands-index","\u002Fimages\u002Fblog\u002Fopenhands\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenhands\u002Fog.jpg",[68,69,70],"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",{"slug":590,"published":591,"minutes":6,"category":7,"tags":592,"keywords":597,"about":604,"sources":608,"cover":630,"og":631,"expertise":66,"locales":632,"lang":69,"title":633,"description":634,"coverAlt":635,"url":607,"pricing":636,"kind":593},"cursor","2026-09-02",[593,594,595,596,12],"AI code editor","Coding agents","CLI","Usage-based pricing",[590,598,599,600,601,602,603],"cursor vs github copilot","cursor pricing","cursor cli","ai code editor","cursor usage limits","cursor pro plus",[605],{"name":606,"url":607},"Cursor","https:\u002F\u002Fcursor.com",[609,612,615,618,621,624,627],{"title":610,"url":611},"Cursor pricing","https:\u002F\u002Fcursor.com\u002Fpricing",{"title":613,"url":614},"Cursor models and pricing docs","https:\u002F\u002Fcursor.com\u002Fdocs\u002Fmodels-and-pricing",{"title":616,"url":617},"Cursor CLI documentation","https:\u002F\u002Fcursor.com\u002Fdocs\u002Fcli\u002Foverview",{"title":619,"url":620},"GitHub Copilot plans","https:\u002F\u002Fgithub.com\u002Ffeatures\u002Fcopilot\u002Fplans",{"title":622,"url":623},"Claude pricing","https:\u002F\u002Fclaude.com\u002Fpricing",{"title":625,"url":626},"Claude Code cost documentation","https:\u002F\u002Fdocs.claude.com\u002Fen\u002Fdocs\u002Fclaude-code\u002Fcosts",{"title":628,"url":629},"Cline pricing","https:\u002F\u002Fcline.bot\u002Fpricing","\u002Fimages\u002Fblog\u002Fcursor\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcursor\u002Fog.jpg",[68,69,70],"Cursor im Test: ein KI-Code-Editor, der über den Listenpreis hinaus abrechnet","Cursor bündelt Editor, Terminal-Agent und Cloud-Läufe hinter einem Abo. Was die zwei Nutzungs-Pools wirklich kosten, und wann Copilot, Claude Code oder Cline die bessere Wahl sind.","Abstrakte Pipeline-Grafik für die Cursor-Bewertung","Free · Pro from $20 per month",1791383550552]