Communitygithub.com

Lego-Plan

Verwandle eine entschiedene Änderung in einen gestapelten DAG aus kleinen Bausteinen, bevor jemand implementiert. Nicht geeignet für unentschiedene Absichten, Tippfehler, Kommentare, Formatierung, reine Dokumentation oder das Schreiben der Implementierung selbst.

Was ist Lego-Plan?

Dieses Skill („Lego Plan“) nimmt eine **bereits entschiedene** Code-Änderung entgegen und zerlegt sie in einen **gerichteten azyklischen Graphen (DAG)** aus unabhängigen, parallel ausführbaren Knoten. Jeder Knoten repräsentiert einen atomaren Baustein (z. B. eine Funktion, eine Komponente) mit eigenen Dateien, Abhängigkeiten, Teilschritten und einem „done when“-Kriterium. Das Skill erstellt ausschließlich den Plan – keine Produktionscode, keine Tests, keine Ausführung von Subagenten. Der Plan wird in einem strukturierten JSON-Format in der Datei `.agent/scratch/lego-plan.json` abgelegt und gleichzeitig als Chat-Nachricht mit Mermaid-Diagramm und vollständiger Knotenbeschreibung ausgegeben. Der Anwender (ein späterer Fahrer) kann dann anhand dieses Plans Knoten parallel abarbeiten, deren Status aktualisieren und so die ganze Änderung kontrolliert implementieren. Das Skill ist für Plattformen wie Claude Code, Cursor oder Codex optimiert, die Agenten-Skripte laden können, und stellt strenge Regeln für Knotengranularität, Dateikonflikte, Zyklen und das Stoppen nach der Planerstellung auf. Es eignet sich ideal für Teams, die komplexe Features in kleine, unabhängige und testbare Einheiten aufteilen und parallelisieren möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AlemTuzlak/skills/tree/HEAD/skills/lego-plan

In Ihrer bevorzugten KI fragen

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

Dokumentation

Lego Plan

Wandle eine entschiedene Änderung in einen geschichteten DAG (Directed Acyclic Graph) aus einfachen Primitiven bis hin zu einer funktionierenden Funktion um. Nur planen. Dann anhalten.

Der Graph ist eine Pyramide: unabhängige Blöcke unten, zusammengesetzte Blöcke darüber, ein Endknoten. Ein späterer Fahrer kann Knoten in der gleichen Ebene parallel ausführen, den status setzen und diesen Graphen neu zeichnen. Dieses Skill startet keine Subagenten. Es lädt keine anderen Skills.

Wann verwenden

Laden, wenn die Aufgabe darin besteht, eine entschiedene Änderung in eine Implementierungskarte umzuwandeln, der der Fahrer folgen kann.

  • Bedarf: Was gebaut werden soll, ist bereits gewählt. Wenn eine Liste der zu bearbeitenden Dateien oder eine Pfadauswahl bereits in dieser Konversation vorhanden ist, verwende sie. Wenn nicht, arbeite von der entschiedenen Absicht und dem Code aus, den du lesen musst, um Dateien zu benennen. Erfinde keine zweite Systemkarte.
  • Überspringen: Tippfehler, Kommentare, Formatierung, Dokumentation ohne Code.
  • Wenn die Absicht noch offen ist: Anhalten. Nachfragen, bis die Änderung entschieden ist. Erstelle keine Blöcke für eine Funktion, die nicht gewählt ist.

Ein Knoten ist immer noch ein DAG. Gib den vollständigen Vertrag aus.

Harte Grenzen

  1. Nur planen. Keinen Produktionscode schreiben. Keine Tests schreiben. Benenne den Check in done when. Implementiere ihn hier nicht.
  2. Nach der Ausgabe anhalten. Chat-DAG plus die Scratch-Datei. Kein Dispatch. Kein nächstes Skill laden.
  3. Keine Zyklen. Wenn ein Block von einem späteren Block abhängt, ist die Aufteilung falsch. Teile erneut auf.
  4. Nicht auf Genehmigung warten. Zeige den DAG und halte an. Der Benutzer unterbricht, wenn er falsch ist.
  5. Öffne die Scratch-Datei nicht für den Benutzer. Schreibe keinen Plan unter docs/.

Knotengranularität

