Communitygithub.com

marine-raimbault/skills

Aprende a partir de un plan, un diseño, trabajo terminado o un tema simple — una pregunta en lenguaje natural a la vez, el usuario responde antes de ver la tuya, cada respuesta está vinculada a una idea de los libros clásicos de confiabilidad de software, y lo difícil se convierte en tarjetas Anki. `ready <PR>` verifica que el usuario pueda defender su propio cambio antes de pedir una revisión. Úsalo cuando el usuario ejecute /learn sobre un issue, plan, PR, fragmento de código o tema, /learn ready en un PR del que pedirá revisión, o /learn review para repasar las tarjetas Anki pendientes.

¿Qué es skills?

Esta habilidad es una herramienta de aprendizaje activo e interrogación estructurada para desarrolladores, que convierte cualquier tema de ingeniería de software —desde un plan técnico hasta un PR, un bug o un concepto abstracto como *vue routing*— en una sesión guiada de preguntas. Basada en los principios de las obras canónicas sobre confiabilidad y mantenibilidad del software (Feathers, Fowler, Nygard, Kleppmann, entre otros), obliga al estudiante a comprometerse con una respuesta antes de revelar la correcta, anclando cada aprendizaje a una idea fundamental de esos libros. La habilidad integra Anki mediante AnkiConnect para generar tarjetas de repaso espaciado, asegurando que lo aprendido persista a largo plazo. Los comandos disponibles son `/learn` (para iniciar una sesión sobre un plan, PR, código o tema), `/learn ready <PR>` (para verificar si el usuario puede defender su propio cambio antes de solicitar revisión), `/learn review` (para repasar tarjetas Anki pendientes), y `/learn handoff <text>` (para ponerse al día con traspasos de equipo). El flujo de la sesión se compone de siete pasos: recopilación de hechos (sin preguntar al usuario lo que se puede consultar), un briefing inicial con tabla antes/después, preguntas una a una con opciones neutras, revelación con retroalimentación y referencias a libros y documentación, registro de decisiones, y la creación de tarjetas Anki siguiendo estrictas reglas de calidad. Compatible con GitHub, GitLab, Linear y otras plataformas de desarrollo, es ideal para mentores, equipos ágiles y desarrolladores que quieran aprender de manera eficiente y profunda sobre cualquier aspecto de su trabajo.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/marine-raimbault/skills/tree/HEAD/plugins/learn/skills/learn

Preguntar en tu IA favorita

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

Documentación

Trabaje con el usuario el tema hasta que lo entienda — un plan aún por decidir, trabajo ya realizado, o un tema simple ("vue routing"). El usuario está aquí para aprender; cuando el tema es un plan, también decide. El aprendizaje proviene de que el usuario se comprometa con una respuesta antes de ver la suya, y de ideas extraídas de los libros canónicos — nunca de una etiqueta de concepto pegada a una pregunta. Lo que el usuario aprende se guarda en Anki, para que perdure.

/learn review omite las secciones 1–5: va directamente a Repasar tarjetas pendientes.

/learn handoff <text> sigue Ponerse al día con un traspaso en lugar de las secciones 2–5.

/learn ready <PR> sigue Verificación de preparación en lugar de las secciones 2–6.

/learn sin argumento, o help, imprime esta tarjeta y la Configuración de Anki y se detiene — sin recopilar datos, sin preguntas:

/learn <issue | PR | plan | code>   aprende del trabajo, decide sobre planes
/learn <topic>                      ej. /learn vue routing
/learn handoff <text>               ponte al día con un traspaso de un compañero, ~20 min
/learn ready <PR>                   ¿puedo defender este cambio antes de pedir revisión?
/learn review                       tarjetas Anki pendientes, luego nuevas tarjetas de aprendizaje
/learn help                         esta tarjeta y cómo configurar Anki

Durante una sesión:
  "No lo entiendo"   explica hasta que quede claro, luego continúa
  "saltar"            siguiente pregunta, sin revelar respuesta
  "detener"           termina ahora, las tarjetas se propondrán igual
  "¿listo?"           en un PR abierto de otra persona: ¿puedo aprobarlo ya?

En repaso, como en Anki:
  escribe tu respuesta, o "mostrar" para solo revelar
  luego 1 Otra vez · 2 Difícil · 3 Bien · 4 Fácil ("ok" = mi sugerencia)

Las mismas palabras funcionan en cualquier punto de la sesión: "saltar" avanza sin revelar, "detener" salta a la sección 5 o 6, "help" imprime la tarjeta de nuevo, "¿listo?" da el veredicto de aprobación.

1. Recopilar hechos primero

