Communitygithub.com

oubakiou/delegate-skills

delegate-skills — Implementierungs-/Recherche-/Git-Aufgaben an günstigere Modelle auslagern. Das dateibasierte md2idx-Protokoll hält den Kontext des Hauptagenten schlank.

Was ist delegate-skills?

Dieses Skill delegiert aufwändige Implementierungs-, Recherche- und Git-Aufgaben an günstigere Modelle (Standard: Haiku), um teure Hauptagenten-Kontexte zu entlasten. Es unterstützt die Plattformen Claude Code und Codex und verwendet ein dateibasiertes md2idx-Protokoll zur Kommunikation. Das Skill analysiert die Kosten, validiert die Sinnhaftigkeit der Delegation (bei einfachen Shell-Befehlen lohnt sie sich oft nicht) und führt den Delegationsprozess in drei Phasen durch: Vorbereitung (Prüfung, Modellauswahl), Dispatch (Modellaufruf mit Ausführungszweig – Codex/Devin/Cursor/Claude) und Antwortkonsum (gestaffeltes Lesen per read-response.sh). Für wiederkehrende Aufgaben schlägt es die Erstellung dedizierter Sub-Skills oder die Automatisierung deterministischer Prozesse vor. Es bietet außerdem Mechanismen für wiederaufnehmbare und Follow-up-Sitzungen sowie Hintergrundausführung zur Verbesserung der Benutzererfahrung. Wichtigste Einschränkung: Der Hauptagent editiert, pushed aber nie – das bleibt dem übergeordneten Agenten vorbehalten.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor
npx skills add oubakiou/delegate-skills

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

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)

  1. 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.
  2. 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_CHAIN leer 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. Positionsargument session_mode von 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 Code BASH_DEFAULT_TIMEOUT_MS / BASH_MAX_TIMEOUT_MS oder das timeout-Argument des Bash-Tools).
  3. 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. Ist content_truncated true, dann response_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)" extrahieren und mit bash .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.

  1. 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_CHAIN leer 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)"
  2. 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 Code BASH_DEFAULT_TIMEOUT_MS / BASH_MAX_TIMEOUT_MS oder das timeout-Argument des Bash-Tools). Bei laufender normaler Überwachung nur state.phase / state.started_at / heartbeat.ts / heartbeat.stdout_bytes / heartbeat.stderr_bytes / heartbeat.last_stream_change_at aus der observe_file mit read-json.sh lesen. state.phase kann prepared | running | superseded | stalled | ended sein. prepared / superseded sind nicht-dispatchende observe ( state.started_at == null, usage ist nicht gesetzt und entspricht in read-json.sh null). Daher bei der Aggregation von usage aus dem Nenner ausschließen.
  3. Response lesen: bash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" auto. auto liest 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.sh ist resumable. dispatch übergibt als 7. Argument resumable und 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 nicht resumable, 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.sh ist followup=<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 diff und einen Verweis auf die vorherige response_file enthalten. 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)

Verwandte Skills