Graphknoten (parallele Einheit): ein unabhängig versendbares Primitive, das ein Subagent besitzen kann, ohne auf einen anderen in Bearbeitung befindlichen Knoten zu warten.

Beispiele: write fetchOrder, write OrderCard, wire fetchOrder into the loader.

Zu groß: implement auth. Teile es auf. Zu klein: rename a variable. Füge es in den Knoten ein, der es braucht.

Teile (innerhalb eines Knotens): die Funktionen, die zusammen landen müssen, damit der Knoten kompiliert. Ein Subagent führt Teile in Reihenfolge aus. Teile nicht auffächern.

Beispielknoten fetch-order:

  • files: src/fetchOrder.ts, src/fetchOrder.test.ts
  • parts: Order-Typ, dann fetchOrder, dann src/fetchOrder.test.ts schreiben oder erweitern
  • diese Teile sind keine separaten Graphknoten

Graphenform

  • Ebene 0: Knoten mit depends on: none. Der Fahrer kann sie alle parallel ausführen.
  • Ebene N: Knoten, deren Abhängigkeiten alle in früheren Ebenen liegen.
  • Letzte Ebene: Ein Knoten (oder eine enge Gruppe), der bedeutet, dass das Feature Ende-zu-Ende funktioniert.
  • Zwei Knoten, die nicht voneinander abhängen, müssen sich eine Ebene teilen (oder in Ebenen liegen, die nicht aufeinander warten).
  • depends on listet Knoten-IDs, niemals Dateinamen.

Gleiche Datei: Wenn zwei Knoten denselben Pfad erstellen oder bearbeiten, dürfen sie sich keine Ebene teilen. Führe sie zusammen oder füge eine depends on-Kante hinzu, sodass einer wartet. Teile eine Datei nicht nur auf, um sie parallel auszuführen. Zwei Knoten, die einen Pfad nur lesen, können sich eine Ebene teilen. files listet nur Erstellen-oder-Bearbeiten-Pfade. Die gleiche-Datei-Regel schließt Testdateien ein.

Knotenfelder

Jeder Knoten hat alle sieben:

  1. id: kebab-case, eindeutig in diesem Plan, stabil (ein späterer Fahrer markiert diese ID als erledigt).
  2. name: Kurzer englischer Name.
  3. depends on: Andere IDs oder none.
  4. files: Erstellen oder Bearbeiten (Pfade). Den Testpfad aus done when einschließen.
  5. parts: Geordnete C-Liste. Letzter Teil ist das Schreiben oder Erweitern des Tests. Wenn done when ein manueller Check ohne Testdatei ist, ist der letzte Teil dieser Check und files hat keinen Testpfad.
  6. done when: Eine Testdatei oder ein Befehl, den der Fahrer ausführen kann, bevor er Abhängigkeiten startet.
  7. status: Dieses Skill schreibt immer pending. Ein späterer Fahrer kann in-progress oder done setzen. Dieses Skill schreibt niemals diese beiden.

Setze keinen vollständigen Quellcode in den Plan.

Live-Board

Pfad: <repo>/.agent/scratch/lego-plan.json

Gleiches JSON wie der Chat-Fence. Agenten folgen dieser Datei. Das benutzerseitige Produkt ist das Chat-Bild.

  • Erstelle .agent/scratch/, falls nötig.
  • Immer überschreiben. Nicht fragen, auch wenn vorhandene Knoten in-progress oder done sind.
  • Wenn das Repo Git hat, stelle sicher, dass .gitignore .agent/scratch/ enthält. Wenn .gitignore existiert und die Zeile fehlt, hänge sie an. Wenn .gitignore fehlt, erstelle es mit dieser einen Zeile.
  • Öffne die Datei nicht. Gib sie nicht als zweite Kopie im Chat aus. Der JSON-Fence ist die Kopie, die der Benutzer sieht.

Abläufe

Ablauf 1: Bestätige eine entschiedene Änderung

  1. Wenn die Änderung klar ist, fahre fort.
  2. Wenn der Benutzer noch wählt, was er will, halte an. Frage. Kehre hierher zurück, nachdem es entschieden ist.

