Communitygithub.com

Lego Plan

Convierte un cambio definido en un DAG por capas de bloques simples a un componente funcional. Solo planifica. Luego se detiene.

¿Qué es Lego Plan?

Esta habilidad transforma un cambio ya acordado en un grafo acíclico dirigido (DAG) por capas, desde primitivas simples hasta un nodo final que representa la funcionalidad completa. A diferencia de otras habilidades, no escribe código de producción, no ejecuta pruebas ni subagentes, y se detiene inmediatamente después de mostrar el plan. Está diseñada para agentes como Claude Code, Cursor o Codex que necesitan un mapa de implementación claro antes de comenzar a trabajar. El DAG generado permite ejecutar nodos en paralelo dentro de la misma capa, y se guarda en un archivo de tablero vivo (`<repo>/.agent/scratch/lego-plan.json`) para que el controlador pueda hacer seguimiento. Resuelve el problema común de dividir una tarea grande en partes independientes, evitando ciclos y conflictos de archivos compartidos.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Lego Plan?

Convierte un cambio definido en un DAG por capas desde primitivas simples hasta una funcionalidad funcional. Solo planifica. Luego se detiene.

El grafo es una pirámide: bloques independientes en la base, bloques compuestos arriba, un solo nodo final. Un controlador posterior puede ejecutar nodos de la misma capa en paralelo, cambiar el status y redibujar este grafo. Esta habilidad no despacha subagentes. No carga otras habilidades.

Cuándo usarla

Cargar cuando la tarea es convertir un cambio definido en un mapa de implementación que el controlador pueda seguir.

  • Necesidad: ya se ha elegido qué construir. Si ya hay una lista de archivos a tocar o una selección de rutas en esta conversación, úsala. Si no, trabaja desde la intención definida y el código. No inventes un segundo mapa del sistema.
  • Omitir: errores tipográficos, comentarios, formato, documentación sin código.
  • Si la intención aún está abierta: detente. Pregunta hasta que el cambio esté definido. No apiles bloques para una funcionalidad no elegida.

Un nodo sigue siendo un DAG. Emite el contrato completo.

Reglas estrictas

  1. Solo planifica. No escribas código de producción. No escribas pruebas. Nombra la comprobación en done when. No la implementes aquí.
  2. Detente después de emitir. Muestra el DAG en el chat y el archivo de tablero. No despaches. No cargues la siguiente habilidad.
  3. Sin ciclos. Si un bloque depende de un bloque posterior, la división está mal. Divide de nuevo.
  4. No esperes aprobación. Muestra el DAG y detente. El usuario interrumpe si está mal.
  5. No abras el archivo de tablero para el usuario. No escribas un plan en docs/.

Granularidad de nodo

Nodo del grafo (unidad paralela): una primitiva independiente que un subagente puede asumir sin esperar a otro nodo en progreso.

Ejemplos: escribe fetchOrder, escribe OrderCard, conecta fetchOrder en el cargador.

Demasiado grande: implementa auth. Divídelo. Demasiado pequeño: renombra una variable. Fúndelo en el nodo que lo necesita.

Partes (dentro de un nodo): las funciones que deben implementarse juntas para que el nodo compile. Un subagente hace las partes en orden. No dividas las partes en nodos separados.

Ejemplo de nodo fetch-order:

  • files: src/fetchOrder.ts, src/fetchOrder.test.ts
  • parts: tipo Order, luego fetchOrder, luego escribe o extiende src/fetchOrder.test.ts
  • esas partes no son nodos separados del grafo

Forma del grafo

  • Capa 0: nodos con depends on: none. El controlador puede ejecutarlos todos en paralelo.
  • Capa N: nodos cuyas dependencias están todas en capas anteriores.
  • Última capa: un nodo (o un conjunto cohesionado) que significa que la funcionalidad funciona de extremo a extremo.
  • Dos nodos que no dependen entre sí deben compartir una capa (o estar en capas que no se esperan mutuamente).
  • depends on lista ids de nodo, nunca nombres de archivo.

Mismo archivo: si dos nodos crean o editan la misma ruta, no deben compartir capa. Fúndelos o añade una arista depends on para que uno espere. No dividas un archivo solo para ejecutarlo en paralelo. Dos nodos que solo leen una ruta pueden compartir capa. files lista solo rutas de creación o edición. La regla del mismo archivo incluye archivos de prueba.

Campos del nodo

