Spickzettel

Spickzettel Agent-Harness: Komponenten, Dateien, Probleme und Startcheckliste

Aktualisiert: · Skillaria.Top

Das Harness eines Agenten besteht aus fünf Teilsystemen: Anweisungen, Werkzeuge, Umgebung, Zustand und Rückmeldung. Die minimale Dateiauswahl sind eine AGENTS.md als kurzer Router, ein Prüfskript (make check, verify.sh), eine Fortschrittsdatei und eine Feature-Liste mit Status; den Fertigstellungsstatus setzt ein Skript, nicht der Agent.

Fünf Teilsysteme des Harness

TeilsystemWas es istArtefakteAnzeichen eines Defekts
AnweisungenWas der Agent über das Projekt wissen mussAGENTS.md / CLAUDE.md, Skills, docs/, ADRsVerletzt bekannte Konventionen
WerkzeugeWas der Agent tun kannShell, Tests, Linter, Browser, MCP-Server„Will, kann aber nicht“
UmgebungWo der Agent arbeitetLock-Dateien, Docker/Devcontainer, Git-Worktree, Sandbox, init.shDie Sitzung beginnt mit der Reparatur der Umgebung
ZustandWas einen Neustart überstehtPROGRESS.md, DECISIONS.md, feature_list.json, CommitsEine neue Sitzung weiß nicht, wo es aufgehört hat
RückmeldungWie der Agent von einem Fehler erfährtmake check, E2E, Hooks, arch-check, Bewerter„Fertig“, funktioniert aber nicht

Reihenfolge beim Aufbau von Grund auf: Rückmeldung → Anweisungen → Zustand → Umgebung → Werkzeuge.

Dateien des Harness

DateiZweckRegel
AGENTS.md / CLAUDE.mdEinstiegspunkt: worum es im Projekt geht, wie man es startet, wie man es prüftEin kurzer Router (etwa 80 Zeilen) mit Verweisen auf Dokumente mit der Bedingung „wann lesen“
docs/*.mdDetails nach ThemenBei Bedarf lesen, nicht komplett
.claude/skills/*/SKILL.mdWiederkehrende Abläufe (Deployment, Review)Werden geladen, wenn die Aufgabe zur Beschreibung passt
PROGRESS.mdZustand, Erledigtes, Blocker, nächste SchritteAm Ende jeder Sitzung aktualisieren
DECISIONS.mdEntscheidung, Begründung, verworfene OptionenDen Weg festhalten, nicht nur das Ergebnis
feature_list.jsonFeatures: Verhalten, Prüfung, ZustandGenau ein Feature aktiv (WIP=1)
scripts/verify.shPrüft ein Feature und setzt es auf passingEinziger, der passing setzt, mit dem SHA des Commits
scripts/arch-check.shArchitekturgrenzenExit-Code 1 + WARUM und FIX in der Ausgabe
scripts/init.shPrüfung der Umgebung vor der ArbeitUmgebung, sauberes Git, grünes make check, ein aktives Feature
Sprint-VertragVertrag für ein Feature vor dem CodeIm Umfang / außerhalb des Umfangs / offene Fragen
.claude/settings.jsonBerechtigungen und Hooks von Claude CodePrüfungen an Ereignissen, nicht im Gedächtnis des Agenten

Skelett der AGENTS.md

# Projekt: Zahlungs-Backend (FastAPI, PostgreSQL)

## Starten
docker compose up -d && ./scripts/init.sh

## Prüfen
make check   # Lint, Typen, Unit-Tests, arch-check
make e2e     # Ende-zu-Ende-Szenarien

## Definition of Done
- make check und make e2e — Exit-Code 0
- Feature per Skript scripts/verify.sh auf passing gesetzt
- PROGRESS.md aktualisiert

## MUST
- Datenbankabfragen nur über Repositories
- Geheimnisse nur aus Umgebungsvariablen

## Dokumente
- docs/payments.md — wenn die Aufgabe Zahlungen und Rückerstattungen betrifft
- docs/migrations.md — wenn sich das Datenbankschema ändert

Zustände eines Features

ZustandBedeutungWer ändert ihn
pendingIn der WarteschlangePlaner
activeIn Arbeit (nur eines)Agent beim Start
passingPrüfung bestandenNur verify.sh
blockedBraucht eine Entscheidung eines MenschenAgent mit Beschreibung des Grundes

Prüfstufen

StufeWasWann
1Lint, TypenImmer
2Unit- und IntegrationstestsImmer
3E2EÄnderung über mehr als eine Schicht; vor „fertig“
4arch-checkNeue schichtübergreifende Importe

Das Recht, „fertig“ zu sagen, besteht erst nach der obersten Stufe. Grüne Unit-Tests bedeuten noch keine Fertigstellung.

Regeln mechanisch durchsetzen

StufeWerkzeugAufwand
grep-GuardSkript, das nach einem Muster sucht und WARUM/FIX ausgibtMinuten
Linter-Regelimport-linter (Python), dependency-cruiser, eslint-plugin-boundaries (JS/TS)Eine Stunde
ArchitekturtestEin Test im CI, der bei Verletzung der Schichten fehlschlägtMehr Aufwand, aber sichtbar in make check
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
  echo "WARUM: Services greifen nicht direkt auf die Datenbank zu"
  echo "FIX: Nutzen Sie ein Repository aus app/repositories/"
  fail=1
fi
exit $fail

Typische Probleme und Lösungen

