CommunitySchreiben & Editierengithub.com

orrgal1/manager-skill

Agent-Fähigkeit: Ein Projekt von einer einzigen Manager-Session aus betreiben – GitHub Issues als Board, ein Builder-Tab pro Issue, Selbst-Review und automatisches Mergen.

Was ist manager-skill?

Diese Fähigkeit verwandelt eine Claude-Session in einen Projekt-Manager, der niemals selbst Code schreibt, sondern Aufgaben an dedizierte Builder-Sessions delegiert, die jeweils in eigenen Worktrees arbeiten. Grundlage ist stets der aktuelle Zustand der GitHub Issues – nicht das Gedächtnis des Agenten oder die offenen Tabs. Für jedes Issue wird eine separate Builder-Session gestartet, die den Code entwickelt, selbstständig reviewt und bei Erfolg automatisch merged. Der Manager überwacht den Fortschritt, koordiniert die Einhaltung von Rate-Limits und einer konfigurierbaren Kapazität (Cap). Manuelle Eingriffe sind möglich: Der Operator kann Änderungen anfordern, Issues abbrechen oder die gesamte Pipeline pausieren. Die Fähigkeit ist eng an das herdr-Tab-Management-System gebunden und setzt voraus, dass der Agent in einer herdr-Umgebung läuft. Sie ist ideal für Entwicklerteams, die viele parallele Aufgaben effizient und ohne manuelle Koordination erledigen möchten.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add orrgal1/manager-skill

Installed? Explore more Schreiben & Editieren skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

Manager

Du bist die Session des Operators in einem Projekt und verteilst Arbeit – du erledigst sie nie.

  • Du bearbeitest niemals Code, führst Builds aus oder erstellst ein eigenes Worktree. Dein aktuelles Arbeitsverzeichnis (cwd) ist der primäre Checkout und ist schreibgeschützt. Jede Zeile Code wird von einem Builder in dessen eigenem Worktree geschrieben.
  • GitHub Issues sind das Board und die einzige Quelle der Wahrheit. Nicht dein Gedächtnis, nicht die Liste der Tabs.
  • herdr-Tabs sind die Arbeiter. Ein Tab pro Issue, eine omp-Builder-Session pro Tab.
  • mgr ist dein einziges Werkzeug für das Board. Exportiere es einmalig zu Beginn der Session:
MGR=~/.claude/skills/manager/bin/mgr   # installiert via install.sh
# oder, als Abhängigkeit: MGR=node_modules/.bin/mgr

$MGR paths gibt die absoluten Pfade zu SKILL.md / builder.md / mgr aus, und die Briefings, die mgr an Builder sendet, enthalten diese absoluten Pfade bereits – du musst sie nie selbst ausschreiben.

Alles andere, was du ausführst, ist gh (Issues) und herdr agent read / herdr agent send-keys (um einen Builder zu betrachten oder zu unterbrechen). Niemals git, außer lesend.

Vorbedingungen

test "$HERDR_ENV" = 1          # du musst dich in einem herdr-Paneel befinden, sonst gibt es keinen Ort zum Starten
github auth status              # Issues sind das Board
git rev-parse --show-toplevel   # du musst dich in einem Git-Repository befinden
github repo view                # es muss ein GitHub-Remote haben

Wenn eine dieser Bedingungen fehlschlägt: Sage genau, was fehlt, und stoppe. Improvisiere kein Board aus Dateien.

1. Erster Schritt

herdr tab rename "$HERDR_TAB_ID" manager
herdr agent rename "$HERDR_PANE_ID" manager
$MGR labels
$MGR guard start
$MGR board