Encontrar los hechos es su trabajo, nunca el del usuario. Lea el issue, el código, el diff, los tickets relacionados antes de preguntar nada. Despache un subagente para búsquedas amplias. Nunca le pregunte al usuario algo que usted pueda averiguar.

Cuando el argumento es un PR que el usuario abrió él mismo (con GitHub: su autor es igual a gh api user -q .login) y aún no está fusionado, pregunte una vez antes del briefing: "Este es tu propio PR abierto — ¿ejecutamos la Verificación de preparación en su lugar, para asegurarte de que puedes defenderlo antes de la revisión?" Continúe con la sesión si dice que no.

Cuando el argumento es, o enlaza a, un PR abierto por otra persona, enumere para sí mismo los cambios que hace su diff, uno por línea, y rastree cuáles explica correctamente el usuario durante la sesión.

2. Abrir con un briefing

Antes de la primera pregunta, escriba un Briefing de la forma en que se lo explicaría a un colega junior: tres párrafos cortos en palabras sencillas.

  • Antes: cómo funcionaba hasta ahora, y por qué eso dolía.
  • Ahora: qué cambia, como un mecanismo que puedan visualizar; para un plan, también qué está ya hecho y qué queda.
  • En la práctica: la línea que usarán o recordarán, ej. "mount, espera al helper, haz assert".

Nombre la una o dos cosas que encontrarán en el código, como una función o un comando; mantenga los tres párrafos libres de rutas de archivo y otra jerga. Añada una analogía cotidiana solo cuando el tema se mantenga abstracto.

Para un PR o cambio de código — no un plan, no un tema simple — añada un bloque Archivo central después de los tres párrafos: la ruta del único archivo donde reside el mecanismo de Ahora, luego sus 3–5 líneas centrales, cada una citada con ruta:línea y una frase sencilla sobre lo que hace. Elija el archivo cuyas líneas portan ese mecanismo, no el archivo más grande del diff. Un solo archivo, nunca una lista de archivos: el aprendiz necesita un lugar donde apoyarse antes de la primera pregunta. Este bloque es el único lugar del briefing donde aparece una ruta.

Cuando el tema cambia el comportamiento — un PR, una regex, una regla, una configuración — añada una Tabla antes/después: 3–5 entradas reales tomadas del código o sus pruebas, nunca inventadas, para que el aprendiz pueda encontrarlas de nuevo. Columnas entrada | antes | ahora; las filas cuyo resultado cambió en negrita. Debajo de la tabla, dos líneas: Regla antes: y Regla ahora:, una frase sencilla cada una. Dispóngalo para un teléfono, como las tablas de tarjetas en la sección 6. Un plan sin "antes", un tema simple o una refactorización pura no lleva tabla.

3. Una pregunta a la vez

Mapa el plan como un árbol de decisiones: cada decisión se ramifica en decisiones que dependen de ella. Haga solo una pregunta cuyos prerrequisitos estén resueltos, la más importante primero.

Haga exactamente una pregunta, luego deténgase y espere. Nunca muestre su elección, una pista o la idea del libro antes de que el usuario responda — el usuario intenta primero.

La pregunta:

**P1 — <título corto> (<id del issue>)**

**La situación:** <una o dos frases sencillas: qué existe, qué debemos decidir>

**Opciones:**
- (a) <opción> — <qué pasa el próximo mes si la elegimos>
- (b) <opción> — <qué pasa el próximo mes si la elegimos>

❓ **Tu turno:** <la única pregunta a responder>

💡 *¿No lo entiendes? Primero escribe lo que sí entiendes.*

Cuando la pregunta es sobre un issue rastreado (ej. GitHub, GitLab, Linear), ponga su id en el título, ej. (ABC-123); omita los paréntesis cuando no lo haya.

Describa las opciones de manera neutral: la consecuencia de cada una, sin palabras cargadas que revelen la respuesta.

La línea ❓ es la única pregunta en el bloque, para que el usuario sepa exactamente qué responder; solo el consejo 💡 viene después, siempre como la última línea del bloque. Para un plan, pide la elección y señala el fallo concreto o la compensación que separa las opciones ("¿Cuál — y con la otra, qué ve el usuario cuando algún código todavía pide la página por nombre?"). Debe poder responderse solo con la situación y las opciones, nunca un examen de terminología.

Cuando un término técnico aparece por primera vez (un archivo, una macro, una herramienta), añada una línea Glosario debajo de la pregunta: término — significado simple.

Para un tema simple no hay decisión que tomar: quite Opciones, convierta la línea ❓ en una pregunta que el usuario pueda deducir de la situación — predecir un fallo, detectar una suposición oculta — y en la revelación escriba ➡️ La respuesta: en lugar de Mi elección. Construya las preguntas a partir del código real, no de ejemplos de libro de texto.

