Der Agentenkurs · Der Harness

Die vier Ringe

Lektion 2/310 Min. LesezeitProfi

Lernziele

  • Du nennst die vier Ringe des Harness in der Bauordnung von außen nach innen und begründest die Reihenfolge.
  • Du ordnest konkrete Maßnahmen wie Worktree, AGENTS.md, Testsuite und Freigabe dem richtigen Ring zu.
  • Du liest einen PreToolUse-HookEin Befehl, den der Harness bei einem festen Ereignis automatisch ausführt, etwa vor oder nach jedem Tool-Aufruf. Ein Hook vor dem Aufruf kann ihn blockieren und dem Modell den Grund melden.Im Glossar und sagst voraus, welche Befehle er blockiert.

Bau den HarnessAlles, was festlegt, was der Agent erreichen darf: Tools, Berechtigungen, Sandbox, Zeitlimits und die Prüfung, bevor eine Aktion wirkt. Englisch für Geschirr oder Gestell.Im Glossar von außen nach innen: Eingrenzung, Leitplanken, Sensoren, Berechtigungen. Die Reihenfolge zählt, weil jeder Ring halten muss, wenn alle Ringe in seinem Inneren versagen. Eine Leitplanke kann der AgentEin System, in dem ein Sprachmodell seinen nächsten Schritt selbst wählt: Es ruft Werkzeuge auf, wertet das Ergebnis aus und macht weiter, bis das Ziel erreicht ist.Im Glossar überlesen, ein Sensor kann etwas übersehen, eine Freigabe kann jemand versehentlich anklicken. Eine Wand bleibt eine Wand. Deshalb steht der äußerste Ring, bevor du den ersten Prompt schreibst.

Eingrenzung: was der Agent gar nicht erreichtLeitplanken: AGENTS.md, Tool-BeschreibungenSensoren: Tests, Linter, ReviewBerechtigungen: Freigabefür das UnumkehrbareModell

Schritt 1 von 4

Eingrenzung

Was der Agent physisch nicht erreicht: Container, Worktree, Datenbank-Rolle nur mit Leserechten, Netzwerk-Allowlist. Dieser Ring wirkt ohne jede Mitarbeit des Modells.

Ring eins: Eingrenzung

Eingrenzung ist alles, was der Agent physisch nicht erreicht. Sie ist der einzige Ring, der ohne jede Mitarbeit des Modell · engl. model, LLMDas Sprachmodell (LLM, Large Language Model). Es liest Text, schreibt Text und entscheidet in einem Agenten, was als Nächstes passiert.Im Glossar wirkt. Die Grundausstattung besteht aus vier Teilen:

  • ein Container oder eine VM statt der Shell deines Laptops,
  • ein Wegwerf-Branch oder ein Worktree · engl. git worktreeEin zusätzliches Arbeitsverzeichnis desselben Git-Repositorys auf einem eigenen Branch. Ein Agent arbeitet darin, ohne deinen Checkout oder main zu berühren.Im Glossar statt main,
  • ein Datenbanknutzer mit reinen Leserechten statt der Zugangsdaten der Anwendung,
  • eine Netzwerk-Allowlist statt des offenen Internets.

Nichts davon braucht einen Prompt. Steht die Eingrenzung vor dem ersten Lauf des Agenten, ist die schlimmste denkbare Session ein verworfener Branch und eine verschwendete API-Rechnung.

Ring zwei: Leitplanken

Leitplanken sind alles, was der Agent vor dem Handeln liest: AGENTS.mdEine Textdatei im Wurzelverzeichnis eines Repositorys mit kurzen Regeln für Coding-Agenten: Aufbau, Testbefehl, Verbote. Der Agent liest sie zu Beginn jeder Session.Im Glossar-Dateien, Tool-Beschreibungen, Beispiele. Sie sind günstig und tragen den Großteil der täglichen Qualität. Eine brauchbare AGENTS.md hat vier Zeilen:

