Communitygithub.com

AlemTuzlak/skills

Úsalo cuando el usuario quiera redactar un RFC (Solicitud de Comentarios) / documento de diseño técnico para una funcionalidad, cambio o decisión arquitectónica. Entrevista interactivamente al usuario, fundamenta la propuesta en el código base real, presenta 2-3 enfoques concretos de API/ejemplos de código para elegir, y luego escribe un RFC listo para revisión. Se activa con "escribe un RFC", "redacta un RFC", "RFC para X", "documento de diseño para X" o /rfc.

¿Qué es skills?

Esta habilidad convierte el proceso de redacción de RFCs en una interacción guiada, asegurando que el documento resultante sea sustancial y no solo un formalismo. Su propósito es forzar la claridad de pensamiento: objetivos honestos, alternativas reales, riesgos explícitos y un diseño concreto. A diferencia de herramientas que solo generan plantillas, esta skill entrevista al usuario, escanea el código base relevante (si está en un repositorio) y presenta 2-3 opciones de diseño con código funcional real. Las opciones rechazadas pasan directamente a la sección de "Alternativas Consideradas", dando peso genuino a las decisiones. Es compatible con cualquier sistema de archivos o repositorio (GitHub, etc.) y se activa mediante comandos como "RFC para X" o "/rfc". El flujo consta de 7 fases: desde entender la entrada, fundamentar en el código, entrevistar al usuario, generar opciones de diseño con código, ensamblar el RFC, autocriticarlo y finalmente iterar hasta su aprobación. El resultado es un RFC conciso, con diagramas Mermaid cuando son necesarios, que cualquier revisor puede entender rápidamente.

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

Preguntar en tu IA favorita

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

Documentación

Escritor de RFCs

Ayuda al usuario a escribir un RFC que sobreviva a la revisión. Un RFC es una función forzada de claridad, no una documentación escrita después del hecho. Su valor es el pensamiento que obliga: objetivos honestos, alternativas reales, riesgos nombrados y un diseño concreto. Un documento bonito con alternativas vagas y objetivos poco claros no vale nada. Esta habilidad existe para evitar eso.

Esta habilidad es interactiva por diseño. Entrevista al usuario para sacar a la luz el pensamiento, fundamenta cada afirmación en el código base real y le muestra al usuario código funcional para el diseño antes de escribir una palabra de prosa. Nunca inventa las secciones difíciles.

Principios

  • El pensamiento es el producto. El documento es un subproducto. Si una sección no se puede completar con honestidad (no existe una alternativa real, no se conoce ningún riesgo), dímelo explícitamente en lugar de inventar relleno.
  • Fundamenta cada afirmación. En un repositorio, respalda las afirmaciones sobre el sistema actual con referencias a archivos. Nunca afirmes cómo funciona el código sin haberlo leído.
  • Muestra, no cuentes. El diseño se comunica como un ejemplo de API / código elaborado que el usuario eligió entre opciones reales, no como prosa. Esto es innegociable (ver Fase 3).
  • Las opciones rechazadas no son desperdicio. Los enfoques que el usuario no eligió se convierten en la sección "Alternativas consideradas", completa con su código. Por eso las alternativas aquí son reales y no hombres de paja.
  • Pregunta solo lo que no está respondido. Si la solicitud del usuario, un ticket enlazado o el código ya responden una dimensión, no la vuelvas a preguntar. Confirma tu inferencia en su lugar.
  • Despiadadamente conciso. Cada punto expresado en la menor cantidad de palabras que lo hagan claro. Prefiere viñetas sobre párrafos, una oración sobre tres. Sin preámbulos, sin repetir lo obvio, sin relleno. Si una sección puede ser una línea, que sea una línea. El fragmento de código transmite el diseño, por lo que la prosa a su alrededor se mantiene mínima. Un lector debería poder hojear todo el RFC en un par de minutos.
  • Sin guiones largos (—) en el contenido del documento generado. Usa comas, dos puntos, puntos o paréntesis.

Flujo del proceso

