Subagenten in der Praxis: Rollen, Budgets, Sperrungen und stille Fehler
Claude Code-Subagenten, die länger bestehen: Rollen, Übertragungsdateien, Ausführungszustand, Budgets, Sperrungen sowie Überprüfungen auf stille Fehler, plus die Unterschiede zwischen Fähigkeiten und Subagenten in der Praxis.
Quellen: The Subagents Guide I Wish I’d Had
Fähigkeiten beheben eine Art des Vergessens: Der Agent hört auf, den Überblick über die Struktur Ihrer Codebasis zu verlieren. Es bleibt jedoch eine weitere Art des Vergessens, die mit der Identität zusammenhängt. Bei jeder neuen Sitzung tritt das Modell als derselbe eifrige Generalist auf, der gerne eine vernünftige und unauffällige Meinung zu dem abgibt, was man ihm vorlegt.
Wissen ist das Problem der Fähigkeiten. Die Rolle ist das Problem der Subagenten – und genau das wird in diesem Text behandelt.
Kurz gesagt, bevor die Länge Sie abschreckt: Eine Fähigkeit beschreibt dem Modell, wie Ihre Welt aussieht, während ein Subagent ihm sagt, welche Rolle es spielen soll. Beides zusammen ist besser als jeweils nur eines, und für einen einzelnen Entwickler, der gleichzeitig mehrere unvollendete Projekte bewältigen muss, ist diese Kombination umso wichtiger. Sie sind der einzige Spezialist im Team und können nicht gleichzeitig fünf Rollen übernehmen.
Der erste Teil unten bildet die konzeptionelle Grundlage: Was diese Dateien sind, wo sie auf der Festplatte gespeichert sind und wie man eine solche Datei erstellt. Davon lässt sich viel aus der Dokumentation erfahren. Der zweite Teil ergibt sich ausschließlich aus dem Monatenlangen Ausführen von zwei Subagenten in Dutzenden von Repositorien und dem Beobachten, wie sie auf Weisen versagen, die in keiner Leitfadenanleitung erwähnt werden. Beide Agenten sind Open Source, und die tatsächlichen Dateien lohnen sich zum Lesen, denn eine Anweisung, die durch echte Ausführungen weiterentwickelt wurde, lehrt mehr als jeder Ratschlag.
Die Lücke, die ein Subagent füllt
Ein Code-Agent kommt mit einer Standardpersönlichkeit aus – dem hilfsbereiten Allrounder. Wenn man um eine Überprüfung eines Pull-Requests bittet, erhält man allgemein gehaltene, vernünftige Rückmeldungen. Fragt man, warum eine App langsam wirkt, konzentriert sich das System auf die letzte geänderte Datei. Bittet man um einen Plan für eine Datenbankmigration, wirkt das Ergebnis sinnvoll – doch drei Aspekte, die in der Produktion Probleme verursachen könnten, werden übersehen.
Daran liegt es nicht, dass das Modell dumm ist. Was ihm fehlt, ist eine klare Rolle. Jemand, der eine Sicherheitsprüfung durchführt, denkt anders als ein Sicherheitstechniker, und jemand, der nach einem Fehler sucht, prüft andere Hinweise als jemand, der bereits dreimal wegen genau dieses Fehlers im Einsatz war. Die Intelligenz ist bereits vorhanden – was fehlt, ist die richtige Einordnung.
Der „Giveaway“ besteht darin, denselben Einleitungstext immer wieder einzutippen. Bevor man Claude Code eine Änderung zeigen lässt, könnte man etwas wie Folgendes einfügen: Prüfen Sie das wie ein paranoider Sicherheitsexperte, überprüfen Sie zunächst die Authentifizierungsgrenzen, sagen Sie mir, was in die Logs gelangt, überspringen Sie die stilistischen Kleinigkeiten. Beim dritten Mal innerhalb von zwei Wochen wird einem klar: Dieser Einleitungstext ist eine Rolle – und eine Rolle, die man ständig neu eingibt, ist ein Subagent, den noch niemand geschrieben hat.
Das wiederholte Eintippen ist der Auslöser, den alle Anleitungen erwähnen. Es ist jedoch nicht der Grund für die beiden überlebenden Agenten, die aus zwei anderen Faktoren entstanden sind.
- Kontextökonomie. Die Forschung ist unübersichtlich: zwanzig Suchanfragen, ein Dutzend geladener Seiten, von denen die Hälfte nutzlos ist. Wenn das in Ihrer Hauptsession passiert, füllt sie sich mit unnötigem Inhalt, den Sie gar nicht lesen wollten. Die Arbeit muss an einem anderen Ort erledigt werden und anschließend als Zusammenfassung zurückgegeben werden. Genau deshalb gibt es den Web-Suchagenten. Er ist nicht klüger als der Hauptprozess – der Zweck besteht einfach darin, das Gelesene aus Ihrem Kontext herauszuhalten.
- Trennung der Rollen. Bei der Gestaltungsarbeit möchten Sie im Rahmen der Gestaltungsdiskussion bleiben. Wenn Sie dazu gezwungen werden, die elfte mechanische Anpassung zu genehmigen, die sich direkt aus einer bereits getroffenen Entscheidung ergibt, ist das Zeitverschwendung. Daher bleiben Entscheidungen beim Menschen, während die Eingabeaufgaben an einen Implementierungsagenten gehen. Fähigkeiten spielen bei dieser Aufteilung keine Rolle – entscheidend ist lediglich, wer über was nachdenken soll.
Ein Reviewer ist ein angenehmer erster Subagent. Diese beiden sind unterschiedlich: Sie sind es, die eine Funktion von einer Bequemlichkeit zur tatsächlichen Arbeitsweise eines Projekts machen.
Fähigkeiten versus Subagenten: Wissen versus Verhalten
Eine Fähigkeit enthält das, was der Agent wissen muss: Ihre eigenartige interne Bibliothek, die Umgebungsbesonderheit, die Builds stört, die fachlichen Fakten, die einem klugen Neuzugang mitgeteilt werden müssen, weil niemand sie erraten könnte. Sie wird nur unter bestimmten Bedingungen, wenn relevant, geladen.
Ein Subagent enthält, wie der Agent handeln sollte: Was er optimiert, was er zuerst überprüft, welche Kompromisse er standardmäßig wählt und in welcher Form die Antwort erfolgt. Er lehrt das Modell nichts Neues. Er lenkt die bereits vorhandene Intelligenz auf eine bestimmte Aufgabe aus.
Ein praktischer Test besteht darin, sich vorzustellen, einen spezialisierten Kollegen anzurufen. Wenn das, was er beisteuert, hauptsächlich Informationen sind, die Ihnen fehlen (Fachwissen, Kontext, praktische Erfahrung), benötigen Sie eine Fähigkeit. Wenn er hauptsächlich eine Vorgehensweise zum Umgang mit dem Problem mitbringt – also, was er zuerst betrachtet, was er besonders berücksichtigt, was er ohne Überprüfung nicht genehmigt und was er zurückgibt – benötigen Sie einen Subagenten.
Nehmen Sie einen Sicherheitstechniker, der Ihren Code durchliest. Er weiß nicht nur mehr als Sie, sondern arbeitet auch anders: Zuerst die Authentifizierungsregeln, ein Weg zur Berechtigungssteigerung wird weitaus wichtiger eingestuft als ein unattraktiver Variablennamen, es gibt keine Freigabe ohne Kommentar zu sensiblen Daten, und die Ergebnisse werden in einer strukturierten Liste dargestellt. Genau diese Reihenfolge der Aufmerksamkeit ist es, die ein Subagenten umsetzt.
Wissen gehört zu einer Fähigkeit. Methodik gehört zu einem Subagenten.
Was ein Subagenten in Claude Code ist
Claude Code ist hier das Referenzwerkzeug, weil es täglich zum Einsatz kommt. Andere Tools erhalten einen eigenen Abschnitt weiter unten, einschließlich ihrer Besonderheiten.
In Claude Code ist ein Subagent im Grunde nichts anderes als ein Markdown-Dokument, das mit einem kurzen YAML-Block beginnt. Zwei Verzeichnisse können es enthalten:
~/.claude/agents/ist die persönliche Bibliothek, die in jedem Projekt auf dem Rechner verfügbar ist. Behandeln Sie sie als Sandbox..claude/agents/innerhalb eines Repositoriums ist auf dieses Projekt beschränkt und wird zusammen mit dem Repo gespeichert, sobald es kommittet wird.
Das Frontmatter ist kurz. Hier ist ein vollständiges, funktionierendes Beispiel:
---
name: migration-risk-reviewer
description: Reviews database migration plans and schema changes for rollback risk, lock contention, and data integrity problems. Use before running any migration against real data.
tools: Read, Grep, Glob
model: sonnet
---
You are a senior database engineer reviewing a migration for production risk.
## What you look at first
- Can this be rolled back without losing data?
- Does it hold locks on a busy table during deploy?
- Is the ordering safe for a multi-step change?
- Will existing data violate any new constraint?
## Output shape
Findings in order of severity:
1. Blockers — deploy will fail or data will be lost
2. High risk — real production risk, needs a mitigation
3. Medium risk — should fix, won't necessarily block
4. Notes — worth tracking
For each finding: what it is, why it matters, what to do about it.
Mehrere Aspekte der Art und Weise, wie Claude Code mit einer solchen Datei umgeht, sind hilfreich zu kennen.
- Der Hauptinhalt ist die Systemanweisung. Alles unter dem Frontmatter wird zu den Anweisungen des Subagents, wenn dieser ausgeführt wird. Es handelt sich dabei nicht um Dokumentation, die das Modell liest und anschließend berücksichtigt. Das Modell liest sie und nimmt sie als seine Identität an.
- Die
descriptionhat große Bedeutung. Claude Code konsultiert sie, um zu entscheiden, wann die Arbeit automatisch weitergeleitet werden soll. Schreiben Sie sie daher wie eine API, die andere aus dem Kontext heraus entdecken müssen. „Verwenden vor der Ausführung jeder Migration“ kann so angegeben werden, während „hilft bei Datenbankangelegenheiten“ nicht funktioniert. Erfassen Sie auch die negativen Aspekte: Beide hier besprochenen Agenten erwähnen jeweils, wofür sie nicht geeignet sind, da die Routierung gerne eine Aufgabe an einen Agenten weiterleiten wird, die nicht zu seinen Aufgaben gehört.
tools ist eine Allowlist. Wenn man sie weglässt, erbt der Subagent alles. Wenn man sie einschränkt, kann ein Prüfer Ihre Dateien nicht bearbeiten, selbst wenn er Ideen hat. Für einen Prüfagenten ist das ein Vorteil, denn eine „Sagen Sie mir einfach, was falsch ist“-Methode sollte nicht willkürlich Dinge umschreiben.model ist eine Budgetentscheidung und keine Detailfrage. Ein billiges Modell eignet sich für mechanische Arbeiten, während ein teures Modell für Urteilsfähigkeit geeignet ist. Ein späterer Abschnitt behandelt dies ausführlich, da er erklärt, warum Delegation sich lohnt./agents verwaltet sie ebenfalls.Man kann einen Subagenten entweder direkt aufrufen, indem man darum bittet, Claude dazu anweisen, ihn aufgrund der Beschreibung zu rufen, oder ihn in einen größeren Ablauf einbinden, in dem er als delegierter Arbeiter ausgeführt wird. In jedem Fall verhält er sich gleich.
Das Wort „Agent“ übernimmt zu viel
Der Begriff wird auf vier verschiedene Dinge angewandt, und das Verwechseln dieser führt zu ständiger Verwirrung. Wenn man sie voneinander trennt:
- Ein Subagent (eine Datei in
.claude/agents/oder eine.agent.md-Datei im Copilot-Bereich) ist eine wiederverwendbare Datei, die eine spezialisierte Rolle definiert. Darum geht es in diesem Artikel. - Agent-Modus oder autonome Ausführung ist ein Schalter für eine Funktion. Damit lässt man das Tool Befehle ausführen und Dateien bearbeiten, ohne jede Zeile genehmigen zu müssen. Es handelt sich dabei um eine Berechtigungs-Einstellung, die nichts mit Spezialisten zu tun hat.
- Ein Hintergrund- oder Cloud-Code-Agent ist ein Service, der eine Aufgabe übernimmt, im Verborgenen daran arbeitet und anschließend einen Branch oder Pull Request zurückgibt. Auch das ist keine spezialisierte Datei.
- Eine Anweisungsdatei auf Repo-Ebene ist eine ständig verfügbare Anleitung, die Hausregeln, denen jeder Agent in diesem Codebase folgt. Man kann sie sich wie ein Mitarbeiterhandbuch vorstellen – nicht wie einen Kollegen, den man beim Namen ruft.
Immer wenn im Folgenden „Subagent“ vorkommt, bedeutet das einen wiederverwendbaren Spezialisten, der einmal erstellt und gezielt aufgerufen wird. Wenn man diese vier Begriffe klar voneinander unterscheidet, klärt sich bereits die Hälfte des Durcheinanders.
Den ersten erstellen
Beginnen Sie mit dem einfachsten Ansatz, der tatsächlich funktioniert. Ein erster Unteragent hat zwei Aufgaben: die Rolle zu definieren und darzulegen, was diese in der Praxis bedeutet. Der oben erwähnte Migrationsprüfer erledigt das bereits. Er verfügt über eine klare Rolle, spezifische Heuristiken sowie eine vorhersehbare Ausgabeform und ist absichtlich auf ein enges Aufgabenspektrum beschränkt. Weitere Funktionen werden hinzugefügt, nachdem man ihn an echten Aufgaben getestet hat und gesehen hat, was er übersieht.
Erste Unteragenten scheitern am häufigsten aufgrund einer unklaren Rolle. „Sicherheitshelfer“ ist keine echte Rolle, da darin nichts angegeben wird, was das Modell optimieren oder zuerst überprüfen soll. Eine echte Rolle fungiert als Verhaltensvertrag, der die eigentliche Aufgabe, die zuerst geprüften Aspekte sowie die Dinge, die niemals übersehen werden dürfen, abdeckt. Wenn die Aufgabe nicht in einem Satz beschrieben werden kann, ist sie zu vage.
Eine konkrete Version legt fest, worauf sich das Modell konzentrieren sollte und was es ignorieren muss. Das Ignorieren ist bereits die halbe Miete. Ein Prüfer, der einem Tippfehler denselben Stellenwert wie einer Grenze für Berechtigungen beimisst, ist lediglich eine Durchschnittsmaschine.
Was in den Textkörper gehört
Sobald die Rolle festgelegt ist, umfasst ein nützlicher Textkörper fünf Aspekte. Am ersten Tag sind nicht alle fünf notwendig.
- Was optimiert wird. Die einzige Sache, die diese Rolle um jeden Preis richtig machen will. Wenn ein Kompromiss notwendig ist, geht es dabei um genau dieses Ziel.
- Was zuerst überprüft wird. Die höchste Priorität – die Signale, die jeder echte Spezialist zuerst liest.
- Fehlermuster. Die spezifischen Arten, wie diese Art von Arbeit schiefgehen kann. Hier liegt das wahre Fachwissen, und der größte Teil davon wird nur dadurch sichtbar, dass man beobachtet, wie der Agent bei tatsächlichen Aufgaben Fehler macht.
Beginnen Sie mit der Rolle, den ersten Überprüfungen und der Ausgabeform, und lassen Sie die Fehler den Rest liefern.
Beispiel: Ein Fehlerjäger, der den neuesten Commit ignoriert
Hier ist ein Beispiel, das aus wiederholten Ärgerfällen entstanden ist. Etwas funktioniert nicht mehr, der Fehler wird in Claude Code eingefügt, und das erste Reaktionsschema ist, sich auf die kürzlich am meisten bearbeitete Datei zu konzentrieren. Manchmal ist das richtig. Oft hat die letzte Änderung damit nichts zu tun.
Ein erfahrener Debugger beginnt nicht mit dem Code. Er beginnt mit Beweisen – also damit, was tatsächlich fehlt, was die Protokolle aussagen und was sich in der Umgebung geändert hat – und öffnet die Quelldateien erst dann, wenn eine Hypothese getestet werden sollte. Das ist ein Verhalten, das daher als Agent gespeichert wurde:
---
name: bug-investigator
description: Investigates a bug or failure starting from evidence, not from recent code changes. Produces ranked hypotheses with the next diagnostic step for each. Use for "why is this broken" before touching the source.
tools: Read, Grep, Glob, Bash
---
You are a senior engineer investigating a failure. Your job is to find the most
likely cause, rule out the alternatives, and say what to check next.
## Investigation order
1. Start from the symptom — what is actually failing, and how does it show up?
2. Get the error output and any logs from around the time it broke — ask the caller for them if they weren't provided.
3. Only then look at recent changes, and only if the evidence points there.
4. Read source last, once there's a symptom-to-cause hypothesis worth testing.
## Output shape
**Symptoms:** what's failing and how it manifests.
**Likely causes (ranked):** for each — the hypothesis, the evidence for it, the next diagnostic step.
**Ruled out:** what you checked and why it isn't the cause.
**Next steps:** in priority order.
**Open questions:** what you still can't confirm.
## Failure modes to avoid
- Don't assume the last change is the cause without evidence.
- Don't propose a fix before you can name the mechanism.
Dann kommt der Schritt, den die Leute überspringen: Man testet es an einem echten Fehler, der bereits behoben wurde, und nicht an einem Simulationsbeispiel. Man übergibt dem Agenten die Symptome sowie die damaligen Protokolle und beobachtet, ob der Untersuchungsweg mit dem übereinstimmt, der tatsächlich das Problem gefunden hat. Wo auch immer der Weg abweicht, wird dieser Abweichungspunkt als neue Zeile im Text aufgeführt.
Dort enden die meisten Berichte über Subagenten. Alles, was danach kommt, beschreibt, was nach Monaten der Nutzung geschieht – das war der Teil, der erzählt werden musste.
Das Gegenteil von dem Erwarteten: Ein Subagent startet ohne Vorkenntnisse
Jeder präsentiert das isolierte Kontextfenster als reinen Vorteil. Doch das gilt in beiden Richtungen.
Nach drei verschiedenen Fehlern bei der Übertragung gelangte ein Satz zum Implementierungsagenten. Darin wird der Agent als jemand beschrieben, der das Projekt gut kennt, aber nichts von den Planungsgesprächen vor der Aufgabe weiß.
Eine kühle Behandlung des Gesprächs bedeutet, dass die KI die zwei Stunden, in denen Sie den offensichtlichen Ansatz ausschlossen, sich selbst davon überzeugten, auf eine Abstraktion zu verzichten, und aus gutem Grund auf eine seltsam aussehende Lösung kamen, nicht berücksichtigt hat. Für den Subagenten ist nichts davon geschehen. Eine warme Behandlung des Projekts bedeutet, dass er CLAUDE.md sowie die Codebasis besitzt, wodurch er bereits die Hausregeln und gängigen Vorgehensweisen kennt, ohne dass man es ihm sagen muss.
Falls man eine dieser beiden Aspekte falsch einschätzt, entsteht ein vorhersehbares Chaos. Nehmen Sie an, der Agent teilt Ihr Gespräch mit, dann wird er gerne das Design, das Sie vor einer Stunde verworfen haben, neu erstellen, denn aus seiner Sicht sieht dieses Design völlig in Ordnung aus. Nehmen Sie hingegen an, er weiß nichts über das Projekt, dann verbringen Sie tausende Tokens damit, einen Repository zu beschreiben, den er schneller lesen könnte, als Sie ihn zusammenfassen können.
Die Schlussfolgerung, die kein Subagentenleitfaden lieferte: die Übergabe ist eine Datei, und diese Datei ist der Vertrag. Es handelt sich dabei nicht um einen in die Aufgabenanweisung eingegebenen Absatz. Es ist ein Dokument auf der Festplatte mit festgelegten Abschnitten, denn eine improvisierte Anweisung lässt jedes Mal einen anderen entscheidenden Abschnitt aus.
In dieser Konfiguration ist die Übergabe eine TASKS.md-Datei im Wurzelverzeichnis des Repositoriums, die von einer Planungsfunktion erzeugt wird. Die aktive Aufgabe enthält genau diese Abschnitte und keine anderen:
- Ziel. Was nach Abschluss der Arbeit gilt.
- Warum (Verweis). Ein Link auf die in
PLAN.mdaufgezeichnete Entscheidung, nicht ein neuer Argument dafür. Ein Verweis, keine Prosa. - Ausführungszustand. Der Agent hält diesen aktuell. Weitere Informationen dazu finden Sie gleich weiter unten, da es sich um den Abschnitt handelt, der Sie rettet.
[ ] bedeutet noch nicht gestartet, [x] abgeschlossen und [!] blockiert ist, wobei Abhängigkeiten direkt angegeben werden, zum Beispiel hängt von #2 ab.Was es funktionieren lässt, ist eine Regel: Füllen Sie jeden Abschnitt vor dem Start aus und setzen Sie nur ein Bindestrich, wenn er tatsächlich nicht zutrifft. In einem unvollständigen Abschnitt improvisiert der Agent.
Dann gibt es die Trennung, die am längsten zu erkennen war: zwei Dokumente mit unterschiedlicher Lebensdauer. Das allgemeine Wissen darüber, wie hier gearbeitet wird, gehört in die Agentendefinition und nicht wiederholt pro Aufgabe. Die Agentendatei enthält das Protokoll – also wie eine Aufgabe gelesen wird, wie mit Hindernissen umgegangen wird, welche Elemente niemals verändert werden und was ein Bericht enthält. Die Aufgabendatei enthält die aktuelle Aufgabe. Wenn dieselbe Anweisung nacheinander in drei Aufgaben eingefügt wird, ist das ein Zeichen dafür, dass es sich nie um Aufgabeninhalt handelte, und sie sollte in die Agentendefinition übertragen werden.
Ausführungszustand – schließlich enden Sessions
Eine Regel hat mehr echte Arbeit bewirkt als jedes clevere Prompt-Engineering hier. Immer wenn der Agent anhält – egal ob fertig oder blockiert – muss er den Stand festhalten: Er sollte bei jedem Schritt das Statusfeld entsprechend ankreuzen und eine Notiz zum Laufzustand aktualisieren, in der aufgeführt wird, was erledigt wurde, was blockiert ist und warum, was noch übrig ist und wo mit der Arbeit fortgefahren werden kann. Die Bearbeitung von TASKS.md zu diesem Zweck fällt ausdrücklich in den Anwendungsbereich, denn die Datei dient als Wiederherstellungspunkt, falls die Sitzung abbricht.
Sitzungen brechen tatsächlich ab. Der Laptop wird geschlossen, die Verbindung bricht ab, ein Nutzungslimit wird erreicht, oder man wird gelangweilt und drückt bei etwas, das fast fertig ist, Ctrl-C. Wenn das bei einem Unteragenten passiert, verschwindet alles, was er wusste. Wenn die einzige Aufzeichnung des Fortschritts in seinem Gedächtnis lag, muss man nun das Repository mit dem eigenen Gedächtnis vergleichen, um zu erraten, wie weit er gekommen ist.
Daher speichert der Agent den Fortschritt während der Ausführung auf der Festplatte – direkt in der Datei, die die Aufgabe zugewiesen hat. Eine spätere Sitzung öffnet diese Datei und setzt an der markierten Stelle fort. Der Agent fügt einige Zeilen zur Definition hinzu und wandelt eine beendete Sitzung von einer als verloren geltenden in eine pausierte um.
Eine begleitende Regel befasst sich statt mit der Wiederherstellung mit der Durchsatzrate. Ein blockiertes Element stoppt die Warteschlange nicht. Wenn ein Element ungenügend spezifiziert ist oder auf eine unlösbare Abhängigkeit stößt, markiert der Agent es mit [!] zusammen mit einer einzeiligen Begründung und setzt mit allen verbleibenden Elementen fort, die nicht von ihm abhängen, wobei er erst dann anhält, wenn nichts Weiteres fortgesetzt werden kann. Er ahnt niemals ein Design vor, und jeder blockierte Pfad wird im Bericht festgehalten, damit ein Mensch ihn klären kann.
Das Standardverhalten bei einem Problem ist anzuhalten und nachzufragen, sodass eine Warteschlange mit acht Aufgaben zu einer Aufgabe und einer Frage führt. Das Standardverhalten ohne Beschränkungen ist noch schlimmer: Der Agent ahnt ein Design vor und macht weiter, wodurch sieben Teile auf einer Erfindung entstehen, die von niemandem genehmigt wurde. Überspringen und fortfahren, niemals raten, sondern die Abweichung melden. Diese Kombination ermöglicht es, Arbeiten in einer Warteschlange zu halten und sich zurückzuziehen.
Wer zahlt für welche Art des Denkens
Hier kommt das model-Feld ins Spiel, und die Wirtschaftlichkeit der Einrichtung hängt davon ab.
Die Beschreibung des Implementierers, entnommen einem echten Projekt, lautet ungefähr so: Ein Sonnet-Arbeitsschritt, der eine vollständig definierte, mechanische Kodieraufgabe aus der Aufgabendatei ausführt, während der Haupt-Opus-Planungsschleifen weiterläuft; nicht für Designentscheidungen, offene Fragen oder Live-Qualitätsprüfungen, die alle in der Hauptschleife verbleiben.
Das teure Modell trifft Entscheidungen, während das günstige Modell nur tippt. Genau dieser enge Aufgabenbereich macht das günstige Modell zuverlässig: Ein Sonnet-Arbeitskraft, der eine vollständig definierte, nummerierte Warteschlange innerhalb einer von ihm lesbaren Codebasis erhält, funktioniert zuverlässig.
Die Trennung ermöglicht außerdem zwei unterschiedliche Arbeitsrhythmen aus derselben Technologie.
- Geregelt.** Zwei oder drei Aufgaben zusammenstellen, den Agenten losschicken und in der Zwischenzeit bereits die nächste Batch planen. Keine Seite muss untätig warten, bis die andere fertig ist.
- Unüberwacht.** Genügend Aufgaben in die Warteschlange einfügen, sich dann entfernen und später zu einem Vergleich, einem Bericht sowie einer Notiz zum Laufzustand zurückkehren, in der angegeben wird, welche Aufgabe blockiert hat und warum.
Unter all dem befindet sich die Berechtigungsstufe, die tatsächlich die Vorgaben durchsetzt. Der unüberwachte Implementierer hat seine Datei- und Shell-Befehle in den Projekt-Einstellungen in der Erlaubnisliste aufgeführt, und alles, was außerhalb dieser Liste liegt, muss zur Genehmigung angehalten werden. Was die Anweisung besagt, ist die Richtlinie; die Erlaubnisliste ist der Zaun.
Eine weitere Zeile in diesem Agenten existiert aufgrund des teuersten Fehlers: Die nummerierten Aufgaben sollen als serielle Warteschlange, von oben nach unten, in einer einzigen Durchlaufphase bearbeitet werden, ohne parallele Arbeiter und ohne Unterbrechung zur Berichterstattung nach jeder Aufgabe.
Parallel agierende Agenten klingen nach höherer Geschwindigkeit, sind aber keineswegs so. Jeder von ihnen gibt schließlich seine gesamte Ausgabe in den Kontext zurück, der ihn erstellt hat, und eine anscheinend clevere Verteilung der Daten kann die Sitzung überlasten, die alles lesen muss. Auf diese Weise geht echte Arbeit verloren. Die parallele Ausführung über separate Dateien sollte nur für bestimmte Aufgaben aktiviert werden, niemals als Standard. Der Standard ist, dass ein Worker nacheinander eine Warteschlange durchläuft.
Ohne Budget gibt es alles aus
Jeder Unteragent mit Werkzeugen wie Suchfunktionen, Abruffunktionen oder einer Shell wird weiterarbeiten, bis etwas ihn stoppt, und „das reicht“ ist keine Schlussfolgerung, zu der ein Modell allein zuverlässig gelangt. Ein Forschungsagent ohne Budget verbringt einen Nachmittag mit einer Menge versteckter Browsertabellen und liefert anschließend eine Zusammenfassung, die bereits aus den ersten drei Ergebnissen gewonnen werden könnte.
Daher startet der Web-Suchagent mit strengen Grenzen, die über seiner Methodik und über allem anderen liegen. Die zur Laufzeit geladenen Playbooks pro Quelle, die Listen der Quellen sowie Suchstrategien für jede Domain enthalten, erhalten einen eigenen Abschnitt weiter unten.
Vier Lehren aus dieser Tabelle der Grenzen sind wichtiger als die darin angegebenen Zahlen, die Sie entsprechend Ihrer eigenen Arbeit anpassen sollten.
Bieten Sie einen Tiefe-Einstellknopf an anstelle einer festen Obergrenze. Jede einzelne Einstellung ist meist falsch: zu streng für schwierige Fragen, zu großzügig für schnelle Fakten. Mit drei benannten Ebenen und einer festgelegten Standard-Einstellung wird die Auswahl von deep zu einer bewussten Entscheidung statt zu einem Zufall. Die Reihenfolge der Prioritäten ist ebenfalls klar definiert: Zuerst gelten die vom Benutzer angegebenen Werte, danach eine im Prompt genannte Ebene, anschließend die Projektkonfiguration und schließlich standard.
Ein Budget lädt zum Spielen ein, da ein Modell es als Ziel betrachtet, weshalb Beschränkungen dagegen notwendig sind. Die wichtigen Bestimmungen besagen, dass pro URL nur eine Abfrage durchgeführt werden darf, eine bereits gelesene Seite nie erneut gelesen werden darf, die Suche sofort beendet werden muss, sobald die Fragen des Anfragers beantwortet sind, und dass das verbleibende Budget nicht als Quota gilt. Eine tiefe Suche, die nach sechs Abfragen abgeschlossen wird, gilt als Erfolg und nicht als Verschwendung.
Der letzte Satz wurde hinzugefügt, nachdem eine Suche die Frage bereits bei der vierten Abfrage beantwortet hatte, aber dennoch weitergeführt wurde, weil zwanzig die vorgegebene Anzahl war. Man muss laut aussprechen, dass ein frühes Beenden ein Sieg ist.
Zählen Sie die Dinge, die Kosten verursachen. Das Abrufbudget umfasst jede Netzwerkabfrage – von nativen Abrufen über jede Stufe der Verarbeitung blockierter Seiten bis hin zu jeder HTTP-Anfrage in einem Hilfsskript – wobei jede 429-Wiederholungsanfrage in diesem Hilfsskript gesondert mitgezählt wird. Eine frühere Version zählte nur die „Abrufaufrufe“ und ließ den Agenten dadurch unbeabsichtigt durch die Lücke schlüpfen. Das war kein Betrug; es wurde lediglich eine schlecht formulierte Regel getreulich befolgt.
Stellen Sie sicher, dass es Ausgaben meldet. Nach jeder Phase gibt der Agent eine Zeile wie [deep: 3/20 Suchvorgänge, 5/30 Abfragen] an. Ohne diese Meldung kann man nicht unterscheiden, ob eine sorgfältige Suche stattfindet oder alles außer Kontrolle gerät, bis es vorbei ist. Wenn das Budget mit unbeantworteten Fragen aufgebraucht ist, stoppt der Agent und gibt genau an, was noch unbekannt ist, welche URL am ehesten eine Antwort liefern könnte, und dass ein erneuter, tiefergehender Versuch eine Option ist. Das einzige verbotene Vorgehen ist, weiterzumachen, ohne dies anzugeben, da der Anrufer das Niveau ausgewählt hat und eine Überschreitung dieses Budgets diese Wahl außer Kraft setzt.
Sperrmechanismen bilden den größten Teil eines ausgereiften Agents
Öffnet man die am häufigsten genutzte Agentendatei, fällt sofort das Verhältnis ins Auge. Die Beschreibung der Aufgabe umfasst nur einen Absatz, während die Verbote eine ganze Liste einnehmen. Diese Ungleichverteilung ist kein Platzhalter. Ein Agent mit echten Werkzeugen verfügt über weitaus mehr Möglichkeiten, technisch gesehen die Vorgaben einzuhalten, als irgendjemand vorhersagen kann.
Ein Beispiel zeigt, warum gerade die zusätzlichen Hinweise entscheidend sind. Dem Agenten wird ausdrücklich untersagt, Browser-Automatisierung zu verwenden: weder einfache Browser, noch eingebettete Vorschauen, kein Playwright, keine Chrome-Erweiterungen, keine Öffnung von Tabs oder Fenstern – und falls ein Browser-Tool angeboten wird, ist es nicht für diese Aufgabe bestimmt. Der Grund wird direkt genannt: Das Öffnen von Tabs zum Lesen der Seiten führte bereits einmal zu etwa hundert Tabs und machte eine Aufgabe damit unmöglich.
Ein weiterer Beleg stammt vom Implementierer im research-agent-Repo, wo das jeweilige Mechanismus der eigentliche Grund ist, warum jemand die Regel respektieren würde. Es darf auf keinen Fall Dateien unter agents/ oder skills/ erstellen, da agents/ zum mitgelieferten Inhalt gehört und der Paketmanager bei der Installation jedes darunter liegende .md-Datei in einen separaten obersten Agenten umwandelt. Eine versehentlich dort abgelegte Datei würde in jedem Verbraucherprojekt landen.
Das ist das Prinzip, das man herausfiltern muss: jede Beschränkung nennt ihren Mechanismus. Der Agent muss nicht überzeugt werden. Der Grund muss aufgeschrieben werden, denn eine Beschränkung ohne Grund wird überschrieben. Nach sechs Wochen, während man den Text strafft, stößt man auf einen Satz wie „Erstelle hier niemals Dateien“ – er erscheint willkürlich – und man generalisiert ihn hilfreich. Der Satz bezüglich der Verflachung durch den Installer in jedes Endbenutzerprojekt sorgt dafür, dass man ihn in Zukunft in Ruhe lässt.
Noch einige weitere Formen, die diese Beschränkungen nach längerer Zeit annehmen können:
Verbiete die Kategorie und liste die Einzelfälle auf. Ein einfacher Satz wie „Keine Browserautomatisierung“ lässt den Agenten entscheiden, ob ein Vorschaufenster erlaubt ist. Die Aufzählung von sechs bestimmten Tools, die er nicht verwenden darf, schließt die Tür, durch die er sonst einen Weg finden würde.
Nennen Sie das Verhalten, nicht nur das Tool. Die beste Zeile im Dokument verhindert eine Neigung statt einen Befehl: Wenn Sie feststellen, dass Sie einen Scraper oder einen Berichtsgenerator schreiben, hören Sie auf – denn Sie umgehen die Aufgabe, anstatt sie wirklich zu erledigen. Fähige Agenten umgehen Einschränkungen, indem sie Tools entwickeln. Das ist die Kategorie, und genau das muss verboten werden.
Bieten Sie Notfalllösungen an, sonst wird es zur Autobahn. Einige Seiten lassen sich tatsächlich nicht abrufen, weshalb es eine Reihe von Ersatzmöglichkeiten für blockierte URLs gibt. Diese werden erst dann aktiviert, wenn der normale Weg für genau diese URL fehlschlägt. Sie sichern keinen zusätzlichen Abrufvorgang, prüfen auf eine installierte Hilfsmittel ohne eine zu installieren und begrenzen die Ausgabe, damit ein vollständiger Seitenausdruck den Kontext nicht überflutet. Danach kommt der endgültige Stopp: Wenn die URL auch nach Verwendung aller verfügbaren Ersatzmöglichkeiten weiterhin unerreichbar bleibt, ist alles vorbei. Protokollieren Sie es und gehen Sie weiter – ohne weitere Versuche, ohne zusätzliche Hilfsmittel und ohne kreative Alternativen.
Erklären Sie ausführlich, warum die Ausnahme kein Schlupfloch darstellt. Ein kurzer Absatz im Dokument erklärt, dass ein einmaliger, headless durchgeführter Abruf von reinem Text die Browser-Verbotsregel nicht verletzt, da dieses Verbot darauf abzielt, dass ein Benutzer einen Browser nutzt und anschließend Tabellen offen lässt, die von jemand anderem geschlossen werden müssen. Wenn dieser Absatz weggelassen wird, scheinen die Ausnahme und das Verbot miteinander zu kollidieren, und ein Modell, das mit einer solchen Kollision konfrontiert wird, wählt die Interpretation, die mehr zulässt.
Sie versagen leise – und mit Selbstvertrauen
Zwei Forschungsexperimente lieferten einst nicht nur gute, sondern sogar ausgezeichnete Ergebnisse: klare Erkenntnisse, echte Quellen sowie einen zusammenhängenden Bericht. Beide nannten Reddit als Hauptquelle. Dabei hatte keines der Experimente auch nur etwas von Reddit abgerufen.
Es kam dazu, dass eine mit site:reddit.com eingeschränkte WebSearch-Anfrage zehn saubere, plausible Ergebnisse von anderen Domains zurückgab, darunter ein Community-Forum für Handwerkermärkte, eine Regierungsseite für kleine Unternehmen sowie eine Plattform zum Teilen von Präsentationen – ohne jeglichen Fehler. Kein 403-Fehler, keine leere Ergebnisliste, keine Warnung. Der Domänenfilter wurde stillschweigend ignoriert, und in den Ausgabeergebnissen wurde das nicht erwähnt. Der Agent erhielt eine ordentliche Liste nutzbarer Seiten von den falschen Orten und handelte wie jeder vernünftige Mitarbeiter mit einer solchen Liste: Er nutzte sie und meldete Erfolg.
Die an diesem Tag festgehaltene Regel bildet nun die Grundlage des gesamten Projekts: Wenn eine benannte Quelle nicht erreichbar ist, muss das System dies angeben, und es darf auf keinen Fall stillschweigend mit dem weitermachen, was das Tool stattdessen liefert. Ein Bericht, der Reddit als Hauptquelle angibt, während er Erfolg von Marktplatz-Forums angibt, ist schlimmer als ein klarer Misserfolg, da niemand, der ihn liest, das erkennen kann.
Ein fehlgeschlagener Versuch erfordert einen Neversuch. Ein Versuch, der stillschweigend seine Quellen austauscht, führt zu einer Entscheidung, die auf Beweisen beruht, von denen man annimmt, sie stammen von einer Stelle, an der sie nicht wirklich sind. Das isolierte Kontextfenster – genau diese Funktion – ist der Grund, warum man nicht mitbekommt, was vor sich geht: Es erreicht einen keine Transkription, nur die Zusammenfassung, die das System für angemessen hält.
Drei Lösungen beheben dieses Problem, und keine davon besteht darin, dem System mitzuteilen, es solle vorsichtig sein.
Unterziehen Sie es einem mechanischen Test. Es wurden keine Fehler festgestellt, weshalb der Agent keinen Grund sah, etwas zu überprüfen. Die Lösung besteht aus einem Satz, der kein Urteil erfordert: Wenn eine Suche auf eine Domain beschränkt wurde und keine der zurückgegebenen URLs dazu gehören, sollte dies als null Ergebnisse und nicht als Ergebnismenge betrachtet werden. Dafür sind weder zusätzliche Tools noch Abfragen oder Berechtigungen nötig, da die URLs bereits vorhanden sind. „Seien Sie misstrauisch gegenüber Ihren Quellen“ gibt dem Agenten nichts zu tun. „Überprüfen Sie den Hostnamen im Vergleich zu dem, nach dem Sie gefiltert haben“, tut dies hingegen.
Betrachten Sie die Herkunft als einen erforderlichen Ausgabekanal mit einem Schema. Hier hört die Form der Ausgabe auf, eine Reihe von Abschnittsüberschriften zu sein, und verhält sich stattdessen wie ein Typ. Zwei Arrays werden an ihre Schlüsselnamen gebunden.
unreachable[]enthält einen Eintrag pro Wand, wobei die Schlüssel genausource,urlundreasonsind. Er umfasst sowohl fehlerhafte Abrufversuche als auch stille Ersetzungen.sources[]enthält einen Eintrag pro Quelle, die tatsächlich eine Antwort bereitgestellt hat, wobei die Schlüssel genausource,urlundfieldssind. Seiten, die geöffnet wurden, aber keine Informationen lieferten, werden nicht erfasst. Eine Quelle, die vier Felder beantwortet hat, ergibt einen Eintrag mit vier Namen, nicht vier Einträge.
Der subtile Ansatz, der anfangs falsch war: Die Herkunftsangabe dient zur Kennzeichnung und blockiert niemals. Wenn ein dokumentierter Ersatz die Frage beantwortet hat, gilt das Feld als beantwortet, und der Eintrag unreachable vermerkt lediglich, dass die Antwort nicht von der genannten Quelle stammt. Wenn ein Fehler das Feld unbrauchbar machen würde, würde dies den Ablauf genau in der Situation, in der es eine Workaround-Lösung gibt, lautstark stören.
Ein Misserfolg birgt eine Lektion, die man sich aneignen sollte. Der erste Entwurf dieses Agenten wies ihn an, an vier verschiedenen Stellen „als unerreichbar zu erfassen“, nannte jedoch weder ein Feld noch ein Array noch einen Ausgabepfad. Diese Anweisung führte zu nichts. Der Agent musste etwas erfassen, hatte aber keinen Ort dafür – daher erfasste er nichts, und niemand beschwerte sich. Immer wenn Sie eine Anweisung für einen Unteragenten schreiben, stellen Sie sicher, dass die beschriebene Aktion ein Ziel hat. „Bericht über X“ ohne einen benannten Slot für X bewirkt nichts und fühlt sich dabei in Ordnung.
Überprüfen Sie von außerhalb des Agenten aus. Ob der Agent seinen Ausgabevertrag einhält, wird durch ein danach ausgeführtes Skript entschieden – nicht durch die Zusicherung des Agenten selbst. Etwa 180 Zeilen Python prüfen den JSON-Daten gegen die deklarierten Felder, und das ist wertvoller als jede Betonung im Prompt.
Dieselbe Idee taucht bei der Umsetzung für ein Repository ohne verfügbare Testsuite auf. Die Anweisung besagt, dass es keine Testsuite gibt; der Abschnitt „Tests“ der Aufgabe listet die Prüfungen auf, die diese ersetzen, wobei jede davon ausgeführt und die Ergebnisse konkret gemeldet werden müssen. Wenn eine Prüfung besagt „Diese URL ist aufrufbar“, bedeutet das, dass sie tatsächlich abgerufen wird. Eine nicht überprüfbare URL kommt nicht in eine Datei – sie wird als unüberprüft gemeldet zusammen mit der Erklärung, was passiert ist. Denn ein Leser, der einem von niemandem überprüften Link vertraut, verschwendet Ressourcen mit einem Abruf einer 404-Seite, die durch eine einfache Suche vermieden werden könnte. Dadurch ist eine unüberprüfte URL eine schlechtere Wahl als ihr vollständiges Auslassen.
Agenten behaupten gerne eine Überprüfung, die sie nie durchgeführt haben, denn eine glaubwürdige Behauptung und eine tatsächlich durchgeführte Überprüfung erscheinen in der Zusammenfassung gleich. Für jede wichtige Prüfung soll die konkrete physische Aktion genannt werden, die als Durchführung gilt.
Eine Aufgabe pro Agent – und die Gewohnheiten, die die Dateien vergrößern
Die besten Unteragenten haben nur eine einzige Aufgabe. Hier werdet ihr wahrscheinlich Einwände erheben, denn die oben zitierten Dateien sind nicht klein, und die Forschungsagenten umfassen bis zu 188 Zeilen. Der entscheidende Unterschied: Die Aufgabe blieb dabei immer eine einzige Aussage, während die Datei an Größe zunahm. Was sich ansammelte, waren Einschränkungen, Erkennungsregeln sowie Ausgabevorgaben – sozusagen „Narbengewebe“ um ein festes Gerüst –, ohne dass im Laufe eines Jahres eine neue Verantwortung hinzukam. Zeilen, die hinzugefügt wurden, weil etwas kaputtging, bedeuten, dass die Datei ihre Aufgabe erfüllt. Zeilen, die hinzugefügt wurden, um eine neue Art von Arbeit abzudecken, sind lediglich Übergrößerung – und die Lösung besteht darin, den Agenten aufzuteilen, anstatt einfach einen weiteren Abschnitt hinzuzufügen.
Die überdimensionierten Versionen sehen alle gleich aus, und jede von ihnen wurde zu irgendeinem Zeitpunkt veröffentlicht. Es gibt den „Everything-Reviewer“, der durchschnittliche Werte aus fünf Kriterien berechnet, in keinem davon jedoch hervorsticht. Es gibt das Etikett „Senior Engineer“, hinter dem sich jedoch kein konkretes Verhalten verbirgt. Es gibt den Agenten, der Ihren CLAUDE.md neu formuliert, dabei jedoch Kosten statt konkreter Funktionalitäten hinzufügt, sowie den Agenten, der eine Fähigkeit dupliziert, bis sich die beiden voneinander entfernen. Alle teilen denselben grundlegenden Fehler: eine Aufgabe, die zu umfangreich für einen Satz wurde.
Die offensichtliche nächste Frage ist, was nach einem Jahr so etwas tatsächlich noch übrig bleibt.
Die beiden, die überlebt haben
Die meisten Beiträge zum Thema liefern Ihnen ein Organigramm von Agententypen, die Sie erstellen sollen. Die tatsächlichen Überreste nach einem Jahr sind jedoch nur zwei Agenten – und das ist’s auch schon.
Eine Offenlegung, da die eigene Regel des Artikels darauf anwendbar ist: Der Web-Suchagent entstand als Ableitung eines Open-Source-Projekts für tiefgehende Forschungsfähigkeiten. Das Skelett des Ausgabevertrags – also die Zusammenfassungsteile sowie die stets erforderliche Quellenliste – stammt nahezu wortwörtlich aus der ursprünglichen Quelle. Die darauf aufgesetzte Steuerungsstruktur, die Budgets, Sperrungen, das Herkunftsmodell sowie die Eskalationsleiter umfasst, ist eigenständig entwickelt und macht die Hälfte der Zeilenanzahl aus. Alles, was in diesem Artikel zu den „Spuren“ beziehungsweise Einschränkungen gesagt wird, betrifft genau diese Hälfte.
Der Web-Suchagent führt begrenzte Webrecherchen durch und liefert die Ergebnisse zusammen mit ihren Quellen zurück. Er ist derzeit in etwa einem Dutzend Repositories installiert, darunter eine statische Blog-Seite, einige Pipelines sowie Forschungsprojekte. Alle Informationen zu Budgets, Sperrungen und stillen Ersatzlösungen stammen aus der Überarbeitungshistorie dieser einen Datei.
Der Implementierer führt eine vollständig definierte Aufgabenwarteschlange aus, während die Planung an anderer Stelle weitergeht. Vier Projekte verfügen über eine solche. Diese vier lieferten die Lektionen zu Übergabeverträgen, Ausführungszuständen sowie den wirtschaftlichen Aspekten der Delegation.
Der Rest der Inhalte in den Agentenordnern kam zusammen mit Frameworks und fungiert wie eine „Schublade für Unnötiges“ mit besserer Markenpräsentation als eine echte. Die Spezialisten, die als notwendig erachtet wurden – ein Investigator für Flaky-Tests, ein Agent für PR-Arbeit, ein Dokumentenverfasser sowie ein Agent zur Betreuung von Codebasen für aufgegebene Projekte – klangen alle plausibel, doch fast keiner wurde tatsächlich entwickelt. Diejenigen, die übrig blieben, sind nicht unbedingt die nützlichsten. Es handelt sich dabei um Fälle, in denen derselbe spezifische Problembereich immer wieder im falschen Kontext oder bei der falschen Person auftrat.
Überspringen Sie also die Organisationsstruktur. Konzentrieren Sie sich auf die Arbeiten, die Sie lieber woanders ausführen möchten, und speichern Sie diese.
Zuerst das Template, dann die Spezialisierung
Das Muster, das dazu führte, dass die zweiten, dritten und vierten Umsetzer günstig waren, ist folgendes: Der Agent wird aus einem Template generiert und anschließend dort abgewandelt, wo das Projekt abweicht.
Die Planungsfähigkeit liefert ein Umsetzer-Template mit Platzhaltern, und beim Aufbau eines neuen Projekts werden der Agent, das Planungsdokument sowie das Aufgaben-Dokument gemeinsam erstellt. Das Ergebnis ist ein Protokoll: Lesen Sie den Vertrag, nehmen Sie die Elemente in der richtigen Reihenfolge, überspringen Sie alles, was blockiert ist, halten Sie den Ausführungszustand aktuell, bleiben Sie im Rahmen des Auftrags und berichten Sie am Ende. Diese Regeln ändern sich zwischen Projekten nie, da sie die Delegation selbst beschreiben und nichts über Ihren Code aussagen.
Danach entwickelt jede Kopie ihren eigenen Abschnitt für ihre eigene Fehlermöglichkeit, und es ist aufschlussreich, zwei davon nebeneinander zu platzieren. Das Template weist den Agenten an, den Testumfang grün zu halten. Ein Projekt verfügt überhaupt keinen Testumfang – es handelt sich dabei um ein Repository mit Prompten, wobei die einzige ausführbare Datei der Validator ist. Der Implementierer dieses Projekts sagt daher etwas völlig anderes: Das Repository enthält Prompte und Daten statt Code; das Bearbeiten einer Datei bedeutet das Bearbeiten eines Prompts; Formulierung, Reihenfolge und Betonung bilden die Implementierung; eine Überarbeitung, die besser lesbar ist, während eine strenge Einschränkung wegfällt, stellt eine Regression dar, die nicht erkannt wird, da weder Builds noch Tests vorhanden sind.
Die Kopie eines anderen Projekts erhielt die Anweisung, vor dem Programmieren die in PLAN.md aufgeführten Entscheidungen zu prüfen, sowie eine Meldemöglichkeit für alles, was eine Entscheidung durch Opus oder einen Menschen erfordert. Das Protokoll bleibt dasselbe, die Risiken unterscheiden sich jedoch.
Das ist die Aufteilung, die man sich merken sollte. Der wiederverwendbare Teil eines Sub-Agenten ist sein Protokoll, der projektbezogene Teil hingegen seine Fehlermöglichkeiten. Das Protokoll sollte als Vorlage verwendet werden, die Fehlermöglichkeiten müssen von Hand geschrieben werden – versuchen Sie nicht, mit einer einzigen Datei beides abzudecken.
Weisen Sie dem Agenten das Wissen zu und kleben Sie es nicht hinein
Hier treffen Fähigkeiten und Sub-Agenten aufeinander, und die Idee wurde viel konkreter, als davon ein echter Ablauf abhing.
Mein früherer Rat wäre gewesen, die entsprechende Fähigkeit innerhalb des Agentenkörpers zu benennen. Besser funktioniert es jedoch strenger: der Agent liest das Wissen zur Laufzeit ein, bevor er handeln kann, und die Anweisung erklärt den Grund dafür.
Der Forschungsagent kann keine Suche durchführen, bevor er eine in einer Fähigkeit gespeicherte Routentabelle gelesen hat. Die Anweisung ist als verpflichtend gekennzeichnet und besagt: Bevor jede Suche oder Abfrage durchgeführt wird, muss die Tabelle am ersten vorhandenen Pfad darunter gelesen werden; überspringen Sie dies nicht, und leiten Sie nicht aufgrund von Erinnerungen – schließlich ändern sich die Module, während die Anfrage unverändert bleibt: Eines, an das Sie sich erinnern, könnte bereits verschwunden sein, und eines, das Sie benötigen, könnte noch gar nicht existieren.
Diese Bemerkung darüber, dass sich die Liste ändert, während die Anfrage unverändert bleibt, ist der vollständige Grund für dieses Muster. Das Wissen darüber, welche Quellen welche Arten von Fragen beantworten, wie man jede davon abfragt und was als blockiert gilt, ändert sich monatlich, während die Methode konstant bleibt. Wenn man eine Quellenliste in den Agentenkörper einbaut, zwingt jede neue Quelle zu einer Änderung der Anfrage, die sonst unverändert bliebe, wodurch der Agent zuversichtlich auf ein im März gelöschtes Modul weiterleitet.
Zwei Mechanismen waren wichtiger als erwartet.
Kandidaten in Reihenfolge, anstatt eines einzigen Pfads. Der Agent läuft in Projekten, die unterschiedlich strukturiert sind, auf zwei Maschinen unter verschiedenen Benutzernamen, die von verschiedenen Installatoren eingerichtet wurden. Daher listet die Anleitung die Kandidatenorte nacheinander auf und weist an, den ersten verfügbaren zu verwenden, wobei projektbezogene Kopien Vorrang vor benutzerbezogenen haben. Wenn ein einziger Pfad fest codiert wird, funktioniert alles nur auf einer Maschine.
Literale Namen verbinden die Schichten miteinander, und nichts überprüft sie. Das Design setzt sich aus drei Ebenen zusammen: Fähigkeiten koordinieren, ein Agent erledigt die Arbeit, und Datenmodule speichern das Wissen. Es gibt überall keine Importe. Eine Fähigkeit aktiviert den Agenten unter seinem genau registrierten Namen, während der Agent die Module über den Pfad findet. Das verleiht dem Repository seinen gewöhnlichsten und gefährlichsten Satz – eine Erinnerung, den Web-Such-Agenten nicht umzubenennen, da bestehende Nutzer ihn direkt aufrufen.
Der Name eines Agents fungiert als öffentliche API, und kein Tool weist darauf hin: kein Compiler, kein Test, keine Warnung. Ein Umbenennen erscheint wie ein ordentlicher Commit, bricht jedoch alle Aufrufer in jedem Repository, das den Agenten installiert hat, und die Entdeckung erfolgt beim nächsten Mal, wenn Sie eine Suche anfordern und ein Allrounder antwortet.
Wo sich die Dateien befinden: persönlich, projektbezogen, verpackt
Es gibt drei Ebenen, und auf der dritten leben alle echten Agenten.
- Personal (
~/.claude/agents/) dient allgemeinen Spezialisten, die in jedem Projekt benötigt werden. Betrachten Sie es als Werkstatt, in der es in Ordnung ist, Dinge zu zerstören. - Project (
.claude/agents/, kommittiert) ist für Spezialisten, die nur in einer bestimmten Codebasis sinnvoll sind – wie zum Beispiel ein Implementierer, der weiß, dass dieses Projekt keine Tests hat. Wenn Sie es kommittieren, wartet es darauf, dass Sie zurückkehren, selbst vier Monate später, wenn das Projekt Ihnen entfallen ist. - Packaged (von einem Paketmanager installiert und an ein Commit gebunden) macht einen Agenten zu einer Abhängigkeit. Das ist die Ebene, von der niemand weiß, dass sie benötigt wird, bis derselbe Agent in Dutzenden Repositories vorhanden ist und dreizehn Kopien auseinanderdriften.
Die dritte Stufe ändert einige Dinge, und es ist besser, diese im Voraus zu kennen.
Bündeln Sie den Agenten mit den Fähigkeiten, die ihn aufrufen. Das Paket enthält beides als eine Einheit – aus einem einfachen Grund: Fähigkeiten, die ohne ihre Agenten installiert werden, erzeugen eine Pipeline, die bereits beim ersten Gebrauch fehlschlägt. Eine Fähigkeit, die per Name auf einen fehlenden Agenten verweist, ist eine fehlerhafte Installation, bei der bestenfalls eine klare Fehlermeldung angezeigt wird. Sie bilden eine Einheit, weil es sich um einen einzigen Vertrag handelt.
Erfahren Sie, was Ihr Installer mit Dateien macht. Dieses Paket wird über Microsofts APM installiert, wodurch jede .md-Datei innerhalb eines agents/-Verzeichnisses in einen eigenen obersten Agenten umgewandelt wird. Diese Standardkonfiguration ist sinnvoll, führt aber dennoch zu Problemen. Legen Sie eine Datendatei in dieses Verzeichnis, erhält jedes Verbrauchsprojekt einen falschen registrierten Agenten. Schreiben Sie hingegen einen projektbezogenen Agenten dorthin, installiert er sich in den Repositorien aller Nutzer. Aus diesem Grund befinden sich die Suchstrategiemodule unter skills/ und nicht im agents/-Ordner, wo sie eigentlich hingehören würden: Unter agents/ würden sie bei der Installation ihre Struktur verlieren und für jedes Verbrauchsprojekt fünf phantomhafte Agenten registrieren.
Markieren Sie einen Commit – und denken Sie daran, dass die Nutzer hinterherhinken. Die Nutzer sind von einem SHA abhängig, daher ist eine Korrektur für niemanden verfügbar, solange der Pin nicht geändert und die Installation nicht erneut ausgeführt wird. Eine Korrektur zu schreiben bedeutet noch nicht, dass sie tatsächlich bereitgestellt wird. Das klingt auf der Seite offensichtlich – ist aber um 23 Uhr, wenn der letzte Woche behobene Fehler wieder auftaucht, alles andere als das.
Trotzdem: Pflegen Sie die Strukturen. Ein Ordner, der mit überschneidenden, halb vergessenen Agenten vollgestopft ist, erzeugt nur Lärm statt nützlicher Tools. Führen Sie zwei Agenten zusammen, die zur gleichen Aufgabe gehören. Löschen Sie einen, der seit Monaten nicht mehr ausgeführt wurde – schließlich behält git die Historie bei, falls das Löschen falsch ist. Das ist auch gutes Lebensrat, wird aber bei dem eigentlichen „Müllschrank“ zu Hause ignoriert.
Dieselbe Idee in anderen Tools
Claude Code ist nicht die einzige Plattform für dieses Konzept. Wenn Sie zwischen verschiedenen Tools wechseln, übertragen sich die Ideen sogar dann, wenn die Dateiformate nicht kompatibel sind.
GitHub Copilot und VS Code bezeichnen diese als Custom Agents, die als .agent.md-Dateien gespeichert werden, in der Regel unter .github/agents/, wobei es auch die Möglichkeit gibt, eine persönliche Bibliothek im Benutzerverzeichnis zu nutzen. Der Frontmatter enthält mehr Felder als bei Claude: Neben name, description und tools gibt es außerdem argument-hint, model, user-invocable, disable-model-invocation sowie, was am besten ist, handoffs. Ein fertiger Agent kann einen Button anzeigen, der die Aufgabe an einen anderen Agent weiterleitet, wobei der nächste Prompt bereits vorgefüllt ist – so werden Planung, Umsetzung und Überprüfung nahtlos miteinander verbunden, ohne dass alles in einem unübersichtlichen Agent zusammenfällt. Eine Falle, wenn man ältere Beispiele liest: Das frühere Feld infer wurde in zwei separate Felder, user-invocable und disable-model-invocation, aufgeteilt – eine Änderung, die im Nachhinein übersichtlich ist, anfangs aber verwirrend wirkt.
Eine weitere Behauptung, auf die man stößt, ist, dass VS Code .claude/agents/-Dateien erkennt und Toolnamen übersetzt, sodass ein Agent beide Tools kostenlos bereitstellt. Das stimmt zwar, kann aber in die Irre führen. Die Tool-Vokabulare stimmen nicht überein, und eine Anfrage, die Tools nach Namen ausschließt – wie es jeder ausgereifte Agent hier tut – bleibt durch die automatische Übersetzung unverändert erhalten.
Stattdessen wird eine kanonische Anfrage zusammen mit einem einfachen, nativen Wrapper für jedes Tool bereitgestellt. Der gesamte Copilot-Agent im Paket umfasst elf Zeilen:
---
name: Web Research Writer
description: "Use for bounded web research that must read a local schema, search and fetch current sources, write one designated result file, and validate it with a local command."
tools: [read, search, web, edit, execute]
user-invocable: false
disable-model-invocation: false
---
Load the installed canonical research prompt from the first existing candidate:
1. `.github/agents/web-search-agent.agent.md`
2. `.claude/agents/web-search-agent.md`
Follow its search budgets, module routing, source standards, tool discipline, output, and validation rules. Ignore that file's incompatible `tools` frontmatter; this wrapper's Copilot-native tool categories govern this session.
Das ist das gesamte Muster. Das native Frontmatter ermöglicht es dem Host, den Agenten ordnungsgemäß zu registrieren, eine Hierarchie von Pfaden führt zum eigentlichen Prompt, und ein einfacher Satz legt fest, welches Tool-Wortschatz Vorrang hat. Alle 188 Zeilen des angesammelten Verhaltens befinden sich in einer einzigen Datei, und das zweite Tool erhält einen Zeiger statt eine Kopie. Zwei Kopien eines Prompts ergeben zwei separate Prompts – und an dem Tag, an dem einer einen Fehlerbehebungs-Update erhält, während der andere nicht, beginnen sie, sich als ein einziger Agent auszugeben.
Die README des Projekts weist auf ein Problem hin. Wenn der Loader auf .github/agents/ ausgerichtet ist, wird der kanonische Prompt als eigenständiger Agent registriert, wodurch Copilot doppelte Namen anzeigen kann: die „Web Research Writer“-Shim und darunter die kanonische Datei. Wählen Sie für jedes Tool einen einzigen Speicherort oder behalten Sie die kanonische Datei unter .claude/agents/, wo Copilots Automatisierter Erkennungsalgorithmus sie ignoriert.
Alles andere, einschließlich Cursor und Windsurf, wird unter Bezeichnungen wie Regeln, Modi oder Agenten auf dasselbe Ziel hingeführt. Die Details ändern sich häufig genug, sodass es besser ist, Sie zur aktuellen Dokumentation des jeweiligen Tools zu leiten, anstatt mit Sicherheit zu behaupten, was sich im letzten Monat geändert hat. Die grundlegende Vorgehensweise bleibt unverändert: eine wiederverwendbare Datei, die eine Rolle definiert und absichtlich aufgerufen wird. Lernen Sie das einmal, und dann bleibt nur noch herauszufinden, wo jedes Tool seine Dateiordner versteckt.
Wie wirklich gute Lösungen entwickelt werden
Jeder hier genannte Unteragent begann zu weit gefasst. Es gab einen „Überprüfer“, der alles überprüfte, einen „Planer“, der keine Meinung dazu hatte, wie ein Plan aussehen sollte, sowie einen „Ermittler“, der jeden Fehler genauso behandelte wie den vorherigen. Das ist kein Versagen – es ist der Ausgangspunkt.
Der nützliche Teil, der vor einem Jahr geholfen hätte, ist nicht „iterieren“. Jeder sagt, man solle iterieren – doch genau das bilden die Iterationen aus.
Lesen Sie die oben zitierten Agentendateien erneut und achten Sie darauf, wo die jeweiligen Abschnitte stehen: Ein Absatz für die Rolle, eine Seite mit Einschränkungen, ein Schema mit aufgelisteten Schlüsselnamen, eine mechanische Regel zur Erkennung, ein numerischer Budgetrahmen mit einer Klausel gegen Manipulation, eine Anmerkung, dass bezahlte Aufforderungen offengelegt werden müssen, sowie ein Verbot, das erklärt, was der Installer mit abweichenden Fällen macht. Fast alles davon dokumentiert etwas Bestimmtes, das zu irgendeinem Zeitpunkt schiefgelaufen ist.
Nach einem enttäuschenden Verlauf ist die wichtige Frage also nicht, wie die Rolle besser formuliert werden kann. Man sollte fragen, was genau der Agent getan hat, welcher Teil der Datei dies ermöglicht hat und welche Regeln es beim nächsten Mal ausschließen werden. Hundert Browsertabellen. Zehn Ergebnisse außerhalb des Domains ohne Fehler. Eine Anweisung, für die es keinen Platz für die Antwort gab. Eine Verifizierung, die angefordert, aber nie durchgeführt wurde. Jeder dieser Punkte wird zu einer Zeile, und diese Zeile überdauert die Sitzung, die sie erzeugt hat – genau das ist der Sinn dahinter, sie in einer Datei zu speichern.
Derselbe Test gilt vor der Beibehaltung eines Agents wie vor der Beibehaltung einer Fähigkeit: Kann seine Aufgabe in einem Satz formuliert werden? Wenn nicht, ist sie zu allgemein, und zwei kleinere Agents befinden sich in einem einzigen „Trenchcoat“. Um zu beurteilen, ob er tatsächlich gut ist, braucht man einen anderen Test: Wenn er Fehler macht, kann man dann auf die Zeile zeigen, die dazu geführt hat? Wenn nicht, gibt es noch keinen Spezialisten, nur eine mit Metadaten versehene Struktur.
Wenn Sie sie kombinieren, müssen Sie nicht immer wieder denselben äußerst fähigen Generalisten um Hilfe bitten. Sie behalten eine kleine Gruppe von Spezialisten, die Ihre Welt sowie ihre eigenen Aufgaben bereits verstehen. Für jemanden, der mehr erreichen möchte, als es vernünftigerweise eine einzelne Person schaffen könnte, ist das das Beste, was man ohne eigentliche Einstellung von Hilfe erreichen kann.
Betrachten Sie die Aufgaben, die Sie gerne woanders erledigt sehen würden – das sind Subagenten, die noch darauf warten, gespeichert zu werden. Und das letzte Mal, als ein Subagent Sie enttäuschte, war das eine Zeile, die noch geschrieben werden musste.
Verwandte Artikel
- Praktische Notizen: Ein Schritt-für-Schritt-Leitfaden zur Entwicklung Ihres persönlichen Agentic — Ausführliche Anleitung zu den Praktischen Notizen: Ein Schritt-für-Schritt-Leitfaden zur Entwicklung Ihres persönlichen Agentic: Verträge, Überprüfungen sowie Code-Blöcke für Teams, die dieses Muster einsetzen.
- Praktische Notizen: Qwen3.8–27B als neuer bevorzugter Codier-Agent mit SGLang/vLLM und — Ausführliche Anleitung zu den Praktischen Notizen: Qwen3.8–27B als neuer bevorzugter Codier-Agent mit SGLang/vLLM und: Verträge, Überprüfungen sowie Code-Blöcke für Teams, die dieses Muster einsetzen.