Langlebige Orchestrierung
Ein Koordinator ist ein serieller Entscheidungspunkt: Jeder Lesevorgang, den er durchführt, und jede Entscheidung, die durch ihn geleitet wird, wartet in einer Warteschlange ohne Uhr, und wenn er gesättigt ist, stoppt die Arbeit still. Dieses Skill verhindert, dass etwas eine solche Warteschlange erreicht.
Die oberste Ebene einer Abfahrt besteht aus zwei Sitzungen. Der Kommunikator ist die Sitzung, in die der Besitzer tippt; seine gesamte Aufgabe ist er. Der Koordinator ist eine geschwisterliche Orca-Sitzung, die als Lane root gebunden ist: Sie erzeugt eine Lane für jede Anfrage mit einem Hauptteil in der Runde, in der sie eintrifft, entscheidet, was ein Prozess eskaliert hat, und leitet weiter, was die Schreibtische produzieren. Daneben stehen die Meta-Lane, die jede Skill-, Tooling- und Prozessänderung aufnimmt und jede Entscheidung in ein Skill-Update verwandelt, und die Signal-Lane, die den Koordinator verfolgt, damit der Kommunikator dies nie tun muss. Alles andere ist ein Verb des Abfahrtswerkzeugs lr oder ein Prozess, der ohne sie alle läuft. Eine Regel hier benennt das Verb oder den Prozess, der einen Fehler unmöglich macht; eine Regel ohne beides ist ein Fehler, der im Paket behoben werden muss.
Dieses Skill befindet sich in ~/.claude/CLAUDE.md, das die Fan-Out-Form, das Modell-Routing und die Überprüfungstiefe bestimmt. Das Paket ist eine Go-Binärdatei, lr, mit den Python-Skripten, die es ersetzt, die nur so lange behalten werden, bis jedes Verb live geht (Design).
Drei oder mehr Lanes gleichzeitig, eine Aufgabe, die einen Kontextfenster überdauert, ein Warten auf CI, eine Warteschlange, ein Anwenden oder Einweichen oder ein Durchlauf über viele unabhängige Einheiten ist eine Abfahrt. Eine Untersuchung mit einer einzelnen Lane ist ein Sub-Agent im Direktmodus, keine Abfahrt.
Inhalt
- Lesen Sie die Datei für Ihren Job
- Urteil zuerst
- Hooks und Ablehnungen
- Meta-Änderungen landen im Skill
- Vor jedem Tool-Aufruf
- Fragen Sie das Verb, lesen Sie nie
- Die Regeln
- Phase 0: Die stehenden Sitzungen
- Was ohne den Koordinator läuft
- Lanes und Schreibtische
- Die Oberflächen des Besitzers
- Aufzeichnungen und die Aufgabenliste
- Starten und Fortsetzen
- Eine Regel zu diesem Skill hinzufügen
Lesen Sie die Datei für Ihren Job
Lesen Sie nur die Zeile, die Sie gerade ausführen. Jede Datei gibt ihre Regeln vollständig an.
| Sie sind | Lesen Sie |
|---|---|
| Antworten dem Besitzer: Antworten, Auswahlen, Neugestaltungen, sein Slack und Board | communicator-brief.md |
| Rendern des Besitzer-Updates oder Aktualisieren des Dashboards | owner-report-table.md, drive-dashboard.md |
| Der Koordinator | coordinator-brief.md |
| Die Meta-Lane oder ihr Implementierer | meta-lane-brief.md |
| Die Signal-Lane; die Aufgaben-Lane | signal-lane-brief.md; chores-lane-brief.md |
| Schreiben einer Lane-Beschreibung oder Arbeiten als Lane oder Schreibtisch unter einer solchen | orca-lane-brief.md |
| Rotieren des Kontexts einer Lane; eine Übergabe oder eine Kompaktierung | handoff-subagent-brief.md, compaction.md |
| Starten oder Weiterleiten von Orca-Workern auf dem Mac oder auf einem Sprite | orca-desk-brief.md, orca-workers.md, orca-sprite-workers.md |
| Landen eines PR, der Merge-Queue, D1 bis D23 | landing.md, merge-train-brief.md |
| Bewerten eines Heads, einer Landung oder eines Plans | grading-principles.md, finder-brief.md, finder-desk-brief.md, finder-desk-rows.md, fidelity-desk-brief.md, fidelity-job-brief.md, semantic-collisions-brief.md |
| Besitzen eines Rots ohne Besitzer | red-sweep-brief.md |
| Ein Alarm oder Vorfall | active-alert-brief.md, alert-fix-brief.md, alerts-desk-brief.md, alert-evidence-brief.md, alert-comms-brief.md, unfixed-case-brief.md |
| Ein Release | release-lanes.md, manual-release-brief.md |
| Posten auf Slack | slack-lane-brief.md, comms-desk-brief.md |
| Posten oder Lesen von cci-Datensätzen, dem Lane-Bus, B-Regeln | bus-contracts.md |
| Aufzeichnen oder Anwenden einer Besitzerentscheidung, des Registers, der Richter | owner-rulings.md |
| Lane-Liveness: Warum eine Lane nicht still werden kann, der Supervisor und die Wächter | supervisor.md, watchers.md, drive-watchdog-brief.md |
| Das eine Nummer-eins-Ergebnis; den Besitzer gegen eine Oberfläche spielen | priority-desk-brief.md; user-test-brief.md |
| Starten einer Unter-Abfahrt | sub-drives.md |
| Lesen eines großen Korpus in Fix-Lanes | the bulk-read skill |
| Fragen, warum eine Regel existiert; keine Lane braucht dies, um ihren Job zu erledigen | lessons.md |
Urteil zuerst
- Keine Regel verbietet das Lesen der einen Zeile, von der eine Entscheidung abhängt.
- Ein vorliegender Befund ist ein Fix, niemals eine Lane, eine erneute Prüfung oder ein Workflow.
- Lesen Sie jeden Satz des Besitzers, wie es ein sorgfältiger Kollege tun würde. Eine Korrektur benennt einen Fehler beim Lesen, niemals eine Neugestaltung von etwas, das er zuvor entschieden hat; lesen Sie die Zeilen des Registers zu diesem Thema, bevor Sie handeln. Eine Wiederholung ist ein Fehlerbericht über das erste Lesen: Beheben Sie jede Stelle, an der es überlebt hat, in dieser Runde.
Hooks und Ablehnungen
- Hooks warnen. Sie blockieren nur bei Vertrauen: ein Merge ohne die Genehmigung des Besitzers, eine Änderung, wer Landungen genehmigt, ein Revert ohne sein Wort, ein Ausführender oder Schreibtisch, der vom Kommunikator gestartet wurde, eine Lane, die seinen eingeloggten Browser im Produktivbetrieb steuert, Bearbeitungen der installierten Hook-Dateien und der Sitzungsschutz-Wächter. Ein fehlgeschlagener Lesevorgang warnt nur;
tests/test_fail_open.pyerzwingt dies und listet die Ausnahmen auf, und der Slack-Berechtigungs-Hook schlägt offen fehl (slack-lane-brief.md). - Ein Hook, der bei Ihrer Arbeit fehlzündet, erhält eine Fix-Lane in der Runde, in der er Sie blockiert, und Sie arbeiten weiter an dem, was er nicht blockiert. Eine Ablehnung, die richtig ist, wie der Produktivitätsidentitätsschutz, erhält keine. Die blockierte Sitzung startet sie, sei es Lane, Schreibtisch, Koordinator oder Kommunikator, ohne Anfrage an
rootund ohne Meta-Lane:lr launch lane hook-fix-<hook> opus high <brief> --drive <drive> --lane <you>, es sei denn,lr lanes hook-fix-<hook>zeigt eine Live an. - Hooks leben in
plugins/long-running/capt-hook/hooks/in yasyf/cc-skills und incaptain_hook/builtin_packs/in yasyf/captain-hook, und jede Änderung folgtcaptain-hook:authoring-hooks, dessen Lint und Test in der CI dieses Repos laufen. Die Fix-Lane behebt den eigentlichen Fehler des Hooks mit einem Regressionstest, liefert ihn aus, installiert ihn dort, wo die blockierte Sitzung läuft, und sein Beweis ist, dass der abgelehnte Aufruf durchgeht (orca-lane-brief.md). - Beheben bedeutet nicht, es zu umgehen: Solange eine Ablehnung besteht, führt niemand das blockierte Ding durch einen Wrapper,
cc-sudooder ein Skript aus. Die Sicherheitsregeln des Besitzers bleiben wie geschrieben: Merge, Slack, Lasttests und die Prozesswache. Ein Hook, der einen von ihnen bewacht und fehlzündet, erhält eine Fehlerbehebung mit einem Regressionstest, und die Regel selbst ändert sich nur auf sein Wort hin. Der eine Hook, der vor seiner Behebung deaktiviert wird, ist derjenige, der jeden Stopp des Kommunikators blockiert: Kommentieren Sie ihn im Paketquelltext mit einem TODO aus, das seine Fix-Lane benennt, in einem sofort gemergten PR, da eine Bearbeitung des installierten Caches nur bis zur nächsten Installation hält, die dieser Mac innerhalb von Minuten ausführt. - Ein Hook, der nichts blockiert und verbessert werden könnte, geht in derselben Runde an die Meta-Lane als ein
cci post --kind note --to meta-desk. Jede andere Ablehnung eines Tools geht in derselben Runde an die Meta-Lane, und die Arbeit wird auf ihrem Handpfad fortgesetzt. Keine Ablehnung ist eine Ausrede oder eine Frage an den Besitzer, und die Plattform auch nicht: Ein Datensatz, der einem Sprite, einem Host oder einem gemeinsam genutzten Tool die Schuld für eine Wartezeit oder einen Fehler gibt, benennt die Lane, die die Grundursache behebt, und die Uhr dieser Behebung, und ohne eine solche Lane fordert er in derselben Runde eine vom Koordinator an. Das Ersetzen einer Maschine ist ein Provisorium und niemals die Antwort.
Meta-Änderungen landen im Skill
Die Lane, die eine global anwendbare Meta-Änderung erhält, jede Entscheidung darüber, wie Lanes, Karten, Wartezeiten, Antworten, Hooks, Routing oder Antworten funktionieren, sendet sie in der Runde, in der sie eintrifft, als einen cci-Datensatz an die Meta-Lane. Die Meta-Lane macht daraus immer ein Update dieses Skills oder des Brief-Vorlagen-, Hook- oder cc-Notes-Dokuments, dem es gehört, gemergt und installiert, wobei der Abschnitt, den es berührt, umgeschrieben und umgestaltet wird, damit das Skill als ein Design gelesen wird, niemals als eine bloße angehängte Zeile. Eine Speicherdatei oder ein Datensatz ist ein Zeiger und zählt nie als erledigt.
Vor jedem Tool-Aufruf
| Wenn der Aufruf ist | Machen Sie |
|---|---|
| Etwas, das ein Verb beantwortet | Führen Sie das Verb aus. |
| Arbeit mit einem Hauptteil | Erzeugen Sie die Lane mit ihrer Aufgabe und Ledger-Zeile. |
| Eine Wartezeit | Falten Sie sie in die Lane, die handelt. |
| Status | Der Kommunikator sendet das Rendern des Update-Schreibtischs; der Koordinator sendet nichts. |
| Eine Besitzernachricht | Der Kommunikator erzeugt einen Sub-Agenten dafür, der auf der Oberfläche antwortet, von der sie kam; der Koordinator wendet die Entscheidung überall an; eine Entscheidung darüber, wie die Abfahrt funktioniert, geht in derselben Runde an die Meta-Lane, die daraus ein Skill-Update macht. |
| Ein Alarm, den der Supervisor nicht beantwortet hat | lr incident run <slug> jetzt. |
| Eine Tool-Ablehnung oder etwas, das zweimal schiefgegangen ist | Ein Hook, der Ihre Arbeit blockiert, erhält die Fix-Lane, die Sie in dieser Runde starten (Hooks und Ablehnungen); alles andere geht in dieser Runde an die Meta-Lane, wo die Behebung ein Go-Verb ist. Fahren Sie in jedem Fall fort. |
| Eine Genehmigung, ein Halten, ein Start oder ein Abbrechen | Die Anordnung des Besitzers trägt es, oder eine Lane besitzt es. |
Beendete Agenten gestoppt, Produktionsoperationen protokolliert, nichts als erledigt bezeichnet, was nicht live und geprüft ist. Ein Aufruf, der die Liste überlebt, entscheidet etwas, das kein Verb und keine Lane entscheiden kann. Alles andere ist eine Lane.
Fragen Sie das Verb, lesen Sie nie
| Um zu wissen | Führen Sie aus |
|---|---|
| Ist eine Lane am Leben, und was hat sie zuletzt gesagt | lr lanes <lane> --config <lr.json> |
| Jede Lane, ihr Zustand, PRs und stehende Aufgabe | lr lanes |
| Was passiert ist, seit es zuletzt nachgesehen hat | cci digest --drive <drive>, dann cci tail --drive <drive> --cursor root |
| Was auf den Besitzer wartet | cci owner-waits --drive <drive> |
| Welche Unter-Abfahrten offen sind und was jede noch hält | lr drive sub list |
| Der Zustand von PRs, die es nennen muss | ccx vcs pr status <n1> <n2> ..., gebündelt |
| Welche PRs der Besitzer auf dem Board genehmigt hat und welche davon noch offen sind | lr approved [--since <seq>], nachträglich ermittelte Urteile ausgeschlossen |
| Jede offene Anfrage und was gelandet, aber nicht live ist | lr asks |
| Das Besitzer-Update, vollständig und aus Quellen | lr update render, ausgeführt vom update-desk des Kommunikators |
| Was ein Vorfall tut; ein Satz darüber, was er ist | lr incident status <slug>; lr incident describe <slug> |
Wohin die Post einer Lane geht; jedes lr-Verb nimmt einen Stamm, meta-desk, für seine neueste Live-Lane | lr route <lane> |
Ein Lesevorgang, den die Tabelle nicht enthält, gehört zu einer Lane: ein PR, ein CI-Protokoll, ein Slack-Thread, eine lange Datei, eine Cloud-Auflistung, eine Build-Seite. Ein Diff, ein Plan oder ein Urteil, das Sie genehmigen, ist von Ihnen zu lesen. Der Koordinator erzeugt einen Leser und nimmt höchstens fünf Zeilen zurück; eine Suche ist ein Aufruf, lr ask-lane '<question>'. Die root_context- und root_reads-Hooks warnen bei jedem Lesevorgang dieser Art, bei einer zweiten Quelle, die für eine Besitzeranfrage geöffnet wird, und bei Datensätzen einer Lane, die durch tail oder grep geleitet werden; im Fenster des Kommunikators verweigert root_context eine breite Suche und nennt lr ask-lane.
Die Regeln
Ids sind stabil; Skripte, Hooks und Referenzen zitieren sie. root bedeutet der Koordinator, es sei denn, die Regel nennt den Kommunikator.
R1. Ground Truth kommt von der besitzenden Lane oder dem Verb, niemals einem grep, einer Auflistung, einem curl oder einer Build-Seite; höchstens fünf Zeilen zurück. Der Zustand von Prioritäts-PRs wird in einem einzigen gebündelten ccx vcs pr status-Aufruf gelesen.
R2. Alles mit einem Hauptteil ist eine Lane: ein Lesevorgang über ein begrenztes Fenster hinaus, ein Protokoll, eine Untersuchung, PR- oder Merge-Mechanik, eine Aufzählung. Ein begrenzter Lesevorgang einer einzelnen benannten Datei, bis zu 150 Zeilen, ist erlaubt.
R3. Eine Lane pro Warte-dann-handle-Kette, und keine Lane parkt: Eine Lane wartet auf einen Monitor, eine Agent-Benachrichtigung, CronCreate für einen Takt oder einen lr wait-Aufruf, bis zu einem Endzustand, und meldet sich einmal. shell_waits blockiert eine Shell-Schleife oder einen Schläfer. Ein Monitor eines Schreibtischs wird bei Ablauf erneut aktiviert.
R4. Weisen Sie eine Lane niemals erneut an, beantworten Sie niemals ein Duplikat. Eine SendMessage an einen beendeten Agenten führt dessen Brief erneut aus. lr wait markiert gedruckte Post als gelesen.
R5. Schreiben Sie es auf, behalten Sie es nicht: Befunde an cc-notes von der Lane, die sie gefunden hat, Briefe als Anhänge im briefs: <slug>-Protokoll, nichts von Hand erstelltes unter ~/.claude/scratch.
R6. Jede Besitzeranfrage ist in der Runde, in der sie eintrifft, in Bearbeitung, eine Lane pro Anfrage, niemals an die Warteschlange einer beschäftigten Lane angehängt. Eine Lane besitzt einen PR pro lieferbarem Ergebnis und landet ihre Fixes als Commits darauf; orca-lane-brief.md sagt, wann sie stapelt.
R7. Der Zustand eines PR wird gelesen, bevor er gemeldet wird: ccx vcs status oder der Squash-Commit auf dem geholten Hauptzweig, niemals eine Nachricht oder ein Speicher.
R8. Jede Besitzeranfrage ist in der Runde, in der sie eintrifft, eine Ledger-Zeile und nur bei LIVE erledigt; davor lautet die Antwort "in #N, noch nicht live: <blocker>".
…
[zur Übersetzung gekürzt]