ProblemTeilsystemLösung
Eine Regel in CLAUDE.md wird nicht befolgtAnweisungenDatei kürzen, Regel in eine Prüfung oder einen Hook umwandeln
Der Agent kann die Tests nicht ausführenWerkzeugeBefehl erlauben, Abhängigkeiten ins Image installieren
Unterschiedliches Verhalten auf verschiedenen RechnernUmgebungLock-Dateien, Docker/Devcontainer, feste Laufzeitversionen
Amnesie zwischen SitzungenZustandPROGRESS.md, Übergabe der Sitzung, Lesen zu Beginn der Sitzung
Drei Features begonnen, keines beendetZustandWIP=1 in feature_list.json
„Fertig“, funktioniert aber nichtRückmeldungDoD, E2E, verify.sh, unabhängiger Bewerter
Tests sind grün, das Feature ist kaputtRückmeldungE2E mit echter Datenbank und echter Konfiguration
Der Agent übernimmt schlechte MusterRückmeldungarch-check von Anfang an
Unklar, was der Agent getan hatZustandKleine Commits, Bericht in PROGRESS.md, DECISIONS.md
Der Agent hat über Nacht die Umgebung zerstörtUmgebungSandbox, Git-Worktree, Checkpoints, Rollback über init.sh
Derselbe Review-Kommentar zweimalHarness insgesamtIn eine Prüfung in make check umwandeln, Text aus den Anweisungen entfernen

Rollen für lange Aufgaben

RolleTutTut nicht
PlanerFeatures mit AbnahmekriterienSchreibt keinen Code
GeneratorSetzt ein Feature um, führt die Tests ausEntscheidet nicht, ob es fertig ist
BewerterUrteil nach Raster, mit Verweis auf Datei, Zeile oder LogSieht die Überlegungen des Generators nicht
MergeCommittet bei review == passDas ist Code, kein Agent

Budget für autonome Arbeit

  • Das Ziel ist ein Satz (zum Beispiel: alle Features auf passing bringen).
  • WIP=1, eine Zeit- und Versuchsgrenze pro Feature.
  • Die Metrik wächst monoton; eine Regression bedeutet sofortigen Rollback.
  • Migrationen, Infrastruktur, Geld — Eskalation an einen Menschen.
  • Nach mehreren fehlgeschlagenen Reviews das Feature mit einem sauberen Kontext neu beginnen.

Checkliste für den Start des Agenten

  1. Es gibt eine AGENTS.md: Stack, Start, Prüfbefehl, DoD.
  2. make check läuft auf einem sauberen Klon durch.
  3. Die Umgebung ist reproduzierbar: Lock-Dateien, Docker oder Devcontainer.
  4. Der Agent hat die nötigen Befehle; gefährliche sind verboten oder in einer Sandbox.
  5. Es gibt ein E2E-Szenario mindestens für das Hauptszenario.
  6. Es gibt eine PROGRESS.md und die Regel, sie zu Beginn der Sitzung zu lesen.
  7. Features stehen in einer Liste mit Status, genau eines ist aktiv.
  8. Den Status passing setzt ein Skript.
  9. Prüfmeldungen enthalten WARUM und FIX.
  10. Die Aufgabe ist mit Abnahmekriterien und einer Grenze des Umfangs formuliert.
  11. Festgelegt ist, was eine Entscheidung eines Menschen erfordert.
  12. Die Verifikationslücke ist vor den Änderungen gemessen, als Vergleichsbasis.

Metriken des Harness

MetrikBerechnung
VerifikationslückeAnteil der „fertig“-Meldungen ohne Bestätigung durch eine Prüfung, auf 10 Aufgaben
MTTRZeit vom Ausfall bis zur Wiederherstellung eines funktionierenden Zustands
KaltstartOb eine neue Sitzung die Fragen „wo stehen wir, was kommt als Nächstes“ ohne Raten beantwortet
AblationEinbruch, wenn ein Teilsystem bei einem festen Aufgabensatz abgeschaltet wird

Kurz gesagt

Das Harness ist ein Kreislauf, keine Datei: Anweisungen, Werkzeuge, Umgebung, Zustand und Rückmeldung. Beginnen Sie mit Prüfungen, halten Sie die AGENTS.md kurz, übergeben Sie den Fertigstellungsstatus einem Skript und überprüfen Sie das Harness regelmäßig. Das alles wird im Kurs zum Harness Engineering an einem durchgängigen Projekt als Ganzes zusammengesetzt.

Häufige Fragen

Worin unterscheidet sich AGENTS.md von CLAUDE.md?

Dem Zweck nach ist es dasselbe: eine Anweisungsdatei für den Agenten. CLAUDE.md liest Claude Code, AGENTS.md ist ein gemeinsames Format für verschiedene Agenten; in CLAUDE.md können Sie einfach auf AGENTS.md verweisen.

Wie viele Zeilen sollte die AGENTS.md haben?

Eine feste Grenze gibt es nicht, aber die Einstiegsdatei sollte kurz bleiben, etwa einhundert Zeilen wie ein Inhaltsverzeichnis. Details lagert man in eigene Dokumente aus.

Brauche ich feature_list.json für ein kleines Projekt?

Für einzelne Korrekturen nicht. Sie lohnt sich, wenn der Agent mehrere Features hintereinander oder über mehrere Sitzungen bearbeitet.

Wo bewahre ich Geheimnisse auf, auf die der Agent zugreifen muss?

In Umgebungsvariablen oder einem Geheimnisverwalter, nicht in Anweisungsdateien und nicht im Code. Dem Agenten gibt man Zugriff auf die Umgebung, nicht auf die Werte im Text.