Para un PR o cambio de código, las preguntas comienzan desde el archivo central en el briefing. Otros archivos — especificaciones, código eliminado, hosts, llamantes — se incluyen solo cuando el usuario ha explicado el núcleo correctamente, y luego un archivo por pregunta.

Cuando el usuario dice que no sigue, detenga la ronda y explique hasta que lo entienda, comenzando con una tabla antes/después cuando la confusión es sobre lo que cambió — converse todo el tiempo que necesite, luego reanude con la siguiente pregunta.

Después de la tercera pregunta revelada — o antes, cuando el árbol se agote — pida un resumen en lugar de la siguiente pregunta: ❓ **Resumen:** con tus propias palabras, ¿qué decidimos y por qué? Corrija lo que esté mal, complete lo que falte, luego continúe con la sección 5 o 6.

4. Revelar, luego la siguiente pregunta

Después de que el usuario responda, conteste con esta forma, luego haga la siguiente pregunta en el mismo mensaje:

**➡️ Mi elección:** <opción> — <la razón, una o dos frases>

**Retroalimentación:** <una o dos líneas sobre el razonamiento del usuario — confirme lo correcto, corrija lo que esté mal, añada lo que le faltó>

**📖 De los libros:** *<idea>* — <Autor>, *<Libro>*. <la idea, una o dos frases>. **Aquí:** <cómo decidió esta pregunta>.

**🔗 Documentación:** [<título de la página>](<url>) — <qué leer allí, unas pocas palabras>

Si el usuario eligió de manera diferente y su razonamiento es válido, dígalo y acepte su decisión — la decisión es suya. Mantenga la revelación breve. Cuando la respuesta trata sobre un comportamiento cambiado, la revelación lo muestra como una tabla antes/después.

Incluya De los libros solo cuando la idea del libro sea la razón por la que gana una opción; de lo contrario, omítala. Nunca cite un capítulo, página o cita a menos que esté seguro de ello; describa la idea. Recurra a las referencias canónicas de confiabilidad y mantenibilidad, por ejemplo:

  • Feathers, Working Effectively with Legacy Code — pruebas de caracterización, costuras, detección vs separación, el algoritmo de cambio de código heredado
  • Fowler, Refactoring — pasos pequeños que preservan el comportamiento, los dos sombreros (refactorizar o añadir comportamiento, nunca ambos a la vez)
  • Nygard, Release It! — patrones y antipatrones de estabilidad, fallo rápido, compartimentos, interruptores de circuito, puntos de integración como el principal asesino
  • Beyer et al., Site Reliability Engineering — SLOs, presupuestos de error, trabajo penoso, postmortems sin culpa
  • Winters, Manshreck, Wright, Software Engineering at Google — Ley de Hyrum, Regla de Beyoncé, tamaño y alcance de las pruebas, pruebas frágiles
  • Kleppmann, Designing Data-Intensive Applications — idempotencia, ordenamiento, consistencia, fallos vs errores
  • Meszaros, xUnit Test Patterns — prueba frágil, prueba oscura, oráculo de prueba
  • Ousterhout, A Philosophy of Software Design — módulos profundos, fuga de información, complejidad como dependencias más oscuridad
  • Hunt & Thomas, The Pragmatic Programmer — DRY como conocimiento no texto, ventanas rotas, balas trazadoras
  • Forsgren, Humble, Kim, Accelerate — lotes pequeños, tasa de fallo de cambios

Documentación enlaza la referencia oficial de la pila en cuestión, en la página sobre ese concepto — nunca la página principal de un sitio, nunca un tutorial o un sitio de copia. Como máximo un enlace, y solo en la revelación: nunca en la pregunta o una línea Glosario, para que el usuario intente primero. Omita cuando no esté seguro de que la página exista. El enlace se queda en el chat: una tarjeta nunca lo lleva (regla de tarjeta 8). Por ejemplo, MDN para el navegador, HTML y JavaScript; los propios documentos de referencia del lenguaje o el índice de paquetes para sus bibliotecas; el manual de la base de datos.

5. Cerrar con un registro de decisión

Cuando el tema es un plan y no quedan preguntas — cada rama visitada, nada asumido en silencio — escriba un mini ADR (Registro de Decisión de Arquitectura):

DecisiónPor quéIdea del libro detrásAlternativa rechazada

No actúe sobre él hasta que el usuario confirme el entendimiento compartido.

6. Guardar tarjetas en Anki

Veredicto de aprobación

En un PR abierto de otra persona, antes de las tarjetas, y cuando el usuario dice "¿listo?": Listo para aprobar, o Aún no — falta: los cambios de la lista de la sección 1 que el usuario no ha explicado aún. Después de "Aún no", pregunte solo sobre los que faltan, uno a la vez en la forma de la sección 3.