digraph rfc {
    rankdir=TB;
    "Resolver entrada" [shape=box];
    "Fase 1: Fundamentar" [shape=box];
    "¿En un repositorio?" [shape=diamond];
    "Escaneo de código + detección de plantilla" [shape=box];
    "Fase 2: Entrevista" [shape=box];
    "Fase 3: Opciones de diseño" [shape=box];
    "¿Opción elegida?" [shape=diamond];
    "Fase 4: Ensamblar" [shape=box];
    "Fase 5: Autocrítica" [shape=box];
    "Fase 6: Bucle de revisión" [shape=box];
    "¿Aprobado?" [shape=diamond];
    "Fase 7: Salida" [shape=box];

    "Resolver entrada" -> "Fase 1: Fundamentar";
    "Fase 1: Fundamentar" -> "¿En un repositorio?";
    "¿En un repositorio?" -> "Escaneo de código + detección de plantilla" [label="sí"];
    "¿En un repositorio?" -> "Fase 2: Entrevista" [label="no"];
    "Escaneo de código + detección de plantilla" -> "Fase 2: Entrevista";
    "Fase 2: Entrevista" -> "Fase 3: Opciones de diseño";
    "Fase 3: Opciones de diseño" -> "¿Opción elegida?";
    "¿Opción elegida?" -> "Fase 3: Opciones de diseño" [label="refinar / nuevas opciones"];
    "¿Opción elegida?" -> "Fase 4: Ensamblar" [label="sí"];
    "Fase 4: Ensamblar" -> "Fase 5: Autocrítica";
    "Fase 5: Autocrítica" -> "Fase 6: Bucle de revisión";
    "Fase 6: Bucle de revisión" -> "¿Aprobado?";
    "¿Aprobado?" -> "Fase 6: Bucle de revisión" [label="cambios"];
    "¿Aprobado?" -> "Fase 7: Salida" [label="sí"];
}

NO omitas fases. Si el usuario agrupa varias respuestas en un solo mensaje, acéptalas y avanza más allá de lo que ya respondió. Nunca te saltes la Fase 3 (el usuario debe ver y elegir el diseño entre opciones de código reales) ni la Fase 5 (autocrítica).

Fase 1: Fundamentar

Resolver la entrada

El usuario puede proporcionar: una descripción libre, un PR/issue de GitHub, un ticket de Linear o solo un tema. Extrae lo que ya está respondido para no volver a preguntarlo en la Fase 2.

Si está dentro de un repositorio (obligatorio)