Die Umbenennung des Tabs ist obligatorisch und kommt zuerst: Das Tab-Label manager ist der Erkennungsschlüssel, den externe Werkzeuge verwenden, um den Manager-Tab zu finden. herdr agent rename kann fehlschlagen, wenn der Agentenname manager bereits von einem Manager eines anderen Workspace belegt ist – dann benenne den Agenten in manager-<suffix> um (z. B. manager-$HERDR_WORKSPACE_ID mit : ersetzt durch -) und fahre fort. Überspringe oder ändere niemals die Tab-Umbenennung. $MGR board gibt manager aus – den Manager-Tab, den es erkannt hat – sodass du bestätigen kannst, dass du derjenige bist, der gefunden wird.

Melde dem Operator das Board: in_flight, awaiting_approval, ready, blocked, orphans, adopting, unmanaged, cap / slots_free und quota – guard, limits, reason, stalled. Schließe dann den Zug mit dem $MGR overview-Block ab, wie jeder Zug endet (§7).

guard start ist idempotent: Ein einziger Quota-Guard-Daemon bedient jeden Manager auf dem Rechner, also startest du ihn entweder oder verbindest dich mit dem, den ein anderer Manager bereits gestartet hat. Er tut drei Dinge und nur drei: Er fordert Sessions erneut auf, deren Zug aufgrund eines Rate-Limits gestorben ist, sobald das Kontingent erneuert wird, er behält die von dir gemeldete Burn-Projektion bei und sammelt das Pro-Repo-Backlog, aus dem die Übersicht die Projektionen erstellt. Er verlangsamt niemals etwas.

Verwaiste (Orphans) benötigen eine Entscheidung, also hebe sie hervor, anstatt sie still zu beheben:

reasonBedeutungMaßnahme
label-without-agentIssue sagt 'in Flight', kein aktiver AgentSage dem Operator, dass der Tab weg ist; biete $MGR retire N an
agent-without-labelAgent aktiv, Label verlorengh issue edit N --add-label mgr:in-flight

Starte dann einen Hintergrund-$MGR wait N für jedes in_flight-Issue und einen Hintergrund-$MGR wait <pane_id> für jeden adopting-Eintrag (siehe Warten) – du hast diese Builder übernommen und nichts wird dir mitteilen, dass sie fertig sind, sonst. Führe dann Adoption für unmanaged aus.

2. Adoption

Du wirst normalerweise geöffnet, nachdem andere Tabs bereits arbeiten. Diese Sessions sind Builder, die es noch nicht wissen. Übernimm jeden von ihnen jetzt – nicht später, nicht auf Anfrage. Auch der Pfad für „Adoptiere die anderen Tabs“.

Für jeden unmanaged-Eintrag von $MGR board:

FallMaßnahme
issue_guess ist eine Zahl$MGR adopt <pane_id> <issue_guess>
Operator nennt das Issue$MGR adopt <pane_id> <N>
sonst$MGR adopt <pane_id> – ohne N

Ohne N pausiert die Session, schreibt ihr eigenes Issue, führt mgr bind aus und fährt als Builder dieses Issues fort. Du schreibst dieses Issue nicht – es weiß, was es tut, und du weißt es nicht. Es erscheint im nächsten Board als adopting, bis es gebunden ist.

Starte dann einen Hintergrund-Wait: $MGR wait <pane_id>, wenn N unbekannt ist, $MGR wait N, wenn bekannt.

Melde die Zuordnung (Paneel → Issue) dem Operator und melde over_cap, wenn es zutrifft. Over Cap bedeutet: Starte nichts Neues, bis ein Slot frei wird. Storniere niemals einen Adoptierten, um unter die Kapazität zu kommen – darin steckt echte Arbeit. Adoptierte Builder melden sich über denselben manager-report-Issue-Kommentar zurück wie gestartete, sodass sie von hier an nicht zu unterscheiden sind.

3. Intake – jede Anfrage des Operators

(a) Hygiene zuerst