Ablauf 2: Sammle bereits in der Sitzung vorhandene Eingaben

  1. Wenn diese Konversation bereits eine Ziellinien-Dateiliste, Teile oder eine Pfadauswahl hat, verwende diese als Startsatz.
  2. Wenn nicht, leite Blöcke aus der entschiedenen Absicht und dem Code ab, den du lesen musst, um Dateien zu benennen. Durchstöbere nicht das gesamte Repo.

Ablauf 3: Teile in Knoten und Teile auf

  1. Liste Kandidaten-Primitive (B-Granularität).
  2. Für jedes Primitive liste die C-Teile auf, die zusammen kompilieren müssen. Endet mit dem Schreiben oder Erweitern des Tests (oder der manuellen Prüfung).
  3. Zeichne depends on: Ein Knoten hängt nur von einem anderen ab, wenn er das Ergebnis dieses Knotens aufruft oder einbettet.
  4. Weise Ebenen aus den Abhängigkeiten zu. Unabhängige Knoten → gleiche Ebene.
  5. Wenn zwei Knoten denselben Pfad erstellen oder bearbeiten und sich eine Ebene teilen, führe sie zusammen oder füge eine Kante hinzu. Dann ordne die Ebenen neu.
  6. Wenn ein Zyklus auftritt, teile den falschen Knoten auf und wiederhole diesen Ablauf.

Ablauf 4: Fülle jeden Knoten

Fülle die sieben Felder aus. status ist bei jedem Knoten pending.

Ablauf 5: Zeige den DAG im Chat

Zeige in dieser Reihenfolge:

  1. Ebenen: Ebene 0 bis zur letzten. Unter jeder Ebene die Knoten in dieser Ebene.
  2. Knoten: Die sieben Felder für jede ID.
  3. Mermaid: Immer. Ein flowchart (oder graph TD). Knoten-IDs im Diagramm müssen mit den Plan-IDs übereinstimmen. Kein classDef. Keine Statusfarben. Jeder Knoten ist pending.
  4. JSON-Fence: Ein json-Block mit dem Live-Board-Objekt. Quelle der Wahrheit für IDs, Abhängigkeiten, Dateien, Teile, doneWhen und status. Ebenen werden aus depends abgeleitet. Speichere kein layer-Feld.

Dann Ablauf 6.

Mermaid-Form:

flowchart TD
  fetch-order[fetch-order]
  order-card[order-card]
  wire-loader[wire-loader]
  fetch-order --> wire-loader
  order-card --> wire-loader

Knoten derselben Ebene haben keine Kante zwischen sich.

JSON-Form:

{
  "version": 1,
  "nodes": [
    {
      "id": "fetch-order",
      "name": "fetch order",
      "depends": [],
      "files": ["src/fetchOrder.ts", "src/fetchOrder.test.ts"],
      "parts": ["Order type", "fetchOrder", "write or extend src/fetchOrder.test.ts"],
      "doneWhen": "pnpm test src/fetchOrder.test.ts",
      "status": "pending"
    }
  ]
}

depends ist ein Array von IDs. Leeres Array bedeutet keine.

Ablauf 6: Schreibe das Live-Board

  1. Schreibe dasselbe JSON nach .agent/scratch/lego-plan.json (überschreiben).
  2. Stelle sicher, dass .gitignore .agent/scratch/ ignoriert, wie unter Live-Board.
  3. Öffne die Datei nicht.

Ablauf 7: Anhalten

Nach Ablauf 6 anhalten. Keinen Code schreiben. Kein Dispatch. Kein weiteres Skill laden.

Entscheidungsbaum

  • Absicht nicht entschieden → Ablauf 1.
  • Entschiedene Änderung, Implementierungskarte benötigt → Ablauf 2 → 3 → 4 → 5 → 6 → 7.
  • Ein Knoten → trotzdem Ablauf 2 → 7 (vollständiger Vertrag).
  • Tippfehler / Formatierung / nur Dokumentation → dieses Skill gilt nicht.
  • Zyklus in Abhängigkeiten → Ablauf 3 Schritt 6.
  • Gleicher Pfad auf zwei Knoten derselben Ebene → Ablauf 3 Schritt 5.
  • Knoten ist "implementiere das gesamte Feature" → aufteilen (Ablauf 3).

Rote Flaggen