Escanea el código para comprender el contexto real de lo que el usuario propone. No puedes escribir un RFC fundamentado sin conocer el sistema que modifica.

  1. Detectar la convención del repositorio. Busca globalmente una configuración de RFC existente: rfcs/, docs/rfcs/, docs/rfc/, **/*rfc*template*, adr/, docs/adr/, .github/*TEMPLATE*. Si existe un archivo de plantilla, adopta sus encabezados de sección y su directorio en lugar de la plantilla incorporada, e informa al usuario en una línea: Usando docs/rfcs/template.md de tu repositorio; anulo mi estructura predeterminada. Sin pregunta bloqueante.
  2. Escanea el subsistema relevante. Lee el árbol de directorios (nombres), los archivos README/documentación de arquitectura y los módulos reales que toca la propuesta. Comprende: cómo funciona el área afectada hoy, los patrones y abstracciones ya en uso, las restricciones reales (tipos, interfaces, flujo de datos). Esto fundamenta la sección de Antecedentes y, fundamentalmente, permite que las opciones de código de la Fase 3 coincidan con las convenciones existentes.
  3. Anota las referencias a archivos que citarás en el RFC (ruta:línea).

Si está fuera de un repositorio: omite el escaneo y la detección; la entrevista genera un documento independiente utilizando la plantilla incorporada.

Fase 2: Entrevista

Dirígete hacia las dimensiones a continuación. Para cada una, primero verifica si ya está respondida por la entrada o el escaneo de código; si es así, confirma tu inferencia (Leí que X funciona mediante Y, ¿correcto?) en lugar de preguntar desde cero. Haz preguntas genuinamente abiertas una a la vez. Cuando el escaneo de código te dé una respuesta candidata (especialmente alternativas y riesgos), propónsela para que el usuario reaccione en lugar de generar desde cero.

Dimensiones principales (siempre)

#DimensiónAlimenta la sección
1Problema - qué está roto/falta, el dolor hoyAntecedentes / Motivación
2Por qué ahora - desencadenante, costo de la inacciónMotivación
3Objetivos - cómo se ve el éxito, medible cuando sea posibleObjetivos
4No objetivos - explícitamente fuera del alcanceNo objetivos
5Enfoque propuesto - manejado como opciones de diseño en la Fase 3Diseño Propuesto
6Alternativas - producidas gratuitamente a partir de las opciones rechazadas de la Fase 3Alternativas Consideradas
7Riesgos / compensaciones - qué podría salir mal, qué cuestaRiesgos y Compensaciones
8Despliegue - migración, fases, compatibilidad hacia atrás, pruebasPlan de Despliegue
9Aprobadores / interesados - quién decide, quién se ve afectadoAprobadores
10Preguntas abiertas - incógnitas conocidasPreguntas Abiertas

Dimensiones condicionales (pregunta solo cuando esté justificado)

  • Seguridad / privacidad - cuando la propuesta toque autenticación, secretos, PII o un límite de confianza.
  • Rendimiento / costo - cuando toque una ruta crítica, agregue un servicio o tenga un presupuesto de recursos.
  • Observabilidad - cuando introduzca un nuevo servicio o un modo de falla que valga la pena alertar.

Evalúa la relevancia a partir del escaneo de código y la superficie de la propuesta. No interrogues al usuario sobre esto por reflejo.

Verificación de calidad de objetivos

Rechaza los objetivos vagos durante la entrevista. "Hacerlo más rápido" no es un objetivo; "p99 por debajo de 200 ms para el endpoint de lista de inquilinos" sí lo es. Pide la versión medible.

Fase 3: Opciones de diseño (el núcleo de la habilidad)

Aquí es donde el RFC demuestra su valor. Presenta 2-3 enfoques concretos y distintos para el diseño, cada uno mostrado como un ejemplo de API / código desarrollado fundamentado en las convenciones del código base de la Fase 1. No descripciones en prosa: código real que muestre cómo sería la API final, las firmas de funciones, el esquema o la configuración.

Para cada opción, proporciona:

  • Un nombre corto y un resumen de una línea.
  • Un fragmento de código de la API / uso / firma resultante (aquello contra lo que un futuro ingeniero realmente escribiría).
  • Sus compensaciones: en qué es buena, qué cuesta, qué descarta.

Preséntalas una al lado de la otra y pídele al usuario que elija o refine. Itera si quieren una nueva opción o una mezcla.

La opción elegida se convierte en el Diseño Propuesto (con su código). Las opciones que rechazan se convierten en la sección de Alternativas Consideradas, cada una conservando su fragmento de código y la razón por la que fue descartada. Esta es la razón por la que las alternativas en estos RFC son reales: fueron candidatos genuinos con código funcional, no hombres de paja retrospectivos.

Si solo existe un enfoque viable, díselo y preséntalo solo con una nota explícita de que se consideraron alternativas y por qué ninguna era viable. No fabriques opciones falsas para llenar la tabla.

Fase 4: Ensamblar

Escribe el RFC completo en el archivo de salida (ruta resuelta en la Fase 7, confirmada al principio). Mantenlo ajustado (ver el principio "Despiadadamente conciso"): viñetas sobre párrafos, la redacción más corta que sea clara, sin relleno. El fragmento de código hace la explicación; la prosa solo lo enmarca. Usa la plantilla del repositorio si se detectó una en la Fase 1; de lo contrario, la estructura incorporada a continuación.

Incluye un diagrama Mermaid cuando el diseño tenga una estructura que valga la pena ver (arquitectura, secuencia, flujo de datos, máquina de estados). Un diagrama que responda a una pregunta. Omítelo para cambios que sean puramente a nivel de API sin ningún flujo interesante.

Plantilla incorporada

# RFC: <título>

## Resumen
<TL;DR que un lector obtenga en 30 segundos: qué propone esto y por qué.>

## Antecedentes y Motivación
<El problema, el estado actual (con referencias a archivos si está en un repositorio) y por qué ahora.
Qué sucede si no hacemos nada.>

## Objetivos
<Medible cuando sea posible. Viñetas.>

## No objetivos
<Explícitamente fuera del alcance, para que los revisores no lo vuelvan a discutir.>

## Diseño Propuesto
<El enfoque elegido. Comienza con el ejemplo de código / API desarrollado de la Fase 3.
Luego explica cómo funciona, fundamentado en módulos reales. Diagrama si está justificado.>

## Alternativas Consideradas
<Cada opción rechazada de la Fase 3, con su fragmento de código y por qué fue descartada.>

## Riesgos y Compensaciones
<Cada riesgo emparejado con una mitigación, o un "aceptado, porque ..." explícito.>

## Plan de Despliegue
<Migración, fases, compatibilidad hacia atrás, estrategia de pruebas.>

## Preguntas Abiertas
<Incógnitas conocidas. Mejor nombrarlas que fingir que están resueltas.>

## Aprobadores
<Quién autoriza, quién se ve afectado. Nombres, para que quede claro dónde reside la decisión.>

Incluye secciones condicionales (Seguridad, Rendimiento, Observabilidad) solo cuando fueron relevantes en la Fase 2.

Metadatos opcionales (solo si el usuario lo solicitó)

Por defecto, no añadas frontmatter ni un número. Si el usuario lo solicita, antepone:

---
status: Borrador   # Borrador | En Revisión | Aceptado | Rechazado | Reemplazado
author: <nombre>
date: <AAAA-MM-DD>
approvers: [ ]
---

Auto-numeración (NNNN-slug.md) solo si el directorio de destino ya contiene archivos NNNN-*.md; escanea el más alto e incrementa. De lo contrario, usa un nombre de archivo slug simple.

Fase 5: Autocrítica (obligatoria, antes de que el usuario vea el borrador)

Evalúa el RFC ensamblado contra esta rúbrica y corrige lo que puedas. Luego informa lo que detectaste y lo que aún necesita del usuario.

  • ¿Objetivos medibles? Aspiraciones vagas ajustadas a algo comprobable.
  • ¿Alternativas reales? Al menos una alternativa genuina con su propio código, no un hombre de paja. (La Fase 3 debería garantizar esto).
  • ¿Cada riesgo mitigado? Cada riesgo tiene una mitigación o un "aceptado, porque ..." explícito.
  • ¿Diseño concreto? El Diseño Propuesto contiene un fragmento de API/código real, no solo prosa.
  • ¿Afirmaciones respaldadas? Cada afirmación sobre el código base tiene una referencia a un archivo detrás. Sin afirmaciones sin respaldo.

Informa brevemente, por ejemplo: Autocrítica: ajusté 2 objetivos vagos; señalé un riesgo (tiempo de inactividad por migración de datos) sin mitigación todavía - necesito tu opinión. Todo lo demás respaldado.

Fase 6: Bucle de revisión

RFC escrito en <ruta>. Ábrelo en un visor de markdown para ver el diagrama renderizado. ¿Quieres algún cambio?

Aplica los cambios editando el archivo. Repite hasta que esté aprobado.

Fase 7: Salida

Resolución de ruta (confirma al principio, al inicio de la Fase 4)

  • Repositorio con directorio de RFC detectado: <ese directorio>/<NNNN->slug.md.
  • Repositorio sin uno: docs/rfcs/<slug>.md.
  • Fuera de un repositorio: el directorio de trabajo actual, o el bloc de notas si el directorio actual no se puede escribir.

Pregunta una vez al principio: Escribiré el RFC en docs/rfcs/<slug>.md. ¿Ubicación diferente?

Al completar

  • Ábrelo automáticamente para el usuario en una nueva ventana de VS Code: code --new-window "<ruta-absoluta>".
  • Imprime un breve resumen en la terminal (título + una línea + ruta). NO vuelques el documento completo a la terminal.

Manejo de errores

  • Sin entrada / tema simple - está bien, la entrevista lo maneja. Comienza la Fase 2.
  • PR/issue/ticket referenciado ilegible - informa al usuario, continúa con lo que describa.
  • Repositorio demasiado grande para escanearlo por completo - limita el escaneo al subsistema que toca la propuesta; anota lo que omitiste.
  • El usuario no puede responder una dimensión - regístrala como una Pregunta Abierta en lugar de inventar una respuesta.

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 a settled change must be turned into an ordered stack of small blocks before anyone implements. Don't use for unsettled intent, typos, comments, formatting, docs-only work, or writing the implementation itself.

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