Blog • AI / Agent
AI Coding Agent Wettlauf 2026: Worum konkurrieren Claude Code, Codex, OpenCode und DeepSeek Agent wirklich? Agent Harness Architektur über JSON Tool Calling
Ranglisten fragen weiter, wer höher punktet. Öffnen Sie ein Terminal: Was wirklich Dateien ändert, Tests ausführt und MCP spricht, ist nicht diese Antwort in natürlicher Sprache.
Claude Code, Codex, OpenCode und DeepSeek Agent verkaufen oberflächlich alle einen Coding Agent, der die Arbeit erledigt. Die echte Lücke ist der Agent Harness: wer den Hop von arguments zu Nebenwirkungen besitzt.
Dieser Artikel erklärt:
- Welche Schicht ein Coding Agent gegenüber Vervollständigung zusätzlich hat
- Was der Agent Harness besitzt, und was das Modell nicht
- Warum JSON Tool Calling die gemeinsame Leitung der vier ist
- Sieben Hops in einem tool call: wo jedes Produkt das Tor setzt
- Wie Sie arguments und Schema lokal in JSONNote zerlegen
Merken Sie sich das: Der Wettlauf 2026 ist nicht „wer die nächste Zeile genauer vervollständigt“. Das Modell sendet einen tool call; die arguments sind JSON. Der Harness entscheidet, ob er parsen kann, ob er fragen muss, in welcher Sandbox ausgeführt wird und wie das Ergebnis zurückgeschrieben wird. Claude Code verankert Hooks um jeden Aufruf. Codex macht Sandbox und Freigabe zur Standardgrenze. OpenCode macht Modelle und Rechte zur austauschbaren Konfiguration. DeepSeek Agent zerlegt die ganze Pipeline in Plugins.
Der eigentliche Wettlauf ist nicht die Vervollständigung
Vervollständigung beantwortet „was ist die nächste Zeile“. Ein Coding Agent beantwortet „wie bringen wir dieses Ziel in einem echten Repository zu Ende“: Kontext lesen, Tool wählen, Code ändern, Befehl ausführen, Ergebnis lesen, erneut entscheiden.
Alle vier Oberflächen sehen aus wie Chat. Der Loop darunter ist fast derselbe:
User goal
→ Agent loop
→ LLM emits tool_call (JSON arguments)
→ Harness parses / validates / gates / executes
→ Tool result returns to context
→ Agent decides again
Das Modell schlussfolgert und wählt „wen als Nächstes aufrufen“. Der Harness entscheidet, welche Tools das Modell sieht, ob arguments als gültig gelten, ob eine riskante Aktion einen Menschen braucht, was das Tool wirklich tut, wie die Sitzung aufgezeichnet wird und was als fertig gilt.
Feature-Listen werden sich weiter ähneln. Skills, MCP, Sub-Agents und Rechteschalter hat jeder. Der Unterschied liegt darin, wo die Kontrolle sitzt. Zur Produktpositionierung siehe AI Coding Agents sind mehr als Code-Vervollständigung: Worum konkurrieren Codex, Claude Code, OpenCode und DeepSeek Harness?. Wie der Loop dreht, siehe Wie funktionieren AI Coding Agents?. Dieser Artikel zerlegt nur eines: Was der Harness tut, nachdem JSON Tool Calling das Modell verlassen hat.
Was ein Agent Harness ist
2026 hat diese Schicht einen Fachnamen. Eine Quellcode-Anatomie von elf produktiven Coding Agents nennt sie Harness Engineering: Ein Agent ist Modell plus Harness — die Runtime, die ein LLM über Loop, Tools, Kontext, Sicherheitskontrollen, Orchestrierung und Erweiterungsflächen an die echte Welt koppelt.
Ein anderes Paar-Experiment fragt direkter: Lässt ein anderer Harness dasselbe Modell mehr Aufgaben lösen? Durchschnittsscores bleiben oft nah; Repository-Aufgaben und Wettbewerbsaufgaben können gegensätzlich laufen; Kosten und Abbruchrate ändern sich. Die Lehre ist nicht „der anbietereigene Harness gewinnt immer“. Sie lautet: „Sie kaufen einen Abschlussweg, nicht einen Ranglistenpunkt“.
Die vier konkurrieren also nicht darum, wer einen Schalter mehr ausgeliefert hat. Sie konkurrieren darum, wer Toolvertrag, Ausführungsgrenze und menschliches Veto klarer organisiert.
| Schicht | Zuständig für | Nicht zuständig für |
|---|---|---|
| Modell | Tool wählen, JSON-arguments füllen, Ergebnis lesen, erneut entscheiden | Festplatte schreiben, Shell ausführen, Netz erreichen, autorisieren |
| JSON-Vertrag | Wie arguments und Ergebnisse aussehen | Ob dieser Aufruf geschehen soll |
| Agent Harness | Sichtbare Tools, Prüfung, Freigabe, Sandbox, Zurückschreiben, Sitzung | Das Geschäftsziel für Sie erfinden |
Wie der Stack geschichtet ist, steht in 2026 AI-Agent-Stack: Wie passen LLM, MCP, Function Calling und JSON Schema zusammen?.
Die gemeinsame Leitung: JSON Tool Calling
Tool Calling (auch Function Calling) ist kein anderer Name für „das Modell kann Code schreiben“. Es ist ein strukturierter Aufruf: Das Modell wählt einen Namen aus den von Ihnen deklarierten Tools und erzeugt JSON, das zum Parametervertrag passen soll.
In OpenAI-kompatiblen APIs ist das Feld parameters der Tool-Definition selbst JSON Schema:
{
"type": "function",
"function": {
"name": "run_tests",
"description": "Run the project test suite and return a structured summary.",
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"suite": { "type": "string", "enum": ["unit", "integration", "e2e"] },
"path": { "type": "string", "minLength": 1 }
},
"required": ["suite"]
}
}
}
Wenn das Modell antwortet, ist arguments oft ein String, kein schon geparstes Objekt:
{
"id": "call_7f21",
"type": "function",
"function": {
"name": "run_tests",
"arguments": "{\"suite\":\"e2e\",\"path\":\"tests/checkout.spec.ts\"}"
}
}
Der Harness macht deshalb mindestens zwei Dinge: den String in gültiges JSON parsen, dann Felder, Typen und Enums gegen das deklarierte Schema prüfen. Fehlende Anführungszeichen, Extra-Kommas und nicht deklarierte Schlüssel passieren auf diesem Hop.
MCP legt dieselbe Leitung an einen externen Server: inputSchema / outputSchema bleiben JSON Schema, tools/call bleibt ein strukturierter Aufruf. Mehr Server bedeuten mehr Descriptions und Schemas im Modellkontext — und mehr Tore, die der Harness halten muss. Wie Sicherheit aufgeteilt wird, siehe MCP-Sicherheitslücken erklärt.
Das Schlachtfeld: sieben Hops in einem tool call
Die vier Produkte ausgebreitet: die Featurenamen unterscheiden sich. Die Leitung sieht gleich aus. Der Wettlauf ist, wer jeden Hop entscheidet:
-
1
Zeigen
Welche Tools und welcher Schema-Ausschnitt in diesen Request kommen. Ein Tool, das das Modell nicht sieht, kann es nicht aufrufen.
-
2
Senden
Das Modell wählt einen Namen und erzeugt einen arguments-String. Dieser Hop heißt nur: es will aufrufen.
-
3
Parsen
Der String wird zum Objekt. Ungültiges JSON muss scheitern, bevor es die Ausführungsschicht erreicht.
-
4
Prüfen
Pflichtfelder, Typen, Enums und additionalProperties gegen JSON Schema prüfen.
-
5
Tor
allow / deny / ask. Eine gültige Form ist keine Autorisierung.
-
6
Ausführen
Wirklich laufen in einer Sandbox, einem Arbeitsbereich oder mit vollen Host-Rechten. Nebenwirkungen beginnen hier.
-
7
Zurückschreiben
Das Ergebnis wird Text oder JSON, landet in der Sitzung und geht in die nächste Runde. Fehler brauchen ebenfalls Struktur — nicht nur „etwas ist schiefgegangen“.
Alle vier gehen diese sieben Hops. Der Unterschied ist, wo Hooks sitzen, wie eng die Standard-Sandbox ist, ob das Modell wechselbar ist und ob die Leitung selbst ersetzt werden kann.
Claude Code: Hooks vor und nach dem Aufruf
Claude Code macht den Haupt-Agent stärker: Skills, MCP, Sub-Agents und CLAUDE.md umhüllen denselben Claude Agent. Was JSON Tool Calling wirklich greift, ist der deterministische Hook um jeden Aufruf.
Im offiziellen Lebenszyklus läuft jeder Tool-Aufruf in der Schleife durch PreToolUse und PostToolUse. Sie können auch eingreifen, wenn eine Rechteabfrage erscheint (PermissionRequest), oder nach einem Fehler entscheiden, ob ein Retry erlaubt ist (PermissionDenied / PostToolUseFailure).
Der Hook liest Ereignis-JSON, keine Prosa. Er kann Eingaben ändern, den Aufruf ablehnen, eine Bestätigung verlangen oder nach Erfolg Logs ergänzen, einen Formatter laufen lassen und neuen Kontext zurückschieben. Eine bereits eingetretene Nebenwirkung kann er nicht rückgängig machen — PostToolUse kommt zu spät.
Rechteregeln werden in der Reihenfolge deny → ask → allow geprüft, deny hat Vorrang. Ein Hook, der allow zurückgibt, überspringt nur die interaktive Abfrage; eine unternehmensweite deny-Liste kann er nicht überstimmen. Selbst mit bypassPermissions blockiert ein PreToolUse, der deny zurückgibt, den Aufruf weiterhin.
Der Engineering-Kompromiss ist klar: ein probabilistischer Agent plus ein deterministisches Tor. Nach dem Ändern Tests laufen, gefährliche Befehle blockieren, geschützte Pfade freigeben lassen — das Modell soll sich das nicht jedes Mal „merken“ müssen.
Geeignet, wenn Workflows stabil sind und Sie Skills, Sub-Agents und Hooks im Hauptloop verankern wollen — Erfahrung als wiederverwendbare Pakete.
Codex: Sandbox und Freigabe vor der Ausführung
Codex (einschließlich Codex CLI) schiebt die Frage auf die Ausführungsschicht. Sobald ein Agent Dateien ändert, die Shell ausführt, Abhängigkeiten installiert und Netz sowie Credentials anfasst, muss er zwei verschiedene Dinge gleichzeitig beantworten: die Fähigkeitsgrenze, und ob diese Aktion jetzt erlaubt ist.
| Mechanismus | Beantwortete Frage | Typische Schalter |
|---|---|---|
| Sandbox | Was kann es technisch berühren oder ändern? | read-only / workspace-write / danger-full-access |
| Approval | Ist diese Aktion jetzt erlaubt? | untrusted / on-request / never |
Die Standarderzählung ist Least Privilege: zuerst die Umgebung eng ziehen, bei Bedarf öffnen. Ein untrusted Verzeichnis startet nur lesend. Nachdem Sie den Arbeitsbereich vertrauen, ist die übliche Voreinstellung workspace-write plus on-request — Lese- und Schreibzugriffe sowie übliche Befehle im Arbeitsbereich laufen automatisch; das Verlassen des Arbeitsbereichs oder Netzwerkkontakt braucht Freigabe. Das Netz ist standardmäßig aus und muss explizit eingeschaltet werden.
Neuere Versionen beschreiben Dateisystem und Netz mit einem Rechteprofil. Mischen Sie das nicht mit dem älteren sandbox_mode. Die Namen ändern sich. Die Trennung nicht: die eine Seite ist „was es berühren kann“, die andere „darf es das jetzt tun“.
Geeignet, wenn Nebenwirkungen groß sind, die Ausführungsspur auditierbar sein muss und Isolation plus Freigabe erstklassig sind. Open-Source-Repository: openai/codex.
OpenCode: Modelle sind austauschbar, Rechte sind Konfiguration
Die Differenzierung von OpenCode ist nicht „noch eine Skills-Syntax“. Die Standardhaltung lautet: Modelle sind austauschbar. MIT-lizenziert, Terminal first, viele Anbieter und lokale Modelle. Flexibilität sitzt vor allem in der Konfiguration — provider, model, permission, agent — nicht darin, den Harness-Kern in einen Plugin-Bus zu sprengen.
Rechte sind vom frühen booleschen tools in permission gewandert: jede Aktion ist allow, ask oder deny. Regeln können nach Toolnamen, Befehlsmuster oder danach, ob der Aufruf den Arbeitsbereich verlässt (external_directory), geschrieben werden. Der letzte Treffer gilt. Ein Sub-Agent kann strenger sein als der Haupt-Agent — etwa eine Review-Rolle, die edit direkt deny setzt.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git push *": "deny"
},
"edit": "allow",
"external_directory": "deny"
}
}
Es gewinnt typischerweise bei: Multi-Modell als Standard, nicht als Anbieter-Zugabe; Open-Source-Lizenz und Community; „Modell wechseln“ als erstklassige Operation. Der Preis ist klar: Ausführungsgrenzen und Plugin-Tiefe sind nicht automatisch das Verkaufsargument Nummer eins. Sie kaufen einen modellwechselbaren Harness, nicht das schwerste Sandbox-Produkt und nicht einen „Everything is a plugin“-Plattformkern.
Geeignet, wenn Sie einem einzelnen Anbieter nicht trauen oder im selben Loop Modelle wechseln wollen — einschließlich lokaler Gewichte.
DeepSeek Agent: die Pipeline selbst ist ein Plugin
DeepSeek schiebt die Frage eine Schicht tiefer. Das öffentliche Preview-Produkt ist DeepSeek Harness (dsh). Der äußere Vertrag ist die Agent-Schnittstelle; die Standardimplementierung ist ein austauschbarer agent-loop. Die Losung lautet Everything is a plugin — Modell, Tools, Skills, Sitzung, Sandbox, Speicher, Loop, Scheduling und UI sind austauschbar.
Was zu Tool Calling passt, ist die Tool-Pipeline, kein weiteres Chatfenster. Eine ToolDefinition im Register trägt typisierte Parameter und Ausgaben. Das Modell sieht nur name, description und parameters. execute, Timeouts, Concurrency-Flags und UI-Darstellung dürfen nicht in den Request lecken.
Jeder Aufruf geht eine feste Kaskade:
tools/pre-execute → allow / deny / ask
monotonic guards → 只收紧,不能再放行
tools/execute → 真正派发(可包超时 / 重试)
tools/post-execute → 检查或替换结果
finalizeContent → 定义自己的收尾
tools/result → 冻结后的权威结果
Es kann natives Function Calling nutzen oder PTC (der reservierte run_code-Transport; Unteraufrufe laufen trotzdem in dieselbe Pipeline). Concurrency wird pro Aufruf klassifiziert: exklusive bilden eine Barriere, parallel-sichere gehen in einen begrenzten Pool; Ereignisse werden weiter in Modellreihenfolge geschrieben.
Geeignet, wenn Sie die Runtime selbst als Plattform wollen, nicht nur einen stärkeren Assistenten. Zur Modellschicht siehe DeepSeek V4-Pro vollständig erklärt.
Dasselbe JSON, vier Tore
Dasselbe tool-call-JSON trifft in jedem Produkt ein anderes Tor:
| Dieser Hop | Claude Code | Codex | OpenCode | DeepSeek Agent |
|---|---|---|---|---|
| Dem Modell gezeigte Toolfläche | Eingebaute Tools + Skills + MCP; Schemas können verzögert laden | Sitzungs-Werkzeugkasten + Projektnotizen (AGENTS.md) | Eingebaute + MCP + Zuschnitt pro Agent | Ein scoped Register projiziert ToolSchema über eine Allow-Liste |
| Bevor arguments die Ausführung erreichen | Hooks können das volle Tool-Ereignis-JSON lesen | Zuerst Sandbox-Fähigkeit, dann Freigabepolitik | permission-Regeln prüfen Toolnamen und Eingabe | Nach dem Parsen die pre-execute-Kaskade und monotone Guards |
| Wie der Mensch ein Veto einlegt | PermissionRequest; deny schlägt ein Hook-allow | on-request / untrusted; kann an einen Reviewer | ask; ein Sub-Agent kann strenger sein | Eine ask-Entscheidung ist ein erstklassiges Pipeline-Ergebnis |
| Wo Nebenwirkungen entstehen | Lokale Tools + Nach-Hooks | OS-Sandbox; standardmäßig kein Netz, Arbeitsbereich schreibbar | Lokale Ausführung, git-Snapshots, Undo | Ein austauschbares Sandbox-Plugin |
| Wie Ergebnisse zurückgeschrieben werden | PostToolUse / Fehler-Hooks ergänzen Kontext | JSONL-Ereignisse, leicht in CI zu auditieren | LSP-Diagnosen können in den Loop zurück | tools/result friert, dann das Sitzungslog |
Die letzte Zeile ist keine Rangliste. Sie kaufen einen nutzbareren Haupt-Agent, eine steuerbarere Ausführungsumgebung, eine modellwechselbare Konfigurationsschicht oder eine komponierbare Runtime.
Zur Produktansicht der Kontrollkarte siehe Vier Architekturzentren. Wer nach der Erweiterung der Toolfläche durch MCP die Sicherheit trägt, steht in Wenn AI Agents anfangen, das Internet anzugreifen: Wie JSON zur Sicherheitsgrenze wird.
Warum Sie trotzdem JSON Schema ansehen
So stark die vier Harnesses auch sind: schmutzige Parameter in der Ausführungsschicht werden zum Vorfall. Vom Modell gefüllte arguments sind eine weiche Grenze: arguments kann kaputtes JSON sein, Felder fehlen lassen oder nicht deklarierte Schlüssel hinzufügen.
Ein gültiges Schema ist keine Autorisierung. Beide Schnipsel unten bestehen ein weites Schema, das nur ein sql-Feld verlangt. Nur die enge Seite macht die Operation zum Enum und schreibt die Kennung als pattern:
{
"loose": {
"type": "object",
"properties": { "sql": { "type": "string" } },
"required": ["sql"]
},
"tight": {
"type": "object",
"additionalProperties": false,
"properties": {
"op": { "type": "string", "enum": ["get_user_by_id"] },
"user_id": { "type": "string", "pattern": "^[a-z0-9-]{8,36}$" }
},
"required": ["op", "user_id"]
}
}
Wie der Vertrag geschrieben wird und worin JSON Mode von Strict Schema unterscheidet, steht in Warum braucht KI JSON Schema? Structured Output, Function Calling und JSON Schema erklärt und Warum brauchen AI Agents JSON Schema? Tool Calling bis Structured Output erklärt.
Einen tool call in JSONNote zerlegen
Das nützlichste Debug-Material ist meist ein JSON-Stück: die Tool-Definition, Modell-arguments, Hook-Ereignisse, der deny-Grund. Das können Sie lokal im Browser zerlegen. Das Repository müssen Sie nicht hochladen.
-
1
Zuerst prüfen, ob arguments gültiges JSON ist
Den String unescapen und in JSON formatieren werfen. Fehlende Kommas, trailing commas und einfache Anführungszeichen explodieren hier.
-
2
Gegen das deklarierte Schema prüfen
parameters / inputSchema des Tools und das geparste Objekt in JSON Schema legen. Sehen Sie, ob ein Feld fehlt, der Typ falsch ist oder ein nicht deklarierter Schlüssel ergänzt wurde.
-
3
„Was Sie freigegeben haben“ und „was es jetzt ist“ vergleichen
Die Tool-Liste von letzter Woche und die heutige in JSON Diff werfen und gezielt stille Änderungen an description und Schema suchen.
-
4
Soll ein Kollege es sehen? Per Hash teilen
Die Daten bleiben im URL-Fragment und treffen keinen Server. Siehe JSON per URL-Hash teilen.
FAQ
Worum konkurrieren Claude Code, Codex, OpenCode und DeepSeek Agent wirklich?
Nicht die Feature-Liste, und nicht wer die nächste Zeile genauer vervollständigt. Es geht um den Agent Harness: wer einen JSON Tool Calling-Hop vom Parsen und der Vertragsprüfung über Freigabe und Sandbox-Ausführung bis zum Zurückschreiben des Ergebnisses besitzt.
Was zählt mehr: Agent Harness oder Modell?
Das Modell schlussfolgert und wählt den nächsten Schritt. Der Harness entscheidet, welche Tools sichtbar sind, ob arguments gültig sind, ob eine riskante Aktion einen Menschen braucht und wo Nebenwirkungen entstehen. Ein anderer Harness garantiert keinen höheren Durchschnittsscore, aber Abschlussweg, Kosten und Abbruchrate ändern sich. Sie wählen Kontrolle, nicht einen Score.
Welche der vier sollen Sie wählen?
Es gibt keinen einheitlichen Sieger. Deterministische Hooks und Rechte auf dem Haupt-Agent → Claude Code. Sandbox und Freigaben als Standard-Ausführungsgrenze → Codex. Modelle wechseln und Lock-in vermeiden → OpenCode. Loop, Tool-Pipeline und Sandbox als austauschbare Plugins → DeepSeek Agent (DeepSeek Harness).
Enthält JSON Tool Calling selbst eine Autorisierung?
Nein. Wenn das Modell einen Toolnamen wählt und arguments füllt, heißt dieser Hop nur: es will aufrufen. Ob der Aufruf blockiert wird, in welcher Sandbox er läuft und ob das Ergebnis zurück ans Modell geht, entscheidet der Harness. Fehlt ein Tool, wird die Berechtigung verweigert oder scheitert die JSON-Prüfung, passiert auf der Festplatte nichts.
Warum trotzdem selbst JSON Schema prüfen?
Vom Modell gefüllte arguments sind eine weiche Grenze. arguments ist oft ein String und kann Felder fehlen lassen, den falschen Typ nutzen oder nicht deklarierte Schlüssel hinzufügen. Ein gültiges Schema ist keine Autorisierung. Produktion braucht weiter parse plus Prüfung, dann Rechte und Sandbox. So stark die vier Harnesses auch sind: schmutzige Parameter in der Ausführungsschicht werden zum Vorfall.
Fazit
Der Coding-Agent-Wettlauf 2026 sieht aus wie ein Modellkrieg. Im Repository ist es ein Harness-Krieg.
Das Modell sendet JSON. Der Harness entscheidet, ob dieses JSON zur Nebenwirkung werden darf. Die vier konkurrieren um die Kontrolle derselben Leitung: Claude Code verankert Hooks, Codex zieht die Ausführungsgrenze enger, OpenCode löst die Modellbindung, DeepSeek Agent macht die Runtime selbst zu Plugins.
Features werden sich weiter ähneln. Was Sie wirklich beobachten sollten: wer entscheidet, nachdem ein tool call das Modell verlassen hat.
Weiter: arguments eines tool call in JSONNote kleben