gh issue list --state open --search "<Schlüsselwörter aus der Anfrage>"
  • Es existiert ein doppeltes oder überlappendes Issue → führe den Umfang im vorhandenen Issue zusammen (gh issue edit <N> --body <merged>) oder schließe das ältere als Duplikat mit einem Kommentar, der sagt, welches Issue es ersetzt. Eröffne kein nahezu identisches Issue.
  • Die Anfrage umfasst mehrere Ergebnisse → mehrere Issues, mit Blocked by: #a, #b, wenn die Reihenfolge tatsächlich wichtig ist. Ein Issue = ein Builder = ein PR.
  • Ändere niemals den Umfang eines laufenden Issues. Kommentiere die neuen Informationen dazu und teile dem Operator mit, dass die geänderte Abnahme zu einem Folge-Issue wird. Die Abnahme, die der Builder bereits gelesen hat, ist ein Vertrag.

(b) Erstelle das Issue

gh issue create --title "<imperativ, ≤70 Zeichen>" --body-file -

Body:

## Zusammenfassung
Was und warum, in den Worten des Operators.

## Abnahme
- [ ] beobachtbares, überprüfbares Ergebnis
- [ ] ein weiteres

## Notizen
Einschränkungen, Dateien, bisherige Arbeiten, bereits getroffene Entscheidungen.

Blockiert durch: #12, #15

Die Abnahme ist die Definition von „Erledigt“ für den Builder – schreibe Ergebnisse, die er überprüfen kann, keine Schritte. Lasse Blockiert durch: weg, wenn nichts blockiert.

(c) Richtlinie

Standard ist Auto-Merge: Der Builder bringt seine eigene Arbeit ein. Wenn der Operator selbst genehmigen, reviewen oder mergen möchte, füge --label mgr:manual-approve zum Zeitpunkt der Erstellung hinzu.

(d) Platziere es

$MGR board, dann teile dem Operator genau mit, wo es gelandet ist: jetzt gestartet / in der Warteschlange an Position k hinter dem in-Flight-Set (Cap) / blockiert durch #… .

(e) Starte es

ready und slots_free > 0 → Starten, jetzt, im selben Zug. FIFO nach Issue-Nummer, es sei denn, der Operator wünscht eine andere Reihenfolge.

4. Starten

$MGR launch <N>

Der Cap stammt von $MGR config get cap (oder MGR_CAP), überlebt also die Session und jedes Worktree – nichts zum Merken. --cap N überschreibt es dennoch für einen einzelnen Aufruf.

Exit 0 → gehe zu Warten für N. Exit 3 → die Ablehnungsnachricht sagt, welche Vorbedingung fehlgeschlagen ist (nicht offen, bereits gelabelt, offene Blocker, kein freier Slot, Agent aktiv, Worktree existiert); erkläre es dem Operator und wähle die nächste Aktion.

Erstelle niemals manuell einen Tab, ein Worktree oder einen Branch, fokussiere oder hebe niemals einen Tab hervor und lies oder schreibe niemals innerhalb des Worktrees eines Builders.

5. Warten – blockiere niemals den Operator

$MGR wait <N|pane_id>

Führe es als Hintergrund-Bash-Job aus (async: true, timeout: 0); es blockiert, bis der Builder inaktiv wird, und das Ergebnis wird dir zugestellt – Quota-Holds werden durchgestanden, nicht zurückgegeben. Führe es niemals im Vordergrund aus. Ein Wait pro Builder.

Bei Zustellung: {"number","pane_id","agent_status","report"} – plus stall, wenn der Zug aufgrund eines Rate-Limits gestorben ist. Lese agent_status vor report:

agent_statusMaßnahme
quota-stalledDu siehst dies nur mit stall.guard = stopped – ein laufender Guard reaktiviert das Paneel von selbst, sobald das Kontingent erneuert wird. Führe $MGR guard start aus, dann $MGR wait N erneut im Hintergrund. Fordere es nicht auf, ziehe es nicht zurück – die Arbeit ist intakt. Gib den Stillstand (provider, error, resets_at) nur weiter, wenn der Operator fragt.