- Monorepo: services live in services/, shared code in packages/. Run everything from the repo root.
- `make test` must pass before you call any task done.
- Never hand-edit files in migrations/ — generate them with `make migration`.
- Your database user is read-only. Ask before proposing any schema change.

Die andere Hälfte dieses Rings ist das Design der Tool · engl. toolEin Werkzeug, das das Modell aufrufen kann: eine API, eine Datenbankabfrage, ein Shell-Befehl, eine Suche. Über Tools wirkt das Modell auf die Welt.Im Glossar. Googles Whitepaper Agent Tools & Interoperability with MCP (Nov. 2025) teilt Tools in drei Arten: Function Tools, die du selbst definierst, eingebaute Tools des Modellanbieters und Agent Tools, die einen anderen Agenten aufrufen. Seine Empfehlungen sind durchweg Leitplanken:

  • Dokumentier jedes Tool so gut, dass das Modell es allein anhand der Beschreibung wählen kann.
  • Schneide Tools nach Aufgaben zu, auch wenn die API darunter anders gegliedert ist.
  • Gib knappe Ausgaben zurück.
  • Schreib Fehlermeldungen so, dass sie den Weg zur Lösung zeigen.

Nimm für Datenzugriffe ein typisiertes Tool. search_orders(customer_id) ist einer SQL-Verbindung vorzuziehen, weil das Schema selbst eingrenzt.

Für MCP · engl. Model Context ProtocolEin offenes Protokoll, über das ein Agent Tools aus externen Servern einbindet, etwa für GitHub, Slack oder eine Datenbank. Jeder Server bringt eigene Tool-Definitionen mit.Im Glossar argumentiert das Whitepaper mit Interoperabilität. Ein offenes Protokoll (JSON-RPC 2.0 über stdio oder Streamable HTTP) bedeutet: N Clients und M Tool-Server brauchen jeweils eine Anbindung statt N×M. Die ausführliche Behandlung steht im Handbuch Agent-Harnesses.

Ring drei: Sensoren

Sensoren sagen dir mechanisch, ob die Arbeit stimmt. Die günstigen lässt du auf alles laufen: Linter, Typprüfung und Testsuite nach jeder Änderung. Sie kosten Sekunden und werden nie müde. Die teuren Sensoren, ein zweites Modell für das Review des Diffs oder ein Mensch, der ihn liest, setzt du nur dort ein, wo es zählt: Authentifizierung, Migrationen, alles, was Geld bewegt. Ein Harness, der make test automatisch ausführt, fängt mehr Fehler als einer, in dem sich jemand an das Review erinnern soll.

Ring vier: Berechtigungen

Laut Anthropic bestätigen Menschen in Claude Code 93 % der Freigabe-Anfragen (Stand: März 2026). Eine Abfrage, die 93 von 100 Mal durchgewinkt wird, gewöhnt Menschen daran, sie nicht mehr zu lesen. Der eigentliche Schutz ist Ring eins: Aktionen, die gar nicht verfügbar sind. Freigaben setzt du deshalb nur für das wirklich Unumkehrbare ein, also für das Pushen auf einen gemeinsamen Branch, für alles Senden und für alles Löschen. Drei Abfragen am Tag werden gelesen, dreißig werden weggeklickt.

Hooks: Leitplanken mit Biss

Ein Hook macht aus einer Leitplanke, die das Modell überfliegen könnte, eine Regel, die der Harness durchsetzt. In Claude Code läuft ein PreToolUse-Hook vor jedem Tool-Aufruf und kann ihn blockieren. Dieser Hook setzt „niemals auf main pushen“ durch:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.command' | grep -qE 'git push.*\\bmain\\b' && { echo 'Blocked: never push to main' >&2; exit 2; } || exit 0"
          }
        ]
      }
    ]
  }
}

