delegate-chore
Rückfallziel für Routineaufgaben. task_type=chore, Standardmodell haiku (günstigstes). Die Ausführungszweige (Codex / Devin / Cursor / Claude) werden von dispatch.sh übernommen.
Skriptpfade
- Claude Code:
skill_dir=.claude/skills/delegate-chore - Codex:
skill_dir=.agents/skills/delegate-chore
Die folgenden Befehlsbeispiele verwenden .claude/skills/delegate-chore für Claude Code. Bei Verwendung mit Codex ist die entsprechende relative Struktur .agents/skills/delegate-chore zu verwenden.
Referenz der Modellpreise
Nur bei Bedarf an Kostenanalyse oder Preisvergleich die Datei <skill_dir>/model-token-prices.json lesen. Diese Daten dienen nur als Referenz und werden nicht zur Entscheidung über die Delegationsausführung herangezogen.
Vor der Delegation (Kostenschranke)
Delegation verursacht Overhead (Worker-Start, Request/Response-Roundtrip, Lesen im Hauptkontext). Wenn diese Aufgabe mit einem einzelnen Befehl (sed / find / chmod usw.) skriptbar ist und der Inhalt nicht in den Modellkontext geladen werden muss, ist Delegation reiner Verlust (der Overhead übersteigt den Nutzen in Bezug auf Kontexthygiene und Token). In diesem Fall nicht delegieren, sondern der Hauptagent führt direkt aus, oder bei Wiederholung den Vorschlag zur Automatisierung (Feedbackschleife) einleiten. Delegation lohnt sich nur bei umfangreichen Arbeiten, bei denen der Inhalt vom Modell gelesen und verarbeitet werden muss. Begründung siehe docs/design/delegate-chore.md §5.
Ausführungsablauf (One-Shot)
- Request-Erstellung: Markdown mit Objective / Scope / Context / Acceptance criteria / Verification / Constraints per stdin übergeben. Request kurz halten: Context enthält keine Dateiinhalte, sondern nur Pfade (ggf. mit Zeilenbereichen) zur Referenz (um den Output des Hauptagenten = abrechenbare Token nicht zu erhöhen).
- Wenn der Benutzer im Gespräch ein Modell oder einen Effort vorgibt, dem run-Aufruf Inline-Env voranstellen (z. B.
DELEGATE_CHORE_MODEL=gpt-5.5@high bash .../run.sh ...). Bei exit 6 die einzelne Zeile von stderr mit der Aufzählung der zulässigen Werte unverändert als Erklärung für den Benutzer verwenden.
- Wenn der Benutzer im Gespräch ein Modell oder einen Effort vorgibt, dem run-Aufruf Inline-Env voranstellen (z. B.
- Ausführung:
out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/run.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID")"(bei Top-Level-Start kann$PARENT_TASK_TYPE_CHAINleer sein).- run führt intern prepare → dispatch → read-response nacheinander aus. stdout ist bei Erfolg und Misserfolg ein einzelnes JSON (
exit_code/status/content/content_truncated/response_file/observe_file/run_dir). - Standard bei fehlendem Selektor ist
auto. Das 6. Positionsargument ist der read-response-Selektor und hat eine andere Bedeutung als das 6. Positionsargumentsession_modevon prepare.sh. - Der Exit-Code wird von den internen Skripten durchgereicht. exit 3 = unzureichende Voraussetzungen / exit 4 = Delegationszyklus, dann abbrechen.
- run gibt vor dispatch
observe_file: <path>frühzeitig auf stderr aus. Bei erzwungenem Abbruch dient dieser Pfad als Wiederherstellungsweg. - Bei nicht-interaktiven Eltern (z. B.
claude -p) run zwingend im Vordergrund ausführen und einen Bash-Timeout setzen, der länger als die voraussichtliche Delegationsdauer ist (bei Claude CodeBASH_DEFAULT_TIMEOUT_MS/BASH_MAX_TIMEOUT_MSoder das timeout-Argument des Bash-Tools).
- run führt intern prepare → dispatch → read-response nacheinander aus. stdout ist bei Erfolg und Misserfolg ein einzelnes JSON (
- Response konsumieren:
status="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .status)"/content="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .content)"lesen. Istcontent_truncatedtrue, dannresponse_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)"extrahieren und mitbash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" <N>nur die benötigten Abschnitte stufenweise lesen. Nach dem Lesen den Worker-Text nicht zusammenfassen (nicht echoen). Die Antwort des Hauptagenten an den Benutzer auf eine einzelne Zeile beschränken, die auf die Summary verweist (um den Output des Hauptagenten = abrechenbare Token nicht zu erhöhen. spec.md §6).
Erweiterter Ablauf (Einzelskripte)
Für Abläufe, die während des Dispatch eine Überwachung des observe, Hintergrundausführung, Wiederaufnahme / Follow-up erfordern und bei denen der Hauptagent zwischendurch Entscheidungen trifft, die alten Einzelskripte verwenden.
- Vorbereitung (gebündelt): Voraussetzungsprüfung → Modellauflösung → Kettenprüfung → Request-Generierung in einem einzigen
prepare.sh-Aufruf bündeln (Reduzierung der Bash-Roundtrips und des Outputs in den Hauptkontext). Markdown mit Objective / Scope / Context / Acceptance criteria / Verification / Constraints per stdin übergeben. Request kurz halten: Context enthält keine Dateiinhalte, sondern nur Pfade (ggf. mit Zeilenbereichen) zur Referenz (um den Output des Hauptagenten = abrechenbare Token nicht zu erhöhen). exit 3 = unzureichende Voraussetzungen / exit 4 = Delegationszyklus, dann abbrechen.- Wenn der Benutzer im Gespräch ein Modell oder einen Effort vorgibt, dem prepare-Aufruf Inline-Env voranstellen (z. B.
DELEGATE_CHORE_MODEL=gpt-5.5@high bash .../prepare.sh ...). Bei exit 6 die einzelne Zeile von stderr mit der Aufzählung der zulässigen Werte unverändert als Erklärung für den Benutzer verwenden. out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID")"(bei Top-Level-Start kann$PARENT_TASK_TYPE_CHAINleer sein)model="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .model)"/request_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .request_file)"/response_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)"/run_dir="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .run_dir)"/observe_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .observe_file)"
- Wenn der Benutzer im Gespräch ein Modell oder einen Effort vorgibt, dem prepare-Aufruf Inline-Env voranstellen (z. B.
- Ausführung:
bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file". Die Verzweigung der Ausführungssysteme (Codex / Devin / Cursor / Claude) anhand des Modellnamenpräfixes wird von dispatch.sh durchgeführt. stdout ist nur der Pfad der response_file. Bei nicht-interaktiven Eltern (z. B.claude -p) dispatch zwingend im Vordergrund ausführen und einen Bash-Timeout setzen, der länger als die voraussichtliche Delegationsdauer ist (bei Claude CodeBASH_DEFAULT_TIMEOUT_MS/BASH_MAX_TIMEOUT_MSoder das timeout-Argument des Bash-Tools). Bei laufender normaler Überwachung nurstate.phase/state.started_at/heartbeat.ts/heartbeat.stdout_bytes/heartbeat.stderr_bytes/heartbeat.last_stream_change_ataus derobserve_filemit read-json.sh lesen.state.phasekannprepared | running | superseded | stalled | endedsein.prepared/supersededsind nicht-dispatchende observe (state.started_at == null,usageist nicht gesetzt und entspricht in read-json.sh null). Daher bei der Aggregation von usage aus dem Nenner ausschließen. - Response lesen:
bash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" auto.autoliest bei kleinen Responses (Standard <10KB) Status und alle Abschnitte auf einmal. Bei großen Responses wird Status + Index + Summary-Abschnitt zurückgegeben, sodass nur die benötigten Abschnitte mit... "$response_file" <N>nachgeladen werden. Nach dem Lesen den Worker-Text nicht zusammenfassen (nicht echoen). Die Antwort des Hauptagenten an den Benutzer auf eine einzelne Zeile beschränken, die auf die Summary verweist (um den Output des Hauptagenten = abrechenbare Token nicht zu erhöhen. spec.md §6).
Sitzungswiederverwendung (resumable / follow-up)
Resumable / Follow-up sind nicht für One-Shot vorgesehen, daher Einzelskripte verwenden.
Standard ist der normale Run. Nur bei größeren Änderungen, bei denen eine Rückweisung durch den Hauptagenten wahrscheinlich ist, bereits beim ersten Mal explizit einen resumable initial run angeben. Nicht übermäßig verwenden.
- Resumable initial run: Das 6. Argument von
prepare.shistresumable. dispatch übergibt als 7. Argumentresumableund als 8. und 9. Argument leere Zeichenketten.out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID" resumable)"session_mode="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .session_mode)"/lineage_id="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .lineage_id)"bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file" "$session_mode" "" ""- Nach dem Konsum der Response
bash .claude/skills/delegate-chore/scripts/read-json.sh .backend_session.persistence "$observe_file"prüfen. Ist es nichtresumable, ist kein Follow-up möglich; dann sofort entscheiden und kein implizites Fallback erwarten.
- Follow-up run: Nur verwenden, wenn der Hauptagent bei der Differenzprüfung Fehler findet. Das 6. Argument von
prepare.shistfollowup=<vorherige_observe_file>. exit 5 = Validierung fehlgeschlagen, daher abbrechen und als normalen delegate neu ausgeben. Kein implizites Fallback.out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID" "followup=$previous_observe_file")"session_mode="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .session_mode)"/resume_id="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .resume_id)"/backend_session_home="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .backend_session_home)"bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file" "$session_mode" "$resume_id" "$backend_session_home"- Der Follow-up-Request muss zwingend die vom Hauptagenten gefundenen Fehler, den relevanten Bereich des aktuellen
git diffund einen Verweis auf die vorherigeresponse_fileenthalten. Nicht nur auf den alten Gesprächskontext des Workers verlassen.
Skill-Aufwertungsvorschlag (Feedbackschleife)
Aufgaben, die durch delegate-chore laufen, sind ein Signal für „Arbeiten ohne spezifisches Skill“. Nach dem Konsum der Response prüfen, ob die Arbeit
- wiederholt auftritt / eine klar abgegrenzte, wiederverwendbare Kategorie ist
Wenn ja, dem Benutzer mit AskUserQuestion die Erstellung eines neuen dedizierten delegate-<name>-Skills vorschlagen (mit vorgeschlagenem Namen, Standardmodell, Tool-Berechtigungen und Starttyp). Nach Zustimmung mit skill-creator eine Vorlage erstellen und an dieses Protokoll anpassen. Keine Vorschläge für einmalige, unbedeutende Aufgaben machen.
Automatisierungsvorschlag für deterministische Prozesse
Im gleichen Geist wie der Skill-Aufwertungsvorschlag: Wenn dieselben mehrstufigen Befehlsketten, Prüfverfahren oder Standardbearbeitungen wiederholt auftreten und die Verzweigung fest vorgegeben ist, sodass keine LLM-Entscheidung erforderlich ist, mit AskUserQuestion eine geeignete Automatisierung vorschlagen (Skript / git hook / npm script / CI usw.), unter Angabe der betroffenen Schritte, des Automatisierungsziels und des erwarteten Triggers. Keine Vorschläge für einmalige Schritte oder solche, die Entscheidungen erfordern, machen.
Verstecken der Wartezeit (für interaktive Eltern)
Bei interaktiven Eltern kann dispatch.sh (oder run.sh) im Hintergrund ausgeführt werden, während observe_file auf state.phase / heartbeat überwacht wird, und nach ended read-response.sh aufgerufen wird, um die gefühlte Wartezeit zu verstecken. Die Gesamtzeit (Wall Time) ändert sich nicht, es ist eine Verbesserung des subjektiven Empfindens. Bei nicht-interaktiven Eltern ist weiterhin die Vordergrundausführung zwingend erforderlich.
Einschränkungen
- Bearbeitung ist erlaubt. Aber kein Push (Push / PR werden direkt vom übergeordneten Agenten behandelt)
- Keine erneute Delegation an Typen innerhalb der task_type_chain (Delegation an andere Typen ist erlaubt)
- Der Hauptagent echot / fasst die Worker-Ausgabe nicht zusammen. Die Antwort an den Benutzer beschränkt sich auf eine einzelne Zeile, die auf die Summary verweist (den Output = abrechenbare Token nicht erhöhen. spec.md §6)