Cada nodo tiene los siete:

  1. id: en kebab-case, único en este plan, estable (un controlador posterior marca este id como completado).
  2. name: nombre corto en inglés.
  3. depends on: otros ids o none.
  4. files: creación o edición (rutas). Incluye la ruta de prueba de done when.
  5. parts: lista ordenada. La última parte es escribir o extender esa prueba. Si done when es una comprobación manual y no hay archivo de prueba, la última parte es esa comprobación y files no tiene ruta de prueba.
  6. done when: un archivo de prueba o comando que el controlador pueda ejecutar antes de iniciar las dependencias.
  7. status: esta habilidad siempre escribe pending. Un controlador posterior puede establecer in-progress o done. Esta habilidad nunca escribe esos dos.

No pongas el código fuente completo en el plan.

Tablero vivo

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

Mismo JSON que el bloque de código en el chat. Los agentes siguen este archivo. El producto visible para el usuario es la imagen del chat.

  • Crea .agent/scratch/ si es necesario.
  • Siempre sobrescribe. No preguntes, incluso si hay nodos existentes in-progress o done.
  • Si el repositorio tiene git, asegúrate de que .gitignore contenga .agent/scratch/. Si .gitignore existe y falta la línea, agrégala. Si falta .gitignore, créalo con esa única línea.
  • No abras el archivo. No lo vuelques como una segunda copia en el chat. El bloque JSON es la copia que ve el usuario.

Procedimientos

Procedimiento 1: Confirmar un cambio definido

  1. Si el cambio está claro, continúa.
  2. Si el usuario aún está eligiendo lo que quiere, detente. Pregunta. Regresa aquí cuando esté definido.

Procedimiento 2: Recopilar entradas ya en la sesión

  1. Si esta conversación ya tiene una lista de archivos finales, partes o una selección de rutas, úsalos como conjunto inicial.
  2. Si no, deriva los bloques de la intención definida y el código que debes leer para nombrar archivos. No recorras todo el repositorio.

Procedimiento 3: Dividir en nodos y partes

  1. Enumera las primitivas candidatas (granularidad B).
  2. Para cada primitiva, enumera las partes C que deben compilar juntas. Termina con escribir o extender la prueba (o la comprobación manual).
  3. Dibuja depends on: un nodo depende de otro solo si llama o incrusta el resultado de ese nodo.
  4. Asigna capas a partir de las dependencias. Los nodos independientes → misma capa.
  5. Si dos nodos crean o editan la misma ruta y comparten capa, fúndelos o añade una arista. Luego reasigna capas.
  6. Si aparece un ciclo, divide el nodo incorrecto y repite este procedimiento.

Procedimiento 4: Rellenar cada nodo

Rellena los siete campos. status es pending en cada nodo.

Procedimiento 5: Mostrar el DAG en el chat

Muestra, en este orden:

  1. Capas: capa 0 hasta la última. Debajo de cada capa, los nodos de esa capa.
  2. Nodos: los siete campos para cada id.
  3. Mermaid: siempre. Un flowchart (o graph TD). Los ids de los nodos en el diagrama deben coincidir con los ids del plan. Sin classDef. Sin colores de estado. Cada nodo está pendiente.
  4. Bloque JSON: un bloque json con el objeto del tablero vivo. Fuente de verdad para ids, dependencias, archivos, partes, doneWhen y status. Las capas se derivan de depends. No almacenes un campo layer.

Luego Procedimiento 6.

Forma Mermaid:

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

Los nodos de la misma capa no tienen aristas entre sí.

Forma JSON:

{
  "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 es un array de ids. Vacío significa ninguno.

Procedimiento 6: Escribir el tablero vivo

  1. Escribe el mismo JSON en .agent/scratch/lego-plan.json (sobrescribe).
  2. Asegúrate de que .gitignore ignore .agent/scratch/ como en Tablero vivo.
  3. No abras el archivo.

Procedimiento 7: Detenerse

Después del Procedimiento 6, detente. No escribas código. No despaches. No cargues otra habilidad.

Árbol de decisión

  • Intención no definida → Procedimiento 1.
  • Cambio definido, necesita mapa de implementación → Procedimiento 2 → 3 → 4 → 5 → 6 → 7.
  • Un solo nodo → aún Procedimiento 2 → 7 (contrato completo).
  • Error tipográfico / formato / solo documentación → esta habilidad no aplica.
  • Ciclo en dependencias → Procedimiento 3 paso 6.
  • Misma ruta en dos nodos de la misma capa → Procedimiento 3 paso 5.
  • Nodo es

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".

Skills relacionados