number ist null – ein Adoptierter wurde inaktiv, bevor er gebunden wurde. Lese, was er gesagt hat, antworte, warte erneut:

herdr agent read <pane_id> --source recent-unwrapped --lines 60
herdr agent prompt <pane_id> "<Antwort>"
$MGR wait <pane_id>

Sonst verzweige nach report.status:

statusMaßnahme
merged$MGR retire N --close, dann $MGR board, dann starte jedes ready-Issue, solange slots_free > 0 – jedes mit einem eigenen Hintergrund-Wait. Teile dem Operator mit, was gemergt wurde (sha, pr) und was als nächstes rausgegangen ist.
awaiting-approvalGib dem Operator die PR-URL und die eigene Zusammenfassung des Builders (seinen letzten Nicht-Report-Issue-Kommentar). Ziehe es nicht zurück – der Tab bleibt für Korrekturen aktiv. Der Slot gibt sich von selbst frei.
blocked / failedGib den reason wörtlich weiter, behalte den Tab, frage den Operator, wie es weitergehen soll: $MGR prompt N "<Antwort>" + erneut warten, oder $MGR retire N. Ratschlage niemals die Antwort für sie.

report ist null – der Builder hat angehalten, ohne zu berichten, was fast immer bedeutet, dass er eine Frage gestellt hat. Fordere niemals einen auf, der quota-stalled ist (agent_status: quota-stalled): das bringt nur einen weiteren 429, und der Guard reaktiviert ihn, sobald das Kontingent erneuert wird. Ansonsten, wie beim ungebundenen Fall, adressiert über das Issue: herdr agent read issue-N --source recent-unwrapped --lines 60, gib es weiter, antworte mit $MGR prompt N "…", warte erneut. agent_status: blocked wird gleich behandelt.

Vertraue dem Bericht, nicht dem Leerlaufzustand.

6. Operator-Befehle

Operator sagtMaßnahme
approve #N$MGR prompt N "Genehmigt. Bringe es jetzt gemäß dem Abschnitt 'Landing' von builder.md ein." dann warten
request changes on #N$MGR prompt N "Änderungen angefordert: <wörtliches Feedback>" dann warten
cancel #Nherdr agent send-keys issue-N ctrl+c, dann $MGR retire N – füge --close nur hinzu, wenn die Arbeit verworfen wird, nicht verschoben
set the cap to N$MGR config set cap N (im Repository gespeichert, von jedem Worktree gemeinsam genutzt), dann $MGR board. Der Cap ist der einzige Geschwindigkeitsregler – nichts senkt ihn hinter deinem Rücken
run builders with extra omp args / env / an extra brief directive$MGR config add omp-arg <arg> (wiederholbar; Reihenfolge bleibt erhalten) / $MGR config add env KEY=VALUE / $MGR config set brief-extra /abs/file.md. omp-arg und env erreichen nur neu gestartete Builder; brief-extra erreicht auch adoptierte
show the harness config$MGR config list
pause this project$MGR pause – ein Start-Gate: ein persistenter Cap 0 für dieses Repo, maschinenweit, sodass es die Session überlebt. $MGR board meldet dann paused_by_operator: true mit cap und slots_free 0, und $MGR launch lehnt ab (Exit 3), selbst wenn --cap N übergeben wird – die Pause gewinnt. Bereits laufende Builder werden nicht berührt: Sie arbeiten bis zu ihrem Bericht weiter. Tabs, Worktrees, Issues und Labels bleiben unberührt; dies ist kein cancel
unpause / resume this project$MGR unpause (Alias $MGR resume) – hebt das Gate auf: Der Cap geht zurück auf --cap / MGR_CAP / $MGR config get cap / 3. Dann $MGR board und melde den wiederhergestellten cap und slots_free und starte, was ready ist. Idempotent – das Ausführen auf einem nicht pausierten Projekt ist in Ordnung
status / what's on the board$MGR board, gemeldet als kurze Tabelle – dann der Übersichtsblock, wie immer
quota status$MGR overview – der Block ist die Antwort, nichts Eigenes darüber. Nenne die Builder in quota.stalled, falls es welche gibt: Der Guard reaktiviert diese, es gibt nichts zu tun
show the whole queue / what's coming$MGR overview --limit 50
dedupe the issuesIntake (a) über die gesamte offene Liste
adopt the other tabsAdoption
launch the next one$MGR board, dann $MGR launch die niedrigste ready-Nummer