Der Hook bekommt den geplanten Aufruf als JSON. jq zieht den Shell-Befehl heraus, grep sucht nach git push mit dem Wort main. Bei einem Treffer endet der Hook mit Code 2. Das blockiert den Aufruf und gibt die Meldung auf stderr an den Agenten zurück. Der Agent sieht den Grund und korrigiert seinen Kurs.

Wir haben diesen Hook in einem Wegwerf-Repository mit Claude Code 2.1.322 laufen lassen. Die Aufgabe lautete, einen fertigen Commit nach origin main zu pushen. So sah der Lauf aus, gekürzt um einige Erkundungsschritte:

PreToolUse-Hook blockt den Push1/6
  1. DuI committed a change to app.py. Push it to origin main.

Der Hook griff schon beim Probelauf mit --dry-run, weil er nur den Text des Befehls prüft. Umgekehrt erkennt er nur Befehle, die main ausdrücklich nennen. Ein git push ohne Branch-Namen auf main rutscht durch. Die Wand für diesen Fall ist ein Schutz des Branches auf dem Server, also wieder Ring eins.

Die Wetten laufen ab

Jedes Bauteil eines Rings ist eine Wette darauf, dass das Modell etwas nicht kann. Anthropic baute Kontext-Resets in einen Harness ein, weil Claude Sonnet 4.5 nahe an seiner Kontextgrenze Arbeit vorzeitig abschloss. Mit Opus 4.5 verschwand dieses Verhalten weitgehend, und Anthropic strich die Resets aus diesem Harness ganz. Deine Wetten laufen genauso ab. Die Lektion Harness in der Praxis macht daraus ein Ritual für jedes Quartal.

Merksätze

  • Du baust den Harness von außen nach innen, weil jeder Ring halten muss, wenn alle inneren versagen.
  • Eingrenzung wirkt ohne Mitarbeit des Modells und steht deshalb vor dem ersten Prompt.
  • Kurze Leitplanken und gut beschriebene, typisierte Tools tragen den Großteil der täglichen Qualität.
  • Günstige Sensoren laufen nach jeder Änderung automatisch, teure nur bei Code mit hohem Risiko.
  • Freigaben gibt es nur für das Unumkehrbare, und ein Hook mit Exit-Code 2 setzt eine Regel durch, auch wenn das Modell sie überliest.

Prüf dich selbst

Denkfrage

Ein Team startet mit einer sorgfältigen AGENTS.md und vielen Freigabe-Abfragen, der Agent läuft aber auf dem Laptop mit den Produktions-Zugangsdaten. Was fehlt, und warum zuerst?

Denkfrage

Warum ist search_orders(customer_id) als Tool besser als eine SQL-Verbindung?

Prüf dich selbst

  1. 1Welcher Ring wirkt ganz ohne Mitarbeit des Modells?
  2. 2Welchen Befehl blockiert der Hook aus dieser Lektion?
  3. 3Was bewirkt Exit-Code 2 in einem PreToolUse-Hook von Claude Code?
  4. 4Wofür setzt du Freigabe-Abfragen ein?
  5. 5Warum strich Anthropic die Kontext-Resets aus seinem Harness?

Quellen

  1. Agent Tools & Interoperability with MCP · Mike Styer, Kanchana Patlolla, Madhuranjan Mohan, Sal Diaz (Google), Nov. 2025

    Drei Arten von Tools, Empfehlungen zum Tool-Design, MCP über JSON-RPC 2.0, das N×M-Problem.

  2. How we built Claude Code auto mode · John Hughes (Anthropic), März 2026

    Menschen bestätigen 93 % der Freigabe-Anfragen.

  3. Harness design for long-running apps · Prithvi Rajasekaran (Anthropic), März 2026

    Kontext-Resets für Sonnet 4.5, gestrichen mit Opus 4.5.

  4. Hooks reference · Anthropic, Stand: Nov. 2026

    PreToolUse, Matcher, Exit-Code 2 blockiert und meldet stderr an Claude.

Dein Fortschritt bleibt nur in diesem Browser gespeichert.