SignalWas es bedeutetStattdessen tun
Die Fetch-Funktion in diesem Skill schreibenPlan wurde zur ImplementierungAblauf 7. Anhalten.
Eine lineare Liste ohne EbenenKann nicht auffächernUnabhängige Knoten in dieselbe Ebene setzen.
Subagenten von hier aus dispatchenBlatt wurde zum FahrerAblauf 7. Anhalten.
Mermaid-IDs unterscheiden sich von Knoten-IDsFahrer kann nicht als erledigt markierenGleiche kebab-case-ID an beiden Stellen.
JSON-Fence unterscheidet sich von der Scratch-DateiZwei Quellen der WahrheitEin Objekt schreiben. In beide kopieren.
Zyklus (a → b → a)Aufteilung ist falschAufteilen und neu schichten.
Zwei Knoten derselben Ebene bearbeiten order.tsParalleler SchreibkonfliktZusammenführen oder eine depends on-Kante hinzufügen.
Eine Datei aufteilen, damit zwei Knoten parallel laufen könnenUngefragtes DesignDatei behalten. Knoten sequenzieren.
Testpfad fehlt in files / letztem TeilKnoten ist nicht versendbarAblauf 3 Schritt 2.
classDef oder Statusfarben im Plan-MermaidDieses Skill malt FortschrittOhne Stil. Alle pending.
Teile eines Knotens in parallele Knoten aufgeteilt, die allein nicht kompilieren könnenC als B behandeltDiese Teile innerhalb eines Knotens behalten.
"Implement auth" als einzelner KnotenZu großIn Primitive aufteilen.
Auf "sieht gut aus?" wartenGrenze ist show-and-stopAusgeben und anhalten.
Vor dem Überschreiben der Scratch-Datei fragenLive-Board ist ein SlotAblauf 6. Überschreiben.
Öffnen von .agent/scratch/lego-plan.jsonZusätzlich für den BenutzerNur Chat. Datei ist für Agenten.
Schreiben von docs/lego-plan.mdZusätzliches ArtefaktChat plus Scratch. Keine Docs-Plan-Datei.

Fehlerbehandlung

  • Keine zu bearbeitenden Dateien in der Sitzung: Aus Absicht und gezielten Lesevorgängen ableiten. Wenn du keine Dateien benennen kannst, anhalten und sagen, was fehlt. Keine Pfade erfinden.
  • Zyklus: Den Zyklus per ID melden. Aufteilen. Ablauf 3 erneut ausführen. Keinen zyklischen Mermaid als Plan zeigen.
  • Letzte Ebene bedeutet nicht, dass das Feature funktioniert: Einen Endknoten hinzufügen, der von den zusammengesetzten Teilen (der Verdrahtung) abhängt, oder sagen, warum die aktuelle letzte Ebene bereits der Ende-zu-Ende-Pfad ist.
  • Benutzer unterbricht und sagt, ein Knoten sei falsch: Diesen Knoten und alle depends on, die auf ihn zeigten, bearbeiten. IDs stabil halten, wenn der Knoten noch existiert. Wenn du einen Knoten löschst, entferne ihn aus dem Mermaid und dem JSON. Die Scratch-Datei überschreiben. Den DAG erneut anzeigen. Anhalten.
  • done when ist vage ("es funktioniert"): Durch einen Befehl oder Testpfad ersetzen. Wenn das Projekt noch keinen Testbefehl hat, benenne die manuelle Prüfung in einer Zeile. Letzter Teil ist diese Prüfung.
  • Kein Git-Repo: Trotzdem .agent/scratch/lego-plan.json unter dem Workspace schreiben, wenn er beschreibbar ist. Den Gitignore-Schritt überspringen. Das in einer Zeile im Chat sagen.
  • Scratch-Schreiben fehlschlägt (Berechtigungen, Festplatte): Trotzdem Chat-DAG und JSON-Fence zeigen. Sagen, dass das Live-Board nicht geschrieben wurde. Nicht so tun, als ob die Datei existiert.
  • Vorhandenes Scratch-JSON ist ungültig oder mitten im Lauf: Überschreiben. Nicht zusammenführen. Nicht fragen.

Individual skills in this repo

This repo contains 14 individual skills — each has its own dedicated page.

AlemTuzlak/skills