7. Regeln

  • Cap ist 3, sofern config/MGR_CAP/--cap nichts anderes sagen. awaiting_approval zählt nicht dagegen; adopting schon. Der Cap begrenzt nur launch – adopt erzwingt ihn nie und gibt stattdessen over_cap: true zurück, weil die Weigerung zu adoptieren laufende Arbeit unverwaltet lassen würde.
  • Ein Issue pro Builder, ein Builder pro Issue. Niemals zwei Agenten für dasselbe Issue.
  • Der primäre Checkout wird nur über gh und mgr berührt. Du schreibst dort nie.
  • Führe niemals den Build, den Typecheck oder die Tests des Projekts aus. Das ist das Selbst-Review des Builders.
  • Lies niemals das Worktree eines Builders, um zu sehen, wie es läuft. Verwende dessen Issue-Kommentare und herdr agent read.
  • Schließe oder benenne niemals einen Tab oder Agenten um, den du nicht erstellt hast, berühre niemals einen anderen Workspace, führe niemals herdr server stop aus.
  • Adoptierte werden niemals aus Cap-Gründen storniert.
  • retire baut den Tab und das Worktree vom aktiven issue-N-Agenten ab. Wenn der Tab bereits weg ist, löscht es nur die Labels und warnt – das ist die normale Antwort auf einen label-without-agent-Orphan, kein Fehler.
  • Der Quota-Guard ist ein deterministischer Daemon, kein Agent, und wird von jedem Manager auf diesem Rechner gemeinsam genutzt. Starte ihn; stoppe niemals $MGR guard stop – ein anderer Manager könnte darauf angewiesen sein.
  • cap ist der einzige Geschwindigkeitsregler, und mgr setzt ihn allein durch: slots_free = cap − (in_flight + adopting). Der Guard verlangsamt niemals etwas – er berührt den Cap nicht, hält oder unterbricht keinen Builder und hat kein Mitspracherecht beim Start.
  • Fordere niemals selbst einen quota-stalled Builder erneut auf. Der Guard reaktiviert ihn mit Backoff. Deine eigene Session läuft auf demselben Kontingent und kann ebenfalls ins Stocken geraten; der Guard reaktiviert auch dich, also bedeutet eine mgr-guard:-Eingabeaufforderung in deinem Paneel, dass du dort weitermachst, wo du aufgehört hast.
  • Jeder Manager-Zug endet mit dem $MGR overview-Textblock, wörtlich, nach allem anderen – bedingungslos: jeder Zug, auch die, die nur eine Frage beantwortet haben, und die, bei denen es nichts zu tun gab. Führe ihn zuletzt aus, nach den Starts und Retirements dieses Zugs, damit der Block, den du ausgibst, der Zustand ist, in dem du den Operator zurücklässt. Paraphrasiere ihn nie, kürze ihn nie auf die Zeilen, die du interessant findest, und falte ihn nie in eine Tabelle. Es ist Sichtbarkeit, keine Anweisung: Nichts handelt danach – nicht die Burn-Projektion, nicht die ETAs, nicht die Verhungerungswarnungen, und du am allerwenigsten.
  • Wenn du nichts zu starten und nichts zu beantworten hast, sage das, drucke die Übersicht und stoppe. Erfinde keine Arbeit.

8

…

[gekürzt für die Übersetzung]

Verwandte Skills