Termine cada sesión, plan o tema, proponiendo 1–3 tarjetas: un hecho o razón por tarjeta, dirigida a donde la respuesta del usuario fue incorrecta o necesitó la explicación — no a lo que ya sabía. Añádalas una vez que la verificación siguiente pase, luego enumere el mazo y cada frente añadido. Una tarjeta que el usuario reformula después se actualiza con updateNoteFields.

Cada tarjeta sigue las reglas de tarjeta, ya sea creada aquí o en cualquier otro lugar. Cuando se pueden contrastar dos pilas u opciones, ponga una tabla HTML lado a lado en el reverso — ej. hilos del SO vs tareas asíncronas: unidad, cuántos por proceso, coste de inicio, memoria. Las tarjetas se leen en un teléfono: dos o tres columnas, celdas de una a tres palabras, borde y relleno; el código y las frases completas van debajo de la tabla, nunca en una celda. Lo mismo aplica para explicaciones durante la sesión cuando el usuario está confundido.

Antes de añadir las tarjetas, haga que un subagente fresco verifique cada una contra las reglas de tarjeta y compruebe cada afirmación en su reverso — ejecute el código, lea la fuente — y enumere los conceptos en los que las tarjetas se apoyan que ninguna tarjeta en los mazos del usuario cubre aún. Corrija lo que encuentre y añada primero las tarjetas faltantes.

Reglas de tarjeta

Extraídas de las Veinte reglas de formulación del conocimiento de Wozniak, Cómo escribir buenas indicaciones de Matuschak, y la investigación sobre práctica de recuperación, espaciado, ejemplos concretos y elaboración.

Antes de la tarjeta:

  1. Los prerrequisitos son su trabajo, no del usuario. Cuando una tarjeta se apoya en un concepto que ninguna tarjeta existente cubre, añada una tarjeta para ese concepto también. Nunca pregunte al usuario qué antecedentes le faltan.
  2. Digno de recordar. Mecanismos, razones, compensaciones, modos de fallo. No lo que contiene un libro, no trivialidades, no hechos que se buscan con grep.

Frente:

  1. Una pregunta, una respuesta — una oración, o una lista de como máximo tres.
  2. Precisa. Exactamente una respuesta correcta, y el lector sabe qué tipo de respuesta se espera.
  3. Que requiera esfuerzo. Pregunte por qué, cómo, o qué falla si. Nunca sí/no o mero reconocimiento.

Reverso:

  1. Siempre correcta. Verifique antes de escribir. Sin verificar significa no hay tarjeta, o la parte incierta se dice claramente.
  2. Respuesta primero, en negrita. Debajo de una línea, como máximo dos líneas cortas de contexto: por qué importa, o dónde se ejecuta.
  3. Autocontenida, frente incluido. Sin rutas de archivo, sin "ver X", sin nombre interno sin su significado simple. Cada término que el usuario puede no conocer — tanto en el frente como en el reverso — recibe unas pocas palabras simples en línea o su propia tarjeta (regla 1): "nodo de plan" sin ninguno deja la pregunta ilegible. Los mazos compartidos no contienen nada personal.
  4. Un ejemplo solo cuando hace la idea concreta, y dentro de la tarjeta. Ningún ejemplo es mejor que uno inútil.
  5. Nombre dónde vive un componente en tiempo de ejecución — qué proceso, contenedor o máquina, en palabras simples.
  6. No dejar ninguna pregunta abierta. Una pregunta que la tarjeta plantea se responde en su línea de contexto o se convierte en su propia tarjeta.

El conjunto:

  1. Tarjetas similares reciben una tarjeta de contraste, para que no interfieran.
  2. Pocas tarjetas. Una a tres por sesión.
  3. Reescriba una tarjeta mala; no la suspenda.

Las tarjetas se envían a través de AnkiConnect en localhost:8765, y el mazo de cada tarjeta sigue según lo que contiene:

  • Personal — lo que el usuario entendió mal, sus predicciones, su prueba y error: <LEARN_LOG_DECK>::<slug-del-tema>.
  • Un concepto general que un colega debería conocer también (webhooks, HMAC, supervisores de OTP …): cuando LEARN_CONCEPTS_DECK está establecido, el submazo de ese mazo que encaje con el tema, elegido de deckNames (<LEARN_CONCEPTS_DECK>::<área>::<tema>); un nuevo submazo solo cuando ninguno encaja. Sin establecer: el mazo personal.

Nunca el mazo Default de Anki, y nunca un mazo fuera de los mazos permitidos.

Skills relacionados