Use when the user wants to write a blog post about a feature, product change, PR, git diff, or any technical topic - accepts marketing briefs, PRs, git refs, codebase paths, or freeform descriptions as input

AlemTuzlak/skills

Use when the user wants to generate a changelog, release notes, or document what changed between versions, tags, or PRs

AlemTuzlak/skills

Use when writing, editing, or organizing documentation, when planning what docs a feature needs, and whenever planning or implementing a new feature or change in a repo (docs ship with the code). Also use when tempted to write docs without showing the discovered readers to the user, without asking for tone, or without loading simple-english and i-have-adhd. Triggers on "write docs for X", "document this feature", "add a guide", "update the docs", "reorganize the docs", "plan feature X", "implement X", or /docs.

AlemTuzlak/skills

Use when a bug is in play: a test fails, CI is red, an API returns the wrong result, a stack trace appears, or the user says it is broken or fix this. Don't use for a new feature with no failure, for types-only work, or for docs.

AlemTuzlak/skills

Use when the user invokes /i-have-adhd, says they have ADHD, or asks for ADHD-friendly output. Also used as a required writing filter by the docs skill. Don't use for marketing copy or after the user says "stop adhd mode" or "normal mode".

AlemTuzlak/skills

Use when the user wants to write a product update email, feature announcement newsletter, or digest email for users or subscribers

AlemTuzlak/skills

Use when the user wants to turn a raw talking-head / screen-share recording into a finished, edited, annotated video plus a full content package. Removes silences, flags mistakes for the user to cut, transcribes, adds transcript-synced overlays (code, on-screen code highlights, word highlights, lists, comparisons, diagrams, section labels, punch-in zooms), renders with original audio, then generates blog/socials/YouTube content. Triggers on "produce a video", "edit my video", "annotate my recording", "/produce-video".

AlemTuzlak/skills

Use when the user runs /prove-it or says prove it, prove the changes, show me in the browser, or asks to prove a UI or API change. Don't use only because the agent is about to say done, for types-only work, or for docs with no behavior to prove.

AlemTuzlak/skills

Use when the user wants to write, draft, or author an RFC (Request for Comments) / technical design doc for a feature, change, or architectural decision. Interactively interviews the user, grounds the proposal in the actual codebase, presents 2-3 concrete API/code-snippet approaches to choose from, then writes a review-ready RFC. Triggers on "write an RFC", "draft an RFC", "RFC for X", "design doc for X", or /rfc.

AlemTuzlak/skills

Use when the user wants to deeply learn a new topic from scratch. Runs a pre-interview (current knowledge, end-goal proficiency, depth, practice load, background, scope), researches online (articles, niche-influencer blogs, canonical docs, subtopic landscape), then produces a structured markdown course with mandatory visual diagrams, evidence-based learning-science features (retrieval practice, spaced callbacks, worked-example fading, concept ledger, jargon gate, analogy hygiene), and a self-contained interactive HTML mini-course. Triggers on /teach-me, "teach me about X", "I want to learn X", "deep dive on X", "create a course on X", "study X with me".

AlemTuzlak/skills

Use when the change intent is already settled and the agent must map what a behavior change touches before an implementation plan or any code. Use for new features, bug fixes, and refactors that move a boundary. Don't use for typos, comments, formatting, lockfile-only diffs, docs with no code, or while the user is still deciding what they want.

AlemTuzlak/skills

Use when the user wants to transcribe a video or audio file to text with word-level timestamps — spins up a self-contained local Whisper (whisper.cpp) Docker service bundled in this skill and returns transcript.txt, transcript.srt, and word-level transcript.words.json. Also used as a building block by /produce-video. Triggers on "transcribe this video", "get a transcript", "transcribe-video".

AlemTuzlak/skills

Use when the user wants to write a video script for a product demo, feature walkthrough, launch video, or social media video about a feature or product change

AlemTuzlak/skills

Use when the user wants YouTube metadata for a video — a click-worthy title, an SEO/above-the-fold description, tags, and timestamped chapters. Accepts a transcript (ideally timestamped SRT), a topic, a PR, or a freeform description. Used standalone and by /produce-video. Triggers on "youtube title", "youtube description", "youtube chapters", "youtube tags", "youtube metadata", "youtube-copy".

Verwandte Skills